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.
| Tool | Form factor | Install | Whose logins | Interface | Stealth | Open 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 |
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 situation | Pick |
|---|---|
| Use your real logged-in accounts, install no new browser, beat anti-bot | chrome-use |
| Willing to switch to an agent-native browser, want the cleanest isolation | ego-lite |
| Also want real-login Chrome, but need to drive it from another machine | browser-relay (cross-machine) |
| Write classic automation scripts, cross-language, run in CI | Playwright / Puppeteer |
| Stateless large-scale cloud scraping | Browserbase / Steel |
| Just an end user who wants the browser to help | ChatGPT 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)
| Page | chrome-use snapshot -i | ego snapshotText | Leaner |
|---|---|---|---|
| example.com | 102 bytes | 438 bytes | ~4.3× |
| Hacker News | 12.6 KB | 46.7 KB | ~3.7× |
| GitHub repo page (both logged in) | 26.6 KB | 112 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.
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)
| Scenario | chrome-use | ego |
|---|---|---|
| Navigate / single snapshot | ≈ equal | ≈ equal (bound by page load + CDP) |
| 6 micro-ops · one CLI process each | 1.00s (0.17s/op spawn cost) | — |
6 micro-ops · chrome-use batch | 0.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 evidence | Verdict |
|---|---|---|
| "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):
- Ownership + handoff — implemented
session handoff/resume/status/list: once handed off, every browser-driving command on that session is refused. It's an escape hatch for the rare step the agent truly can't do (e.g. an unsolvable captcha) — it does not change autonomous login; by default the agent logs in and drives itself, zero-impact. - Rich-editor write-probe discipline — ported (see the end of Canvas / WebGL).
- Login inheritance / isolated contexts / reuse-by-name / token economy — already covered (relay carries logins, per-session tab groups,
session list,--session-name, leaner tokens). - Locating — covered · parity:
@ref(backendNodeId-stable across calls) + CSS + XPath + coordinates + semanticfind role button --name+boxgeometry +-sscoping, matching ego'sloc=/@N. - Groups — covered · parity: each
--sessionmaps to a colored Chrome tab group, group-scoped isolation (#40), agents never cross tabs, a session owns only the tabs it created — equivalent to ego's Task Space, except it happens in your real Chrome instead of a separate browser.
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:
| Dimension | browser-relay | chrome-use |
|---|---|---|
| cross-machine remote | Remote Relay: the browser connects out to a public/self-hosted (Cloudflare) relay, Device-ID auth, drive it from another machine | local only (127.0.0.1 relay + WebSocket stream) |
| install | npm global + load-unpacked extension (Developer mode) (not the store, no auto-update) | one curl … | sh + a one-click Web Store "Add to Chrome" |
| debug banner | shows; 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-detection | not a focus | core capability: CreepJS 0% bot, --humanize for behavioral checks, --launch native overrides |
| multi-agent | targets tabs by --tab id, no session isolation model | a colored tab group per --session, agents never cross tabs |
| complex multi-step | per-verb + eval + stdin | single-pass scripting: value bus + loops + asserts, one round-trip |
| locating | CSS selectors + snapshot annotations | AX-tree @ref (backendNodeId-stable) + semantic find role/name + --heal |
| runtime | Node (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.
The comparison workflow
This page is a living document. For every tool we evaluate, the same loop keeps the comparison honest and reproducible:
- Trial — the same real task on both; record commands, result, time, tokens.
- Compare — "already have it," "at parity," or "real gap"; if parity, say so — don't force-port.
- Port — for a real gap, implement it the chrome-use-native way (keep the zero-install moat), update issue #89 and this page.