第5集:Hook — 事件驱动的自动化

⏱ 预计阅读 3 分钟 更新于 2026/5/7
💡 进群学习加 wx: 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 调用都会触发。