Comparison

How chrome-use compares

There are many browser-automation and AI-browser tools. This page puts them side by side and compares them honestly — from classic frameworks to agent browsers to cloud and consumer products. Where a number can be measured, we measure it. The comparison is living; verdicts update each round.

In one line

chrome-use drives your existing, real Chrome — your profile, your extensions, your logins, no new browser to install. It's a native CLI for AI agents: accessibility-tree snapshots + compact @refs, usable by any agent that can run a shell, with stealth / anti-detection built in. Most tools either spin up a separate browser or ask you to switch browsers; chrome-use uses the one you already have.

The landscape at a glance

Columns are the dimensions that matter most for an AI agent; rows are representative tools. Green = stronger on that axis.

ToolForm factorInstallWhose loginsInterfaceStealthOpen source
chrome-use Extension + CLI driving your existing Chrome Zero (uses the Chrome you have) Your real Chrome's logins Shell verbs (any agent) Core capability Yes
ego-lite Purpose-built Chromium browser Install a new browser Spaces inherit login in-page JS runtime Not a focus MIT
browser-relay Extension + local relay driving your existing Chrome npm global + load-unpacked extension (dev mode) Your real Chrome's logins CLI / MCP / HTTP Not a focus MIT
browser-use Python framework (CDP under the hood, cdp-use) Framework + a driven browser Fresh by default, re-login Python API Not a focus MIT
Playwright / MCP Automation framework (+ agent MCP) Framework + a driven browser Fresh context, no login JS/Py/.NET/Java (MCP) Easily detected Apache-2.0
Puppeteer / Selenium Classic automation frameworks Framework + a driven browser Fresh profile, no login JS / many languages Easily detected Apache-2.0
Browserbase / Stagehand Cloud headless browsers (+ AI actions) Cloud service (paid) Cloud sessions; bring your own login SDK / API Anti-detection (paid) SaaS / partly OSS
Consumer agent browsers
(ChatGPT Atlas · Comet)
Vendor's own browser / built-in agent Switch browsers Your logins in that browser Natural language (no API) Not a focus Closed
ℹ️ How to read this
Green means "stronger on this axis," not an overall "win." No tool is best at everything — the choice comes down to whether you value zero-install / real logins / stealth or pure cloud / cross-language / built-in chat.

Pick by category

🌐 Drive your real browser

chrome-use · ego-lite · browser-relay

Use your already-logged-in sessions, no re-login. chrome-use and browser-relay both use your existing Chrome (extension + relay); ego-lite has you switch to its browser (structural isolation). A point-by-point chrome-use vs browser-relay comparison is below.

🧰 Automation frameworks

Playwright · Puppeteer · Selenium · browser-use · Stagehand

Spin up a separate driven browser. Mature, cross-language — but logins don't carry, they're easily flagged by anti-bot, and you assemble the LLM loop yourself.

☁️ Cloud browsers

Browserbase · Steel · Hyperbrowser

The browser runs in the cloud — great for stateless, large-scale scraping. You pay per usage, inject logins yourself, and your real local sessions don't apply.

💬 Consumer agent browsers

ChatGPT Atlas · Perplexity Comet · Gemini-in-Chrome

The vendor builds the agent into a browser — aimed at end users, chat-driven, with no programmable developer API and no stealth.

Which to pick

Your situationPick
Use your real logged-in accounts, install no new browser, beat anti-botchrome-use
Willing to switch to an agent-native browser, want the cleanest isolationego-lite
Also want real-login Chrome, but need to drive it from another machinebrowser-relay (cross-machine)
Write classic automation scripts, cross-language, run in CIPlaywright / Puppeteer
Stateless large-scale cloud scrapingBrowserbase / Steel
Just an end user who wants the browser to helpChatGPT Atlas / Comet

The closest rival: chrome-use vs ego-lite (measured)

ego-lite is positioned closest to us (both "use real logins, don't fight for the user's tabs"), and its README names agent-browser directly. So we ran the same task on both and measured performance and tokens. Fact-checking its "faster, fewer tokens" — one is half-true, the other is exactly backwards.

Tokens (the observation fed to the model — what actually costs money)

