5 min read

agent-browser: Browser Automation CLI for AI Agents (GitHub, Scanned)

A fast Rust CLI that lets AI agents open pages, read them, and click, type and screenshot in Chrome.

agent-browser logo
✅
Scan: safe. Nothing malicious. The note is about what it can do: it can reuse your Chrome profile and logins, so an agent using it acts as you on every site you are signed in to. Scanned Oct 26, 2026; the full report is below.

agent-browser is a command-line browser built for AI agents, from Vercel Labs. Each action is a short shell command: open a page, take a snapshot of its accessibility tree with a reference for each element, then click @e2 or fill @e3 by reference. That makes it easy for a coding agent such as Claude Code or Codex to drive a real Chrome without writing Playwright scripts, and the text snapshot is far smaller for a model to read than a screenshot.

Around that core it adds what agent work needs: sessions and saved login state, an encrypted credential vault the model never sees, a domain allowlist, network interception, HAR capture, recording, a local dashboard showing the live viewport, plugins, and support for cloud browser providers. It is a native Rust binary and installs through npm, Homebrew or Cargo.

It is Apache-2.0, created in January 2026 and already at about 44,600 stars, at v0.39.4. It changes quickly, so expect new commands and flags between versions.

Who it is for

Developers giving coding agents a way to test web apps, check deployments or fill in forms, and anyone who wants scriptable browser control from the shell.

Getting started

1. Install the CLI (brew install agent-browser and cargo install agent-browser also work)

npm install -g agent-browser

2. Download Chrome for Testing for it to drive (first time only)

agent-browser install

3. Open a page and list its elements with references

agent-browser open example.com && agent-browser snapshot

The npm package's postinstall step downloads the matching native binary from the project's GitHub releases. On Linux, agent-browser install --with-deps also installs the browser's system libraries.

Safety scan

We cloned vercel-labs/agent-browser at commit 04ba526 on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no committed binaries, no install scripts and no bare-IP URLs across about 200,000 lines, most of them Rust. The one pattern hit is a benchmark that installs Rust with rustup.
  • scripts/postinstall.js, the npm install hook, downloads the binary for your platform from the project's own GitHub release for the installed version and, on global installs, points npm's shim at it. It contacts nothing else.
  • It can reuse an existing Chrome profile (--profile), attach to a Chrome you are already signed in to (--auto-connect) and save that state to a file. Useful, but anything an agent then does happens under your accounts; the domain allowlist (--allowed-domains) limits where it can go.
  • 440 advisories, 19 critical, but what you install is the Rust binary: cli/Cargo.lock has 20, one critical (extraction permissions in the zip crate 8.2.0). The rest are in the pnpm workspace, which includes the Next.js docs site, and in example projects.
  • 2 workflows, none using pull_request_target; none of the 19 third-party actions is pinned. No security policy, contributing guide, Dependabot or CodeQL.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious code1 pattern hit found and read; every one is listed under the raw findings.
Install-time code4 npm lifecycle scripts. 1 Cargo build script
Committed binariesNone.
CI workflows2 workflows. None use pull_request_target. 19 of 19 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often mine.example, active.test, dashboard.example.com, github.com. No URLs to bare IP addresses.
Known vulnerabilities440 advisories across 2,028 pinned packages: 19 critical, 128 high, 225 moderate, 58 low, 10 unrated. benchmarks/pnpm-lock.yaml: 50 packages, 26 advisories; cli/Cargo.lock: 344 packages, 20 advisories; examples/environments/pnpm-lock.yaml: 461 packages, 164 advisories; examples/eve/pnpm-lock.yaml: 545 packages, 74 advisories; pnpm-lock.yaml: 1,449 packages, 224 advisories.
Project hygieneHas licence file. Missing security policy, automated dependency updates, CodeQL, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Pattern hits (1)
WhereRuleMatch
benchmarks/bench.ts:673download-piped-to-shell (test/example)"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y 2>&1",
npm lifecycle scripts (4)
  • docs/package.json postinstall: fumadocs-mdx
  • package.json postinstall: node scripts/postinstall.js
  • packages/@agent-browser/eve/package.json prepare: pnpm -C ../sandbox run build && pnpm run build
  • packages/@agent-browser/sandbox/package.json prepack: pnpm run build
