Skip to main content
Rust · open source

Browser automation for AI agents.

One Rust binary that gives any LLM a real browser. Scrape, clear bot gates, transcribe videos, or hand it your own key and let it drive.

install webrain
✓webrain installed · one binary, three engines

No Node, no Python, no Docker. Runs on macOS, Linux, and Windows.

webrain · scrapelive
❯webrain mcp
✓MCP server ready · 18 tools
❯“scrape product prices from shop.example.com”
❯navigate shop.example.com
✓loaded · 0 challenges
❯observe product cards
✓24 product cards detected
❯extract json
✓
✓
✓done · 24 items → JSON
webrain · auth + batchlive
❯“extract prices from 12 auth pages behind Turnstile”
❯vault add store.example.com
✓credential stored · AES-256-GCM + TOTP
❯launch chrome
✓real chrome up · stealth, cdp 9222
❯navigate auth.store.example.com
✓challenge turnstile → cleared · native login
❯session login service=store profile=default
✓logged in · session saved, TOTP ok
❯batch extract · 12 urls (session)
✓12 pages · 214 items
✓done · 214 products → JSON
webrain · batch interactlive
❯“collect specs from 40 public pages, no auth”
❯batch interact · 40 urls in parallel
✓clicked specs tab · read rows per page
✓312 rows · 0 logins
✓done · 312 specs → JSON
webrain · scrapelive
❯webrain mcp
✓MCP server ready · 18 tools
❯“scrape product prices from shop.example.com”
❯navigate shop.example.com
✓loaded · 0 challenges
❯observe product cards
✓24 product cards detected
❯extract json
✓
✓
✓done · 24 items → JSON
webrain · live CLI sessionlive
❯webrain mcp
→✓ MCP server ready · 18 tools
❯webrain_navigate shop.example.com
→0 challenges · 24 product cards detected
❯webrain_extract mode=autoschema
→schema: · 42 rows
❯
→12 pages · 2.1s · 189 items
Works with any MCP client

Give the scraper LLM a try.

This is the agent loop webrain runs: a plain-language prompt, eighteen intent-based tools, and structured JSON back. Presets show illustrative output, except the drone one: a real 1m43s run. Pick a demo or type your own prompt.

webrain · agent playgroundlive
❯
❯“scrape product prices from shop.example.com”
❯webrain_navigate→ ok · 0 challenges
❯webrain_observe · what=state→ 24 product cards detected
❯webrain_extract · mode=autoschema→ schema
❯webrain_extract · mode=schema→ 42 rows
result.json42 items

From install to scraping in three steps.

No selectors to hand-write, no daemon, no driver wiring. The binary, your client, and the model do the rest.

Install

One binary, any OS

Install webrain once. No Node, no Python, no Docker. Engines download on demand.

shellcurl -fsSL …/install.sh | bash
Connect

Register it in a client

Add two lines to Claude, Cursor, Copilot, or Codex. The client spawns webrain mcp.

mcp.json
Ask

Point the model at the web

Tell the agent what to do in plain language. It navigates, extracts, and returns structured data.

agentscrape product prices from URL X

One loop, every site.

Read the page, pick a tool, act, hand back structured JSON. The agent walks the same circuit on every job.

askplain-language prompt
navigateengine loads the page
observeDOM snapshot
decideLLM picks the tool
extractstructured JSON out
webrainone binary

Everything an agent needs to read the web.

Eighteen intent-based tools cover the full job. No selectors to hand-write, no driver plumbing, no daemon.

18 intent-based tools

One tool per intent, each with a what, action, op, or mode selector, and every legacy one-action alias still dispatches.

Structured extraction

Autoschema probes the DOM, then schema, regex, table, JSON-LD, and BM25 modes return clean data. Zero LLM, zero cost. Live: 407 products from a real store in ~17 tool calls.

Stealth login

Real-Chrome profiles with an encrypted local vault and optional TOTP. Cookies transfer across engines.

AES-256-GCMTOTPcookie transfer

Challenge bypass

Every navigate reports a challenge field; real Chrome with a persistent profile and native login clears Cloudflare, Turnstile, and reCAPTCHA gates. No Python sidecar.

