hooks.mdx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. ---
  2. title: "Hooks 生命周期钩子 - 自定义行为注入"
  3. description: "解析 Claude Code Hooks 系统:在 AI 工具调用的关键节点(PreToolUse、PostToolUse、Notification 等)插入自定义 shell 命令,实现行为定制。"
  4. keywords: ["Hooks", "生命周期钩子", "自定义 Hook", "行为注入", "PreToolUse"]
  5. ---
  6. {/* 本章目标:解释 Hooks 系统的设计和应用场景 */}
  7. ## 什么是 Hooks
  8. Hooks 是用户定义的 shell 命令,在 Claude Code 生命周期的特定时刻自动执行。
  9. 类比:React 的 `useEffect` 让你在组件渲染后执行自定义逻辑。Claude Code 的 Hooks 让你在 AI 的关键行为前后执行自定义脚本。
  10. ## 可用的 Hook 事件
  11. | 事件 | 触发时机 | 典型用途 |
  12. |------|---------|---------|
  13. | **PreToolUse** | 工具调用前 | 拦截危险操作、自定义审批逻辑 |
  14. | **PostToolUse** | 工具调用后 | 记录日志、触发通知、自动格式化 |
  15. | **PreCompact** | 上下文压缩前 | 标记不可丢失的信息 |
  16. | **PostCompact** | 上下文压缩后 | 验证关键信息是否保留 |
  17. | **Notification** | AI 发出通知时 | 自定义通知渠道(Slack、邮件等) |
  18. | **StopFailure** | AI 循环异常停止时 | 自定义错误处理 |
  19. ## Hook 的能力
  20. Hook 脚本不仅能"观察",还能"干预":
  21. <CardGroup cols={2}>
  22. <Card title="拦截操作" icon="hand">
  23. 返回特定信号可以阻止工具调用执行
  24. </Card>
  25. <Card title="修改行为" icon="pen">
  26. 返回结构化的 JSON 输出,影响 Claude Code 的后续行为
  27. </Card>
  28. <Card title="注入上下文" icon="syringe">
  29. 向 AI 的对话中注入额外信息
  30. </Card>
  31. <Card title="触发外部流程" icon="bolt">
  32. 调用 CI/CD、发送通知、更新 Issue tracker
  33. </Card>
  34. </CardGroup>
  35. ## 配置方式
  36. Hooks 在 `settings.json` 中配置:
  37. ```json
  38. {
  39. "hooks": {
  40. "PostToolUse": [
  41. {
  42. "matcher": { "tool_name": "Write" },
  43. "hooks": [
  44. {
  45. "type": "command",
  46. "command": "npx prettier --write $CLAUDE_FILE_PATH"
  47. }
  48. ]
  49. }
  50. ]
  51. }
  52. }
  53. ```
  54. 这个例子:每当 AI 写入一个文件后,自动用 Prettier 格式化。
  55. ## 安全控制
  56. - 托管设置(企业管理员)的 Hooks 优先级最高,用户不能覆盖
  57. - Hook 执行有超时限制
  58. - Hook 的输出会被解析和验证,防止注入攻击