browser-cli · open source
Many agents.
One browser.
Claude Code, Codex and any agent with a shell work in the browser you already signed into, and none of them sees another's tabs.
New here? Read the launch story: why agents keep getting locked out

Several agents, one browser
No crossed tabs.
Each browser start opens a task that owns its tabs. Page commands act only on that task's tabs, and done closes only the tabs it opened.
runs where an agent saw another agent's tab, with browser-cli
the same test with each of three other browser tools
- browser-cli 0.2.8
- 0 of 625 s
- Browser Use 0.13.14
- 4 of 636 s
- browser-harness 0.1.13
- 5 of 641 s
- agent-browser 0.41.2
- 6 of 6112 s
Three Claude Code agents at once in one browser: a shop, a pizza-order form and a checkout. Two trials per tool, six agent runs, 2026-11-11. Time is the average wall time for all three agents to finish. Every tool solved 6 of 6 tasks.
Six browsers, any machine
Here. Or over SSH.
It drives the profile you already use, cookies and logins included, so sites see you, not a fresh headless browser. start --device binds a task to a browser on another machine; later commands follow it there over one kept-alive SSH connection.
- Chrome
- Arc
- Brave
- Edge
- Comet
- Firefox
Another machine works for Chromium-family browsers. Firefox and Arc run on the local machine, Arc on macOS only.
One command per step
It waits for the page.
Every action returns once the page has settled, and --snapshot prints the page it left. An agent chains known steps in one shell call.
browser start --url https://books.toscrape.com --snapshot
browser click --text "Mystery" --snapshot
browser screenshot -o mystery.png
browser doneThe numbers
Fastest. Cheapest.
Claude Sonnet 5.5 in Claude Code ran the same 8 web tasks with each tool, two runs per task, using each tool's own shipped skill (2026-11-07). Lower is better.
runs correct, for every tool
turns per task; browser-harness took fewer, 5.6
tokens per task; browser-harness used fewer, 82k
browser-cli 0.2.3 against Browser Use 0.13.14, browser-harness 0.1.13 and agent-browser 0.41.2. Small samples: read single rows as a direction. Method and every run.
Private by design
Nothing leaves your machine.
No cloud browser and no account. browser-cli talks to your browser and to the machines you name in your own SSH config.
No telemetry
It reports nothing to us or to any other service. One exception: the first recording on a machine without ffmpeg downloads it.
Work and personal apart
Each profile is its own browser profile. Point an agent at your work profile and it never sees the personal one.
Passwords stay bound
A secret named after a site, like --secret stripe.com/PASSWORD, types only into that site. Anywhere else it is refused.
What it can't do yet
- An agent with
browseracts as you. Give it a profile of its own when it shouldn't see your personal accounts. There is no URL allowlist yet. - It doesn't change a site's rules. Some sites don't allow automation; use it where you're allowed to.
- Driving a browser on another machine works for Chromium-family browsers only. Arc runs on macOS only.
- No Safari, and no hosted cloud browser built in.
Tech specs
- Platforms
- macOS (arm64, x64), Linux (arm64, x64), Windows (x64)
- Browsers
- Chrome, Arc, Brave, Edge, Comet, Firefox, Chromium. No Safari.
- Another machine
- Over SSH for Chromium-family browsers. Firefox and Arc run on the local machine, Arc on macOS only.
- Install
npm install -g @phnx-labs/browser-cli- Requires
- Node 22.5 or later to install
- Agent skill
- Shipped with the package, for Claude Code, Codex, Cursor, OpenCode and any agent with a shell
- Telemetry
- None
- License
- Apache-2.0
Hand it to your agent.
Paste this into Claude Code, Codex, Cursor or any agent with a shell. It installs browser-cli, its skill and a profile, then tries it.
Set up browser-cli so you can use my web browser: https://github.com/phnx-labs/browser-cli 1. Install the CLI: npm install -g @phnx-labs/browser-cli (needs Node 22.5 or newer), then check it with: browser --version 2. Install its skill once, the way that fits you: - Claude Code: claude plugin marketplace add phnx-labs/browser-cli, then claude plugin install browser@browser-cli - Codex, Cursor, OpenCode or another agent: npx skills add phnx-labs/browser-cli -g -y -a <your agent's name, such as codex or cursor> Then read the skill now, before you use the browser: browser skills get 3. Set up the browser profile I asked for (this one setup step is the exception to the skill's rule against creating profiles): browser profiles create work --browser chrome, or brave or edge if I use one of those, then: browser use work. That profile starts signed out, so tell me I can sign in once, in the window it opens, to the sites I want you to use. If I use Arc, create it with --browser arc; for Comet add --attach-only. Both attach to the browser I already have open and signed in. 4. Try it: browser start --url https://news.ycombinator.com --snapshot, then browser done. Tell me the title of the top story. Run browser <command> --help before guessing at a flag.
Or yourself, in Claude Code
npm install -g @phnx-labs/browser-cli
claude plugin marketplace add phnx-labs/browser-cli
claude plugin install browser@browser-cli
browser profiles create work --browser chrome
browser use workOr yourself, for any agent
npm install -g @phnx-labs/browser-cli
npx skills add phnx-labs/browser-cli
browser profiles create work --browser chrome
browser use workRush is where agents run; browser-cli is one of the tools they use to drive a browser.
Apache-2.0 · github.com/phnx-labs/browser-cli · Why we open-sourced it