五个让回归保持绿色的 Claude Code hook
MCP server 给 agent 一批可以自行选择调用的工具。hook 则不同:不管 agent 有没有想到要用,它都会在 agent 循环的真实事件上触发。正因如此,那些确定性的、不带 AI 的检查最适合放进 hook——开局先把 agent 摆正方向,只要还有 spec 是红的,就不许它把任务算作"完成"。
Hover 随 @hover-dev/mcp 附带了一个 hover-hook bin。在你的 repo 里跑 hover-hook install,它会把下面靠前的几个 hook 写进 .claude/settings.json。其余几个是几行就能加上的模式。下面这五个最划算,每个都挂在对应的 Claude Code 事件上。
1. SessionStart → 注入 Cloud 状态 + 激活环境
性价比最高的一个。会话一打开,hook 就去读 Hover 的 cloud_context 和 heal 队列,通过 hookSpecificOutput.additionalContext 注入一小段内容:
Hover:激活环境 staging(https://staging.acme.dev)。Cloud 已连接;项目 acme/store。CI 里有 3 个 spec 漂移:checkout、login、search——用
/mcp__hover__heal <slug>自愈。
agent 一开局就掌握了全局——这次运行打向哪个环境、哪些已经红了——你一个字都不用说。它相当于 cloud_context 工具的"主动版"。hover-hook install 会帮你接上。
2. Stop → "收工前必须绿"的确定性硬闸
最关键的一个。agent 一说自己做完了,Stop hook 就会跑起来——而且它有权拒绝。让它跑一遍受影响的结晶 spec;只要有红的,就返回:
{ "decision": "block", "reason": "checkout.spec.ts 挂了——先修再收工。" }
(或 exit 2)。这样一来,"完成"才等于套件确定性地跑通,而不是 agent 自我感觉良好。Claude Code 对连续 block 有次数上限,还会设 stop_hook_active,所以不会陷入死循环。
在 Stop 上每轮跑一次,好过在 PostToolUse 里每次 Edit 都跑——在该检查的时候检查,而不是每敲一次键就把整套浏览器套件跑一遍。hover-hook install 现在装的 Stop hook 会报告 .hover/ 的健康状况(确定性 lint);再加几行,就能把它变成硬性的 spec 闸门。
3. PostToolUse[crystallize_spec] → 一存下来就重放
把 matcher 设成 mcp__hover__crystallize_spec。agent 刚存下 spec,hook 就重放一遍,确认它是绿的——record == replay 的自检——再顺手 git add。这条 hook 强化了让整套模型成立的那条铁律:存下来的,就是跑得通的。 重放跑不干净的 spec,根本活不到提交那一步。
4. UserPromptSubmit → guard-first 助推
当你的 prompt 看起来是在描述新功能(加个结账流程、做一个设置页),hook 会注入一句提醒:先用 /mcp__hover__guard 声明契约,再用 /mcp__hover__build 把它驱动到绿——这样功能上线时带着的是一条回归,而不只是代码。它足够轻量、也足够克制(靠"动词 + 功能类名词"的启发式判断,不会没完没了地唠叨),跟 guard-first 闭环 正好配套。hover-hook install 会帮你接上。
5. PreToolUse[Bash git push] → push 前拦漂移
严格的一个,默认关闭。在 PreToolUse 上匹配 Bash(git push*);只要 heal 队列里还有漂移,就返回 permissionDecision: "deny" 并给出理由。回归还红着,就什么都别想推出去。有些团队想要这种硬边界;不过多数团队有 Stop 闸门就够了。
接上它
npm i -g @hover-dev/mcp@latest
hover-hook install # 在你的 repo 里——SessionStart / UserPromptSubmit / Stop
重载 Claude Code 即可生效。上面这些除了 spec 本身,全程零 AI、不跑浏览器;出错的 hook 只会打印 {} 再 exit 0,绝不会卡死你的会话。细节见 hooks 参考,而这些 hook 所守护的循环形态,正是那条回归测试工作流。
在你自己的应用上试试 Hover。
把 Hover 的 MCP 加到你已经在用的编码 agent。它探索你的应用,结晶出你自己拥有的纯 Playwright spec。
npm i -g @hover-dev/mcp && claude mcp add hover -- hover-mcp阅读快速开始 →