Claude Code hooks
Hover 还带了第二个 bin —— hover-hook,把它的确定性检查接进 Claude Code 的 hook 事件。MCP 是 agent 主动调用的;hook 是围绕 agent 循环自动触发的——没有 AI、不跑浏览器,在恰当的时刻运行,让 agent 开局就有全局、收工时诚实。
安装
hover-hook bin 随 @hover-dev/mcp 一起提供。每个 repo 装一次:
npm i -g @hover-dev/mcp@latest # 带上 hover-hook bin
hover-hook install # 在你的 repo 里运行
install 会把一段 Hover 配置合并进 .claude/settings.json(没有就创建),不动你其它的 hook,然后提示你重载。它是幂等的——随时可重跑,只替换它自己那一段。重载 Claude Code(或重启会话)即可生效。
它接了哪些 hook
三个 hook,全部零 AI:
SessionStart→ 定位。 会话一开始,hook 读取你的激活环境、以及(若你已登录)Hover Cloud,并注入一小段上下文:一次 drive/heal 会打向的激活环境 + URL、连接到的 Cloud 项目,以及在 CI 里漂移的 spec——每条都带/mcp__hover__heal <slug>。agent 开局就已经知道你套件的状态,不用你开口。这是cloud_context工具的"主动版"。UserPromptSubmit→ guard-first 助推。 当一个 prompt 看起来像新行为(add / build / implement 这类动词 + 功能类名词),hook 建议先声明契约:/mcp__hover__guard记下验收标准 + 业务规则,再/mcp__hover__build驱动到绿——这样改动落地时带着一条结晶回归,而不只是代码。这个启发式刻意保守,不啰嗦。Stop→ 收工时的 wiki 健康检查。 当这一轮结束,hook 跑确定性的.hover/lint(不跑浏览器):业务图上指向已删除 spec 的行、某条覆盖行的 spec 上次跑红(heal 候选)、没有任何行映射的 spec。有问题就带着 heal 提示浮现出来。
它不碍事
hover-hook 不调用任何模型、不碰浏览器。遇到任何错误就打印 {} 并 exit 0,所以出岔子也绝不会卡住你的会话。只有 install 会写文件。
加你自己的 hook
这些子命令(session-start、user-prompt、stop)就是普通命令,而 Claude Code 的 hook 系统是通用的,所以你可以自己接更硬的闸。常见的加法:
PostToolUse匹配mcp__hover__crystallize_spec—— spec 一存下来就重放一次确认它是绿的(record == replay 自检),顺手git add。Stop作为硬闸 —— 跑你的回归,返回{"decision":"block","reason":"…"}(或 exit 2),让"完成"意味着套件确定性地绿,而不是 agent 自我感觉良好。Claude Code 有连续 block 上限,并设stop_hook_active防死循环。PreToolUse匹配Bash(git push*)—— 只要还有漂移的 spec 就拒绝这次 push。
每一条背后的道理,见让 agent 收工即绿的 hooks。