I Built a Browser for AI Agents and Benchmarked It Against Playwright MCP and Browser Use
- Authors

- Name
- Nino
- Occupation
- Senior Tech Editor
Every agent I tried on the web had the same problem: it was reading too much. A standard browser tool hands the model a massive page snapshot, the model clicks, and then gets a fresh snapshot of the whole page again. Most of the tokens go on re-reading things that didn't change. When scaling up complex workflows or running multi-step web scraping and automation, this inefficiency quickly blows up API costs and degrades latency.
To solve this, I built AgentGo, a Chromium browser for Windows built with Rust on CEF, specifically designed to be driven by an agent over the Model Context Protocol (MCP). Then, I measured its performance against the two tools most developers use today: browser-use and Playwright MCP.
The Benchmark Setup and Results
To ensure a fair comparison, I ran all tools under identical conditions:
- Model:
gpt-6-lunawith medium reasoning configuration (routed smoothly through high-speed aggregators like n1n.ai for reliable performance). - Tasks: 24 BrowserGym MiniWoB++ tasks.
- Execution: A fresh agent session for every task, restricted only to that browser's MCP tools, with the page's native reward deciding success.
| Tool | Solved | Median Time | Input Tokens | Agent Turns |
|---|---|---|---|---|
| AgentGo 0.1.5 | 22/24 | 32 s | 94.7k | 7.7 |
browser-use 0.13.11 | 19/24 | 92 s | 209.9k | 13.2 |
Playwright MCP 0.0.83 | 18/24 | 42 s | 178.4k | 13.0 |
As the data shows, AgentGo achieved roughly half the token usage, about half the execution turns, and the fastest median time per task. When managing heavy enterprise workloads, optimizing input tokens via platforms like n1n.ai combined with efficient client-side architecture yields massive cost reductions.
Three Core Architectural Design Choices
Three specific design choices do the heavy lifting in AgentGo:
- A Compact Outline Instead of a Snapshot: Instead of dumping raw HTML or heavy accessibility trees,
browser_openreturns headings plus interactive elements, one per line, formatted as[ref] role "name". These references stay stable even as the page changes dynamically. - Differential Updates: After a
browser_actexecution, the reply is strictly a diff:+for new elements,-for removed ones, and~for changed values. The model doesn't need to re-read the entire page to verify if its click registered. - Deterministic Waiting: The browser waits, not the model. Each action waits for the page to settle before responding, preventing the agent from wasting turns calling "wait" and reading redundant states.
Real Browser Capabilities and Limitations
Unlike headless test harnesses, AgentGo is a real browser instance. It features its own native pointer and keyboard handlers (ensuring date pickers, sliders, and complex key-listening widgets behave correctly). Agents can maintain their own signed-in accounts, and sensitive actions like payments or final submissions pause safely until a human approves them directly in the browser window.
However, benchmarks also highlighted specific test limits:
- form-sequence-2: The instruction never explicitly states to press Submit, and no agent did.
- click-pie: Every agent opened the pie menu and clicked the correct item, but the page logic failed to register the click.
Introducing GoMini and Integration
AgentGo also ships with GoMini, a compact model (322M parameters) that runs locally on your GPU to handle routine steps, such as filling out pre-supplied values, sparing the larger model from reading every page. Developers looking to integrate high-speed model pipelines can easily test these setups using n1n.ai for backend inference orchestration.
Get started with Claude Code:
/plugin install agentgo --marketplace Moha2005269/agentgo-mcp
For other MCP clients, connect Claude Code, Codex, or Droid, or run agentgo mcp. It is also available on the official MCP Registry as io.github.Moha2005269/agentgo.
Get a free API key at n1n.ai