Pick an agent
Hover doesn't bundle an AI runtime. It spawns whichever coding-agent CLI is on your PATH and reuses the subscription you already pay for. Six agents are wired today: claude (hard sandbox, recommended) and codex / cursor-agent / aider / gemini-cli / qwen-code (soft sandbox). More are one file in the registry.
Supported today
| Agent | Sandbox | Notes |
|---|---|---|
Claude Code (claude) | Hard — explicit allow/deny list, MCP-only tool surface, --max-budget-usd ceiling | Recommended default. Tightest blast radius. |
OpenAI Codex (codex) | Soft — no built-in-tool deny list at CLI level; uses --sandbox read-only + strict developer_instructions | Marked with a ⚠ badge in the widget so you know the surface is broader. |
Cursor Agent (cursor-agent) | Soft | Added in v0.9; ⚠ badge in widget dropdown |
Aider (aider) | Soft | Added in v0.10; ⚠ badge |
Gemini CLI (gemini-cli) | Soft | Added in v0.10; ⚠ badge |
Qwen Code (qwen-code) | Soft | Added in v0.10; ⚠ badge |
The widget shows the active agent as a pill (claude ▾) in the header. Click it for a dropdown of every agent in the registry — installed ones in white, missing ones grey with copy-pasteable install hints.
How sandboxing works
For hard-sandbox agents (Claude), Hover passes:
--strict-mcp-config
--permission-mode dontAsk
--allowedTools mcp__playwright
--disallowedTools "Bash Edit Write Read Grep Glob Task WebFetch WebSearch …"
The Playwright MCP server is the only tool the agent can reach. Filesystem access (other than the __vibe_tests__/ write path which the Node service handles) is forbidden.
For soft-sandbox agents (Codex), there is no equivalent flag to disable built-in tools. Hover passes:
--sandbox read-only
--ask-for-approval never
…and injects a strict developer_instructions system prompt telling the agent to use only mcp__playwright__*. A determined or hallucinating agent could still try a built-in shell call — hence the ⚠ badge in the widget header.
Switching agents on the fly
Click the agent pill. Pick the new one. No restart required — the next prompt routes to it. State (sessionId, history) is per-agent.
Adding your own agent
Write an AgentDescriptor and register it in packages/core/src/agents/registry.ts. See Agent registry for the full interface.
Candidates not yet wired: cline, continue, kilo (see the comment in registry.ts).
Cost & budget
Default model is sonnet, not opus — a browser-driving session is ~5× cheaper. Override per invocation:
HOVER_MODEL=opus pnpm smoke
Hover's --max-budget-usd 0.50 ceiling is a runaway-prompt safety belt. Phase-0 sessions empirically complete a 5-step task on the example frontend for well under $0.10.