Marketplace for the dev-browser skill
npx claudepluginhub sawyerhood/dev-browserDevelopment tool providing browser-based environment for testing and debugging web applications and scripts.
Claude Code marketplace entries for the plugin-safe Antigravity Awesome Skills library and its compatible editorial bundles.
Production-ready workflow orchestration with 79 focused plugins, 184 specialized agents, and 150 skills - optimized for granular installation and minimal token usage
Agent skills for building and maintaining promptfoo evaluations
Share bugs, ideas, or general feedback.
Brought to you by Do Browser.
A browser automation tool that lets AI agents and developers control browsers with sandboxed JavaScript scripts.
Key features:
npm install -g dev-browser
dev-browser install # installs Playwright + Chromium
# Launch a headless browser and run a script
dev-browser --headless <<'EOF'
const page = await browser.getPage("main");
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log(await page.title());
EOF
# Connect to your running Chrome (enable at chrome://inspect/#remote-debugging)
dev-browser --connect <<'EOF'
const tabs = await browser.listPages();
console.log(JSON.stringify(tabs, null, 2));
EOF
@"
const page = await browser.getPage("main");
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log(await page.title());
"@ | dev-browser
With --connect:
@"
const page = await browser.getPage("main");
console.log(await page.title());
"@ | dev-browser --connect
PowerShell install:
npm install -g dev-browser
dev-browser install
To attach to a running Chrome instance on Windows:
chrome.exe --remote-debugging-port=9222
dev-browser --connect
Windows npm installs download the native dev-browser-windows-x64.exe release asset during postinstall, and the generated npm shims invoke that executable directly.
After installing, just tell your agent to run dev-browser --help — the help output includes a full LLM usage guide with examples and API reference. No plugin or skill installation needed.
By default, Claude Code asks for approval each time it runs a bash command. You can pre-approve dev-browser so it runs without permission checks by adding it to the allow list in your settings.
Per-project — add to .claude/settings.json in your project root:
{
"permissions": {
"allow": [
"Bash(dev-browser *)"
]
}
}
Per-user (global) — add to ~/.claude/settings.json:
{
"permissions": {
"allow": [
"Bash(dev-browser *)"
]
}
}
The pattern Bash(dev-browser *) matches any command starting with dev-browser followed by arguments (e.g. dev-browser --headless, dev-browser --connect). This is safe because dev-browser scripts run in a sandboxed QuickJS WASM environment with no host filesystem or network access.
You can also allow related commands in the same list:
{
"permissions": {
"allow": [
"Bash(dev-browser *)",
"Bash(npx dev-browser *)"
]
}
}
Tip: If you've already been prompted and clicked "Always allow", Claude Code adds the specific command pattern automatically. The settings file approach lets you pre-approve it before the first run.
/plugin marketplace add sawyerhood/dev-browser
/plugin install dev-browser@sawyerhood/dev-browser
Restart Claude Code after installation.
Copy the skill to your skills directory:
# For Amp: ~/.claude/skills | For Codex: ~/.codex/skills
SKILLS_DIR=~/.claude/skills # or ~/.codex/skills
mkdir -p $SKILLS_DIR
git clone https://github.com/sawyerhood/dev-browser /tmp/dev-browser-skill
cp -r /tmp/dev-browser-skill/skills/dev-browser $SKILLS_DIR/dev-browser
rm -rf /tmp/dev-browser-skill
Scripts run in a sandboxed QuickJS runtime (not Node.js). Available globals:
// Browser control
browser.getPage(nameOrId) // Get/create named page, or connect to tab by targetId
browser.newPage() // Create anonymous page (cleaned up after script)
browser.listPages() // List all tabs: [{id, url, title, name}]
browser.closePage(name) // Close a named page
// File I/O (restricted to ~/.dev-browser/tmp/)
await saveScreenshot(buf, name) // Save screenshot buffer, returns path
await writeFile(name, data) // Write file, returns path
await readFile(name) // Read file, returns content
// Output
console.log/warn/error/info // Routed to CLI stdout/stderr