深度

Claude Code Hooks 深度参考:事件类型、配置结构与高级用法

Claude Code Hooks 完整参考文档:17 种生命周期事件详解、三层嵌套配置结构、Matcher 正则表达式模式、Shell/HTTP/Prompt 三类处理器、MCP 工具 Hook 匹配、异步 Hook 配置,以及阻止危险命令的完整实战示例。

2026/2/285分钟 阅读ClaudeEagle

Claude Code Hooks 是用户定义的 Shell 命令、HTTP 端点或 LLM Prompt,在 Claude Code 生命周期的特定时机自动执行。与 CLAUDE.md 中的建议性指令不同,Hooks 是确定性的——你说执行什么就执行什么。

核心概念:Hook 生命周期

每个 Hook 在特定时机触发。当事件触发且 Matcher 匹配时,Claude Code 将事件的 JSON 上下文传给 Hook 处理器,处理器可以检查输入、采取行动,并可选地返回决策。

完整事件列表

事件触发时机
SessionStart会话开始或恢复时
UserPromptSubmit提交 Prompt 后,Claude 处理前
PreToolUse工具调用执行前(可阻止)
PermissionRequest权限对话框出现时
PostToolUse工具调用成功后
PostToolUseFailure工具调用失败后
NotificationClaude Code 发送通知时
SubagentStartSubagent 被启动时
SubagentStopSubagent 完成时
StopClaude 完成响应时
TeammateIdleAgent Team 成员即将空闲时
TaskCompleted任务被标记为完成时
ConfigChange会话中配置文件变更时
WorktreeCreate通过 --worktree 创建 Worktree 时
WorktreeRemoveWorktree 被移除时
PreCompact上下文压缩前
SessionEnd会话终止时

配置结构

Hooks 在 JSON 设置文件中定义,三层嵌套:

  1. Hook 事件:响应哪个生命周期点
  2. Matcher 组:过滤何时触发
  3. Hook 处理器:触发时运行什么
json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/block-rm.sh"
          }
        ]
      }
    ]
  }
}

Hook 存储位置与作用域

位置作用域可共享
~/.claude/settings.json你的所有项目否,本机私有
.claude/settings.json单个项目是,可提交到仓库
.claude/settings.local.json单个项目否,gitignore
托管策略设置组织范围是,管理员控制
Plugin 的 hooks/hooks.jsonPlugin 启用时是,随 Plugin 打包

Matcher 模式

matcher 字段是一个正则表达式字符串。不同事件类型匹配不同字段:

事件Matcher 过滤的内容示例值
PreToolUse, PostToolUse工具名称Bash, Edit|Write, mcp__.*
SessionStart会话启动方式startup, resume, clear
SessionEnd会话结束原因clear, logout, other
Notification通知类型permission_prompt, idle_prompt
SubagentStart/StopAgent 类型Bash, Explore, Plan
PreCompact压缩触发原因manual, auto

UserPromptSubmitStopTeammateIdleTaskCompleted 不支持 Matcher,每次都触发。

实际示例:阻止危险命令

场景:阻止 Claude 执行 rm -rf 命令

json
// .claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/block-rm.sh"
          }
        ]
      }
    ]
  }
}
bash
#!/bin/bash
# .claude/hooks/block-rm.sh
COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "危险命令已被 Hook 阻止"
    }
  }'
else
  exit 0  # 允许命令执行
fi

工作流程

  1. PreToolUse 事件触发
  2. Matcher Bash 匹配工具名,运行脚本
  3. 脚本从 stdin 读取 JSON,发现 rm -rf,输出 deny 决策
  4. Claude Code 阻止工具调用,向 Claude 显示原因

MCP 工具的 Hook 匹配

MCP 工具遵循命名模式 mcp__<server>__<tool>

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "mcp__memory__.*",
        "hooks": [{ "type": "command", "command": "./log-memory-ops.sh" }]
      },
      {
        "matcher": "mcp__.*__write.*",
        "hooks": [{ "type": "command", "command": "./validate-writes.sh" }]
      }
    ]
  }
}

文件编辑后自动运行 Lint

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}

异步 Hook(后台运行)

某些 Hook 不需要阻塞 Claude 等待结果,可以配置为异步运行:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "./run-tests.sh",
            "background": true
          }
        ]
      }
    ]
  }
}

HTTP Hook

将事件数据 POST 到外部 HTTP 端点:

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "http",
            "url": "https://your-webhook.example.com/claude-stop",
            "method": "POST"
          }
        ]
      }
    ]
  }
}

Prompt-Based Hook

使用 LLM Prompt 作为 Hook 处理器,实现复杂的多条件判断:

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "prompt",
            "prompt": "检查会话是否完成了所有要求的任务。如果没有,返回 continue 要求 Claude 继续工作。"
          }
        ]
      }
    ]
  }
}

