Dev Browser

by sawyerhooda25e7672e199No license6.6K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 4 weeks ago

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.

Instructions onlySoftware Development
AI-generated overview

Controls a real Chrome browser through the dev-browser CLI using short Puppeteer scripts and persistent named pages.

What it does
The skill documents a command-line tool that drives a real Chrome instance with short Puppeteer scripts. It explains installation, a quick-start heredoc and one-liner usage, and how named pages persist across runs through a warm daemon. It also lists gotchas such as semicolon line endings, non-waiting clicks, per-browser page names, and refs resetting on navigation.
When to use it
Use it when a user asks to navigate websites, fill forms, take screenshots, extract web data, test web apps, log into sites, or otherwise automate browser interaction.
Requirements
Node.js with npm or bun to install the dev-browser CLI globally; the CLI downloads a binary on first run and may need dev-browser install to fetch Chrome. Network access is needed for browsing. No scripts ship with the skill; it is instructions only.

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 blockeddev-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 runsawait page.goto("https://example.com");            // default waitUntil: domcontentloadedawait page.snapshot({ interactive: true })         // ARIA tree with refs; last expression is printedEOFdev-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.

Source and attribution

Source:sawyerhood/dev-browserinskills/dev-browserat commita25e767

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal