dev-browser
Original:🇺🇸 English
Not Translated
Browser automation with persistent page state. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, 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", or any browser interaction request.
3installs
Sourcejtsang4/dev-browser
Added on
NPX Install
npx skill4agent add jtsang4/dev-browser dev-browserSKILL.md Content
Dev Browser Skill
Use CLI to run multi-step browser automation with persistent page state.
dev-browserDefaults
- Prefer multi-step execution: Use one block for multiple actions whenever possible.
run --code - Reuse page names: Keep the same name across turns to preserve state.
--page - Control via daemon commands: Explicitly use .
ensure/status/stop/clean - CLI must be available: Ensure command is installed and on
dev-browser(from the separated CLI package).PATH
Setup
If command is missing, install CLI globally:
dev-browserbash
pnpm add -g @jtsang/dev-browser-cli
# or: npm install -g @jtsang/dev-browser-cliEnsure daemon is running before actions:
bash
dev-browser daemon ensure --mode launch --json
# optional: choose launch engine (default: patchright)
dev-browser daemon ensure --mode launch --engine playwright --jsonUse extension mode when user wants their existing Chrome session:
bash
dev-browser daemon ensure --mode extension --jsonUseful lifecycle commands:
bash
dev-browser daemon status --json
dev-browser daemon stop --mode launch
dev-browser daemon clean --stale-only
dev-browser doctorRun Multi-Step Scripts
Use as the primary execution command.
run --codebash
dev-browser run --mode launch --page checkout --json --code '
await page.goto("https://example.com");
await helpers.waitForPageLoad(page);
await page.fill("input[name=email]", "test@example.com");
await page.click("button[type=submit]");
return { url: page.url(), title: await page.title() };
'Execution Context
--code- - persistent Playwright
pageforPagename--page - - dev-browser client instance
client - - utility helpers (
helpers)waitForPageLoad - - structured step logs collected in output
log(entry)
Output Contract
Success () includes:
ok: truemodepageName- (your returned value)
data logstimingMs
Failure () includes:
ok: false- (
error.codeorRUN_TIMEOUT)RUN_EXEC_ERROR error.messageerror.retryable
Workflow Pattern
For complex tasks:
daemon ensure- Run one multi-step
run --code - Evaluate JSON result
- If needed, run another with same
run --code--page - On completion, (or rely on idle TTL)
daemon stop
Page State Inspection
Use for debugging snapshots/screenshots:
run --codebash
dev-browser run --page debug --json --code '
await page.screenshot({ path: "debug.png", fullPage: true });
const snapshot = await client.getAISnapshot("debug");
return { url: page.url(), title: await page.title(), snapshot };
'Notes
- accepts JavaScript only (no TypeScript syntax inside code body).
run --code - Same name is serialized by lock to prevent concurrent mutation conflicts.
--page - Runtime data is stored under (override with
~/.dev-browser/).DEV_BROWSER_HOME