你的编码 agent 不知道自己有没有把应用改坏。Hover 知道。
Claude Code 的循环很简单。agent 读一点上下文、动手做一步、看结果,然后重复,直到任务看起来做完了。猜一下、验一下、再猜。
整件事的成败,全落在"验"这一步。改的是纯函数,npm test 和类型检查几秒就能告诉它真相;改的是用户会点的东西——结账、登录、一个优惠券输入框——agent 却没有对应的手段。它改完、推断"大概没问题"、然后往下走。在用户唯一看得见的那部分,它是闭着眼睛写代码。
agent 缺的正是这一步"验"
看一个会让你付代价的失败。你让 agent 加一个优惠券输入框。它加好了,却顺手动了购物车的状态,把结账按钮弄得点不动。它能跑的测试全绿,因为没有一条真正端到端走过结账。agent 说"done"。你到了生产环境才发现。
Hover 补的就是这一步。它给循环一个真实的答案——"这条流程还走得通吗"——录自你真实的应用,回放时运行期不带任何模型。
循环转一圈,把 Hover 放进去
- 会话开始。 Hover 先告诉 agent 现状:哪些流程有覆盖、哪些在 CI 里漂移了。它一上来就心里有数,而不是抓瞎。(
hover-hook install把这步接到 SessionStart。) - 你下任务。 在写任何代码之前,先写下这个优惠券功能"怎样才算做完":测试必须展示哪些结果。(
/mcp__hover__guard。)契约先行。 - agent 写代码。 这是循环在做它的本职。Hover 不插手。
- agent 自检。 它不再靠猜,而是把受影响的流程对着活应用回放,拿到真实的通过/失败,外加卡住的确切那一步。这就是那双眼睛。
- 红了,就意味着具体的事。 Hover 告诉它:是测试漂移了(定位器挪了位置,去修测试),还是应用坏了(真回归,去修代码)。agent 知道下一步该往哪走,接着转圈。
- 收工之前。 一道 Stop 闸把循环卡住,直到 spec 全绿。"done"意味着回归绿了,而不是 agent 自我感觉完事了。
为什么这一步"验"必须是确定性的
循环最脆弱的一环,是它信不过自己的验证。"再让一个模型看一眼"不叫信任,那是第二次猜。一条录好的 Playwright 流程,回放的是你当初点过的那些确切操作,所以它的答案是确凿的事实,不是意见。这正是循环在"行为"这件事上缺的那个信号,也是 Hover 生来就要产出的东西。
现在它跑在 CI 上。下一步,搬进每一轮。
眼下这步"验"住在你的 CI 里:agent push、等 CI 跑、读 Hover Cloud 的裁决、再进下一圈,一轮几分钟。我们正在把同一步搬进本地的每一轮——改完代码就地回放受影响的流程,几秒内返回通过/失败,不用离开循环。同样确定性的信号,更紧的圈。
Hover 不是那个 agent,它是"验"那一步。
真正的智能是你自己的 Claude Code。Hover 是它接进去的那一步,走的是循环自己的零件:agent 调的工具、每轮触发的 hooks、读代码这种重活交给子 agent。循环是通用的;它对你应用行为唯一缺的,是一个信得过的"验"。那就是 Hover。
接起来:npm i -g @hover-dev/mcp@latest,然后 hover-hook install。更多见 gethover.dev。
在你自己的应用上试试 Hover。
把 Hover 的 MCP 加到你已经在用的编码 agent。它探索你的应用,结晶出你自己拥有的纯 Playwright spec。
npm i -g @hover-dev/mcp && claude mcp add hover -- hover-mcp阅读快速开始 →