Roadmap
What's shipped, what's in flight.
Today — MCP-first, four surfaces
Hover is an open-source Vibe Testing suite organised around four surfaces and one artifact:
| Surface | Role | Status |
|---|---|---|
MCP — @hover-dev/mcp | author — add it to your own agent; /mcp__hover__test_app explores + crystallizes a suite | ✅ Shipped (on npm) |
VS Code — hover-dev | review — an optional Business Map + Dashboard cockpit; drives no agent | ✅ Shipped (Marketplace) |
| CI | run — the crystallized specs run on every PR as plain Playwright | ✅ Shipped |
| Cloud | watch — hosted parallel runs, monitoring, flakiness dashboard, on-failure self-heal | Planned |
The through-line is the artifact: owned, portable @playwright/test in your repo and your CI. The AI authors it once; nothing AI runs after.
Recently shipped
- API testing. Hover passively captures the app's browser traffic off the same CDP connection (no proxy) and crystallizes the checks worth pinning into a plain
*.api-test.spec.ts— verified withreplay_requestfirst, so no status code is confabulated. - Self-heal — mode A (local, on-demand).
/mcp__hover__healreplays a saved spec against the live app, finds the first drifted step, and re-grounds only that step. Record == replay preserved. - Page Object extraction. NON-login flows repeated across specs are lifted into
pages/+fixtures.tsand the specs folded onto them — deterministically. - Auth as a fixture. A detected login is lifted into an
auth.setup.tssetup project that logs in once and reusesstorageState; the password is redacted toprocess.env.HOVER_PASSWORD. - The
.hover/test wiki, self-maintaining. Your app's knowledge compounds across runs and stays honest on its own: progressive recall (recall_business_knowledgereturns an index once rules pile up;recall_factpulls one on demand),/mcp__hover__lint(cross-checks the map against your specs + run ledger for drift), relationships (a## Relationshipsblock recordsdepends-on/shares-state/navigates-toedges between flows), a run log (.hover/log.md, an append-only history), and/mcp__hover__ask(answer a question from the wiki, with citations).
What's next
- The wiki, rendered. Surface the new wiki data in the cockpit: relationship edges in the Business Map graph, drift badges from lint, and a timeline from the run log. The data ships today; the views are next. No source uploaded.
- CI-driven self-heal (mode B). A red CI run offering to heal the drifted spec automatically. Local, on-demand heal ships today; the CI-triggered path is planned.
- Hover Cloud (planned, not shipped). A hosted layer over the specs you already own: parallel runs, scheduled monitoring, and a flakiness dashboard. Authoring always stays local and free; the cloud only ever runs and monitors specs you already own — never authoring lock-in.
Version history
How Hover got here. The engine evolved through the version line below; today it ships as the @hover-dev/mcp server (and the optional VS Code cockpit).
| Version | Theme | Status |
|---|---|---|
| v0.0.1-poc | Phase 0 — end-to-end feasibility (claude -p drives Chrome via CDP) | ✅ Shipped |
| v0.1.x | Phase 1 — Vite plugin + chat UI + persistent service + Save as Spec | ✅ Shipped |
| v0.2.x | Phase 2 — multi-agent (claude + codex), dark widget v2, Result + Findings cards, custom tooltip | ✅ Shipped |
| v0.3.x | @hover-dev/next — Next.js 16+ Turbopack-native integration | ✅ Shipped |
| v0.4.x | Click → Suggest fix prompt | ✅ Shipped |
| v0.5.x | Merged Record + Assert workflow (Record / Exists / Says / Equals sub-toolbar) | ✅ Shipped |
| v0.6.x | Voice mode — push-to-talk STT + spoken progress narration, browser-native, zh/en autodetect, Chrome 139+ on-device | ✅ Shipped |
| v0.7.x | Security testing + plugin API — @hover-dev/api-test (HTTPS MITM, captured-flow inspector, IDOR / authz probing MCP) + defineHoverPlugin manifest API behind it | ✅ Shipped |
| v0.8.x | Multi-framework source attribution + integration overhaul — JSX / Vue / Svelte / Astro data-hover-source stamps via the private @hover-dev/transform-source; @hover-dev/next gains plugin support via register()'s second arg | ✅ Shipped |
| v0.9.x | Widget plugin-UI protocol + cursor-agent — window.__HOVER_WIDGET__ host API (namespaced CSS / DOM mutations / toolbar buttons / overlays / WS message handlers / lifecycle); @hover-dev/api-test migrates onto it; cursor-agent joins the registry | ✅ Shipped |
| v0.10.x | Multi-tab agent reliability + 3 more agents — system-prompt addendum for popup checkouts / OAuth chains / post-popup state, pnpm bench-multi-tab for A/B'ing prompt changes, two-step card+OTP examples/payment-provider, aider + gemini-cli + qwen-code in the registry | ✅ Shipped |
| v0.11.x | Spec resilience: ⟳ Re-record + Saved-sessions overlay + FAQ — when a saved spec breaks (UI changed), Re-record button (widget) or pnpm hover re-record <spec> (CLI) replays the JSDoc Original prompt: against the current UI and overwrites the file. Widget gains the Skills+Specs tabbed overlay (Save-as-Skill later retired — spec + Re-record covers replay; the overlay is now Specs + Seeds). README + docs site gain a top-level FAQ explaining why we don't self-heal at CI time | ✅ Shipped |
| v0.12.x | Security spec recording semantics — replay_flow MCP tool gains intent + expectStatus parameters that record the replay as a security check. Save-as menu sprouts a "Security spec" entry that writes __vibe_tests__/<slug>.api-test.spec.ts — plain Playwright with the request fixture, one test() per recorded check. Also: server HoverPluginManifest.saveHandlers + widget WidgetPluginSpec.saveEntries plugin extension points | ✅ Shipped |
| v0.13.x | Record/replay parity — (1) visibility prelude in writeSpec emit ({ const el = …; await expect(el).toBeVisible(); await el.<action>; }) makes UI drift fail in ~3 s with Locator expected to be visible instead of 30 s actionability timeout; (2) Record mode emits page.goto as the first step (was: spec started on about:blank and failed mysteriously); (3) opt-in "Reload before recording" setting aligns record-time and replay-time starting state. Plus a ?drift=on visibility-drift lab and 9 new vitest cases | ✅ Shipped |
| v0.14.x | Single-Chrome security + landing site — security mode drops its second browser (one debug Chrome; a hover:service:start hook sets launch flags), gethover.dev lands, the widget gains --mode-accent plugin theming + CJK output mirroring | ✅ Shipped |
| v0.15.x | Structured spec output + CLI mode — named test.step Given/When/Then stages, .hover/<slug>.json sidecars, Page Objects + fixtures (hover extract), Promise.all popup / upload / download pairing, the off-by-default AI optimization pass (hover optimize — diff-reviewed candidate, original always kept, // KNOWN BUG flagging), the .hover/rules/ seed library (full catalogue ships built-in), terminal-native hover run, an optional model API key passed to the spawned CLI's env, the add→setup rename, and one Clack-style frame across every command. Save-as-Skill retired (spec + Re-record + seeds cover it) | ✅ Shipped |
| v0.16.x–v0.22.x | MCP-first maturity — API testing (passive CDP capture → replay_request verify → deterministic *.api-test.spec.ts), self-heal mode A (replay_spec drift detection + the /mcp__hover__heal prompt, plus a "🏥 Heal in agent" CodeLens in the cockpit), Page Object extraction (detect_shared_flows + extract_page_objects), and auth as a fixture (auth.setup.ts setup project + HOVER_PASSWORD redaction + scaffolded playwright.config.ts) | ✅ Shipped (you are here) |
VS Code extension (hover-dev) | The review cockpit — a Business Map graph of your flows + coverage and a Dashboard (pass / fail / flaky + CI results), optional AI optimize pass, PR-CI workflow generation. Optional — it reviews, it doesn't drive the agent. | ✅ Shipped (on the VS Code Marketplace) |
@hover-dev/mcp | The authoring engine — an MCP server you add to your own agent (BYO-CLI). Grounded actuation tools + crystallize_spec + the test_app prompt; record == replay, deterministic crystallize. | ✅ Shipped (on npm) |
For real-time tracking, see github.com/Hyperyond/Hover/issues.