第5集:Hook — 事件驱动的自动化
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
Hook 允许你在 Claude Code 的生命周期中插入自定义脚本(Shell 或 Node.js)。它不直接赋予 Claude 新的“动作”能力,但能极大地增强自动化程度和工作流的可控性。
Hook 事件类型
| 事件 | 触发时机 | 典型用途 |
|---|---|---|
SessionStart |
启动、清除或压缩会话时 | 启动后台服务、注入初始化上下文 |
UserPromptSubmit |
用户按下回车发送消息后 | 自动关联外部记忆、预处理用户需求 |
PreToolUse |
Claude 决定调用某个 Tool 之前 | 权限拦截、危险命令审查、自动备份 |
PostToolUse |
Tool 执行完成并返回结果后 | 自动同步状态、记录操作日志、触发通知 |
Stop |
Claude 回复内容生成完毕后 | 自动总结会话亮点、清理临时文件 |
SessionEnd |
关闭会话时 | 停止运行中的服务、保存持久化数据 |
Hook 的运行机制
Hook 通过 stdin 接收 JSON 格式的上下文(例如当前调用的 Tool 及其参数),并通过 stdout 返回决策。
sequenceDiagram
participant Claude
participant Engine as Hook Engine
participant Script as Hook Script
participant Tool
Claude->>Engine: 尝试调用 Write(file.ts)
Engine->>Script: stdin: { "tool": "Write", "args": {...} }
Script->>Script: 逻辑检查(如:是否符合项目规范)
Script-->>Engine: stdout: { "decision": "allow" }
Engine->>Tool: 执行写入
Tool-->>Claude: 返回成功实例:GSD 的权限卫士
GSD 通过 PreToolUse Hook 实现了一个安全层。如果你试图绕过 GSD 的标准流程直接修改核心文件,Hook 会拦截该请求并提示你使用正确的斜杠命令。
关键字段:matcher
你可以通过 matcher 字段精确控制 Hook 作用于哪些 Tool。例如:
"matcher": "Write|Edit":仅在涉及文件修改时触发。"matcher": "*":所有 Tool 调用都会触发。