cloudflare_challengeblockedcaptcha

Crawl at scale

Batch, spider, sitemap, and scan modes with auto-throttle and checkpoint/resume. 132 products in one parallel call, ~2-4 s/page on Lightpanda.

Read anything

PDF extract and render, video transcripts plus frames, downloads, JSON-LD, media, and a no-browser HTTP path. Video transcripts run fully offline with bundled whisper and local vision.

Local AI, all OS

Bundled whisper-cli for transcripts and Qwen3-VL-2B for vision. No cloud key required. Runs fully on your machine.

whisper-cliQwen3-VL-2B
1static binary
3browser engines
18MCP tools
0Node runtime

No client needed. webrain chat drives webrain itself.

One command, one turn, your own model key. The session attaches these 18 tools and nothing else, so the model can only do what webrain can actually do.

One prompt, one turn

webrain chat “compare these two listings” runs the agent loop and prints the answer. Exit 0 completed, 1 the turn failed, 2 could not start, so it composes in a script.

The answer goes to stdout and the tool trail to stderr, so | jq and > file stay clean.

Bring your own key

Seven provider rows resolved in order, the same variable names the vision chain already reads, plus any OpenAI-compatible endpoint including a keyless local server. —print-config resolves the chain offline and prints it with the key redacted.

openrouteropenaianthropicgeminifireworksdashscopegroqlocal base url

Nothing of yours leaks in

The runtime starts in the SDK’s empty client mode with its own state directory, so your own MCP servers, skills, session store, memory and telemetry stay out of the turn. Reads and tool calls run; a shell command or file write needs —yes.

Built with —features chat. See the chat guide for the provider table and the per-target build matrix.

Skills, recipes, and agent prompts, in the repo.

webrain ships a working agent playbook, not just tools: a routing skill, verified block-bypass workflows, and a ready-to-copy news-research prompt. Clone the repo and load them into any client.

webrain skill

The router. Load it and it picks the browser, the challenge path, and the extractor for each task, mcp_webrain-* without guesswork.

Workflows

Verified block-bypass recipes: CAPTCHA geometry, feed & news aggregation past WAFs, protected-site end-to-end.

Agent prompts

A ready news-research agent: copy the prompt into any chat for the optimal tool order and a precise bypass playbook.

References

Depth for every decision: browser selection, challenge handling, persistent profiles, extraction matrix, anti-patterns.

Proven on real jobs.

Measured on live sites and documented in the repo. No invented numbers, no benchmark theater.

407unique products from a live store in ~17 tool calls, ~46K tokens
132products in one parallel batch call, zero logins
3browser engines behind one CDP backend, plus a no-browser HTTP path
0runtime dependencies in the default build. ~22 MB with pdfium; adding chat embeds its runtime (~135 MB)
46,000tokens

Agent loop, 407 products

0tokens

Structured extract, same 407 products

Same store, same 407 products. The extraction engine does the work with no LLM in the loop: zero tokens, zero cost per row.

Reproduce the zero-LLM claim on any site: webrain_extract · mode=autoschema → mode=schema. No LLM, no tokens.

Real operations, end to end. Two full agent jobs. Every number from the run, not a demo.

Buy a machine for Qwen3.8

Live skroutz.gr op: navigate 4 targets, batch 2 search pages, eval the benchmark tables, rank by €/tok/s.

16 tool calls0 challenges100% price match~$0.04

Verdict → Acer Predator Helios 16 AI · 3.699 €, ~100 t/s on Qwen3.8-27B Q4 (interpolated)

Plan a drone build

Multi-source research: serp discovery → one batch over 6 build guides + firmware repos → a synthesized parts-and-code plan.

2× webrain_serp6 sources · one batch1m43sDeepSeek V4 Flash

Output → 12-part list · $500-650, Betaflight / INAV / ArduPilot + STM32 KiCad repo

PDF, same 9-page paper both ways: 5.2 s and 48 KB of markdown from the text layer, versus 157.9 s through render + tiles + local vision for half the characters. Tiling is 1.4% of that run, so the win is routing, not parallelism: extract first, then send only the pages whose text layer came back empty to vision.

Every figure is in the repo: the agent guide, the changelog

