Hooks
是什么
hook 是你自己的命令,会在 agent 生命周期的特定时点自动运行——比如在它运行 shell 命令之前、编辑文件之后、会话开始时等等。hook 让你用普通脚本来观察和控制 agent 的行为,而不必指望它自己记住某条规则。它们是编程 harness 的执行层。
优势
- 确定性:hook 每次都会运行,所以规则不会被遗忘或被狡辩掉。
- 以普通 shell 或脚本编写,因此你的机器能做的事它都能做。
- 不仅能记录,还能阻止某个操作——一个预命令 hook 可以拒绝一条危险命令。
- 非常适合做护栏:保存时格式化、编辑后跑测试、提交前扫描密钥。
取舍
- hook 是会自动运行的真实代码,一个有 bug 的 hook 可能拖垮整个工作流。
- 慢的 hook 会为每次触发事件增加延迟。
- 它们按模式触发,因此范围过宽的 hook 可能干扰正当操作。
- 需要更多的配置,出现意外行为时也多了一个排查点。
何时使用
当你想对 agent 的行为获得硬性保证时使用 hook——自动格式化、强制运行测试、阻止破坏性命令,或记录每一个操作——而不是依赖 agent 自觉遵守。
与 vibe coding 的契合度
hook 是你在让 agent 快速推进的同时保证其安全的方式。agent 提出方案;hook 负责执行。一个阻止 rm -rf 的 "运行前" hook,或一个在 "编辑后" 运行类型检查的 hook,能把一个自由发挥的助手变成一个在物理上无法绕过你护栏的助手。
// 每次文件编辑后运行格式化器
{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit", "command": "npx prettier --write $FILE" }
]
}
}