实战

Claude Code Hooks 进阶:用事件钩子打造自动格式化、安全检查和部署流水线

Claude Code Hooks 进阶教程:5 个实战案例覆盖自动格式化、安全守卫、commit 消息生成和通知转发。含完整配置和 Hook 输出协议详解。

2026/4/74分钟 阅读ClaudeEagle

Hooks 是 Claude Code 中最容易被忽视但最强大的功能之一。通过在关键事件点插入自定义脚本,你可以实现自动格式化、安全检查、提交消息生成,甚至一键部署。


Hooks 是什么?

Hooks 是在 Claude Code 操作的关键时间点自动执行的脚本。它们运行在你的机器上,拥有完整的系统权限。

生命周期事件

事件触发时机能做什么
PreToolUse工具调用阻止危险操作
PostToolUse工具调用格式化、lint
SessionStart会话开始初始化环境
UserPromptSubmit用户提交提示修改/增强提示
PermissionRequest权限请求自动批准/拒绝
Notification通知发送转发到 Slack 等
SubagentStart/Stop子 Agent 生命周期监控和日志

配置方式

.claude/settings.json 中配置:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "prettier --write $CLAUDE_FILE_PATH"
          }
        ]
      }
    ]
  }
}

实战案例

案例 1:自动格式化(最常用)

Claude 每次编辑文件后自动运行 Prettier:

json
{
  "PostToolUse": [
    {
      "matcher": "Write|Edit",
      "hooks": [
        {
          "type": "command",
          "command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
        }
      ]
    }
  ]
}

案例 2:安全守卫(阻止危险操作)

在 Claude 执行命令前检查是否包含危险操作:

json
{
  "PreToolUse": [
    {
      "matcher": "Bash",
      "hooks": [
        {
          "type": "command",
          "command": "scripts/safety-check.sh"
        }
      ]
    }
  ]
}

safety-check.sh

bash
#!/bin/bash
# 检查危险命令
if echo "$CLAUDE_TOOL_INPUT" | grep -qE 'rm -rf|drop table|force push'; then
  echo '{"decision": "block", "reason": "Dangerous command detected"}'
  exit 2
fi
exit 0

PreToolUse 的 exit code 2 会阻止工具调用。

案例 3:自动生成 Commit 消息

json
{
  "PostToolUse": [
    {
      "matcher": "Bash",
      "hooks": [
        {
          "type": "command",
          "command": "scripts/auto-commit-msg.sh"
        }
      ]
    }
  ]
}

案例 4:通知转发

将 Claude 的通知转发到 Slack:

json
{
  "Notification": [
    {
      "hooks": [
        {
          "type": "command",
          "command": "curl -X POST $SLACK_WEBHOOK -d '{\"text\": \"Claude: $CLAUDE_NOTIFICATION\"}'"
        }
      ]
    }
  ]
}

案例 5:懒惰检测器(防止 Claude 偷懒)

检测 Claude 是否跳过了文件读取直接编辑:

json
{
  "PreToolUse": [
    {
      "matcher": "Edit",
      "hooks": [
        {
          "type": "command",
          "command": "scripts/laziness-guard.sh"
        }
      ]
    }
  ]
}

这个 Hook 检查 Claude 在编辑文件前是否先读取了该文件。

Hook 输出协议

additionalContext

想要向 Claude 传递信息?在 Hook 输出中包含 additionalContext

bash
echo '{"additionalContext": "File formatted successfully. No warnings."}'

这段文字会直接进入 Claude 的上下文。注意:没有截断——保持输出简洁。

Exit Codes

Exit CodePostToolUse 行为PreToolUse 行为
0静默成功允许工具调用
1错误报告允许但报告错误
2stderr 作为错误阻止工具调用

高级技巧

1. 环境变量

Hook 脚本可以访问这些环境变量:

  • $CLAUDE_FILE_PATH — 操作的文件路径
  • $CLAUDE_TOOL_INPUT — 工具输入 JSON
  • $CLAUDE_TOOL_OUTPUT — 工具输出 JSON
  • $CLAUDE_SESSION_ID — 会话 ID

