name: browser
description: >
Browser automation via the agent-browser CLI. Use when the user needs to
interact with websites or Electron desktop apps — navigating pages, filling
forms, clicking buttons, taking screenshots, extracting data, testing web
apps, automating browser actions, visual UI verification, responsive checks,
hunting console errors, or driving the Pi Dashboard's Electron shell (main
window, wizard window, doctor window, tray, native menus). Triggers include
"open a website", "fill out a form", "click a button", "take a screenshot",
"scrape data", "test this web app", "automate browser", "test responsive",
"debug blank page", "automate Slack app", "control VS Code", "attach to
Electron app", "screenshot Pi Dashboard", "drive the wizard window".
license: Apache-2.0
allowed-tools: Bash(agent-browser:), Bash(npx agent-browser:)
metadata:
author: pi-dashboard
version: "1.0"
vendoredFrom: agent-browser
vendoredVersion: "0.27.0"
browser
Composite skill that gives the agent eyes and hands for any browser-driven
task — web pages or Electron desktop apps — via the agent-browser CLI.
Two recipes:
- Web automation — generic web pages plus Pi Dashboard-specific helpers
(dashboard URL detection, responsive testing, console-error hunting).
Reference:
references/web.md. - Electron automation — drive any Chromium-based Electron app, including
a worked example for the Pi Dashboard's own shell via
--debug-cdp. Reference:references/electron.md.
Step 0a — Preflight: agent-browser CLI must be installed
The skill does not bundle the CLI. Before doing anything else, verify it:
command -v agent-browser
If the command is not found, halt and tell the user:
The
agent-browserCLI is not installed. Install it as a pi extension so thebrowsertool is registered in your pi session too:pi install npm:pi-agent-browserThen re-invoke the skill.
Do not attempt npm install, pi install, or any other install command
on the user's behalf — they should make that choice explicitly.
Step 0b — Auto-detect: route to the right recipe
After the preflight, decide which recipe applies. Run this 2-line probe:
if command -v lsof >/dev/null 2>&1; then
CDP_LIVE=$(lsof -ti :9222 >/dev/null 2>&1 && echo yes || echo no)
else
CDP_LIVE=$(nc -z 127.0.0.1 9222 2>/dev/null && echo yes || echo no)
fi
PD_RUNNING=$(pgrep -f "Pi Dashboard|pi-dashboard" >/dev/null 2>&1 && echo yes || echo no)
echo "CDP_LIVE=$CDP_LIVE PD_RUNNING=$PD_RUNNING"
Routing rule:
CDP_LIVE |
PD_RUNNING |
Route to | Why |
|---|---|---|---|
| yes | yes | references/electron.md |
Pi Dashboard Electron shell is attachable |
| no | yes | references/electron.md |
Pi Dashboard is up but CDP off — electron.md shows the --debug-cdp launch instruction |
| any | no | references/web.md |
No Electron target running; default to web |
Override: if the user's request is explicitly about a website (URL,
HTTPS host, "the dashboard at localhost:8000", etc.), route to
references/web.md regardless of what's running. Intent wins over capability.
Override: if the user's request is explicitly about an Electron app
that isn't Pi Dashboard (Slack, VS Code, Figma, …), route to
references/electron.md even when PD_RUNNING=no — that recipe covers
launching any Electron app with --remote-debugging-port.
Step 1 — Read the matched recipe and execute
Read the reference file selected above, then follow its workflow. Both references are self-contained; you do not need to read both.
Notes
- Vendoring:
references/web.mdandreferences/electron.mdare snapshots of upstreamagent-browserskill content (coreandelectron) at CLI version 0.27.0. SeeUPSTREAM.mdfor refresh procedure andLICENSEfor upstream attribution. - No CLI bundled: agents installing the bridge extension get the skill text but not the CLI; install on demand per Step 0a.
- User-local override: if the user's project has its own
.pi/skills/browser/skill, pi's local-wins precedence applies and this skill is shadowed — that's by design.