AI 编程与智能体

[Claude Code #11] Hooks:别靠请求,用机制实现自动化

Claude Code 的 Hooks 会在工具调用前后、回合结束等时机自动执行 Shell 命令。本文整理 settings.json 的配置方法、事件与 matcher、自动格式化与受保护文件拦截,以及 prompt Hook。

4 分钟阅读
[Claude Code #11] Hooks:别靠请求,用机制实现自动化 封面图

即使你在 CLAUDE.md 中写下“编辑后一定要运行格式化工具”,AI 也会有忘记的时候。毕竟指令终究只是请求。

必须发生的事情,应该做成机制,而不是停留在请求上。在 Claude Code 中,这个机制就是 Hook。

Hook 是用户定义的 Shell 命令。它会在 Claude Code 运行期间的特定时机自动执行,无论模型选择什么,都能确定性地生效。

如果说直到Claude Code 第 10 期为止的命令需要手动触发,那么 Hook 就是会自动触发的机制。

5 分钟创建第一个 Hook

Hook 写在 settings.json 的hooks块中。下面看一个 Claude 等待输入时显示 macOS 通知的示例。

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"需要输入\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

保存后输入/hooks,即可看到已注册的 Hook 列表。这个界面是只读的,因此可以直接修改 settings.json,或让 Claude 代为修改。

可以在哪些时机触发

官方 Hooks 指南为准,常用事件如下。

  • SessionStart:会话开始或恢复时
  • UserPromptSubmit:发送提示后、Claude 处理前
  • PreToolUse:工具调用前。可以阻止调用
  • PostToolUse:工具调用成功后
  • Stop:Claude 的回合结束时
  • Notification:Claude 等待输入时

使用 matcher 缩小目标范围。写成"matcher": "Edit|Write"后,只有使用文件编辑工具时才会运行 Hook。

Claude Code 六种 Hook 事件触发时机示意图
可以在会话的各个关键时刻设置 Hook

三个典型用法

编辑后自动格式化。在 PostToolUse 上设置Edit|Write matcher 并运行 prettier。无论 AI 修改哪个文件,都会强制格式化。

阻止受保护文件。PreToolUse Hook 会检查指定路径,以退出码 2 结束时阻止该编辑。不能使用任意失败码,必须是 2。不同于 CLAUDE.md 中的指令,即使模型忘记,也无法绕过。

完成时通知。就像前面的 Notification 示例一样,你无需一直盯着终端。

需要判断时,使用 prompt Hook

有些条件很难通过 Shell 脚本判断,例如“请求的工作是否全部完成?”

这时使用type: "prompt" Hook。写下判断标准来替代 Shell 命令后,默认的 Haiku 模型会用 yes/no 进行判断。

在 Stop 事件上设置 prompt Hook,就会变成“没完成就继续工作”。实际上,第 6 期介绍的 /goal就是基于这一结构的会话级包装器。

Hook 会原样执行 Shell

能力越强,风险也越高。因为这种结构会以你的权限自动执行任意 Shell 命令。

项目 settings.json 中的 Hook 会要求确认你是否信任该仓库。打开他人的仓库时,不要轻率地跳过这项确认。

在 Hook 命令中,要用引号包住变量,并继续遵守未经验证不得执行外部输入这一基本原则。

对比“PROMISE vs MACHINE”文字、便利贴请求与自动强制执行机器的插图
便利贴是请求,机器负责强制执行

总结

Hook 是一种机制,把“必须发生的事情”从模型的记忆中移出,交给系统处理。

先从强制格式化、阻止受保护文件和完成通知开始。需要判断的条件,可以扩展为 prompt Hook。

下一期将介绍/loop,即按固定间隔重复运行提示。如果 Hook 是事件自动化,那么/loop就是时间自动化。

来源与确认标准

延伸阅读

Claude Code 系列

相关主题