Agent GridAgent Grid Docs
Guides

Browsers

Chromium browser panes with per-workspace session isolation and a programmable surface for QA workers.

A browser pane is a real Chromium webview on the canvas — load a staging URL, read docs alongside your code, or hand it to a browser_qa worker for visual end-to-end testing.

What you get

  • A full Chromium webview with back / forward / refresh and DevTools.
  • Per-workspace session isolation — cookies and storage are partitioned by the space's project folder, so logging into staging in one project doesn't leak credentials into another.
  • A URL bar and standard navigation.
  • A DevTools toggle for inspecting the page directly inside the pane.

Spawn one with Cmd7Ctrl7, or via the spawn menu.

Zooming inside the browser

The canvas owns CmdScrollCtrlScroll for zoom-under-cursor everywhere except inside browser panes. When the cursor is over a browser, those chords are forwarded into the page as pinch-zoom instead — so you can zoom the rendered page without the canvas moving.

PlatformIn-browser pinch-zoom
macOSCtrlScrollCtrlScroll
Windows / LinuxAltScrollAltScroll

The canvas does not zoom while the cursor is inside a browser pane. Move the cursor off the pane (or use Cmd=Ctrl= / Cmd-Ctrl- for keyboard zoom) to zoom the canvas itself.

DevTools

Each browser pane has a DevTools toggle in its header. Open it for a per-pane Chromium inspector — the same Elements / Console / Network experience you'd get in Chrome. The DevTools window is tied to that specific pane, so multiple browser panes can have their own inspectors open at the same time.

Browser panes the orchestrator drives

A master orchestrator can spawn an "observable" browser pane via the spawn_browser MCP tool — a full webview the user can see and interact with, parented to the master. Useful for showing a staging build together, walking through rendered docs, or fronting a dashboard.

From the master's side the surface is small and focused:

  • spawn_browser({ url, customTitle?, cwd? }) — open at a URL.
  • read_browser({ paneId }) — pull the live URL, title, and a plain-text content extraction (≤ 100 KB).
  • navigate_browser({ paneId, url }) — push the same pane forward instead of opening another.
  • wait_for_browser_navigation({ paneId, timeoutMs, sinceCount? }) — block until the user (or the master) navigates.
  • screenshot_browser({ paneId }) — capture the visible viewport.
  • kill_browser({ paneId }) — close it.

The pane is auto-killed when the master pane closes, so you don't need to clean up on shutdown.

The browser_qa worker surface

The browser_qa role is the heavyweight browser-driven worker. It gets:

  • A real Chromium WebContentsView the user can watch live.
  • Playwright MCP (@playwright/mcp) wired in — browser_navigate, browser_click, browser_fill_form, browser_snapshot, and the rest of the Playwright tool surface.
  • The Agent Grid browser MCP — wait_for_user_input, request_user_login, highlight_element, save_recording, submit_findings.
  • Write access restricted to .agent-grid/qa-specs/ (advisory contract; reinforced in the role's system prompt).

You spawn one with spawn_role({ role: "browser_qa", prompt: "Verify the sign-in flow on http://localhost:3000" }). The worker walks the flow in the visible browser, describes what it sees, and calls submit_findings with a structured report when it's done. Saved regression specs land in .agent-grid/qa-specs/.

browser_qa is pinned to the SDK backend. The PTY backend cannot wire MCP servers (Playwright + the Agent Grid browser MCP) into the interactive CLI, so any role with browserAccess: true is force-routed to the SDK regardless of the global backend setting.

On this page