智能AI morning

Claude Code – 您可以配置文档没有告诉您的一切

2026-05-29 1 阅读 ankitg12
我阅读了克劳德代码源代码。以下是您可以配置但文档没有告诉您的所有内容。在飞行中重写命令的钩子字段、持久代理内存、简单英语的自动模式规则、自我改进的梦想循环,并且每个示例都已准备好复制粘贴。 André Figueira 2026 年 4 月 1 日 2 1 分享 Claude Code 的自动模式权限系统在内部称为“YOLO 分类器”。这是 yoloClassifier.ts 中的实际变量名称。您可以使用环境的简单英语描述来配置它,例如“这是一个登台服务器,破坏性操作是可以接受的”,分类器会读取这些内容来决定什么可以安全地自动批准。这不在任何文档中。它是隐藏在 Claude Code 源代码中的数十种未记录功能之一,它作为公开分发的 npm 包位于您的 node_modules 中。官方文档很好地涵盖了基础知识。但源代码揭示了字段、响应格式和设置,这些字段、响应格式和设置极大地扩展了您可以构建的内容。这里的一切现在都可以运行,并且每个示例都旨在按原样放入您的项目中。关于版本控制的说明:这些发现来自@anthropic-ai/claude-code@2.1.87。未记录的功能可能会在版本之间发生变化,因此请将此视为当前可用功能的快照。名称中带有“实验”的字段被 Anthropic 自己的工程师明确标记为不稳定,我将单独指出这些字段。开始之前 快速参考所有内容: 设置:~/.claude/settings.json(个人)或 .claude/settings.json(项目,通过 git 共享) 技能:~/.claude/skills//SKILL.md(个人)或 .claude/skills//SKILL.md(项目) 代理:~/.claude/agents/.md(个人)或.claude/agents/.md(项目) Hook 脚本:~/.claude/hooks/ 是一个很好的约定。请记住 chmod +x 你的脚本。 .claude/ 中的项目级文件可以提交到 git 并与您的团队共享。 ~/.claude/ 中的个人文件仅供您个人使用。你的钩子可以反驳,但没有人告诉你如何这是文档中最大的差距。文档告诉您钩子在标准输入上接收 JSON,并且退出代码 2 会阻止操作。他们没有告诉您的是,钩子可以在标准输出上返回 JSON,其中包含实时修改 Claude Code 行为的事件特定字段。源代码准确地揭示了每种事件类型接受的内容。 PreToolUse 挂钩可以返回:updatedInput - 在执行之前重写工具的输入。您可以在飞行中修改命令。 PermissionDecision - 强制“允许”或“拒绝”而不提示用户。 PermissionDecisionReason - 解释该决定(在 UI 中显示)。 extraContext - 将文本插入对话上下文中。 SessionStart 挂钩可以返回: watchPaths - 设置触发 FileChanged 事件的自动文件监视。 initialUserMessage - 将内容添加到会话中的第一条用户消息中。 extraContext - 注入在整个会话中持续存在的上下文。 PostToolUse 挂钩可以返回: UpdatedMCPToolOutput - 修改 Claude 从 MCP 工具响应中看到的内容。 extraContext - 在工具运行后注入上下文。 PermissionRequest 挂钩可以返回: 决策 - 使用 UpdatedInput 或 UpdatedPermissions 以编程方式允许或拒绝。这是很强大的东西。这是一个 PreToolUse 挂钩,它会在 Claude 执行任何 git Push 命令之前自动将 --dry-run 添加到该命令中。在你的settings.json中: { "hooks": { "PreToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "~/.claude/hooks/dry-run-pushes.sh" }] }] } } 脚本位于 ~/.claude/hooks/dry-run-pushes.sh : #!/bin/bash INPUT=$(jq -r '.tool_input.command' < /dev/stdin) if echo "$INPUT" | INPUT=$(jq -r '.tool_input.command' < /dev/stdin) grep -q 'git 推送';然后 jq -n --arg cmd "$INPUT --dry-run" '{"updatedInput": {"command": $cmd}}' fi Claude 认为它正在运行 git push origin main ,但你的钩子在执行之前悄悄地将其重写为 git push origin main --dry-run 。 UpdatedInput 字段不在任何文档中。这是一个 SessionStart 挂钩,用于监视您的配置文件并将 git 上下文注入每个会话。 settings.json : { "hooks": { "SessionStart": [{ "hooks": [{ "type": "command", "command": "~/.claude/hooks/session-context.sh", "statusMessage": "正在加载项目上下文..." }] }] } } ~/.claude/hooks/session-context.sh : #!/bin/bash BRANCH=$(git 分支--show-current 2>/dev/null) CHANGES=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ') jq -n \ --arg 分支 "$BRANCH" \ --arg 更改 "$CHANGES" \ '{ "watchPaths": ["package.json", ".env", "tsconfig.json"], "additionalContext": "当前分支: \($branch)。未提交的更改:\($changes) 文件。”现在,Claude Code 会自动监视您的 package.json 、 .env 和 tsconfig 的更改,并且在您键入任何内容之前它就知道您所在的分支以及有多少未提交的文件。这是一个无需提示即可自动批准只读 bash 命令的命令。 settings.json : { "hooks": { "PreToolUse": [{ "matcher": "Bash", "hooks":