Stop renting access to the models you already pay for
You probably already pay for a Claude or OpenAI subscription. You may also pay for an AI tool that, under the hood, calls Claude or OpenAI. So you are paying twice for the same models, and the second charge is the one worth questioning.
The AI tax
A lot of AI products work the same way. You hand over roughly $20 a month. In exchange you get a wrapper: a UI and some prompts. The actual intelligence comes from a model the vendor does not own. They hold an API key, they call the model, they bill you a margin on top of tokens you could have bought at cost.
That margin is the AI tax. Sometimes it buys you real engineering. Often it buys you a thin layer between your keyboard and a model you already have a subscription to. The vendor's incentive is to keep you on the meter, because the meter is the business. When you stop paying, the tool stops working, and the tests or workflows you built inside it tend to stop with it.
We did not want to build that.
What Hover does instead
Hover is a free, open-source MCP server. You add it to the coding agent you already run (npm i -g @hover-dev/mcp && claude mcp add hover -- hover-mcp), and that is the whole transaction. There is no account and no monthly charge from us.
It holds no API key and bundles no model SDK. It does not call Claude or Codex on your behalf and bill you for the round trip. Instead it rides the coding agent already sitting on your machine: claude (Claude Code), codex (OpenAI Codex), or any MCP-capable agent. When you ask that agent to test a flow, it calls Hover's grounded tools and drives. The model access runs on your subscription or your own key, through a tool you already trust. We are not in the middle of that call, and we are not invoiced for it, so there is nothing to mark up. The mechanism is covered in more detail in bring your own CLI, no API key.
That single design choice removes the recurring charge entirely. The model is the expensive part, and you are already paying for it once. Paying for it a second time, to a vendor who adds a layer on top, is the part we refused.
Who keeps the upside
When the key is yours, the economics line up in your favor instead of the vendor's.
Your subscription is your subscription. If you are on a Claude or Codex plan, Hover runs inside the limits you already have. If you switch agents, you change one setting and your billing relationship does not move, because it was never with us. There is no per-token resale skimming a cut on the way through.
Your tokens are your tokens. Whatever a session costs, it costs at provider rates, billed to you directly, with no Hover margin layered on top. You can see exactly what you spent because you spent it with the provider, not with a reseller.
And the output is yours to keep. Hover drives your real Chrome over CDP, watches what works, and crystallizes the run into a plain @playwright/test spec. That file is standard Playwright. It lives in your repo. It does not phone home, and it does not expire when a subscription lapses.
What it costs at rest
This is the part that compounds. Once a test is crystallized, the AI is done with it.
The saved spec is ordinary Playwright code with no model in the loop. It runs in CI the same way any other Playwright test runs: deterministic, with zero tokens spent per run. The agent authored the test, then stepped out of the way. We wrote about why that matters for AI-authored Playwright tests, but the short version is that your CI bill for these tests is the same whether you have one of them or a thousand, because none of them call a model.
So the spending profile is: buy the model access once, on your own terms, and use it during authoring. After that, the artifact runs for free, forever, on infrastructure you already pay for. There is no second meter that keeps ticking after the work is done.
Buy the model once, bring your own key, and own everything it produces.
Try Hover on your own app.
Add Hover’s MCP to the coding agent you already run. It explores your app and crystallizes plain Playwright specs you own.
npm i -g @hover-dev/mcp && claude mcp add hover -- hover-mcpRead the quick start →