Claude Code 隐藏配置:钩子、技能与持久记忆的未文档化功能
本文通过分析 Claude Code 源代码,揭示了官方文档未提及的配置能力,包括钩子字段、技能前置元数据、持久代理记忆和自动模式权限系统,帮助开发者扩展工具功能。
我阅读了克劳德代码源代码。以下是您可以配置但收件箱没有告诉您的所有内容。在飞行中重写命令的挂钩字段、持久代理内存、简单英语的自动模式规则、自我改进的梦想循环,并且每个示例都已准备好复制粘贴。
Claude Code的自动模式许可系统内部称为“YOLO Classifier”。“这是yoloClassifier中的实际变量名称。
ts.您可以使用环境的简单英语描述来配置它,例如“这是一个临时服务器,破坏性操作是可以接受的”,分类器会阅读这些描述来决定什么是安全的自动批准。任何文档中都没有这一点。
它是Claude Code源代码中隐藏的数十种未记录功能之一,该源代码作为公开分发的nPM包位于您的note_modules中。官方文档足够好地涵盖了基础知识。但源代码揭示了字段、响应格式和设置,从而极大地扩展了您可以构建的内容。
这里的一切现在都可以正常工作,每个示例都设计成按原样放入您的项目中。关于版本控制的注释:这些发现来自@anthropic-ai/claude-code@2。1. 87.未记录的功能可能会在不同版本之间发生变化,因此请将其视为当今可用功能的快照。
名称中带有“实验”的领域被Anthropic自己的工程师明确标记为不稳定,我将逐个点名。
在开始之前快速参考一切生活的地方:设置:~/. claude/settings. JSON(个人)或。克劳德/设置。JSON(项目,通过git分享)技能:~/.克劳德/技能/<name>/技能。
MD(个人)或。克劳德/技能/<name>/技能。MD(项目)代理:~/.克劳德/特工/<name>。MD(个人)或。克劳德/特工/<name>。MD(项目)钩子脚本:~/.克劳德/胡克/是一个很好的约定。
记住tochmod +x你的剧本中的项目级文件。克劳德/可以提交到git并与您的团队共享。~/中的个人文件。克劳德/只有你一个人。你的挂钩可以顶嘴,但没有人告诉你怎么做这是文档中最大的空白。文档告诉您hook在stdin上接收了jSON,并且退出代码2阻止了操作。
他们没有告诉您的是,hook可以在stdout上返回杨森,并带有特定于事件的字段,这些字段实时修改Claude Code的行为。源代码准确揭示了每个事件类型所接受的内容。PreTools使用挂钩可以返回:更新输入- 在执行之前重写工具的输入。
您可以在飞行途中修改命令。许可决定- 在不提示用户的情况下强制“允许”或“拒绝”。许可决定原因- 解释决定(在UI中显示)。附加上下文- 将文本注入对话上下文。SessionStart挂钩可以返回:watchPaths- 设置自动文件监视以触发文件更改事件。
初始用户消息- 将内容添加到会话中的第一条用户消息中。
附加上下文- 注入整个会话中持续存在的上下文。PostTools使用挂钩可以返回:更新的MCPTools输出- 修改Claude从LCP工具响应中看到的内容。附加上下文- 工具运行后注入上下文。
许可请求挂钩可以返回:决定- 通过更新输入以编程方式允许或拒绝orupdated收件箱.这是强大的东西。这里有一个PreToolUse钩子,它自动添加--dry-run在Claude执行任何git push命令之前,将其添加到您的设置中。
JSON:{“hooks”:{“PreTools Use”:[{“matcher”:“Bash”,“挂钩”:[{“类型”:“命令”,“命令”:“~/。克劳德/钩/干跑-推。sh”}]}]}}剧本在~/。
claude/hooks/dry-run-pushes. sh:#!/bin/bashINPUT=$(jq -r '.工具_输入。命令'< /dev/stdin)如果echo“$UTE”|grep -q“git push”;
然后jq -n --arg RCM“$UTE--dry-run”'{“updatedInvestment”:{“命令”:$RCM}'FiClaude认为它正在运行git push Origin main,
但你的挂钩悄悄地重写它以git push Origin main --干运行在执行之前。更新的输入该字段不在任何文档中。这是一个SessionStart挂钩,它监视您的配置文件并将git上下文注入到每个会话中。
设置. JSON:{“hooks”:{“SessionStart”:[{“挂钩”:[{“类型”:“命令”,“命令”:“~/。claude/hooks/session-context。嘘”,“statusMessage”:“正在加载项目上下文。
. . "}]}]}}~/. claude/hooks/session-context。sh:#!
/bin/bashBRANCH=$(git branch --show-current 2>/dev/null)CHANGES=$(git status --porcelain 2>/dev/null| WC -L| TR -d ')jq -n \--arg分支“$BRA
NCH”\--arg更改“$Changes”\'{“watchPaths”:[”包。json“,”。dev“,”tsconnect。json”],“additionalContext”:“当前分支:\($branch)。
未提交的更改:\($changes)文件。"}'现在Claude Code会自动监视您的包裹。JSON, . env,和tsconnect用于更改,并且在您输入任何内容之前,它就知道您所在的分支以及您有多少个未提交的文件。
这里有一个可以自动批准只读bash命令而无需提示。设置. JSON:{“hooks”:{“PreTools Use”:[{“matcher”:“Bash”,“挂钩”:[{“类型”:“命令”,“命令”:“~/。
claude/hooks/auto-approval-readonly。sh”}]}]}}~/. claude/hooks/auto-approval-readonly。sh:#!/bin/bashCMA =$(jq -r '。
工具_输入。命令'< /dev/stdin)如果echo“$CMA”|grep -qE '''(ls|猫|回波|PWD| whoami|日期|git status| git log| git diff ';
然后echo '{' permissionDecisionReason ':“安全只读命令”}'Fi您基本上是在使用shell脚本构建自己的权限分类器。许可决定该字段不在任何文档中。
文档忘记提及的三个挂钩字段记录的挂钩字段是类型,命令,匹配者、暂停如果,和状态消息.源代码解析器接受另外三个从根本上改变了挂钩的行为方式。一次:真恰好触发一次挂钩,然后自动删除它。
Perfect for first-session setup:{"hooks":{"SessionStart":[{"hooks":[{"type":"command","command":
"[ -f . env ] || cp . env. example . env && echo 'Created . env from template'",
"once":true,"statusMessage":"First-time setup. . . "}]}]}}Simple enough to inline. It checks if . envexists,copies the template if not,
and never runs again. async:
trueruns the hook in the background without blocking Claude. Fire and forget:{"hooks":{"PostToolUse":[{"matcher":"Bash","hooks":
[{"type":
"command","command":"jq '{timestamp:now,command:. tool_input. command,session:. session_id}' < /dev/stdin >> ~/. claude/audit. jsonl",
"async":true}]}]}}That logs every bash command to an audit file without adding any latency to your session. asyncRewake:
trueis the clever one. It runs in the background like async,so it doesn’t block on the happy path. But if it exits with code 2,
it wakes the model back up and blocks the operation. Non-blocking when everything’s fine,
blocking when something’s wrong:settings. json:{"hooks":{"PostToolUse":[{"matcher":"Write|Edit","hooks":[{"type":"command","command":
"~/. claude/hooks/scan-secrets. sh",
"asyncRewake":true,"statusMessage":"Scanning for secrets. . . "}]}]}}~/. claude/hooks/scan-secrets. sh:#!
/bin/bashFILE=$(jq -r '. tool_input. file_path // . tool_response.
filePath '< /dev/stdin)如果grep -qE '(密码|秘密|api_key)\s*='$PLE ' 2>/dev/空;然后退出2 #块:检测到秘密Fi退出0 #清洁:继续这会扫描Claude写的每个文件,寻找硬编码的秘密。
如果它找到一个,它就会阻止并告诉克劳德。如果没有,您甚至不会注意到它运行了。文档未显示的技能前沿字段文档涵盖姓名,描述,允许的工具,论点暗示,何时使用,和上下文.源代码中的实际frontmatter解析器还接受六个。
模型允许您重写哪个模型运行该技能。
使用俳句进行廉价、快速的任务,使用Opus进行复杂的分析:---产品名称:快速皮棉描述:使用最便宜的型号快速检查皮棉模型:俳句努力:低允许的工具:Bash、Read参数提示:“[文件]”---在:$ARGUMENS上运行项目linter从配置(eslint、ruff、
clippy)中检测linter并运行它。仅报告错误,而不是警告。
本文为机器翻译辅以 AI 润色,仅供参考。原始事实以原文为准。