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-startuser-promptstop)就是普通命令,而 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