Pagechrome-use snapshot -iego snapshotTextLeaner
example.com102 bytes438 bytes~4.3×
Hacker News12.6 KB46.7 KB~3.7×
GitHub repo page
(both logged in)
26.6 KB112 KB~4.2×

Both tools measured back-to-back in the same login state, each on its own defaults (re-run 2026-07): example.com / HN logged out, GitHub logged into the same account on both. Earlier figures (456 / 33.6K, etc.) were stale or captured in a mismatched login state; replaced with independently reproduced values.

⚠️ "fewer tokens" is backwards
chrome-use's default snapshot -i lists interactive elements only — ~3.7–4.3× leaner than ego's default full tree (independently reproduced, same login state). Tokens are what an agent actually pays for, so we save more.

Performance (wall-clock)

Scenariochrome-useego
Navigate / single snapshot≈ equal≈ equal (bound by page load + CDP)
6 micro-ops · one CLI process each1.00s (0.17s/op spawn cost)
6 micro-ops · chrome-use batch0.19s
6 micro-ops · ego persistent runtime≈0.00s

Raw browser operations are equally fast. ego's edge is its persistent runtime — no per-command process spawn; chrome-use defaults to one-process-per-command (~0.15–0.17s each). So a task with many tiny ops is where ego pulls ahead ("3×" most likely comes from that shape). But a typical task (open + snapshot + extract) measured ~3s on both, and chrome-use's batch (one process reusing the persistent daemon) does 6 ops in 0.19s ≈ ego, plus a WebSocket stream for real-time driving.

Their site's claims vs our evidence

Verbatim from lite.ego.app, each claim fact-checked with evidence. Method is in the workflow below — reproducible.

ego's claim (verbatim)Our evidenceVerdict
"3.45x faster" · "Fastest browser for AI agents" HN extract task ~3s on both; 6 micro-ops: chrome-use 1.00s per-process, batch 0.19s, ego persistent runtime ≈0s. Half-true — only for micro-op-heavy tasks (their persistent runtime skips process spawn); typical tasks equal, batch/stream closes it.
"Same automation, fewer tokens" Default snapshot size, same pages (independently reproduced, same login state): chrome-use snapshot -i 102 B / 12.6K / 26.6K vs ego snapshotText 438 B / 46.7K / 112K. Backwards — in the default workflow we're ~3.7–4.3× leaner.
"not a JS shim on stock Chrome … reach into cross-origin iframes, shadow DOM, third-party SDK widgets like Stripe, Salesforce, Intercom, React portals … JS shims usually give up … burning tokens for nothing" chrome-use uses CDP (not a JS shim). reCAPTCHA demo, measured: frames lists all 5 cross-origin frames; eval --frame 1 read the checkbox role=checkbox "I'm not a robot". The default snapshot -i previously didn't merge it — now fixed (#92 merges presentation-role / AX-stripped cross-origin iframes). Now closed — we're not a JS shim and do reach OOPIF/SDK widgets, and the default snapshot now merges them too (#92 fixed). ego's dig is about generic JS shims — it doesn't apply to us.
"your AI agents will never get stuck on captchas, 2FA, and SSO redirects" (because you're logged into it) chrome-use also drives your real, logged-in Chrome → SSO/2FA already done. Captchas need a human on both — we have session handoff for that. Parity — same logged-in advantage (we're zero-install on your existing Chrome).
"Zero cost, zero config (yes, free)" chrome-use is also free & open source: one curl … | sh + a one-time extension install. Parity — both free; they have you download a new browser, we use yours.
Handoff / take-over UI (the user can reclaim a Space from the agent anytime) chrome-use ships session handoff / resume / status / list. (Note: ego has this feature, but we couldn't verify the literal "Take over/Stop" labels, so we don't quote them.) Parity — matched.
"installs as a skill in every agent (Claude Code / Codex / Cursor / Kiro / Hermes / OpenClaw)" chrome-use is a native CLI/skill usable by any agent that runs a shell (Claude Code / Cursor / Codex / Continue / Windsurf…). Parity.

Where we're ahead: single-pass scripting (chrome-use script)

ego's core pitch is “code base, not CLI base”: write one JS program that runs the whole task in one pass. This one is shipped and ahead: chrome-use script runs a real JS program (ego's exact idiom) driving the page via cu.snapshot/eval/click/fill/find/waitFor/extract, with control flow, returning structured results in one round-trip; a JSON op-list form is also available (dry-runnable, machine-generatable).

