A TypeScript-based Claude skill that enables agent-controlled browser automation via a sandboxed Playwright API, with idle cleanup and configurable daemon behavior. Latest releases show incremental improvements and hardening.
Collecting history — the radar snapshots this repo daily. The trend line appears after 3 days of data (1 so far).
What it is
SawyerHood/dev-browser is a TypeScript-based Claude skill that enables an AI agent to control a web browser through a sandboxed QuickJS runtime, exposing the Playwright API for actions like goto, click, fill, and screenshot. It provides persistent pages, auto-connect to running Chrome or launch Chromium, and includes sandboxed execution with a persistent page model across scripts.
How it works
Scripts run in a QuickJS WASM sandbox with no host access. The tool exposes a browser object with methods such as getPage, newPage, listPages, and closePage, and each Page includes sub-toolsets page.cua (vision) and page.domCua (DOM-id) for pixel-accurate interactions and DOM element targeting. It supports full Playwright semantics via the Page object, including goto, click, fill, locator, evaluate, and screenshot. There is an idle browser cleanup mechanism tied to a configurable timeout, affecting daemon-launched Chromium instances.
Getting started
The README provides CLI installation and quick-start usage:
npm install -g dev-browser
dev-browser install # installs Playwright + Chromium
Then you can launch a headless session:
dev-browser --headless <<'EOF'
const page = await browser.getPage("main");
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log(await page.title());
EOF
Or connect to a running Chrome:
dev-browser --connect <<'EOF'
const tabs = await browser.listPages();
console.log(JSON.stringify(tabs, null, 2));
EOF
The README also documents PowerShell usage and Windows-specific notes.
Getting started (continued)
Usage details include embedded scripts API, with globals:
browser.getPage(nameOrId)
browser.newPage()
browser.listPages()
browser.closePage(name)
File I/O is restricted to ~/.dev-browser/tmp/. The Script API section describes page methods and available page toolsets, including page.cua.* and page.domCua.* for pixel- and DOM-based interactions.
Recent releases
Latest: v0.2.9 (2026-07-15) — changes include bound request lifetimes and faster browser actions, plus configurable idle cleanup for managed browsers. Previous: v0.2.8 (2026-06-05) introducing page.cua and page.domCua toolsets and daemon hardening (frame cap, browser-stop). Earlier: v0.2.7 (2026-04-09) recommending domcontentloaded for dev server navigation. Additional notes include v0.2.6 (2026-04-01) pin Playwright to 1.58.2 to prevent protocol drift, and v0.2.5 (2026-03-30) fixes for non-interactive environments and viewport emulation in headed mode.
Traction
Stars: 6505 Forks: 425 Open issues: 15
Behind the repo
Author: Sawyer Hood License: MIT Language: TypeScript Created: 2025-12-02 Last push: 2026-07-15 Topics: claude-code, playwright, skills
Caveats
License: MIT. Age of repository creation is 2025-12-02, with last push on 2026-07-15. Open issues: 15. CI/compatibility notes are described in changelog entries and README sections. The README includes details about idle timeout configuration and environment variable overrides for cleanup, plus Windows/PowerShell installation notes.