安全注意事项

  • 将 Hook 中的 Shell 命令视为代码,不要运行不受信任的 Hook
  • 对第三方输入进行清理,避免命令注入
  • 使用 settings.local.json(gitignore)存储包含敏感路径的 Hook
  • allowManagedHooksOnly 企业设置来阻止用户级 Hook

调试 Hook

bash
# 查看 Hook 运行日志
openclaw logs --follow | grep hook

# 或设置环境变量开启详细日志
CLAUDE_HOOKS_DEBUG=1 claude

原文:Hooks reference - Claude Code Docs | 来源:Claude Code 官方文档

相关文章推荐

深度OpenClaw Hooks 自动化进阶:消息前后的智能拦截、转换与触发机制OpenClaw Hooks(钩子)自动化系统进阶教程:Hooks 的触发时机(before-send/after-receive/on-tool-call)、用 Hooks 拦截消息并修改内容(自动翻译/过滤/格式化)、基于条件的 Hook 触发(渠道过滤/关键词匹配)、Hook 中调用外部 API(Notion 记录/Bark 通知/监控告警)、exec 工具二次确认 Hook,以及 Hooks 与 SOUL.md 和 Standing Orders 的优先级关系详解。2026/3/26深度Claude Code Hooks 完整参考:18 种 Hook 事件、配置 Schema、退出码与异步 HookClaude Code Hooks 完整技术参考:18 种 Hook 事件生命周期表(SessionStart/InstructionsLoaded/UserPromptSubmit/PreToolUse/PermissionRequest/PostToolUse/PostToolUseFailure/Notification/SubagentStart/SubagentStop/Stop/TeammateIdle/TaskCompleted/ConfigChange/WorktreeCreate/WorktreeRemove/PreCompact/SessionEnd)、配置结构(settings.json 完整 Schema)、四种 Hook 类型(command/http/prompt/agent)字段详解、Matcher 模式(工具/Bash 命令/MCP 服务器)、输入 stdin JSON 格式、退出码含义(0/2/非零)和每种事件退出码 2 效果、结构化 JSON 输出(permissionDecision/updatedInput/Stop decision/SessionStart env 注入)、异步 Hook(background: true 不阻塞/适用场景)、Prompt-based Hook、WorktreeCreate 自定义 worktree 和调试方法。2026/3/9深度Claude Code 权限系统深度解析:规则语法、5 种权限模式与 Hooks 扩展Claude Code 权限系统完整解析:三层工具类型(只读/Bash/文件修改)审批规则、/permissions 管理界面(Allow/Ask/Deny 规则 deny→ask→allow 优先顺序)、5 种权限模式(default/acceptEdits/plan/dontAsk/bypassPermissions 及禁用方式)、权限规则语法(Tool/Tool(specifier)/通配符/空格边界规则/Shell 操作符感知)、四种路径前缀格式(//绝对路径/~/home/项目根/相对)、MCP 工具和 Agent 权限规则、WebFetch 网络控制局限性(无法阻止 Bash curl)及三种可靠 URL 过滤方案、PreToolUse Hooks 扩展权限、工作目录扩展(--add-dir/additionalDirectories),以及权限与沙箱互补关系和两个配置示例。2026/3/9深度Claude Code 最佳实践:Context 管理、「先探索后编码」四阶段工作法与并行扩展策略Claude Code 最佳实践完整指南:Context 窗口是核心约束(填满后性能下降)、最高杠杆技巧(给 Claude 自我验证方式:测试/截图/Bash)、「先探索后编码」四阶段工作法(Plan Mode 探索→规划→实现→提交)、提示词精确化技巧、及时纠偏原则、Subagent 调查复杂问题、CI/CD 非交互模式、Git Worktree 并行多会话,以及五大常见失败模式和改进方法。2026/3/5深度Claude Code 配置完全指南:四级作用域、settings.json 字段与企业 MDM 部署Claude Code 配置系统完全指南:四级作用域(Managed/User/Project/Local)优先级规则、settings.json 核心字段、Bash 和文件权限规则语法、沙箱 pathPrefixes 配置、各作用域文件位置,以及企业 MDM 部署(macOS plist/Windows 注册表/文件方式)。2026/3/3深度Claude Code 最佳实践 2026:资深用户总结的 20 个效率提升技巧Claude Code 资深用户总结的 20 个实用最佳实践:上下文管理技巧(精准投喂 vs 全量读取)、CLAUDE.md 高价值写法、自定义命令的场景化设计、权限配置的最小化原则、子代理并行的触发时机、会话压缩与续接的使用策略、与 Git 工作流的结合方式、代码审查的标准提示词、让 Claude 解释而不只是修改代码的技巧、以及避免 Claude「过度自信」的提示词防护模式。2026/3/21