aido-browser · the agent's web body
aido-browser hands an LLM its own isolated Chromium over CDP, so it can see, click and type the frontend you're building · without ever touching your real browser, cookies, or tabs. 14 MCP tools, behind 7 security gates.
Anthropic computer-use drives your desktop. aido-vm drives a full VM. aido-browser sits in between: just a browser, just for frontend dev loops. CDP-fast, profile-clean, allowlist-gated.
Pick the smallest tool that does the job. For "test the localhost frontend I'm writing", that's aido-browser · not a full desktop, not a full VM.
Every browser tool call passes through seven independent gates. Bypassing one is a footgun; bypassing all seven would require shipping code we explicitly refuse to write in v1.
Navigation refused outside the allowlist. Default: localhost, 127.0.0.1, *.x0ne.training, data:, about:. Returns the list so the agent can suggest an edit.
Each session lives in ~/.aido/browser-profiles/<uuid>/, wiped at close. Your real Chrome cookies · invisible.
One line per call in ~/.aido/logs/browser/<date>.jsonl. Args go through a redactor masking any key matching password|token|secret|api_key|auth|bearer.
Token bucket, default 60 calls/min. Past the limit → rate_limited with retry_after_ms.
touch ~/.aido/browser-tools.kill → every call returns killed_by_operator. Your emergency stop.
Screenshot ≤ 5 MB, text payload ≤ 256 KB, DOM depth ≤ 8. Hard caps. Prevents 200 MB page dumps blowing your context.
No eval_js (arbitrary scripts). No file upload. No multi-tab. Each is a categorical refusal · features that need explicit design before they ship.
Every failure returns a typed code the agent branches on, not the message. 11 codes total; new ones get added, never renamed.
aido-browser is a separate workspace crate. Its only entry point is aido-browser-mcp, an MCP stdio server. Chromium is spawned lazily · the first call that needs it pays the ~250 ms startup; the rest are 5-20 ms.
No eval_js. No multi-tab. No file upload in v1. The toolset is deliberately small · fewer footguns, simpler reasoning. v2 features (hover, scroll, console logs, network log, tabs) ship when designed safely.
clear=true erases first.timeout.
Stable error codes are part of the API contract. The agent branches on code, not on the message · so wording improves without breaking flows. Codes are added in new versions, never renamed.
Linux with Chromium installed · that's it. The crate spawns the system Chromium with an isolated --user-data-dir. Default config works; TOML only needed if you want to tighten or relax anything.