Worst known vulnerabilities (24 of 440)
AdvisorySeverityPackageSummary
GHSA-4684-h2q9-2vcpcriticalzip@8.2.0ZipStreamReader::extract() and ZipArchive::extract() apply Unix permissions through symlinks without confining the targe…
GHSA-2464-fhr4-w9xwcriticalnext@16.1.6Next.js: Unauthenticated Remote Code Execution in Image Optimization API when SVG files are used
GHSA-2xp9-vwfh-vxw4criticalnext@16.1.6Next.js: Unauthenticated Remote Code Execution in Image Optimization API when AVIF files are used
GHSA-673q-mjm6-r5xrcriticalnext@16.1.6Next.js: Unauthenticated Remote Code Execution in `use cache` functions returning typed arrays
GHSA-p293-qw3h-jr36criticalnext@16.1.6Next.js: Unauthenticated Remote Code Execution on windows-hosted servers
GHSA-jqcg-44mw-7w3hcriticalproxy-addr@2.0.7proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet
GHSA-cg2g-xh64-v4q7criticaldompurify@3.4.11DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output mo…
GHSA-2464-fhr4-w9xwcriticalnext@16.2.6Next.js: Unauthenticated Remote Code Execution in Image Optimization API when SVG files are used
GHSA-2xp9-vwfh-vxw4criticalnext@16.2.6Next.js: Unauthenticated Remote Code Execution in Image Optimization API when AVIF files are used
GHSA-673q-mjm6-r5xrcriticalnext@16.2.6Next.js: Unauthenticated Remote Code Execution in `use cache` functions returning typed arrays
GHSA-p293-qw3h-jr36criticalnext@16.2.6Next.js: Unauthenticated Remote Code Execution on windows-hosted servers
GHSA-vcvr-r3jv-pc5jcriticalnext@16.2.6Next.js: Remote Code Execution in next/og ImageResponse
GHSA-2464-fhr4-w9xwcriticalnext@16.1.1Next.js: Unauthenticated Remote Code Execution in Image Optimization API when SVG files are used
GHSA-2xp9-vwfh-vxw4criticalnext@16.1.1Next.js: Unauthenticated Remote Code Execution in Image Optimization API when AVIF files are used
GHSA-673q-mjm6-r5xrcriticalnext@16.1.1Next.js: Unauthenticated Remote Code Execution in `use cache` functions returning typed arrays
GHSA-p293-qw3h-jr36criticalnext@16.1.1Next.js: Unauthenticated Remote Code Execution on windows-hosted servers
GHSA-2464-fhr4-w9xwcriticalnext@16.3.4Next.js: Unauthenticated Remote Code Execution in Image Optimization API when SVG files are used
GHSA-673q-mjm6-r5xrcriticalnext@16.3.4Next.js: Unauthenticated Remote Code Execution in `use cache` functions returning typed arrays
GHSA-vcvr-r3jv-pc5jcriticalnext@16.3.4Next.js: Remote Code Execution in next/og ImageResponse
GHSA-4cwx-7wf7-3272highundici@7.24.1undici vulnerable to cross-user information disclosure and parse-time crash via degenerate private cache directives
GHSA-hm92-r4w5-c3mjhighundici@7.24.1undici vulnerable to cross-origin request routing via SOCKS5 proxy pool reuse
GHSA-rfgv-xxqx-mfg5highundici@7.24.1undici vulnerable to Denial of Service via unrequested WebSocket subprotocol
GHSA-vmh5-mc38-953ghighundici@7.24.1undici vulnerable to TLS certificate validation bypass via dropped requestTls in SOCKS5 ProxyAgent
GHSA-vxpw-j846-p89qhighundici@7.24.1undici WebSocket client vulnerable to denial of service via fragment count bypass

By the numbers

Stars44.6K
Forks3,060
Contributors117
Commits729
Open issues327
Open pull requests364
Releases116
Latest releasev0.39.4
LicenceApache-2.0
Main languageRust
Project age9 months
Last pushOct 26, 2026
Tracked files483
Lines of code200.3K
Checkout size11 MB

Lines by language: Rust 111.6K, JSON 44.3K, TypeScript 20.6K, Markdown 16.8K, JavaScript 4,155, YAML 1,012.

Questions

Is agent-browser free?

Yes. agent-browser is free and open source under Apache-2.0. It drives a local Chrome by default; the optional cloud browser providers it supports are separate services with their own pricing.

Does agent-browser work with Claude Code or Codex?

Yes. Any agent that can run shell commands can use it, which covers Claude Code, Codex, Cursor and others. The project also publishes a skill that teaches an agent its commands.

How is agent-browser different from Playwright?

Playwright is a library you write scripts with. agent-browser is a CLI where every step is one command and elements are addressed by short references from a snapshot, which suits a model deciding the next step as it goes. It talks to Chrome from a native Rust binary rather than a Node.js library.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.