Skip to main content

agent-browser

Headless/scripted browser automation from Bash (Vercel Labs CLI, Rust/CDP). Use for navigating pages, filling forms, clicking, screenshots, scraping JS-rendered pages, testing web apps, Electron apps, or any programmatic web interaction — especially in subagents, scouts, launchd jobs, and autonomous runs where claude-in-chrome MCP is unavailable. NOT for the operator's logged-in Chrome session (use claude-in-chrome) or static fetches (WebFetch/Firecrawl).

Source facts

Repository
markusstrasser/skills
Last source activity
October 13, 2026 at 14:37
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
agent-browser
description
Headless/scripted browser automation from Bash (Vercel Labs CLI, Rust/CDP). Use for navigating pages, filling forms, clicking, screenshots, scraping JS-rendered pages, testing web apps, Electron apps, or any programmatic web interaction — especially in subagents, scouts, launchd jobs, and autonomous runs where claude-in-chrome MCP is unavailable. NOT for the operator's logged-in Chrome session (use claude-in-chrome) or static fetches (WebFetch/Firecrawl).
allowed-tools
Bash(agent-browser:*), Bash(npx agent-browser:*)
# agent-browser Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with accessibility-tree snapshots and compact `@eN` element refs (~200-400 tokens vs 3-5K for DOM dumps). Installed via brew (2026-07-20); headless by default, `--headed` for visible. ## Lane routing (ours, overrides the vendor's "prefer over everything") | Need | Tool | |---|---| | Operator's logged-in Chrome, SSO sites, real tabs | claude-in-chrome MCP (interactive sessions only) | | Static page fetch / crawl at scale | WebFetch / Firecrawl | | Scripted or headless automation, JS-rendered pages, web-app verification, subagent/scout/launchd/autonomous contexts | **agent-browser** | ## Start here This file is a discovery stub, not the usage guide. Before running any `agent-browser` command, load the workflow content from the CLI itself — it always matches the installed version: ```bash agent-browser skills get core # workflows, common patterns, troubleshooting agent-browser skills get core --full # + full command reference and templates ``` ## Specialized skills (CLI-served) ```bash agent-browser skills list # everything on the installed version agent-browser skills get electron # Electron desktop apps (VS Code, Slack, Discord, Figma, ...) agent-browser skills get slack # Slack workspace automation agent-browser skills get dogfood # Exploratory testing / QA / bug hunts ``` ## Core loop ```bash agent-browser open https://example.com agent-browser snapshot -i # @e1 [heading] … @e2 [link] … agent-browser click @e2 agent-browser get url agent-browser close ``` Also: `eval <js>` · `set viewport <w> <h>` / `set device <name>` · `network requests` · `console` · `react tree` / `vitals` (web-dev) · `--session <name>` isolation · `connect <port>` CDP-attach · `cookies set --curl <file>` for auth. ## Gotchas - **Operator's logged-in sites** (Pinterest, course platforms, X): don't ask for a cookie file or hand-roll Keychain decryption. Run `uv run --project ~/Projects/ext python3 ~/Projects/ext/tools/chrome_cookies.py --state <file> <domain>`, then `agent-browser --state <file> open <url>`. It auto-picks the Chrome profile holding the session; delete the state file when done. - Bundled-Chrome download (`agent-browser install`) can time out; system-Chrome fallback works — don't block on it. - Interactive and JSON snapshots can omit state attributes even when the page exposes them. If a decision depends on state such as `aria-pressed`, query the principal value directly (`agent-browser get attr @eN aria-pressed`) instead of inferring it from the snapshot. - `close` closes the browser pages, but the session daemon may remain active. In `session info --json`, distinguish daemon `active` from `runtime.browserLaunched` and `pageCount`; use `close --all` only when every session should be reset. - Observability dashboard on port 4848 (independent of sessions). Calibration history: [references/calibration.md](references/calibration.md).
View on GitHub