Hooks 与 Plan 模式
Claude Code 的 Hooks 与 Plan 模式共同构成了一套从"被动审批"到"主动防御"的安全体系。Hooks 是在 Claude Code 生命周期特定节点自动执行的脚本或逻辑,Plan 模式则是将 AI 的"思考"与"执行"分离的只读分析模式。二者与权限模式、安全分类器、Checkpoint 机制协同工作,形成多层次的自动化安全网。
1. Hooks:事件驱动的自动化守卫
1.1 什么是 Hooks
Hooks 是用户定义的 shell 命令、HTTP 端点、LLM 提示或子智能体,在 Claude Code 生命周期的特定节点自动执行。与 CLAUDE.md 中的指令不同——后者是"建议",Claude 通常会遵循但不保证——Hooks 是"确定性"的,只要事件触发,Hook 就一定会执行。
核心原则:CLAUDE.md 用于偏好指导("优先使用 Bun 而非 npm"),Hooks 用于不可违背的规则("必须用 Prettier 格式化"、"禁止触碰 .env 文件")。
1.2 生命周期事件全景
截至 2026 年 3 月,Claude Code 支持 21 个生命周期事件,按触发频率分为三类:
会话级事件(每会话触发一次)
| 事件 | 触发时机 | 可拦截 | Matcher 值 |
|---|---|---|---|
SessionStart | 会话开始或恢复时 | 否 | startup, resume, compact, clear |
SessionEnd | 会话终止时 | 否 | clear, logout, other |
PreCompact | 上下文压缩前 | 否 | manual, auto |
PostCompact | 上下文压缩完成后 | 否 | — |
轮次级事件(每轮对话触发一次)
| 事件 | 触发时机 | 可拦截 | 用途 |
|---|---|---|---|
UserPromptSubmit | 用户提交提示时 | 是 | 提示验证、上下文增强 |
Stop | 主 Agent 完成响应时 | 是 | 自动提交、任务完成验证 |
StopFailure | 主 Agent 执行失败时 | 是 | 失败恢复、错误日志 |
Notification | 通知发送时 | 否 | permission_prompt, idle_prompt |
工具级事件(每次工具调用触发)
| 事件 | 触发时机 | 可拦截 | Matcher 值 |
|---|---|---|---|
PreToolUse | 工具执行前 | 是 | 工具名:Bash, Edit, Write, Read, Glob, Grep, WebFetch, mcp__* |
PostToolUse | 工具成功执行后 | 否 | 同上 |
PostToolUseFailure | 工具执行失败后 | 否 | 同上 |
PermissionRequest | 权限请求对话框出现时 | 是 | 同上 |
Agent 与子智能体事件
| 事件 | 触发时机 | 可拦截 | 说明 |
|---|---|---|---|
SubagentStart | 子智能体启动时 | 否 | Agent 类型:Bash, Explore, Plan |
SubagentStop | 子智能体完成时 | 是 | 同上 |
TeammateIdle | Agent Teams 队友即将空闲时 | 是 | 重新分配任务 |
TaskCompleted | 任务标记为完成时 | 是 | 完成通知、触发下一任务 |
配置与 Worktree 事件
| 事件 | 触发时机 | 可拦截 | 说明 |
|---|---|---|---|
InstructionsLoaded | CLAUDE.md 或规则文件加载时 | 否 | 仅观察,不可控制 |
ConfigChange | 会话中配置文件变更时 | 是 | 审计日志、阻止未授权变更 |
WorktreeCreate | Worktree 创建时 | 否 | 自定义 Worktree 创建逻辑 |
WorktreeRemove | Worktree 移除时 | 否 | 清理处理 |
Elicitation | MCP 服务器请求用户输入时 | 是 | 自动响应或拒绝请求 |
ElicitationResult | 用户响应 MCP 请求后 | 是 | 响应验证、日志 |
1.3 四种 Hook 处理器类型
| 类型 | 描述 | 适用场景 | 支持的事件 |
|---|---|---|---|
command | 执行 shell 命令 | 格式化、lint、Git 操作、通知、备份 | 所有事件 |
http | POST 事件数据到 HTTP 端点 | 外部服务集成、共享审计日志 | 所有事件 |
prompt | 单轮 LLM 评估 | 基于上下文的允许/拒绝决策 | PreToolUse, PostToolUse, PermissionRequest, UserPromptSubmit, Stop, SubagentStop 等 |
agent | 多轮子智能体,可访问工具 | 需要实际文件状态验证的复杂决策 | 同 prompt |
1.4 配置方式
Hooks 配置在 JSON 设置文件中,支持三级作用域:
| 位置 | 作用域 | 可共享 | 典型用途 |
|---|---|---|---|
~/.claude/settings.json | 所有项目 | 否(仅本地) | 个人偏好、全局安全策略 |
.claude/settings.json | 单个项目 | 是(可提交到 Git) | 团队共享的格式化规则 |
.claude/settings.local.json | 单个项目 | 否(gitignored) | 个人敏感配置、本地调试 |
基础配置结构:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|DROP TABLE' && exit 2 || exit 0"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\""
}
]
}
]
}
}
1.5 退出码与决策控制
Hook 通过退出码和 stdout JSON 输出控制行为:
| 退出码 | 含义 | 效果 |
|---|---|---|
0 | 成功 | 继续执行,stdout 解析为 JSON 或作为上下文添加 |
2 | 拦截 | 阻止操作,stderr 反馈给 Claude |
| 其他 | 非阻塞错误 | 操作继续,stderr 在 verbose 模式显示 |
JSON 结构化输出(exit 0 时通过 stdout):
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "此命令被项目策略阻止",
"updatedInput": {
"command": "modified-command"
},
"additionalContext": "额外上下文信息"
}
}
permissionDecision 可选值:
"allow"— 绕过权限系统,自动批准"deny"— 阻止工具调用"ask"— 显示正常权限提示
1.6 异步 Hooks
2026 年 1 月新增的异步执行模式:
{
"type": "command",
"command": "node backup-script.js",
"async": true,
"timeout": 30
}
| 特性 | 同步 Hooks(默认) | 异步 Hooks(async: true) |
|---|---|---|
| Claude 行为 | 等待 Hook 完成 | 立即继续,不等待 |
| 拦截能力 | 可用 exit 2 拦截 | 无法拦截(不阻塞) |
| 适用场景 | 安全检查、权限决策 | 日志、备份、发送通知 |
1.7 环境变量
$CLAUDE_TOOL_INPUT:当前事件的 JSON 字符串$CLAUDE_TOOL_INPUT_FILE_PATH:工具输入中的文件路径(如有)$CLAUDE_PROJECT_DIR:项目根目录绝对路径$CLAUDE_ENV_FILE:用于SessionStart中持久化环境变量到会话
2. Hooks 实际应用场景
2.1 提交前自动 Lint 与格式化
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "bash -c 'FILE=$(jq -r \".tool_input.file_path\" <<< \"$(cat)\"); if [[ \"$FILE\" == *.ts || \"$FILE\" == *.tsx || \"$FILE\" == *.js || \"$FILE\" == *.jsx ]]; then npx eslint --fix \"$FILE\" 2>/dev/null; npx prettier --write \"$FILE\" 2>/dev/null; fi; exit 0'"
}
]
}
]
}
}
2.2 编辑后自动类型检查
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "bash -c 'FILE=$(jq -r \".tool_input.file_path\" <<< \"$(cat)\"); if [[ \"$FILE\" == *.ts || \"$FILE\" == *.tsx ]]; then npx tsc --noEmit 2>&1 | head -20; fi; exit 0'",
"timeout": 30
}
]
}
]
}
}
2.3 阻止危险命令
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash -c 'CMD=$(jq -r \".tool_input.command\" <<< \"$(cat)\"); for p in \"rm -rf /\" \"rm -rf ~\" \"drop table\" \"DROP TABLE\" \"truncate\" \"TRUNCATE\" \"--force\" \"push.*--force\"; do if echo \"$CMD\" | grep -qiE \"$p\"; then echo \"Blocked: pattern \\\"$p\\\" detected\" >&2; exit 2; fi; done; exit 0'"
}
]
}
]
}
}
2.4 保护敏感文件
#!/bin/bash
# .claude/hooks/protect-files.sh
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
PROTECTED=(".env" ".env.local" "secrets/" ".git/" "package-lock.json" "pnpm-lock.yaml")
for pattern in "${PROTECTED[@]}"; do
if [[ "$FILE" == *"$pattern"* ]]; then
echo "Protected file: $pattern" >&2
exit 2
fi
done
exit 0
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"
}
]
}
]
}
}
2.5 会话开始时注入上下文
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume",
"hooks": [
{
"type": "command",
"command": "bash -c 'BRANCH=$(git -C \"$CLAUDE_PROJECT_DIR\" branch --show-current 2>/dev/null); echo \"{\\\"additionalContext\\\": \\\"Current branch: $BRANCH. Recent commits: $(git -C \"$CLAUDE_PROJECT_DIR\" log --oneline -3 2>/dev/null)\\\"}\"'"
}
]
}
]
}
}
2.6 任务完成前强制测试通过
#!/bin/bash
# .claude/hooks/verify-tests.sh
INPUT=$(cat)
# 防止无限循环
if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then
exit 0
fi
# 运行测试
if ! npm test --silent 2>/dev/null; then
echo "Tests are failing. Fix them before finishing." >&2
exit 2
fi
exit 0
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/verify-tests.sh",
"timeout": 60
}
]
}
]
}
}
关键:
StopHook 必须检查stop_hook_active字段,否则会导致无限循环——Hook 阻止停止,Claude 继续工作,再次触发 Hook。
2.7 Prompt Hooks:LLM 驱动的质量门
当验证逻辑过于复杂,无法用 shell 脚本表达时:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "prompt",
"prompt": "Review the conversation. Did the user's request get fully completed? Check: all files created, tests passing, no TODO comments left. Respond with {\"ok\": true} if done, or {\"ok\": false, \"reason\": \"what remains\"} if not.",
"timeout": 30
}
]
}
]
}
}
2.8 Agent Hooks:多轮验证
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "agent",
"prompt": "Verify the work is complete: 1) Run the test suite. 2) Check for any TypeScript errors. 3) Verify no console.log statements were left in production code. Report your findings.",
"timeout": 120
}
]
}
]
}
}
3. Plan 模式:只读分析的安全前哨
3.1 定义与核心特性
Plan 模式是一种只读权限状态,Claude 可以分析代码库、搜索文件、创建详细计划——但不能修改任何文件,直到你明确允许。
核心特性:
- 工具限制:仅允许
Read、Grep、Glob等分析操作 - 修改阻断:
Edit、Write、Bash等修改操作被阻止 - 权限提示仍然适用:与 default 模式的权限提示行为一致
3.2 如何启用
会话中切换:
- 按
Shift+Tab循环切换模式 - 或在单条提示前加
/plan前缀
启动时指定:
claude --permission-mode plan
设为默认:
{
"permissions": {
"defaultMode": "plan"
}
}
3.3 使用场景
- 探索代码库:在不修改任何文件的情况下理解项目结构
- 复杂变更前的规划:让 Claude 先制定详细实施计划,你审查后再执行
- 安全审查:分析潜在风险而不触发副作用
- 需求澄清:在动手编码前确保理解正确
3.4 Plan 完成后的选项
当 Plan 准备就绪后,Claude 会呈现计划并询问如何继续:
- 批准并以 auto 模式启动:完全自动执行计划
- 批准并接受编辑:自动接受文件编辑,但命令仍提示
- 批准并手动审查每个编辑:逐条审批
- 继续规划并反馈:提供更多指导
- 使用 Ultraplan 细化:在浏览器中审查
每个选项还可选择是否先清除规划上下文。
4. 权限模式全景对比
4.1 六种权限模式一览
| 模式 | 无需询问即可执行 | 适用场景 | 安全风险 |
|---|---|---|---|
default | 仅读取操作 | 入门、敏感工作 | 低 |
acceptEdits | 读取 + 文件编辑 + 常见文件系统命令(mkdir, touch, mv, cp 等) | 审查代码时迭代 | 低-中 |
plan | 仅读取操作 | 探索代码库、变更前规划 | 极低 |
auto | 所有操作(经 ML 分类器后台安全检查) | 长任务、减少提示疲劳 | 中(有分类器保护) |
dontAsk | 仅预批准的工具 | 锁定的 CI 和脚本 | 低(严格白名单) |
bypassPermissions | 除受保护路径外的所有操作 | 仅隔离容器和 VM | 高 |
4.2 模式切换方式
CLI:
- 会话中按
Shift+Tab循环default -> acceptEdits -> plan auto和bypassPermissions需先启用才会出现在循环中- 启动时:
claude --permission-mode <mode>
VS Code:
- 点击提示框底部的模式指示器
- 或在 Claude Code 扩展设置中配置
4.3 受保护路径
以下路径在任何模式下都不会自动批准:
受保护目录:.git, .vscode, .idea, .husky, .claude(.claude/commands, .claude/agents, .claude/skills, .claude/worktrees 除外)
受保护文件:.gitconfig, .gitmodules, .bashrc, .bash_profile, .zshrc, .zprofile, .profile, .ripgreprc, .mcp.json, .claude.json
在 default、acceptEdits、plan、bypassPermissions 模式下,这些写入会提示;在 auto 模式下路由到分类器;在 dontAsk 模式下被拒绝。
5. Auto Mode 安全分类器
5.1 为什么需要分类器
Anthropic 内部数据显示,用户手动批准了 93% 的权限提示。这意味着大量提示只增加了摩擦,没有增加安全性。Auto Mode 的目标是在不牺牲安全的前提下消除这种摩擦。
5.2 两层防御架构
输入层:提示注入探测
- 服务器端的 prompt-injection probe 扫描工具输出(文件读取、网页获取、shell 输出、外部工具响应)
- 当内容看起来像劫持行为的尝试时,在结果传递给 Agent 前添加警告
- 提示 Agent 将此内容视为可疑,并锚定用户的实际请求
输出层:转录分类器
- 基于 Sonnet 4.6 的分类器模型评估每个操作
- 两阶段设计:
- Stage 1:快速单 token 过滤器(是/否决定),偏向拦截
- Stage 2:仅对 Stage 1 标记的内容进行链式思考推理,减少误报
- 分类器仅看到用户消息和工具调用,剥离了 Claude 自己的消息和工具输出(防止 Agent "说服" 分类器)
5.3 五级权限决策流程
Tier 1: 内置安全工具白名单 + 用户设置
-> 只读工具(Read, Grep, Glob 等)直接允许
-> 进入 auto 模式时,丢弃已知的任意代码执行权限规则
Tier 2: 项目内文件操作
-> 工作目录内的文件写入/编辑直接允许(无需分类器调用)
-> 可通过版本控制审查
Tier 3: 转录分类器
-> Shell 命令、Web 请求、外部工具集成、子智能体、项目外文件操作
-> Stage 1 快速过滤 -> Stage 2 推理审查
5.4 分类器性能数据
| 数据集 | Stage 1 FPR | Stage 1 FNR | 完整管道 FPR | 完整管道 FNR |
|---|---|---|---|---|
| 真实内部流量(n=10,000) | 8.5% | — | 0.4% | — |
| 真实过度热心行为(n=52) | — | 6.6% | — | 17% |
| 合成数据泄露(n=1,000) | — | 1.8% | — | 5.7% |
FPR = 误报率(良性操作被拦截的比例);FNR = 漏报率(危险操作被放行的比例)
17% 的漏报率是诚实的数字——分类器正确识别了危险,但错误判断了用户意图是否覆盖了该操作。这意味着 Auto Mode 不是高 stakes 基础设施的谨慎人工审查的替代品。
5.5 分类器默认拦截的行为
默认拦截:
- 下载并执行代码(如
curl | bash) - 向外部端点发送敏感数据
- 生产环境部署和迁移
- 云存储大规模删除
- 授予 IAM 或仓库权限
- 修改共享基础设施
- 不可逆地销毁会话前已存在的文件
- Force push 或直接推送到
main
默认允许:
- 工作目录内的本地文件操作
- 安装 lock 文件或清单中声明的依赖
- 读取
.env并将凭据发送到匹配的 API - 只读 HTTP 请求
- 推送到启动时的分支或 Claude 创建的分支
5.6 配置信任基础设施
{
"autoMode": {
"environment": [
"$defaults",
"Organization: ACME Corp. Primary use: software development",
"Source control: github.example.com/acme-corp",
"Cloud providers: AWS, GCP",
"Trusted cloud buckets: s3://acme-builds, gs://acme-datasets",
"Trusted internal domains: *.internal.example.com, api.example.com",
"Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"
],
"allow": [
"$defaults",
"Deploying to the staging namespace is allowed: staging is isolated from production"
],
"soft_deny": [
"$defaults",
"Never run database migrations outside the migrations CLI",
"Never modify files under infra/terraform/prod/"
]
}
}
配置检查命令:
claude auto-mode defaults # 查看内置规则
claude auto-mode config # 查看实际生效配置
claude auto-mode critique # AI 审查自定义规则
5.7 使用限制
Auto Mode 有严格的账户要求:
- Plan:Max、Team、Enterprise 或 API。Pro 不可用
- Admin:Team 和 Enterprise 需管理员在设置中启用
- Model:Team/Enterprise/API 需 Claude Sonnet 4.6、Opus 4.6 或 Opus 4.7;Max 计划仅 Opus 4.7
- Provider:仅 Anthropic API。Bedrock、Vertex、Foundry 不可用
5.8 回退机制
- 连续 3 次或总计 20 次被拦截后,Auto Mode 暂停,恢复手动提示
- 批准被提示的操作后恢复 Auto Mode
- 非交互模式(
-p标志)下,重复拦截会终止会话
6. Checkpoint 机制:时间旅行安全网
6.1 自动检查点
Claude Code 在每次用户提示提交时自动创建检查点,捕获编辑前的代码状态。这让你可以放心地尝试大规模变更,知道随时可以回到之前的状态。
特性:
- 每次用户提示创建新检查点
- 检查点跨会话持久化(恢复对话后仍可访问)
- 30 天后自动清理(可配置)
6.2 三种恢复模式
按 Esc 两次或使用 /rewind 命令打开恢复菜单:
| 恢复选项 | 效果 | 适用场景 |
|---|---|---|
| 恢复代码和对话 | 代码和对话都回退到该点 | 完全改变方向 |
| 仅恢复对话 | 回退对话,保留当前代码 | 拒绝 Claude 的方案,要求替代方法 |
| 仅恢复代码 | 回退代码,保留对话上下文 | 代码有 Bug 但想保持对话理解 |
| 从此处总结 | 压缩从此点往后的对话 | 释放上下文窗口空间 |
6.3 与 Git 的协作
Checkpoint 是"本地撤销",Git 是"永久历史"。推荐工作流:
开始新功能 -> 创建 Git 分支 -> 请求 Claude 实现
-> 审查结果
-> OK -> Git commit -> 继续改进或创建 PR
-> NG -> Checkpoint 恢复 -> 重新指导 Claude
| 操作 | Checkpoint | Git |
|---|---|---|
| 短期实验恢复 | 推荐 | 污染提交历史 |
| 长期存储 | 30 天限制 | 永久 |
| 团队共享 | 仅本地 | 可推送 |
| 对话上下文保留 | 支持 | 不支持 |
6.4 限制
- 不追踪 Bash 命令变更:
rm,mv,cp等命令造成的文件修改无法通过 rewind 撤销 - 不追踪外部变更:Claude Code 外的手动编辑和其他会话的编辑通常不被捕获
- 不是版本控制替代品:Checkpoint 用于会话级快速恢复,Git 用于永久版本历史
7. 组合使用策略
7.1 安全金字塔
┌─────────────┐
│ Checkpoint │ <- 最后防线:时间旅行恢复
│ (自动备份) │
├─────────────┤
│ Hooks │ <- 自动化守卫:确定性规则执行
│ (Pre/Post) │
├─────────────┤
│ Plan Mode │ <- 思考与执行分离
│ (只读规划) │
├─────────────┤
│ Auto Mode │ <- ML 分类器:智能审批
│ (分类器) │
├─────────────┤
│ Permission │ <- 基础层:手动审批
│ Modes │
└─────────────┘
7.2 推荐工作流组合
场景一:日常开发(低风险)
{
"permissions": {
"defaultMode": "acceptEdits"
},
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\""
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash -c 'CMD=$(jq -r \".tool_input.command\" <<< \"$(cat)\"); if echo \"$CMD\" | grep -qE \"rm -rf /|rm -rf ~|DROP TABLE|force push\"; then echo \"Blocked by policy\" >&2; exit 2; fi; exit 0'"
}
]
}
]
}
}
场景二:复杂重构(中风险)
- 以
plan模式启动:claude --permission-mode plan - 让 Claude 分析并制定详细计划
- 审查计划,批准后切换到
acceptEdits或auto模式 - 启用
PostToolUseHook 自动格式化 - 使用
/rewind在出现问题时回退
场景三:生产环境操作(高风险)
{
"permissions": {
"defaultMode": "default",
"deny": [
"Bash(*deploy*)",
"Bash(*migration*)",
"Bash(git push *)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "Evaluate whether this Bash command could affect the production environment. Consider: database operations, deployments, infrastructure changes. Respond with {\"safe\": true} or {\"safe\": false, \"reason\": \"...\"}.",
"timeout": 10
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "agent",
"prompt": "Before completing, verify: 1) No production credentials were logged. 2) No database connections were made to prod. 3) All changes are reversible. Report findings.",
"timeout": 60
}
]
}
]
}
}
场景四:自动化 CI 流水线
{
"permissions": {
"defaultMode": "dontAsk",
"allow": [
"Bash(npm test)",
"Bash(npm run build)",
"Bash(npm run lint)",
"Read(*)",
"Edit(*)",
"Write(*)"
],
"deny": [
"Bash(git push *)",
"Bash(*deploy*)",
"WebFetch(*)"
]
}
}
7.3 企业级安全策略
对于团队和组织,建议分层配置:
Managed Settings(管理员强制):
{
"permissions": {
"disableBypassPermissionsMode": "disable",
"disableAutoMode": "disable",
"deny": [
"Bash(*prod*)",
"Bash(*deploy*)",
"Read(//etc/**)",
"Read(~/.ssh/**)"
]
},
"allowManagedPermissionRulesOnly": true,
"allowManagedHooksOnly": true
}
项目级 Settings(团队共享):
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\""
}
]
}
]
}
}
个人 Local Settings(开发者自定义):
{
"permissions": {
"allow": [
"Bash(npm run dev)",
"Bash(npm run test:watch)"
]
}
}
8. 参考来源
- Hooks Reference - Claude Code Docs — 官方 Hooks 事件、配置模式、JSON 输入/输出格式参考
- Choose a Permission Mode - Claude Code Docs — 权限模式官方文档
- Configure Auto Mode - Claude Code Docs — Auto Mode 分类器配置指南
- Configure Permissions - Claude Code Docs — 权限规则语法与细粒度控制
- Security - Claude Code Docs — 安全机制与最佳实践
- Checkpointing - Claude Code Docs — 检查点与恢复机制
- Claude Code Auto Mode: A Safer Way to Skip Permissions — Anthropic 官方工程博客,分类器架构详解
- Claude Code Hooks Complete Guide (March 2026 Edition) — 21 个生命周期事件、4 种处理器类型的完整指南
- Claude Code Hooks: Complete Guide with 20+ Examples (2026) — 20+ 生产级配置示例
- Claude Code 2.0 Checkpoint Feature Practical Guide — 恢复模式与 Git 集成策略
- Claude Code Permission Modes: Complete Guide — 6 种权限模式全景对比
- Dive into Claude Code: The Design Space of Today's and Future AI Agent — 源代码级架构分析论文