“钩子能够向标准输出返回JSON,从而实时修改Claude Code的行为。”这是Claude Code源代码中明确的东西,但官方文档一个字都没提。就像在node_modules里翻到一个彩蛋,我通读了@anthropic-ai/claude-code@2.1.87的源码,发现了一大堆未被文档化的配置能力——它们现在就静静躺在你的项目里,随时可用。
本文将逐条拆解这些隐藏功能,每一条都有源文件佐证,每一条都附上了可直接复制的示例。先给个速查:
设置文件:~/.claude/settings.json(个人)或 .claude/settings.json(项目,可git共享)
技能:.claude/skills//SKILL.md
代理:.claude/agents/.md
钩子脚本:~/.claude/hooks/ 是推荐惯例,记得 chmod +x。
一、自动模式许可系统竟叫“YOLO分类器”
内部变量名直接定为 yoloClassifier.ts,变量名叫“YOLO Classifier”。这意味着什么?自动模式下的许可决策,本质上就是一个“你只活一次”式的风险放行器。你可以用纯英文描述你的环境状态来配置它,比如直接填上:“这是一台预发布服务器,允许执行破坏性操作。”分类器会读取这些描述,自行判定哪些操作可以自动批准。这个功能在官方文档里完全没有出现,但它就在源码里躺着,已经跑了不知多少个版本。
二、钩子能回话——无人告诉你的JSON接口
文档只说钩子在标准输入接收JSON,退出码2表示阻断操作。殊不知钩子可以向标准输出返回一个JSON对象,里面包含各种事件专用字段,实时左右Claude Code的行为。源码把不同事件类型能接受的字段抠得清清楚楚:
PreToolUse钩子可以返回:
• updatedInput——在工具执行前重写其输入,等于飞行途中改写命令
• permissionDecision——强制“允许”或“拒绝”,不再弹窗骚扰用户
• permissionDecisionReason——解释决策原因,会显示在界面上
• additionalContext——向对话上下文注入新文本
SessionStart钩子可以返回:
• watchPaths——设置自动文件监视,触发FileChanged事件
• initialUserMessage——在会话首条用户消息前插入内容
• additionalContext——注入整个会话有效的上下文
PostToolUse钩子可以返回:
• updatedMCPToolOutput——(原文未完整列出,但源码里有)修改MCP工具的输出结果
就这些字段,官方文档只字未提。多少开发者还在傻傻地用 stdin/stdout 的空壳,不知道钩子居然可以“反哺”行为。
三、未曝光设定项一箩筐
除了自动化与钩子,源码里还散布着多类未公开设定。比如响应格式控制、持久化代理记忆、纯英文自动规则等。其中一些字段名里直接标注了“EXPERIMENTAL”,这是Anthropic自家工程师留下的不稳定性警告。对于生产环境,碰到实验性字段时要多一份小心,但尝鲜时绝对是最前沿的功能入口。
四、自改进梦境循环与即插即用示例
代码里甚至有一套类似“自我改良梦境循环”的机制,能在会话间学习并优化行为。具体触发方式隐藏在内部逻辑中,但所有示例都是复制即用的形态。你只需要把对应的配置文件扔进.claude/目录下即可生效,不需要额外编译或改代码。
五、版本快照与使用忠告
这些发现全部基于@anthropic-ai/claude-code@2.1.87版。由于功能未文档化,版本升级时可能被改动甚至移除。如果想持续跟踪,建议直接锁定该版本,或者定期对比node_modules里的claude code源码。项目级配置文件可以安心提交进git,团队共享;个人配置放在~/.claude下,纯粹私人玩物。
官方文档固然涵盖了基础用法,但真正的扩展力全在源码的这些缝隙里。下次当你觉得Claude Code缺点什么的时候,不妨去翻翻node_modules,答案可能已经在那个你来来回回安装了无数遍的npm包里。
热门跟贴