The decisive edge is where the engine lives: in the daemon, not the page, so it survives hard navigations — the multi-page flows that are exactly where ego wins and a page-world runtime breaks. Measured: crawl 3 HN pages collecting every ≥100-point story = one tool call (the old per-verb way needs 13+), on your already-logged-in real Chrome over the stealth transport, cross-platform (ego is macOS-only). Full usage and both forms on Single-pass Scripting.

What we learned from ego-lite & ported

After trialing each item, we ported the real gaps the chrome-use way (progress in issue #89):

Another close cousin: browser-relay

browser-relay (@linsoai/browser-relay, MIT) is architecturally almost the same idea as us: an extension + local relay driving your real, logged-in Chrome over chrome.debugger / CDP, bound to 127.0.0.1, exposed via CLI + MCP + HTTP, with snapshots annotating interactive elements — no new browser, no throwaway profile. The core idea is at parity. The differences:

Dimensionbrowser-relaychrome-use
cross-machine remoteRemote Relay: the browser connects out to a public/self-hosted (Cloudflare) relay, Device-ID auth, drive it from another machinelocal only (127.0.0.1 relay + WebSocket stream)
installnpm global + load-unpacked extension (Developer mode) (not the store, no auto-update)one curl … | sh + a one-click Web Store "Add to Chrome"
debug bannershows; mitigated by 10-min idle soft-detach, or launch with --silent-debugger-extension-api (weakens the safeguard for all debugger extensions)attaches only agent-owned tabs, so your tabs never show the banner, no security tradeoff
stealth / anti-detectionnot a focuscore capability: CreepJS 0% bot, --humanize for behavioral checks, --launch native overrides
multi-agenttargets tabs by --tab id, no session isolation modela colored tab group per --session, agents never cross tabs
complex multi-stepper-verb + eval + stdinsingle-pass scripting: value bus + loops + asserts, one round-trip
locatingCSS selectors + snapshot annotationsAX-tree @ref (backendNodeId-stable) + semantic find role/name + --heal
runtimeNode (npm package + launchd/systemd service)a single Rust binary, no Node, macOS/Linux/Windows

Why there's no measured perf / token table here (unlike the ego section above): the two are the same mechanism — extension → relay → CDP driving the same real Chrome, so raw browser operations are necessarily equally fast (both bound by page load + CDP). Performance isn't a differentiator; the only real deltas are CLI startup (our Rust binary vs its Node process) and our batch / script. On tokens, our default snapshot -i is an interactive AX tree (interactive elements only) while theirs is annotated full-page text, so by the ego experience we're likely leaner — but getting exact byte counts would mean installing its chrome.debugger extension into your real Chrome, and a tab can have only one debugger client, so it conflicts head-on with chrome-use. This page's rule is measure or don't claim a number, so this comparison stays qualitative.

ℹ️ Honest verdict
browser-relay is genuinely ahead on cross-machine remote control (we're local-only today). On the rest — one-click store install, no debug banner, stealth/humanize, multi-agent isolation, single-pass scripting, AX-tree locating, a Node-free single binary — chrome-use is stronger. Different lineage too: browser-relay descends from openclaw-browser-relay, chrome-use from vercel-labs/agent-browser.

The comparison workflow

This page is a living document. For every tool we evaluate, the same loop keeps the comparison honest and reproducible:

  1. Trial — the same real task on both; record commands, result, time, tokens.
  2. Compare — "already have it," "at parity," or "real gap"; if parity, say so — don't force-port.
  3. Port — for a real gap, implement it the chrome-use-native way (keep the zero-install moat), update issue #89 and this page.
✅ The principle
Only port advantages we can deliver inside your real Chrome. Any path that requires installing a new browser is a non-port — that's exactly our moat.