Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

dev-browser — Claude Code skill: browser automation

Control a real Chrome with short Puppeteer scripts. Named pages persist across runs, so you can pick up where you left off.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add SawyerHood/dev-browser --skill dev-browser -a claude-code
Open on GitHub

What dev-browser does

dev-browser is a CLI for controlling Chrome via Puppeteer scripts. It runs as a single daemon that keeps the browser open and lets you use named pages. Each page persists between calls, so if you log into a site, the browser remembers that state next time.

Install via npm install -g dev-browser, then call scripts directly: navigate to a site, click elements, fill forms, take a screenshot, extract data. Scripts are JavaScript — you call methods like page.goto(), page.click(), page.snapshot(). The last expression in the script is returned as output.

Be aware that page.click() does not wait for a load — use waitForSelector() before clicking if needed. Page names are tied to each browser separately (headless and headed are different Chrome instances), and element refs (refs) reset on navigation, so you need to call snapshot() again.

What it helps with

  • fill out a form on a website and submit it
  • scrape data from a page and return the result
  • click through a sequence of buttons to test an interface
  • log in and preserve the session for future runs
  • take a screenshot or PDF of a page

Example prompts for the agent

  • Open example.com, take a screenshot, and show me the result
  • Log into my GitHub account and verify I'm logged in
  • Click the Download Report button and give me the file URL

How to install dev-browser

1Skills CLI (Vercel)

npx skills add SawyerHood/dev-browser --skill dev-browser -a claude-code

2Manually: put the files in place

~/.claude/skills/dev-browser/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/dev-browser/

Similar

google-maps-scraper gosom A skill to find businesses, contacts and reviews on Google Maps directly from your code editor. Runs a local scraper via Docker—no coding required for lead generation and business data collection. Claude Code CX Codex Cursor +1 2,900installs playwright-skill sickn33 Write and run Playwright browser tests directly in Claude Code: responsive design checks, login flows, form submissions, screenshots. Executes locally via Node with a visible browser window. Claude Code CX Codex Cursor +1 3,900installs k-schoollunch-menu NomaDamas Finds Korean school meal menus by education office and school name. Useful when an agent needs to look up a school’s meals from a natural-language request. Claude Code CX Codex Cursor +1 6,700installs playwright-triage microsoft This skill triages one microsoft/playwright issue in GitHub Actions, reproduces it, and prepares either a verified fix proposal or an investigation note. Claude Code CX Codex Cursor +1 414installs playwright-test-results microsoft Query Playwright CI results in DuckDB to find flaky, failing, and slow tests, with details for runs, SHAs, and pull requests. Claude Code CX Codex Cursor +1 396installs export-download-debugging nexu-io Diagnoses and resolves failed downloads, broken File System Access API calls, and 0 KB file exports in browsers and Electron shells. Claude Code CX Codex Cursor +1 1,800installs agent-browser vercel-labs A CLI skill for browser control: it opens pages, fills forms, clicks buttons, and tests web apps. Use it when an agent needs to act inside a website. Claude Code CX Codex Cursor +1 1,200,000installs webapp-testing official anthropics This skill tests local web apps with Playwright, helping agents debug UI behavior, capture screenshots, and inspect browser logs. Claude Code Claude.ai 186,758installs

Questions about dev-browser

How do I install dev-browser in Claude Code?

Run npx skills add SawyerHood/dev-browser --skill dev-browser -a claude-code. The skill installs to ~/.claude/skills/dev-browser/. After that, you can use dev-browser commands in Claude Code.

What does dev-browser do?

It automates a browser. You write short JavaScript scripts that control Chrome: open sites, click elements, fill forms, extract data. Browser state persists between calls.

Why do element refs reset?

Refs are tied to the current page state. When you navigate to a new URL via page.goto(), the page changes and all old refs become invalid. Call page.snapshot() again to get fresh refs.

Source text

SKILL.md · MIT
---
name: dev-browser
description: Browser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, log into sites, or automate browser workflows. Trigger phrases include "go to [url]", "click on", "fill out the form", "take a screenshot", "scrape", "automate", "test the website", "log into", "open the browser", or any browser interaction request.
---

# dev-browser

CLI for controlling a real Chrome with short Puppeteer scripts. One warm daemon; named pages persist between runs.

```bash
npm install -g dev-browser   # bun add -g dev-browser works too; the first run downloads the binary if the install script was blocked
dev-browser install          # only if the first run says "No Chrome found"
```

Run `dev-browser --help` (full guide; `dev-browser help <topic>` for one section) before non-trivial work. Quick start:

```bash
dev-browser <<'EOF'
const page = await browser.getPage("main");        // named page persists across runs
await page.goto("https://example.com");            // default waitUntil: domcontentloaded
await page.snapshot({ interactive: true })         // ARIA tree with refs; last expression is printed
EOF
dev-browser -e 'const p = await browser.getPage("main"); await p.click("ref/e6"); await p.waitForLoad(); p.url()'
```

Gotchas: end lines with semicolons (a line starting with `(` continues the previous one); return an object as
`({ a, b })`; `page.click` never waits (use `waitForSelector` first); page names are per browser (`--headless` and
headed are separate Chromes and profiles); refs reset on navigation — re-snapshot; file paths resolve against your cwd
(uploadFile, screenshot/pdf `path`); do not run parallel dev-browser calls against the same named page.

© SawyerHood · MIT · SawyerHood/dev-browser

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor