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.

View on GitHub

New here? Read the launch story: why agents keep getting locked out

A terminal: browser start --snapshot lists a bookshop's links by number, browser click --text Mystery opens that category and prints the new page in the same call, then screenshot and done.

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.

0/6

runs where an agent saw another agent's tab, with browser-cli

4–6/6

the same test with each of three other browser tools

ToolSaw another's tabTime
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.

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 done

The 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.

16/16

runs correct, for every tool

5.9

turns per task; browser-harness took fewer, 5.6

89k

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 browser acts 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 work

Or 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 work

Rush 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