Open Claude in Chrome
A clean-room Claude browser extension with no domain blocklist: any Chromium browser, the same 21 MCP tools, matching performance.
- Source repo
- noemica-io/open-claude-in-chrome
- Stars
- ★ 223
- Last updated
- 23d ago
- License
- NOASSERTION
- Primary language
- HTML
- FA score
- 40/100 · Major gaps
At a glance
- Works with
- Platform-specificClaude Code
- You'll need
- Typical use
- Teams that need Claude Code to automate sites the official extension blocks, such as Reddit, Robinhood or Tinder.
- Main limitation
- Tied to Claude Code and the MCP client shape; other clients are not supported.
- Source review
- 40/100 · Major gaps 2 safety controls not found
What does this agent do, and when should you use it?
Open Claude in Chrome is a clean-room reimplementation of Anthropic's official Claude in Chrome extension, built by noemica and released under MIT. It ships three core pieces: a Manifest V3 extension that automates the browser over CDP, a Node.js MCP server (mcp-server.js) that Claude Code launches over stdio, and a native messaging host (native-host.js) that bridges the two; codemode/hybrid variants add a Cloudflare Worker (V8 isolate) hosted by wrangler dev to run model-written JavaScript. Compared with the official extension it removes the 58 blocked domains (banking, brokerage, payments, crypto, gambling, dating, adult, several media sites and Reddit) and runs on any Chromium browser rather than only Chrome and Edge. The README reports a 17-arm study on 12 held-out REAL benchmark tasks where the cold harness and the official extension are statistically indistinguishable (2.04 vs 1.95 min/task), while per-action overhead drops from 0.31s to 0.12s. It also includes a four-track imitation-learning recorder that hands an expert rollout to a live Claude Code session.
The repository exposes 21 MCP tools to Claude Code (tabs_context_mcp, tabs_create_mcp, tabs_close_mcp, navigate, computer, read_page, get_page_text, find, form_input, javascript_tool, read_console_messages, read_network_requests, resize_window, file_upload, and others) plus its own execute_code, update_plan, set_tab_focus, get_config/set_config, recording_ack, retranscribe_recording, debug and debug_timings. Execution flows Claude Code <-stdio MCP-> mcp-server.js <-TCP-> native-host.js <-native messaging-> extension <-> browser; the codemode/hybrid servers insert a wrangler-dev-hosted Cloudflare Worker so LLM-written JS runs in a V8 isolate and drives every tool through a typed chrome.* API in one round trip. The extension performs clicks, typing, screenshots, zoom, console and network reads over CDP, and the humanize setting produces curved cursor paths, off-centre clicks with press dwell and momentum-decomposed scrolls. audit_mode starts an rrweb DOM recording per tab and stitches segments into one timeline per Claude Code session, keyed off the h{clientId}_{id} request prefix. The recorder resolves actions to durable element anchors, transcribes spoken narration via the OpenAI API, and the native host writes trace.json, SCHEMA_v0.md and images/ under ~/.config/open-claude-in-chrome/recordings/<id>/.
- Teams that need Claude Code to automate sites the official extension blocks, such as Reddit, Robinhood or Tinder.
- Developers running Brave, Arc, Opera or Vivaldi who want browser-agent control in their own browser instead of installing Chrome or Edge.
- Engineers who want to demonstrate a browser task once, with spoken narration, and have Claude generalize the recording to sister tasks.
- Anyone collapsing multi-step forms, wizards or repeated submissions into a single execute_code round trip to cut latency.
- Compliance or debugging work that needs a replayable rrweb audit of what an agent actually did in the browser.
- Advanced users who want several Claude Code sessions sharing one browser extension and driving different tabs concurrently.
How do you install or deploy this agent?
Prerequisites: Node.js v18+, any Chromium browser, Claude Code v2.1.80+ (v2.0.73+ suffices for browser automation alone), and an OpenAI API key. Steps: (1) npm install --prefix host and npm install --prefix host/codemode/worker — the second is not optional, without it execute_code falls back to fetching wrangler over the network on every cold start. (2) Open chrome://extensions (or brave:// / edge://), enable Developer mode, Load unpacked the extension/ directory, and copy the extension ID. (3) Run ./install.sh <your-extension-id> to register the native messaging host; pass multiple IDs for multiple browsers. (4) Close all browser windows and reopen. (5) Right-click the extension icon, open Options, paste the OpenAI key and click Save & validate, then click Enable microphone and allow the prompt. (6) Register the server: claude mcp add open-claude-in-chrome-hybrid -- node /absolute/path/to/host/codemode/server-hybrid.js (hybrid is the superset with all 21 tools, execute_code and the recording channel). (7) Launch with claude --dangerously-load-development-channels server:open-claude-in-chrome-hybrid and keep the session open.
How do you use this agent?
After launch, run two checks: ask the session to "Navigate to reddit.com and take a screenshot" to confirm the extension, native host and MCP server are wired up, then issue one execute_code call that creates a tab, navigates to reddit.com, clicks the first post, goes back and returns every post title except the top three to confirm the sandbox is live (the first call may report the sandbox is still starting — wait and retry). Configure behavior through set_config, e.g. set_config({ key: "humanize", value: true }) for humanized input with humanize_speed set to fastest, fast, natural or relaxed, and set_config({ key: "audit_mode", value: "audit" }) for rrweb auditing, replayed from the Audits page under Options. To record an imitation-learning demonstration, tell the session you are about to teach it, click the toolbar icon (badge shows REC), act while narrating out loud (hold Alt while clicking to demonstrate without firing the action), click the icon again to stop, then once the badge shows 📋 and the reference is on your clipboard, paste it into Claude Code. If the sandbox dies, reconnect with /mcp in Claude Code or run pkill -f "server-hybrid|server-codemode"; pkill -f wrangler before reconnecting.
What are this agent's strengths and limitations?
- No domain blocklist at all, so all 58 sites the official extension blocks (Reddit, Robinhood, Tinder, PayPal, Coinbase and more) are reachable.
- Runs on any Chromium browser, whereas the official extension supports only Chrome and Edge.
- On 12 held-out REAL benchmark tasks it is statistically indistinguishable from the official extension when cold (2.04 vs 1.95 min/task, p=0.44) yet per-action overhead is 0.31s vs 0.12s, 2.7x less.
- execute_code lets the model write JS that drives all 21 tools in one call; the README's best method lands 23% fewer turns and 15% less time than the official extension.
- Ships a four-track imitation-learning recorder and rrweb audit replay that can hand a recording to a live Claude Code session.
- Plain JavaScript with no build step, released under MIT.
- Tied to Claude Code and the MCP client shape; other clients are not supported.
- execute_code depends on a wrangler/workerd child process with no health check and no auto-restart, so it stays down until the MCP server restarts.
- Recording transcription requires an OpenAI API key and depends on the research-preview channels flag to inject into a session.
- gif_creator, shortcuts_list and shortcuts_execute are still stubs, and upload_image attaches to a file input by ref only, not by coordinate.
- The README admits the benchmark task set saturates, one task's grading is ambiguous, and repeat runs vary 10-20%, so single-digit differences are noise.
- The README states the in-browser capture, mic and stop pipeline are wired but awaiting a live verification pass.
How does this agent compare with similar options?
The official Claude in Chrome extension is the direct alternative: closed source, Chrome and Edge only, 58 blocked domains, 21 MCP tools. Open Claude in Chrome is open source (MIT), works in any Chromium browser, has no blocklist, and adds execute_code, update_plan, humanize, audit_mode and the imitation-learning recorder. The README also contrasts Claude Cowork, which analyses each recording at capture time and keeps only the result, whereas this harness records raw four-track traces and defers analysis; distilled the same way by the same model, the raw recordings win both regimes by 6.6 fewer turns and 6.4 fewer minutes (p=0.012, p=0.008).
Key facts side by side with the most closely related agents.
| Agent | Source review | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|
| Open Claude in Chrome This agent | 40 · Major gaps | ★ 223 | 23d ago | HTML | Claude Code |
| WebBrain | 65 · Some gaps | ★ 1.1k | 4d ago | JavaScript | Claude Code |
| FSB — Full Self Browsing | 49 · Major gaps | ★ 190 | 18d ago | JavaScript | Codex · Claude Code · OpenAI API · Claude API |
| Obscura Headless Browser | 75 · Good | ★ 27k | 4d ago | Rust | Claude.ai |
How does FollowAgents rate this agent?
Why each dimension lost points
The README openly states that file_upload does not restrict sources to session-shared paths and accepts any absolute path on the machine, and it deliberately removes the official extension's 58-domain blocklist (banking, brokerage, payments, crypto wallets, gambling, adult, dating). That is intentional permission amplification rather than least privilege. For user confirmation, apart from update_plan and the recording flow, no mandatory confirmation gate is shown for destructive actions such as form submission or clicks on financial pages. Data-flow transparency is partial: the README explains the OpenAI key is used for transcription, recordings are written to ~/.config/open-claude-in-chrome/recordings/, and execute_code runs in a workerd V8 isolate with HTTP callbacks, but there is no egress inventory or retention policy. Sensitive data handling scores 0: recordings capture 240p frames, cursor trajectories and microphone audio, the Options page keeps audio and frame copies in IndexedDB, long recordings accumulate with cleanup deferred to 'a later refinement', and no redaction or encryption of credentials/privacy data is described. Dependency security scores 0: no lockfile evidence, no dependency audit or pinning, and a documented fallback to fetching wrangler over the network via npx --yes. External effects and rollback each score 1: there is an Alt mask mode, a humanize guarantee that only the path changes and never the outcome, and replayable recordings, but no transactional rollback or undo of already-committed external actions. Source attribution scores 1: the README self-describes as a clean-room reimplementation of Anthropic's extension and links official docs, but offers no clean-room process evidence, and the NOASSERTION license metadata conflicts with the in-repo PolyForm Noncommercial text.
Self-consistency scores 1: the object description says '18 MCP tools' while the README body says 21 MCP tools and the tool table lists additional non-parity tools, so the tool count is internally inconsistent. Dependency availability scores 1: Node 18+, Claude Code versions, an OpenAI key and the wrangler/workerd sidecar are all documented, but the sidecar has no health check and no auto-restart, and dependency versions are not pinned. Failure messages score 2: the README gives recognizable log lines ([wrangler] Ready on ..., sandbox prewarmed in ...), pgrep checks, /mcp reconnect and pkill recovery steps, and explains partial degradation rather than total failure; this is the strongest area in the repository.
Audience and scenarios score 2: it targets Claude Code users across browser automation, code mode and imitation-learning recording, with explicit verification scripts. Capability boundaries score 2: the tool table marks parity per tool (check/cross/blank) and documents divergences and stubs for file_upload, upload_image, gif_creator, shortcuts_* and switch_browser. Trigger precision scores 1: choosing between execute_code and direct tools is left to the model, and the README itself admits that if the model keeps using direct tools the description needs tuning, i.e. the trigger boundary is not converged. Environment fit scores 2: any Chromium browser, multi-browser ID registration, coexisting server variants, 127.0.0.1 binding and per-PID state directories are all described.
Information architecture scores 2: anchored TOC, architecture diagrams, seven install steps, verification, recovery, tool table and recording flow are well organized. Install notes score 2: from npm install through native messaging registration, browser restart, OpenAI key, microphone grant, claude mcp add and the development-channel launch, with common failure causes called out. Naming stability scores 1: server names and tool names are used consistently, but the tool-count conflict between the description and the README weakens naming/count stability. Examples and FAQ score 2: reddit verification, execute_code verification, recording verification, and the scratch/test-form four-challenge suite with a prompt template. Known limitations score 2: v1 trade-offs are listed explicitly (no chrome.downloads, IndexedDB accumulation, not rrweb, no sidecar self-healing, saturating benchmark, ambiguous grading, 10-20% run variance). License scores 1: the repo contains PolyForm Noncommercial 1.0.0 (noncommercial only) while metadata is NOASSERTION and the README comparison table claims 'Open source (MIT)' - three mutually inconsistent statements. Versioning/changelog scores 0: no CHANGELOG, no version number, no release history. Maintenance responsibility scores 1: attributed to noemica with a blog and Discord, but the publisher is unverified and there is no security disclosure channel, maintenance commitment or SLA.
Output usability scores 2: the tool set covers navigation, reading, forms, screenshots, network and console reads, with a paste-able recording reference and unambiguous completion criteria (green banner, per-challenge timing table). Marginal value scores 1: the core delta over the official extension is removing domain restrictions plus code-mode batching, yet the README itself reports cold-start parity with the official extension (2.04 vs 1.95 min/task, p=0.44/0.67), with gains coming mainly from prompt distillation and warmed sessions rather than anything unique to this repo. Cost-benefit scores 1: it requires Node, a Claude Code development-channel flag, an OpenAI key (billed transcription), a wrangler sidecar and extra dependency installs, while context cost is self-reported at +1.9s per turn per 100k tokens; the return is not clearly favorable against that operational burden.
Claim traceability scores 1: performance and parity claims point to benchmark/writeup/writeup.md and parity.png, but neither the writeup nor raw data is included in this static evidence, so the 17 arms, 12 tasks and p-values cannot be checked. Cross-source corroboration scores 1: README and LICENSE contradict each other on licensing (MIT claim vs PolyForm Noncommercial) and the tool count conflicts between description and body, weakening cross-file consistency. Fact/inference separation scores 1: the README largely separates 'validated' items (MCP channel, transcription and track merge, native-host file writes) from 'awaiting your live pass' items (in-browser capture, mic, stop pipeline), but strong assertions such as '100% feature & performance parity' and 'identical performance' lack verifiable support and sit in tension with the same page's 'statistically indistinguishable' framing.
- Not found in source: sensitive-data handlingUse dedicated, low-privilege, revocable API keys — never production credentials — and keep secrets out of logs.
- Not found in source: dependency securityPin versions and run a dependency audit (npm audit, pip-audit) before installing; prefer running it in a container.
- The agent deliberately removes the official extension's entire domain blocklist (banking, brokerage, payments, crypto wallets, gambling, adult, dating) and can click and type on high-risk sites with no mandatory confirmation gate; do not enable it in a browser profile holding real funds or sensitive accounts.
- file_upload accepts any absolute path on the machine rather than session-shared paths only, creating a risk of induced reads and uploads of arbitrary local files.
- The recorder captures screen frames, cursor trajectories and microphone audio, keeps copies in IndexedDB with cleanup not yet implemented, and sends audio to OpenAI for transcription; never narrate credentials or private data while recording.
- Licensing is self-contradictory: the README claims MIT, the repo contains PolyForm Noncommercial 1.0.0 (noncommercial only), and metadata is NOASSERTION; clarify the grant before any commercial use.
- Dependencies are unpinned and the execute_code sidecar falls back to fetching wrangler over the network via npx --yes when local node_modules is missing; the sidecar has no health check or auto-restart and requires manual /mcp reconnect or pkill after failure.
- Performance and parity claims rest on a benchmark writeup not included in this evidence, and the README itself reports 10-20% run-to-run variance and a saturating task set; do not treat single comparison numbers as stable conclusions.
- Publisher identity is unverified by the FollowAgents registry, with no security disclosure channel or maintenance commitment; audit the source yourself before deployment.