2. Matcher 语法

  • Write|Edit — 匹配 Write 或 Edit 工具
  • Bash — 匹配 Bash 工具
  • 不设 matcher — 匹配所有工具调用

3. 插件中的 Hooks

通过插件分发 Hooks,使用 $CLAUDE_PLUGIN_ROOT 引用插件目录:

json
{
  "command": "${CLAUDE_PLUGIN_ROOT}/scripts/my-hook.sh"
}

4. 性能考虑

  • Hook 在每次匹配的工具调用时都执行
  • 保持 Hook 脚本快速(< 1秒)
  • 避免网络请求除非必要

原文整理自 Claude Code Hooks Guide | 来源:Claude Code 官方文档

相关文章推荐

实战Claude Code Hooks 实战完全指南:自动格式化、危险命令拦截与 CI 集成(2026)Claude Code Hooks 完整实战教程:PreToolUse/PostToolUse/Stop 四种触发时机、配置文件写法(~/.claude/settings.json)、危险命令拦截脚本(exit 2 阻止机制)、AI 写完代码后自动 Black/Prettier/gofmt 格式化、任务完成推送 Bark 手机通知、文件变更日志记录、Hook 调试技巧与 Matcher 模式参考。2026/3/28实战Claude Code Hooks 实战:每次保存自动格式化、拦截危险命令、桌面通知Claude Code Hooks 实战教程:五个即用示例(桌面通知/文件自动格式化/危险命令拦截/压缩后上下文注入/配置变更审计)、Hook 配置位置(全局/项目/本地)、退出码含义(允许/上下文/阻止)、七大 Hook 事件速查表、Prompt-based AI 判断 Hook 进阶用法。2026/3/14实战Claude Code 子 Agent 实战:如何用多个 Agent 并行处理复杂任务Claude Code 子 Agent 实战指南:如何用多个独立 Agent 并行处理复杂任务。含 4 个实战示例、自定义 Agent 配置和成本优化建议。2026/4/7实战OpenClaw 与 Claude Code 协同使用实战:AI 聊天助手 + AI 编程助手的终极组合OpenClaw 与 Claude Code 协同使用的完整实战指南:两款工具的定位差异(OpenClaw=聊天AI助手框架,Claude Code=代码库直接操作的编程工具)、在 OpenClaw 中通过 exec 工具调用 Claude Code CLI(claude 命令)执行编程任务、把 OpenClaw 的 Telegram 消息转化为 Claude Code 任务(用自然语言描述→Claude Code执行→返回结果)、使用 OpenClaw Cron 定期触发 Claude Code 执行代码审查/依赖更新/测试/文档生成、CRS 代理在两者中的统一接入方案,以及常见的协同架构模式(主动触发/被动响应/定时执行)。2026/3/24实战Claude Code 自动生成 OpenAPI 文档:从代码到 Swagger UI 一键完成Claude Code 自动生成 OpenAPI(Swagger)文档完整教程:从现有代码逆向生成 OpenAPI 3.1 规范、为 FastAPI/Express/Gin 添加完整的 schema 注释、让 Claude 补全缺失的请求/响应 schema 定义、生成带真实示例值的 Swagger 文档、将 OpenAPI Spec 转为各语言客户端 SDK(openapi-generator)、保持文档与代码同步的 CI/CD 方案,以及从 Postman Collection 迁移到 OpenAPI 的方法。2026/3/20实战Claude Code Shell 脚本自动化实战:用 AI 编写和调试复杂 Bash/Zsh 脚本Claude Code 辅助 Shell 脚本开发的完整指南:让 Claude 生成 Bash/Zsh 脚本的高效提示词、复杂脚本的调试方法(set -x 逐行追踪)、常见运维场景脚本(日志清理/备份/监控告警/批量操作)、跨平台兼容性处理(macOS vs Linux 差异)、脚本安全性检查(避免注入/权限最小化)、让 Claude 解释复杂 awk/sed/find 命令,以及将一次性脚本重构为可复用工具库的方法。2026/3/20