Getting Started
Installation
Installing chrome-use is just three things: install the CLI with one command, add the Chrome extension and register the local bridge, and pull the agent skills into your project.
It ships as prebuilt binaries via GitHub Releases—no npm, no token—so neither the publisher nor you has to log into any account.
Once installed, run chrome-use doctor to self-check in one shot.
Install the CLI in one line
Download the prebuilt binary for your platform from the latest
GitHub Release
to install chrome-use (plus the short alias abs). This is the primary distribution channel—it doesn't go through npm and needs no token.
$ curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
chrome-use and abs are the same executable—abs is just a short alias.
There's no separate "stealth executable"; anti-detection is runtime behavior. Connecting to your real Chrome applies zero patches, and only --launch (opening a fresh browser) applies the full patch set. See
Connecting to your real Chrome.
Other install methods
When you need a pinned version, a custom install directory, or manual placement on Windows:
# pin a specific version
$ AGENT_BROWSER_VERSION=v1.5.70 curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
# install to a custom directory
$ AGENT_BROWSER_BIN_DIR=$HOME/bin curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
- Windows: download
chrome-use-win32-x64.tar.gzfrom the Releases page and putchrome-use.exeon your PATH. The extension path for connecting to your real Chrome works on Windows too—see the next section. - npm (legacy):
npm install -g chrome-useis still published, but GitHub Releases is the primary channel now.
Install with Nix
Run directly from the repository flake, or import its Home Manager or NixOS module for a declarative installation:
# run once without installing
$ nix run github:leeguooooo/chrome-use -- --help
# flake input
inputs.chrome-use.url = "github:leeguooooo/chrome-use";
# Home Manager: install and register the native-messaging host on activation
imports = [ inputs.chrome-use.homeManagerModules.default ];
programs.chrome-use.enable = true;
# NixOS: install system-wide and optionally force-install the extension
imports = [ inputs.chrome-use.nixosModules.default ];
programs.chrome-use = {
enable = true;
forceInstallExtension = true;
};
The NixOS module writes the managed Chrome and Chromium extension policies. Native-messaging registration is per user; run chrome-use extension connect once after switching, or use the Home Manager module above.
For the list of pinnable tags, see Lineage—how the tags evolved from the agent-browser fork (early v0.x-fork.N tags) to today's chrome-use v1.5.x tags.
which -a chrome-use shows more than one install, an older npm / pnpm copy may be shadowing the newer build installed by install.sh
(the npm registry lags behind GitHub Releases). Remove the old copy—npm rm -g chrome-use or pnpm rm -g chrome-use—so the new build takes effect.
Install the extension, connect your real Chrome
To drive the real Chrome you're already logged into (reusing existing sessions, no confirmation prompts), install the browser extension and register the local bridge once. This is the recommended path.
-
Install the chrome-use extension from the Chrome Web Store with a one-click Add to Chrome.
The store build stays stable across restarts, which suits unattended use. Confirm you got the right one by the listing name chrome-use and extension ID
knfcmbamhjmaonkfnjhldjedeobeafmk(its repo codename isab-connect). - Register the native-messaging host—one time:
# register the local bridge (one time)
$ chrome-use extension install
# after that, open drives your already-logged-in Chrome directly
$ chrome-use open https://x.com/home
From then on, chrome-use open drives your real, already-logged-in Chrome through native messaging—no debug port, no token,
and never an "Allow remote debugging?" prompt. The extension auto-updates and stays connected across restarts, so you never confirm again on later calls. For how the connection works, see
Connecting to your real Chrome.
chrome-use extension install works on Windows: it registers the native-messaging host in the HKCU registry,
then you add the extension once from the Web Store (Windows has no macOS-style silent force-install). After that, chrome-use open drives your logged-in Chrome the same way.
On macOS, extension install offers a "silent, every profile at once" route:
approve an ExtensionInstallForcelist configuration profile. It really is
install-once-and-forget, but it also makes Chrome
"managed by your organization":
- Chrome disables and locks the "Use secure DNS" (DoH) setting — sites that depend on a custom DoH resolver (e.g.
linux.do) stop resolving (#187). - The extension shows as "installed by your administrator": no manual update/remove button; Chrome auto-updates it from the Web Store instead (#186).
Skip it if you'd rather not — the Web Store route gets you the same extension, just one click per profile:
$ chrome-use extension install --no-profile # never writes the policy profile
$ chrome-use extension install --all-profiles # opens the Store page in each missing profile
Already approved it and want out (your custom DoH comes back immediately):
$ profiles remove -identifier com.leeguoo.chrome-use.connect
Note: removing the policy also uninstalls the extension it installed — re-add it per
profile from the Web Store. Same extension, still auto-updating, and yours to manage.
chrome-use extension status always reports which state you're in.
chrome-use --launch open <url> to spin up a brand-new, isolated blank-profile browser (with the full anti-detection patch set),
no extension required—CI takes this path automatically. When you need real cookies / login state, use --profile auto instead.
Pull the agent skills
install.sh above already did thiscurl … | sh one-liner installs the agent skill globally right after the binary (npx skills add leeguooooo/chrome-use -g).
Read on only to install it by hand or on a non–Claude Code runner. Opt out with AGENT_BROWSER_NO_SKILL=1.
Claude Code — plugin marketplace (recommended): installs the skill globally (all projects), auto-updates, and lists the rest of the
*-use family:
> /plugin marketplace add leeguooooo/plugins
> /plugin install chrome-use@leeguooooo-plugins
Other agent runners (Cursor, Codex, CodeBuddy, Trae, Windsurf, Cline, custom scripts): pull the
SKILL.md with skills.sh. Add
-g for a global install (visible to every project); drop it to install only into the current project:
$ npx skills add leeguooooo/chrome-use -g
Codex users: Codex ships its own browser plugin and picks it for browser tasks. Measured on a
machine with many skills installed, Codex also trims every skill description to a few characters or none,
so the skill's description cannot win the routing, and naming chrome-use in the prompt was not
enough either. What worked was one line in the project's AGENTS.md:
Use the `chrome-use` CLI from the shell for every browser task; start with `chrome-use skills get core`.
Do not use the built-in Chrome plugin for browser work here.
Either way the AI agent gets the right usage patterns and pre-authorized bash permissions for chrome-use and abs;
the specialized guides (electron / slack / agentcore / …) are served by the binary itself via chrome-use skills get <name>,
so they always match the installed version. Once installed, it's worth reading
The core loop first.
skills add only carry markdown; neither bundles the ~20MB binary. If chrome-use isn't present in the skill environment,
just rerun the install.sh one-liner above to fill in the binary (the skill also teaches the agent to self-heal).
Run your first command
The browser stays running across commands, so the ones below feel like a single session. When you're done, wrap up with chrome-use close (or close --all).
# take a screenshot of a page
$ chrome-use open https://example.com
$ chrome-use screenshot home.png
$ chrome-use close
For the full open → snapshot -i → fill → click walkthrough (search, click a result, screenshot again), read The core loop;
for every command and flag, see Commands.
Diagnose install problems
When a command fails unexpectedly (Unknown command, Failed to connect, a stuck daemon, a version mismatch after upgrade, Chrome not found, and so on),
run doctor before anything else.
# full diagnostic: environment, Chrome, daemon, config, providers, network, launch self-test
$ chrome-use doctor
$ chrome-use doctor --offline --quick # fast, purely local
$ chrome-use doctor --fix # run destructive fixes (reinstall Chrome, clear stale state…)
$ chrome-use doctor --json # structured output for programmatic use
Every doctor run automatically cleans up stale socket / pid / version sidecar files; destructive operations only run when you add --fix.
Exit codes: 0 when everything passes (warnings included), 1 on any failure.
chrome-use stealth status (add --json for structured results)—
it runs live webdriver / chrome / plugins / UA probes and lists the applied overrides, which is more reliable than driving an external detector.
chrome-use is too old (rerun install.sh to upgrade), or the extension / local bridge isn't up
(the prompt disappears for good once the store extension is installed). For more troubleshooting, see Troubleshooting.