Let any MCP agent control your own Chrome — with full login state.
MCP server + Chrome extension. Normal tools for exploration. Optional Fast JEV for bounded speed. Same profile, cookies, and sessions. No clean browser. No remote desktop.
Website · Quick start · Compare · Live proof · Fast JEV guide
Browser control today usually splits two ways: products that reach your real login state but stay locked to one vendor, or open stacks that open a clean browser with none of your sessions.
BeatBrowser takes both:
- Your daily Chrome — extension on the profile you already use
- Any MCP agent — Claude Code, Cursor, OpenCode, Codex CLI, custom clients
- Two modes, one browser — Normal (23 tools) and optional Fast JEV (typed decisions via BeatAPI JEV)
Fast JEV is an execution mode, not a second browser.
flowchart LR
A[Your MCP agent] --> B[BeatBrowser MCP]
B --> C[Local bridge]
C --> D[Chrome extension]
D --> E[Signed-in Chrome]
subgraph Fast[Fast JEV optional]
T[browser_task] --> J[BeatAPI JEV]
J --> V[Validate · act · verify]
V --> D
end
Normal traffic stays local (MCP ↔ 127.0.0.1 ↔ extension). Fast JEV only sends bounded, redacted task/page state when you enable it and consent per task — never cookies, raw HTML, or screenshots. See PRIVACY.md.
| Normal | Fast JEV | |
|---|---|---|
| Interface | 23 MCP tools | browser_task / beat-browser run |
| Decides | Your outer agent | BeatAPI JEV over a finite action space |
| Browser | Your signed-in Chrome | Same Chrome |
| API key | Not required | Required for live JEV |
| Best for | Explore, debug, odd pages | Repeatable flows with clear success checks |
| On doubt | Keep using any tool | Stop; return to Normal or a human |
Learn a site once in Normal, save notes, then run the path in Fast JEV.
Same shape as the common browser-control matrix: checkmark plus a short note
when it helps. ✅ yes ·
| BeatBrowser | jev-ultrafast | Claude in Chrome | ChatGPT / Codex | Playwright MCP | chrome-devtools-mcp | Browser Use | |
|---|---|---|---|---|---|---|---|
| Daily Chrome + real login | ✅ Extension on the profile you already use | ✅ | ✅ | ||||
| Any MCP agent | ✅ MCP is the primary interface | ❌ Python harness, not MCP-first | ❌ Anthropic clients only | ❌ OpenAI product surface | ✅ | ✅ | |
| No debug port / launch flags | ✅ Load unpacked extension | ❌ CDP / harness launch | ✅ | ✅ | ❌ Needs DevTools / remote debugging | ❌ Chromium or remote debugging | |
| Explicit Normal explore tools | ✅ 23 MCP browser tools | ✅ Playwright APIs over MCP | ✅ Low-level CDP / DevTools | ✅ Agent tools in Python runtime | |||
| Optional Fast JEV typed loop | ✅ Finite ops + targets; local validate / act / verify | ✅ Core product loop | ❌ | ❌ | ❌ | ❌ | |
| Dual mode, one signed-in browser | ✅ Normal and Fast JEV share cookies / sessions | ❌ JEV-focused | ❌ Single product loop | ❌ Single product loop | ❌ Playwright session model | ❌ DevTools session model | |
| Compounding site learnings | ✅ Bundled notes + local ~/.beat-browser/learnings |
❌ Product memory only | ❌ | ❌ | |||
| Human handoff (captcha / pay / judgment) | ✅ Handoff tool + stop-on-uncertain Fast path | ✅ Pauses for you | ❌ | ❌ |
In short: Claude in Chrome and ChatGPT/Codex win inside their own products. Playwright MCP and chrome-devtools-mcp win for scripts, CI, and protocol work. jev-ultrafast is the typed-decision reference in the Browser Use stack. BeatBrowser is for when your agent needs your signed-in Chrome — with Normal tools and optional Fast JEV on the same profile.
Same signed-in X account, three approved replies per mode, all confirmed via permanent status URLs.
| Mode | Verified | Total | Mean / reply |
|---|---|---|---|
| Normal | 3/3 | 170.4 s | 56.8 s |
| Fast JEV | 3/3 | 36.2 s | 12.1 s |
Fast path was ~4.7× faster on this workload (10 JEV calls, ~68k input tokens, about $0.003 at BeatAPI JEV list pricing of $0.042 / 1M input tokens).
Narrow smoke test (n=3 per mode), not a general benchmark. Full evidence: TEST_RESULTS.md.
Node.js 20+, Chrome, and an MCP-capable agent.
git clone https://github.com/BeatAPI/beat-browser.git
cd beat-browser
npm ci
node src/cli.js install
node src/cli.js doctor --jsonLoad the unpacked extension from node src/cli.js extension. Agent-led install: AGENT_INSTALL.md.
In a source checkout, use node src/cli.js where examples show beat-browser.
beat-browser mcp23 tools: tabs, snapshots, clicks, typing, forms, network, screenshots, human handoff, learnings.
Dry-run first (no browser or model call):
beat-browser run --dry-run \
--url https://example.com \
--goal 'Check that the Example Domain page is ready'Live run (needs BEATAPI_API_KEY and explicit enable):
export BEATAPI_API_KEY='your-key-from-a-secret-manager'
beat-browser run --enable-fast-agent \
--url https://example.com \
--goal 'Check that the Example Domain heading is visible' \
--max-steps 10 \
--max-model-calls 20 \
--timeout-ms 60000Via MCP:
beat-browser mcp --enable-fast-agentbrowser_task requires cloudConsent: true per task. Read the Fast JEV guide and PRIVACY.md first. JEV product page: beatapi.io/jev-api.
signed-in Chrome
│
▼
live DOM → legal operations + targets
│
▼
one BeatAPI JEV request
│
▼
local validate → act → verify
JEV never returns selectors, coordinates, shell, or JavaScript. The extension keeps the real DOM node, rechecks before acting, and stops on stale identity, domain drift, challenges, or uncertain side effects.
- Bundled:
docs/learnings/ - Local:
~/.beat-browser/learnings/(not overwritten by upgrades)
Call learnings({ domain: "x.com" }) before a known site. If the page disagrees, trust the page, then save the corrected path. Learnings are hints — never credentials, cookies, or private drafts.
Fast JEV supports visible, enabled controls in the top-frame light DOM: click, exact text, native select, scroll, wait, done/blocked. Challenges, iframes, shadow DOM, canvas, uploads, and many custom widgets are out of scope; uncertain actions return control and are never auto-replayed.
npm test
npm run check:syntax
npm run check:security
npm run build:extension
npm run benchmark:offline -- --iterations 3MIT — see LICENSE.