Structured search. Seven engines, one tool.

Ask for results and get typed JSON: position, title, url, domain, snippet. duckduckgo, bing, yahoo, baidu and yandex answer over plain HTTP with no browser at all; google renders in a Chrome it launches with a persistent profile, brave uses its keyed API when one is set and the connected engine otherwise. auto fetches duckduckgo + bing in parallel and merges them, relevance-filtered and deduped.

typed resultsposition, title, url, domain, snippet
seven engines + autoduckduckgo, bing, google, brave, yahoo, baidu, yandex
fallback + dedupeproviders fall back, duplicate URLs dropped
pagination + safe + regionpage offsets, safe search, en-US market default
proxy + keyed providersroute engines through HTTP(S)/SOCKS proxies; a Brave key and serpapi add browser-free providers
request_id + retrycorrelate every call, retry with backoff

One MCP tool and one CLI command: webrain_serp and webrain serp.

webrain · serplive
❯“tokio rust” · engine=duckduckgo · limit=5
❯webrain_serp · engine=duckduckgo
✓duckduckgo · plain HTTP · no browser
✓deduped · 5 unique results · 0.9s
1
Rust Programming Languagerust-lang.orgA fast, reliable, and productive programming language.
2
Rust (programming language) - Wikipediaen.wikipedia.orgA general-purpose language emphasizing performance, type safety, concurrency, and memory safety.
3
The Rust Programming Languagedoc.rust-lang.orgThe official Rust book: performance, safety, and fearless concurrency.
result.json5 items
7engines behind one tool
5browserless (duckduckgo · bing · yahoo · baidu · yandex)
50max results per call

One CDP backend, four ways to load a page.

Pick the right engine for the job. From a full Chrome for interactive SPAs to a no-browser HTTP fetch for static pages.

Chrome

Interactive SPAs, challenges, screenshots. Anything real Chrome can do.

Default

Obscura

Fast batch scraping of non-challenged JS pages. Render build paints (PNG/PDF); a data-driven SPA may stay unmounted.

Fast

Lightpanda

Real accessibility tree, lightweight. Screenshot returns a placeholder frame.

Light

fetch_http

Static HTML, no JS, no auth. 10-100× faster. No engine at all.

No browser

Point any LLM at the web.

No driver wiring, no browser download dance, no tool wrappers. Install once, and your agent drives a real browser.

MCP native

stdio or HTTP. Works with Claude, Cursor, Copilot, Codex, Gemini.

Local first

Everything runs on your machine. No cloud, no API key, no data leaves.

Stealth and auth built in

Challenge bypass, encrypted vault, TOTP, and cookie transfer across engines.

webrain MCP workflow: AI agent connects through MCP protocol to browser engine, extracts structured data

Questions, answered plainly.

The objections that come up before you install. The short version: yes, it runs on your machine.

Do I need Node, Python, or Docker?

No. webrain is a single Rust binary. The browsers it drives (Chrome for Testing, Obscura, Lightpanda) download on demand into a cache dir. Nothing else to install.

Does it cost money or need an API key?

No. It is open source (MIT) and local-first. Cloud keys are optional: webrain chat brings your own model key (or points at a keyless local server), and vision and video transcription can use cloud providers instead of the bundled local whisper and Qwen3-VL-2B models.

Which AI clients does it work with?

Any MCP client: Claude, Claude Code, Cursor, GitHub Copilot, Codex, Gemini, and more. Register it once in the client’s MCP config and the model drives the browser itself. Or use no client at all: webrain chat runs the loop in this binary.

How is this different from a scraping API?

webrain runs on your machine, sends no data to a third party, and gives the LLM a real browser with stealth and challenge bypass. For static pages it can be 10-100× faster than a full browser.

Does webrain chat read my own Copilot setup?

No. The runtime starts in the SDK’s empty client mode with its own state directory, so your own MCP servers, skills, session store, memory and telemetry stay out of the turn, and the model sees webrain’s 18 tools and nothing else. Reads and tool calls run; a shell command or a file write waits for —yes.

Give your agent a browser in five minutes.

Install webrain, start the MCP server, and ask your LLM to scrape. No selectors, no wrappers.

webrain