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

AgentSandboxNotes
Claude Code (claude)Hard — explicit allow/deny list, MCP-only tool surface, --max-budget-usd ceilingRecommended default. Tightest blast radius.
OpenAI Codex (codex)Soft — no built-in-tool deny list at CLI level; uses --sandbox read-only + strict developer_instructionsMarked with a ⚠ badge in the widget so you know the surface is broader.
Cursor Agent (cursor-agent)SoftAdded in v0.9; ⚠ badge in widget dropdown
Aider (aider)SoftAdded in v0.10; ⚠ badge
Gemini CLI (gemini-cli)SoftAdded in v0.10; ⚠ badge
Qwen Code (qwen-code)SoftAdded 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.