# 594 KB to orbit: a browser for AI agents with no Chromium attached

> Source: <https://dev.to/slabb/594-kb-to-orbit-a-browser-for-ai-agents-with-no-chromium-attached-1odg>
> Published: 2026-10-01 13:31:53+00:00

Houston, we deleted Chromium: your agent's browser is 594 KB and ships with your OS. Full WebKit, MCP-native, resident at 24 ms.

**Houston, we deleted Chromium.**

Every AI agent that touches the web today drags the same luggage: **headless Chromium**.

Playwright downloads ~400 MB of browser on every machine your agent touches. Cloud browser APIs (Browserbase, Steel, Hyperbrowser) rent you Chrome by the subscription — and your pages leave your machine. And all of this to do what an agent actually needs: *open a page, read it, take a screenshot, click a button, fill a form.*

Meanwhile, your computer **already ships a full browser engine**. macOS has WebKit. Windows has WebView2 — which is Chromium, preinstalled. Linux has WebKitGTK.

So I built **navette** (French for *shuttle*): a single Rust binary that drives the WebView your OS already ships, and speaks MCP — the protocol agents already speak.

**594 KB installed. No Chromium. No download.**

One binary, three modes:

```
navette serve --port 8765     # HTTP API on loopback
navette mcp                   # MCP stdio server for agent hosts
navette install-daemon        # resident: warm from login
```

Nine MCP tools: `navigate`, `read`, `screenshot`, `click`, `type`, `evaluate`, `wait`, `sessions`, `session_close`. The screenshot comes back as MCP image content — your agent literally **sees** the page.

Under the hood: a WKWebView per session living in a **ghost window** (real pixels, parked off-screen so it renders but nobody sees it). Navigation completion is event-driven — I implemented `WKNavigationDelegate` in Rust with raw `objc2` message sends, and the content extraction runs *inside* the `didFinish` callback, so a warm navigate + full markdown read costs **8 ms**.

Same machine (M1, 8 GB), same corpus (100 local pages + 20 real URLs), reproducible with one command (`python3 navbench.py`):

| Metric | navette | Playwright + Chromium | Lightpanda | 
|---|---|---|---|
| Install size | **0.6 MB** | 216 MB | 80 MB | 
| Cold start (resident daemon) | **24–37 ms** | n/a | ~320 ms boot / launch | 
| Cold start (fresh process) | 531–984 ms | 934–1539 ms | ~320 ms | 
| Navigate → readable content | **8–11 ms** | 12–33 ms | 3–16 ms | 
| Act (type + click) | **1–2 ms** | 33 ms | 18–204 ms | 
| Peak RAM (process tree) | 79 MB | 536 MB | 41 MB | 
| Crawl 100 pages | **0.9–2.8 s** | 1.8–4.0 s | 0.9–2.6 s | 
| Real-web success (20 URLs) | **95–100%** | — | 85% | 

Two honest disclosures, because benchmark posts die without them:

The claim I'll defend: **nobody else combines 0.6 MB + 1 ms actions + a 0.9 s hundred-page crawl + full WebKit rendering + a resident 24 ms mode.**

I pointed the resident daemon at a login form and a research loop and let an agent drive through MCP only:

`"You logged into a secure area!"`), screenshot the authenticated page.
Full walkthrough with the verbatim tool calls and screenshots is in [`demo/JOURNEY.md`](https://github.com/slabbdev/navette/blob/main/demo/JOURNEY.md).

``` js
cargo build --release
./target/release/navette serve --port 8765

# or let your agent host own the lifecycle:
./target/release/navette mcp
```

Register it in any MCP client (ZCode example):

```
{ "mcp": { "servers": { "navette": {
    "command": "/path/to/navette", "args": ["mcp"] } } } }
```

Then just talk to your agent: *"open this dashboard, check if the deploy banner is there, screenshot it for me."*

Headless Chromium is the Postgres of web automation. navette is trying to be the embedded SQLite — the browser agents *bring with them*, for the fastest-growing half of the agent world: agents that run **locally**, on machines that already have an engine.

Apple shipped a Safari MCP server for coding agents this year. The thesis is being validated from above. navette is it from below: tiny, open, cross-platform-bound.

Repo, benchmarks and the reproducible harness: [https://github.com/slabbdev/navette](https://github.com/slabbdev/navette)

If you run agents locally, I'd genuinely love your feedback — especially the failure cases.
