Agent Browser

See what your agent sees.

One headed Google Chrome session, on hardware you control. Your agent drives it through a small JSON API — or through MCP — while you watch the same session over noVNC and take over whenever you want.

An agent signs in through the Agent Browser JSON API, stops at a two-factor prompt it cannot answer, a human takes over the same live session and types the code, and the agent resumes and reads the dashboard
A real 18-second run. The agent signs in, reaches a 2FA prompt it has no way to answer, and stops. A human types the code into that same live session and hands it straight back.

API control

Create, navigate, inspect, click, type, scroll, press, and end through closed request models.

Structured state

Use bounded text and accessibility data before spending a vision step on a PNG snapshot.

Shared live view

Watch the exact headed session through numeric-loopback noVNC, with local human takeover.

MCP server

Nine stdio tools from either client, so Claude Code, Claude Desktop, Cursor and Windsurf drive the session you are watching.

Narrow boundary

No shell, arbitrary JavaScript, raw DevTools, credential import, or wildcard listener.

One-command local start

# start the runtime
docker compose up --build

# check it is up
curl -fsS http://127.0.0.1:8092/browser/health

# then watch the live browser at
# http://127.0.0.1:6080/vnc.html

Then reach it however you like

npm install aether-browser    # TypeScript
pip install aether-browser    # Python

# or from any MCP client
claude mcp add agent-browser -- npx -y aether-browser mcp

Release boundary: Agent Browser is self-hosted software, not a hosted browser service. The v0.x noVNC surface is unauthenticated and must remain on numeric loopback. Review the security model before changing the deployment shape.