| name | web-browser |
| description | Allows interaction with web pages by clicking buttons, filling forms, navigating links, evaluating JavaScript, and taking screenshots. It remote-controls Brave browsers using the Chrome DevTools Protocol (CDP). |
| disable-model-invocation | true |
| license | Stolen from Armin who stole it from Mario |
Web Browser Skill
Minimal CDP tools for collaborative site exploration.
Start Browser
./scripts/start.js
./scripts/start.js --profile
./scripts/start.js --reset-profile
Starts Brave/Chrome/Chromium with remote debugging (default port :9222). On this machine it auto-detects /usr/bin/brave and can copy your Brave profile from ~/.config/BraveSoftware/Brave-Browser.
Profile behavior:
- Default mode uses:
~/.cache/agent-web/browser/fresh-profile
--profile mode uses: ~/.cache/agent-web/browser/profile-copy
- The skill does not attach to your live browser profile directly;
--profile copies it into the isolated cache
- If
:9222 is already used by an unknown instance, start will fail instead of reusing it
If the browser or profile is in a non-standard location, set:
BROWSER_BIN=/path/to/browser ./scripts/start.js
BROWSER_PROFILE_DIR=/path/to/profile ./scripts/start.js --profile
Optional debug endpoint override:
BROWSER_DEBUG_PORT=9333 ./scripts/start.js
Navigate
./scripts/nav.js https://example.com
./scripts/nav.js https://example.com --new
Navigate current tab or open new tab.
Device Emulation (Mobile)
./scripts/emulate.js --list
./scripts/emulate.js iphone-14
./scripts/emulate.js pixel-7 --landscape
./scripts/emulate.js --reset
Set an active device emulation preference (viewport, DPR, touch, UA) for browser skill commands. Use --reset to clear.
Commands like nav.js, eval.js, pick.js, dismiss-cookies.js, and screenshot.js automatically apply the active preference.
Evaluate JavaScript
./scripts/eval.js 'document.title'
./scripts/eval.js 'document.querySelectorAll("a").length'
./scripts/eval.js 'JSON.stringify(Array.from(document.querySelectorAll("a")).map(a => ({ text: a.textContent.trim(), href: a.href })).filter(link => !link.href.startsWith("https://")))'
Execute JavaScript in active tab (async context). Be careful with string escaping, best to use single quotes.
Screenshot
./scripts/screenshot.js
./scripts/screenshot.js --full-page
./scripts/screenshot.js --device iphone-14
./scripts/screenshot.js --device pixel-7 --full-page
Takes a screenshot and returns a temp file path.
- Default: current viewport
--full-page: captures full document height
--device <preset>: temporary mobile emulation for that screenshot only
Pick Elements
./scripts/pick.js "Click the submit button"
Interactive element picker. Click to select, Cmd/Ctrl+Click for multi-select, Enter to finish.
Dismiss Cookie Dialogs
./scripts/dismiss-cookies.js
./scripts/dismiss-cookies.js --reject
Automatically dismisses EU cookie consent dialogs.
Run after navigating to a page:
./scripts/nav.js https://example.com && ./scripts/dismiss-cookies.js
Quick Mobile Debug Flow
./scripts/start.js
./scripts/nav.js https://example.com
./scripts/emulate.js iphone-14
./scripts/nav.js https://example.com
./scripts/dismiss-cookies.js
./scripts/screenshot.js --full-page
Background Logging (Console + Errors + Network)
Automatically started by start.js and writes JSONL logs to:
~/.cache/agent-web/logs/YYYY-MM-DD/<targetId>.jsonl
Manually start:
./scripts/watch.js
Tail latest log:
./scripts/logs-tail.js
./scripts/logs-tail.js --follow
Summarize network responses:
./scripts/net-summary.js