Dev Browser is a command-line tool that gives coding agents control of Chrome through short JavaScript snippets. A background daemon keeps the browser and its pages alive between calls, so an agent can open a page once and then inspect it, act on it, and check the result across several separate commands.
Scripts run against real Puppeteer Page objects with a few added helpers. page.snapshot() returns an accessibility tree with stable element references such as e12, and those references work as selectors in Puppeteer methods in the form ref/e12. Other helpers cover screenshots, waiting for navigation and network activity to settle, and filling form fields. Top-level await works, and the last expression becomes the command result.
It can launch an isolated Chrome profile or attach to a browser that is already running, found by auto-discovery or addressed by port, HTTP URL, WebSocket URL, or raw CDP Unix socket. An attached browser belongs to the user: only the tabs a script asks for are extended, and idle cleanup never closes it. A launched browser closes after 30 minutes without a script by default, adjustable per command, by environment variable, or in a config file.
Agents reach it in three ways. The command line carries a built-in guide under dev-browser --help covering the API and a look, act, verify workflow. install-skill writes a bundled skill into the Claude Code, Codex, and shared agents skill directories. An MCP server started with dev-browser mcp exposes devbrowserrun, devbrowserpages, devbrowserbrowsers, devbrowserstop, and devbrowserhelp over the same warm daemon.
Published timings, measured on Linux with a headless browser and a warm daemon as medians of nine runs, report about 13 ms for an empty script, 14 ms to fetch a page title, 18 ms for a snapshot of a search-results-like page, 36 ms for a screenshot, and about 280 ms for a cold daemon plus Chrome launch. Version 1.0 replaced the earlier Playwright and QuickJS implementation with a Puppeteer and Bun one, and keeps its state in a separate directory.
Features
- Persistent named pages: named tabs carry state across scripts, so a later command resumes on the page an earlier one opened
- Accessibility snapshots: page.snapshot() returns a compact tree with stable refs that double as Puppeteer selectors
- Puppeteer API: scripts use real Puppeteer Page objects plus helpers for screenshots, load waiting, and form filling
- Launch or attach: start an isolated Chrome profile, or connect to an existing browser by auto-discovery, port, HTTP URL, WebSocket URL, or CDP socket
- Idle cleanup: launched browsers close after a configurable idle period, while attached browsers are left open
- Script isolation: each command runs in a fresh node:vm context whose pages, locators, and browser contexts are closed when it ends, which separates globals without acting as a security sandbox
- Skill install: install-skill writes the bundled skill into the Claude Code, Codex, and shared agents skill directories
- MCP server: run, pages, browsers, stop, and help tools served over the same daemon as the command line
- Restricted file I/O: saveFile and readFile are confined to a temporary directory under the tool’s own state folder
- Platform support: macOS and glibc Linux, with the release binary bundling Bun and Puppeteer so Node is not needed after install

