Skip to content
▚ by ByteDesk · open-source

The fastest cloud browser for AI agents.

Open-source, self-hostable, and 100% Anchor-compatible. Any model — Claude, Codex, Grok, Kimi — over API key, OAuth, or MCP.

Works with PlaywrightPuppeteerAnchor SDKMCPbrowser-use
agent-browser — session
# create a warm cloud browser
POST /v1/sessions
→ {"data":{
"id":"0f5a2b6e…",
"cdp_url":"ws://…/?apiKey=…&sessionId=…",
"live_view_url":"https://…" }}
 
# hand it a goal
POST /v1/tools/perform-web-task
→ status: running → RUNNING → COMPLETED
→ result: {"heading":"Example Domain"}
≤250ms
Warm session-create p50 (target)
≤0.5ms
CDP proxy added latency (target)
4
Models, 3 auth modes (key · OAuth · ACP)
100%
Anchor wire-compatible

Latency figures are architecture targets, not measured SLAs.

Why it exists

Built for speed. Open by default.

Warm-pool performance

Sessions are claimed from a pre-warmed pool — not cold-launched — and the CDP gateway splices WebSocket frames instead of parsing them. Speed is the point.

Any model + native MCP

Claude, Codex, Grok, or Kimi over API key, OAuth, or ACP. A built-in MCP server turns the browser into tools any agent can call.

Open-source & drop-in

100% Anchor wire-compatible. Your existing SDK, Playwright, and Puppeteer code works by swapping one base URL. Self-host it anywhere.

Proof · native MCP

Watch an agent do real work.

We pointed Claude at our built-in MCP server and asked it to research ByteDesk’s market. It browsed GitHub topic pages through our browser tools — navigate, snapshot, repeat — and compiled this Ideal Customer Profile list. Every row was read off a live page.

LeadStarsWhy it fits ByteDesk’s ICP
Chatwoot~34.5kOpen-source live-chat / omni-channel desk — the category leader
UVdesk~19.4kCommunity helpdesk / ticketing, strong e-commerce integrations
Zammad~5.8kEstablished web helpdesk; overlapping users, no AI-agent focus
FreeScout~4.4kSelf-hosted help desk & shared mailbox
LibreDesk~2.6kGo-based omnichannel support desk, single binary
Tiledesk~311LLM chatbots with human handoff — closest AI positioning
Drop-in

Swap the base URL. Your code just works.

The auth header, the {data:{…}} envelopes, and the root-path CDP WebSocket are all replicated. The official Anchor SDKs and raw Playwright connect unchanged.

1 · Point the SDK at your instance
export ANCHORBROWSER_BASE_URL=http://localhost:8080
2 · Create a session (curl)
curl -s http://localhost:8080/v1/sessions \
  -H "anchor-api-key: bdab-dev-key" \
  -H "content-type: application/json" \
  -d '{"browser":{"headless":{"active":true}}}'
3 · Drive it with unmodified Playwright
const { data } = await (await fetch(
  `${BASE}/v1/sessions`, { method: 'POST',
    headers: { 'anchor-api-key': KEY } }
)).json();

const browser = await chromium
  .connectOverCDP(data.cdp_url);   // ← drop-in
const page = browser.contexts()[0].pages()[0];
await page.goto('https://example.com');
4 · Or wire up MCP
{ "mcpServers": { "bdab": {
  "command": "/path/to/bdab-mcp",
  "env": { "BDAB_BASE": "http://localhost:8080" }
} } }
Bring your own model

Any model. Any auth.

API key, OAuth, or ACP — drive an already-logged-in agent CLI, no raw key required.

ClaudeAnthropic
CodexOpenAI
GrokxAI
KimiMoonshot

For agent developers

A browser your agents can actually drive — CDP, OS-control REST, MCP tools, and a perform-web-task loop with live step streaming.

For teams leaving Anchor

Wire-compatible, so migration is a base-URL change. No lock-in, no per-session surprise. Compare →

For enterprises self-hosting

Run it in your own infra. Data stays with you, the source is auditable, and the architecture scales. Self-host →

Star it. Run it. Ship agents on it.

Open-source and free to self-host. Managed cloud is coming.