record == replay
agent 通过接地的浏览器工具操作(role+name → testId → text),所以存下的 selector 就是驱动点击的那一个——而且结晶是确定性的。codegen 和其它 agent 无法保证这一点。
§ 专为 vibe coding 打造的回归测试套件
不崩。
Vibe coding 上线飞快,坏起来却悄无声息。把行为描述一次,agent 就把它变成你拥有的测试,在你的 CI 里 零 AI 运行。Hover Cloud 裁定每一次运行(drift 还是 bug),并把修复回传到你的编辑器——让下一次 AI 改动,不再弄坏已经跑通的东西。
hover-hook install 把 Hover 接入 Claude Code 的 hooks(可选)。
record == replay——驱动点击的那个 selector,就是被存下来的那个。Cloud 不跑任何浏览器,也绝不会未经你审阅就改动一条 spec。
AI 只驱动浏览器 一次。它留下的测试是一个普通的 Playwright 文件——而且 永远属于你。
Vibe 编码的应用上线飞快,坏起来却悄无声息。Hover 让测试变得耐久,却不把它变成黑盒:agent 通过接地的浏览器工具探索流程,所以驱动点击的那个 selector,正是写进 spec 的那个。结晶(crystallize)是确定性的——没有任何模型在写代码。
存下来的文件在你的 CI 里就是普通的 @playwright/test:没有 agent、没有 token、对我们没有运行时依赖。哪怕你明天删掉 Hover,每一条测试照常运行。
你定义什么应该为真。agent 编写回归、CI 运行、Cloud 裁定哪里坏了,修复再回到你的编辑器。 读这篇思路 →
Heal 回到 Define——套件守护你已经上线的东西。
把你已经在用的编码 agent 指向 Hover 的 MCP,调用 /mcp__hover__test_app。它会登录、浏览、下单——全程通过接地工具操作——每条流程都落成 __vibe_tests__/ 下普通的 @playwright/test。
结晶出来的套件作为一个标准 GitHub Actions 检查运行:没有 agent、没有 token、没有 key。Hover 能替你生成这个 workflow。绿色路径完全无 AI——这正是护城河。
Hover Cloud 分两层裁定每次 CI 运行:对每个失败的确定性判定(drift / bug / unclear,外加来自跨分支历史的 merge-confidence),以及一个处理没有标准答案情况的 LLM 裁判。drift 在你的编辑器里自愈;真 bug 保持标记。它不跑任何浏览器。
getByRole('button', { name: 'Pay now' }) renamed to 'Place order' — heal the test.
一层架在你已经拥有的 spec 和你已经在跑的 CI 之上的托管服务。用 GitHub 登录、连上一个 repo,Hover 就开始盯住每一次运行。编写始终本地且免费;CI 依然跑纯 Playwright;spec 完全归你。
公测免费 · 只读结果,绝不替你跑测试
你在哪儿开发,它就在哪儿工作。 Hover 通过 CDP 驱动你真实的开发服务器——任何框架、无需 bundler 插件、无需往应用里加任何东西。
agent 通过接地的浏览器工具操作(role+name → testId → text),所以存下的 selector 就是驱动点击的那一个——而且结晶是确定性的。codegen 和其它 agent 无法保证这一点。
你 repo 里普通的 @playwright/test,在你的 CI 里零 AI 运行。没有私有格式、没有运行时依赖、没有锁定。AI 只编写一次;文件永远是你的。
Hover 不打包任何模型、不持有任何 key。它搭载你已经在付费的编码 agent 与订阅。我们管"怎么测",从不管"用哪个模型"。
一张你业务流程的 Business Map,加上 Hover 学到的规则,随你的代码一起提交——套件因此保持自知,并随应用成长越来越犀利。
Hover 不打包任何 AI 运行时、不转售任何 token——编写搭载你机器上已有的 Claude 或 ChatGPT 订阅,CI 则完全不花钱。Cloud 是架在你已有运行之上的数据层;公测期间分文不取。
@playwright/test,任何 Playwright 用户都能读。