Browser & screen

Give the agent a browser and watch the box's desktop over noVNC

Every box ships a real headed browser and a live VNC desktop. A coding agent can navigate sites, test its own web app, and you can watch it happen — the app it opens is exposed per web-apps-and-tunnels, and the desktop runs alongside the agent from run-an-agent.

Give the agent a browser

Vercel's agent-browser is baked into the box image, so every box (docker, daytona, hetzner, vercel) has a working browser with no setup. The Chromium it drives is provided by Playwright — fetched on first browser use (and reused from the project's own pinned Playwright build when present), so agent-browser and the project's Playwright share a single, current Chromium rather than a stale baked-in one.

The agent calls agent-browser directly from inside the box, and any GUI process renders to the box's VNC display — which is what you see through agentbox screen below.

agent-browser is the default, but it isn't the only stack: the standalone playwright-cli is also available for agents that prefer driving Playwright directly. Add it with --with-playwright (or pin it via the browser.default config key) — see Playwright below.

# inside the box (the agent runs these directly)
$ agent-browser session list
No active sessions
$ agent-browser open --headed https://example.com

--headed matters: agent-browser defaults to headless, which renders nothing on the VNC display.

TIP

The agent calls agent-browser itself — you don't have to. Sessions, auth, and cookies persist under ~/.agent-browser/, surviving pause/unpause and stop/start, and are only wiped on agentbox destroy.

Playwright

The Playwright runtime ships in the image; the Chromium itself is installed on first browser use (reusing the project's pinned Playwright build when present, so agent-browser and the project's tests share one binary — no version-mismatched, baked-in browser to go stale). Add --with-playwright to also install the standalone Playwright CLI in the box:

agentbox claude --with-playwright

To make it the default, set the browser.default config key. See configuration for the browser-stack keys and precedence, and CLI commands for all flags.

Live screen

Every box runs a noVNC desktop. agentbox screen <box> opens that viewer in your host browser, auto-unpausing paused boxes and starting stopped ones first. The per-box VNC password is embedded in the URL, so you land straight on the desktop.

agentbox screen mybox

screen is distinct from agentbox url: url opens the box's web app; screen opens the desktop viewer. See CLI commands for all flags (--print, --loopback, --ttl).

Opt out at create time with --no-vnc:

agentbox create --no-vnc

HEADS UP

--no-vnc disables the desktop for the box's whole lifetime — agentbox screen then refuses with a "VNC is disabled" message. Recreate the box to re-enable it.

agentbox screen opens the box's desktop in your browser over noVNC, with the box's headed Chromium shown.

This works end-to-end on the cloud providers too (daytona, vercel, hetzner): the same noVNC desktop, reached via the provider's preview URL.

Screen sharing

agentbox screen does more than open the noVNC viewer. When the box has a web service that declares expose:, it also opens a headed Chromium inside the box pointed at the box's own web app — so you see the app rendered in the VNC desktop, not a blank X screen.

It's idempotent: if a browser session is already active (the agent is mid-task), screen leaves it untouched and never navigates the agent's page away.

agentbox screen mybox          # noVNC viewer + opens the web app inside the box's desktop
agentbox url mybox             # open the web app host-side

The most useful part is one origin from both sides: the in-box Chromium loads the same URL the host uses, so Next.js allowedDevOrigins, OAuth, and CORS behave identically on both sides. This holds across engines and cloud providers (see local-docker for the Portless vs OrbStack details).

From agentbox dashboard, the same two actions are chords on the selected box: Ctrl-a s (screen — noVNC viewer + in-box browser) and Ctrl-a u (url — web app host-side). They shell out to agentbox screen / agentbox url, inheriting the same Portless behavior.

TIP

Run agentbox screen while the agent is working and you'll see exactly what its browser sees.

The expose: service that makes the web app reachable is covered in services-and-tasks.

On this page