九号工具站
返回列表

Claude Code Hooks 与自动化指南:事件驱动的 AI 工作流完全教学

Claude Code Hooks 完全教学,学会用事件驱动机制自动触发 Shell 指令,搭配 Skills 建立强大的自动化工作流,附 8 个实用 Hook 范例。

Claude Code Hooks 自动化 事件驱动 工作流 settings.json CI/CD

最后更新:2026-05-26

1. 什么是 Hooks?跟 Skills 有什么不同?

Skills 是你主动触发的指令(/do-something),Hooks 是被动触发的自动化——当某个事件发生时,系统自动执行你预设的指令。两者搭配使用,就像「Skills 是引擎,Hooks 是自动驾驶」。

  • Skills:使用者主动触发(输入 /指令 或自然语言)→ Claude 执行预设流程
  • Hooks:事件自动触发(工具被呼叫、讯息送出、指令完成等)→ 系统自动执行 Shell 指令
  • 组合威力:/Deploy Skill 执行部署 → 部署完成 → Hook 自动跑 Smoke Test → Smoke Test 通过 → Hook 发 Slack 通知
flowchart LR subgraph Skills[Skills 主动触发] A[使用者输入 /指令] --> B[Claude 执行流程] end subgraph Hooks[Hooks 被动触发] C[事件发生] --> D[自动执行 Shell 指令] end B -->|完成事件| C

2. Hook 事件类型

Claude Code 支援多种事件类型,每种事件可以绑定不同的 Hook。

事件 触发时机 常见用途
PreToolUse 工具呼叫前 拦截危险操作、确认档案变更
PostToolUse 工具呼叫后 自动格式化、Log 记录
UserPromptSubmit 使用者送出讯息时 讯息预处理、自动带入上下文
Stop Claude 完成回应时 自动通知、产出摘要
SessionStart 对话开始时 环境初始化、载入上下文

3. 设定方式:settings.json

Hooks 设定在 Claude Code 的 settings.json 中。可以用 /update-config 指令设定,或手动编辑。

  • 设定档位置:~/.Claude/Settings.Json(全域)或 .Claude/Settings.Json(专案层级)
  • 基本结构:Hooks 物件下按事件类型分组,每个事件可绑定多个 Hook
  • 每个 Hook 包含:Type(Command)、Command(要执行的 Shell 指令)、Description(说明)
  • 可选栏位:Matcher(只对特定工具名称触发)、Timeout(超时设定)
  • 优先顺序:专案层级的设定会覆盖全域设定

小提示

  • 建议用 /update-config 指令设定,它会自动处理 JSON 格式和路径问题
  • 修改 settings.json 后不需要重启 Claude Code,设定会立即生效

4. 范例 1-3:开发流程自动化

最常用的开发流程 Hook。

  • 范例 1 — 档案修改后自动 Lint:Posttooluse + Matcher: Write/Edit → 执行 Eslint --Fix 或 Black 自动格式化刚修改的档案
  • 范例 2 — 对话开始时载入专案状态:Sessionstart → 执行 Git Status 和 Docker Ps,把结果带入对话上下文
  • 范例 3 — 危险操作前拦截:Pretooluse + Matcher: Bash → 检查指令是否包含 Rm -Rf、Git Push --Force 等危险操作,有的话阻止执行

5. 范例 4-6:品质保证自动化

让品质检查自动融入工作流程。

  • 范例 4 — 提交前自动跑测试:Pretooluse + Matcher: Bash(当指令包含 Git Commit)→ 先跑 Pytest,测试通过才允许提交
  • 范例 5 — 翻译安全检查:Posttooluse + Matcher: Write(当修改 .Po 或 Locale 档案)→ 自动执行 Python3 Scripts/Check_Translations.Py --Js-Safety
  • 范例 6 — Json 修改后自动验证:Posttooluse + Matcher: Write(当修改 Data/Guides/ 下的档案)→ 自动执行 ./Scripts/Validate_Json.Sh

6. 范例 7-8:通知与记录

让团队自动收到进度更新。

  • 范例 7 — 完成后自动通知:Stop → 把 Claude 的最后回应摘要发到 Slack 或 Telegram,让团队成员知道任务完成
  • 范例 8 — 操作记录:Posttooluse → 把每次工具呼叫的类型和参数记录到 Log 档案,方便事后追踪「Claude 做了什么」

7. Hooks + Skills 组合模式

Hooks 和 Skills 组合使用能创造强大的自动化工作流。以下是三种常见的组合模式。

  • 模式 1 — 前置检查:Hook(Pretooluse)确认环境正常 → Skill 执行主要工作。例如部署前 Hook 检查 Ci 是否通过
  • 模式 2 — 后处理链:Skill 完成主要工作 → Hook(Stop)自动执行后处理。例如 /Content-Pipeline 建立内容后,Hook 自动 Commit 并通知
  • 模式 3 — 品质门禁:Skill 修改程式码 → Hook(Posttooluse)自动跑 Lint 和测试 → 全部通过才继续。确保 Ai 产出的程式码符合品质标准

小提示

  • 不要在 Hook 中做太重的工作。 Hook 应该快速完成(几秒内),耗时的工作用 Skill 处理
  • Hook 失败会阻挡 Claude 的操作。确保 Hook 指令是可靠的,避免误阻挡
flowchart TD subgraph 模式1[模式 1: 前置检查] A1[Hook: PreToolUse] --> A2{环境正常?} A2 -->|是| A3[Skill 执行] A2 -->|否| A4[阻挡并提醒] end subgraph 模式2[模式 2: 后处理链] B1[Skill 完成] --> B2[Hook: Stop] B2 --> B3[自动 commit] B2 --> B4[发送通知] end subgraph 模式3[模式 3: 品质门禁] C1[Skill 修改程式码] --> C2[Hook: PostToolUse] C2 --> C3[自动 lint + test] C3 --> C4{通过?} C4 -->|是| C5[继续] C4 -->|否| C6[阻挡] end

8. 除错与最佳实践

Hook 设定出问题时的排查方法和设计建议。

  • Hook 没触发:确认事件类型和 Matcher 是否正确。用 Echo 指令测试 Hook 是否被呼叫
  • Hook 阻挡了操作:检查 Hook 的 Exit Code。非零的 Exit Code 会阻止操作
  • Hook 太慢:加入 Timeout 设定,避免 Hook 卡住整个工作流。预设超时 60 秒
  • 最佳实践 1:Hook 指令保持简单——一个 Hook 做一件事
  • 最佳实践 2:用 Description 清楚说明 Hook 的用途,方便团队成员理解
  • 最佳实践 3:先在个人设定中测试,确认无误后再推到专案设定
  • 最佳实践 4:敏感操作(如自动 Push、自动部署)的 Hook 要特别谨慎,建议加入确认步骤

重点整理

  • 1 Hooks 是 Claude Code 的事件驱动机制——当特定事件发生时,自动执行你预设的 Shell 指令
  • 2 搭配 Skills 使用,可以建立「触发 Skill → 执行完成 → Hook 自动后处理」的完整自动化链
  • 3 常见应用:提交前自动 lint、工具呼叫前确认、完成后自动通知
  • 4 设定在 settings.json 中,不需要修改程式码,纯设定驱动
ℹ️

一般声明

本站提供之资讯仅供参考,不保证其完整性与正确性。使用者应自行判断资讯之适用性。

意见反馈