Repository navigation
Description
Proposal
Evaluate agent-browser (Vercel Labs, Apache-2.0) as the backend for the managed browser tier, instead of — or alongside — @playwright/mcp. Target the latest release, v0.43.0 (2026-11-12).
Related: #118 (browser tiers / Playwright bundling overhead), #119 (Linux installer tier), #123 (stdio MCP client + managed Playwright tier).
Why
The current tier P plan asks the wizard to download Node + @playwright/mcp + Chromium on demand — a few hundred MB, three supply chains to verify, and a Node runtime to keep updated on the user's machine. agent-browser removes most of that:
@playwright/mcp tier (current plan) |
agent-browser tier | |
|---|---|---|
| Runtime | Node.js required | None — single native Rust binary |
| Install payload | Node + npm package + Chromium (a few hundred MB) | ~17 MB binary (v0.43 ships per-platform packages; only the host platform downloads) + Chrome for Testing |
| MCP transport | stdio | stdio — agent-browser mcp, newline-delimited JSON-RPC |
| Browser control | Playwright | Direct CDP to Chrome; daemon is native Rust, no Playwright/Puppeteer dependency |
| Startup | Node + server boot | ~2 ms CLI startup (project figures) |
v0.43 specifically matters: earlier versions bundled every platform's binary into the npm package (128 MB) and routed through a Node wrapper. 0.43 ships per-platform native packages and links the command directly to the native binary (17 MB, 7.5× smaller), so the "npm install" story is no longer a reason to avoid it.
Fit with the phase 1 architecture
- It drops into feat: stdio MCP client and managed Playwright tier (browser tiers phase 1, PR 2) #123 unchanged.
StdioMCPClient+ManagedProcessalready manage an arbitrary stdio MCP child with an allow-list environment and process-group lifecycle. Spawningagent-browser mcpinstead ofnode @playwright/mcpis a configuration change, not new infrastructure. Tool profiles map onto the tier system: defaultcoreprofile is 29 tools (agent_browser_open,agent_browser_snapshot,agent_browser_click,agent_browser_fill,agent_browser_eval, …);--toolswidens it. - Same interaction model as our own AX tools.
snapshotreturns the accessibility tree with element refs (@e1, …), conceptually aligned withui_snapshot/ui_actionrefs — the mapping work in Re-evaluate browser_* tools for a click-through install (Playwright bundling overhead) #118's step 3 ("which tool names can this tier support") gets easier, not harder. - Persistent profile parity.
--profile <path>keeps a dedicated persistent profile directory, so the "log in once in the headed window, profile keeps the session" decision from Re-evaluate browser_* tools for a click-through install (Playwright bundling overhead) #118 carries over. - Linux story for Linux installer: Playwright-based browser_* tier (design later) #119. Native binaries ship for linux/amd64 and linux/arm64, so the Linux tier could use the same backend instead of a second Playwright-specific installer path.
- Policy hooks exist (opt-in): domain allowlist and action policies are built in, which is at least worth comparing against the tier's own guardrails.
What it does not solve / open questions
- Chrome for Testing still has to be downloaded (
agent-browser install); the browser binary is not part of the 17 MB. The wizard step shrinks from "Node + MCP + Chromium" to "one binary + browser", but it does not disappear. - The headed, persistent-profile first-login flow needs the same real-machine spike Re-evaluate browser_* tools for a click-through install (Playwright bundling overhead) #118 already plans (consent prompts, profile locking, daemon lifecycle under
ManagedProcess). - Tool surface differs from Playwright MCP's 32 tools; the backend-interface mapping (Re-evaluate browser_* tools for a click-through install (Playwright bundling overhead) #118 decision 1) still has to be done per tier.
- It is a fast-moving 0.x project. Pinning a version + checksum verification (the supply-chain rules already in the design) would be required, and upgrades should be deliberate.
--auto-connect(attaching to the user's already-running Chrome) exists, but combining it with the domain allowlist is restricted upstream; treat the real-profile use case as still served by the Apple Events tier.
Suggested next step
Add agent-browser to the tier spike list: spawn agent-browser mcp (v0.43.0, pinned) under the #123 ManagedProcess, run the same capability checklist used for the Playwright tier, and compare install size, startup latency, and tool coverage. If it holds up, the wizard's on-demand step can offer it as the lightweight managed tier, with Playwright kept as the heavyweight option.
References: repo, v0.43 changelog, MCP server docs (agent-browser mcp, profiles core / network / state / debug / tabs / react / mobile / all).
Activity
ttmuse commentedon Nov 14, 2026
Clarification: dual install as an option, not a mandatory bundle
Following up on the proposal above — the intent is not to replace Playwright outright, and definitely not to bundle both backends by default. The suggestion is to allow both to be installed side by side, with a clear division of labour:
Why coexistence is valuable
@refmodel maps closely to the existingui_snapshot/ui_actionref model. Playwright remains the heavy-duty option for what agent-browser (Chromium/CDP only) does not cover: network interception, trace/video recording, Firefox/WebKit, and mature multi-context handling.StdioMCPClient/ManagedProcesswork in feat: stdio MCP client and managed Playwright tier (browser tiers phase 1, PR 2) #123 — this is configuration, not new infrastructure.Conditions that keep dual install from becoming a drawback
In short: dual install is a good option and a bad default bundle. Suggested framing for the tier design in #118: agent-browser as the default managed tier, Playwright as an optional advanced tier, both supported behind the same interface during (and after) evaluation.
ttmuse commentedon Nov 14, 2026
Refinement: provider model — the agent selects the provider, the host validates and locks it in
This refines the routing point in my previous comment. The cleaner model is not host-side rules deciding per call, and not two raw tool sets exposed side by side — it is a provider model, analogous to LLM providers behind one API:
Shape
browser_*tool surface, not agent-browser's tools and Playwright's tools at the same time.Host responsibilities
Why selection is at session level, not per tool call
Browser state — tabs, cookies/login, page state, and snapshot refs — lives inside one provider's browser instance and cannot migrate to the other. Exposing both raw MCP tool sets simultaneously (~60 tools, with different names and different ref formats) would bloat the tool surface and invite mid-task provider switches that invalidate all of that state. One selection, one provider, one unified tool surface per session avoids both problems while still letting the agent — which knows the task's requirements better than static host rules — make the choice.
ttmuse commentedon Nov 14, 2026
The model in one diagram: install = 2, expose = 1, execute = 1 per session
Summarising the two comments above into the three-layer rule:
browser_*tool set. The two providers' own MCP tool sets are not both exposed as tools (that would double the tool surface, mix two naming/ref schemes, and invite mid-session provider switches).flowchart TB Agent["Agent<br/>sees ONE unified browser_* tool set"] subgraph Host["oab-computer - Browser Driver Host | expose layer: 1 tool set"] direction LR Registry["Provider Registry<br/>only installed providers are listed"] Validate["Validate + session lock<br/>installed? allowed? healthy?"] Registry --> Validate end subgraph Providers["Providers | install layer: 2 may coexist | execution layer: 1 per session"] direction LR PA["Provider A - agent-browser (default)<br/>Chrome for Testing - own persistent profile"] PB["Provider B - Playwright (advanced)<br/>Chromium / Firefox / WebKit - own persistent profile"] end Agent -->|"1 - choose ONE provider at session start"| Registry Validate -->|"2 - selected: every browser_* call goes here"| PA Validate -.->|"not selected: never started"| PB Validate -.->|"validation fails: explicit error at start,<br/>agent opens a NEW session and re-chooses"| Agent PA -.->|"state - tabs / login / refs - cannot migrate"| PB