| name | browser-usage |
| description | Core agent-browser usage guide — read before running any agent-browser command. Use when the user asks to interact with, test, or automate a website — clicking, filling forms, extracting data, taking screenshots, logging in. |
agent-browser core
Fast browser automation CLI for AI agents. Chrome/Chromium via CDP, no
Playwright or Puppeteer dependency. Accessibility-tree snapshots with compact
@eN refs let agents interact with pages in ~200-400 tokens instead of
parsing raw HTML.
Most normal web tasks (navigate, read, click, fill, extract, screenshot) are
covered here.
The core loop
agent-browser open <url>
agent-browser snapshot -i
agent-browser click @e3
agent-browser snapshot -i
Refs (@e1, @e2, ...) are assigned fresh on every snapshot. They become
stale the moment the page changes — after clicks that navigate, form
submits, dynamic re-renders, dialog opens. Always re-snapshot before your
next ref interaction.
Quickstart
npm i -g agent-browser && agent-browser install
agent-browser open https://example.com
agent-browser screenshot home.png
agent-browser close
agent-browser open https://duckduckgo.com
agent-browser snapshot -i
agent-browser fill @e1 "agent-browser cli"
agent-browser press Enter
agent-browser wait --load networkidle
agent-browser snapshot -i
agent-browser click @e5
agent-browser screenshot result.png
The browser stays running across commands so these feel like a single
session. Use agent-browser close (or close --all) when you're done.
Reading a page
agent-browser snapshot
agent-browser snapshot -i
agent-browser snapshot -i -u
agent-browser snapshot -i -c
agent-browser snapshot -i -d 3
agent-browser snapshot -s "#main"
agent-browser snapshot -i --json
Snapshot output looks like:
Page: Example - Log in
URL: https://example.com/login
@e1 [heading] "Log in"
@e2 [form]
@e3 [input type="email"] placeholder="Email"
@e4 [input type="password"] placeholder="Password"
@e5 [button type="submit"] "Continue"
@e6 [link] "Forgot password?"
For unstructured reading (no refs needed):
agent-browser get text @e1
agent-browser get html @e1
agent-browser get attr @e1 href
agent-browser get value @e1
agent-browser get title
agent-browser get url
agent-browser get count ".item"
Interacting
agent-browser click @e1
agent-browser click @e1 --new-tab
agent-browser dblclick @e1
agent-browser hover @e1
agent-browser focus @e1
agent-browser fill @e2 "hello"
agent-browser type @e2 " world"
agent-browser press Enter
agent-browser press Control+a
agent-browser check @e3
agent-browser uncheck @e3
agent-browser select @e4 "option-value"
agent-browser select @e4 "a" "b"
agent-browser upload @e5 file1.pdf
agent-browser scroll down 500
agent-browser scrollintoview @e1
agent-browser drag @e1 @e2
When refs don't work or you don't want to snapshot
Use semantic locators:
agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find text "Sign In" click --exact
agent-browser find label "Email" fill "user@test.com"
agent-browser find placeholder "Search" type "query"
agent-browser find testid "submit-btn" click
agent-browser find first ".card" click
agent-browser find nth 2 ".card" hover
Or a raw CSS selector:
agent-browser click "#submit"
agent-browser fill "input[name=email]" "user@test.com"
agent-browser click "button.primary"
Rule of thumb: snapshot + @eN refs are fastest and most reliable for
AI agents. find role/text/label is next best and doesn't require a prior
snapshot. Raw CSS is a fallback when the others fail.
Waiting (read this)
Agents fail more often from bad waits than from bad selectors. Pick the
right wait for the situation:
agent-browser wait @e1
agent-browser wait 2000
agent-browser wait --text "Success"
agent-browser wait --url "**/dashboard"
agent-browser wait --load networkidle
agent-browser wait --load domcontentloaded
agent-browser wait --fn "window.myApp.ready === true"
After any page-changing action, pick one:
- Wait for a specific element you expect to appear:
wait @ref or wait --text "...".
- Wait for URL change:
wait --url "**/new-page".
- Wait for network idle (catch-all for SPA navigation):
wait --load networkidle.
Avoid bare wait 2000 except when debugging — it makes scripts slow and
flaky. Timeouts default to 25 seconds.
Common workflows
Log in
agent-browser open https://app.example.com/login
agent-browser snapshot -i
agent-browser fill @e3 "user@example.com"
agent-browser fill @e4 "hunter2"
agent-browser click @e5
agent-browser wait --url "**/dashboard"
agent-browser snapshot -i
Credentials in shell history are a leak. For anything sensitive, use the
auth vault (see references/authentication.md):
agent-browser auth save my-app --url https://app.example.com/login \
--username user@example.com --password-stdin
agent-browser auth login my-app
Persist session across runs
agent-browser state save ./auth.json
agent-browser --state ./auth.json open https://app.example.com
Or use --session-name for auto-save/restore:
AGENT_BROWSER_SESSION_NAME=my-app agent-browser open https://app.example.com
Extract data
agent-browser snapshot -i --json > page.json
agent-browser snapshot -i
agent-browser get text @e5
agent-browser get attr @e10 href
cat <<'EOF' | agent-browser eval --stdin
const rows = document.querySelectorAll("table tbody tr");
Array.from(rows).map(r => ({
name: r.cells[0].innerText,
price: r.cells[1].innerText,
}));
EOF
Prefer eval --stdin (heredoc) or eval -b <base64> for any JS with
quotes or special characters. Inline agent-browser eval "..." works
only for simple expressions.
Screenshot
agent-browser screenshot
agent-browser screenshot page.png
agent-browser screenshot --full full.png
agent-browser screenshot --annotate map.png
--annotate is designed for multimodal models: each label [N] maps to ref @eN.
Handle multiple pages via tabs
agent-browser tab
agent-browser tab new https://docs...
agent-browser tab 2
agent-browser tab close 2
Stable tabIds mean tab 2 points at the same tab across commands even
when other tabs open or close. After switching, refs from a prior snapshot
on a different tab no longer apply — re-snapshot.
Run multiple browsers in parallel
Each --session <name> is an isolated browser with its own cookies, tabs,
and refs. Useful for testing multi-user flows or parallel scraping:
agent-browser --session a open https://app.example.com
agent-browser --session b open https://app.example.com
agent-browser --session a fill @e1 "alice@test.com"
agent-browser --session b fill @e1 "bob@test.com"
AGENT_BROWSER_SESSION=myapp sets the default session for the current
shell.
Mock network requests
agent-browser network route "**/api/users" --body '{"users":[]}'
agent-browser network route "**/analytics" --abort
agent-browser network requests
agent-browser network har start
agent-browser network har stop /tmp/trace.har
Record a video of the workflow
agent-browser record start demo.webm
agent-browser open https://example.com
agent-browser snapshot -i
agent-browser click @e3
agent-browser record stop
See references/video-recording.md for
codec options, GIF export, and more.
Iframes
Iframes are auto-inlined in the snapshot — their refs work transparently:
agent-browser snapshot -i
agent-browser fill @e4 "4111111111111111"
agent-browser click @e5
To scope a snapshot to an iframe (for focus or deep nesting):
agent-browser frame @e3
agent-browser snapshot -i
agent-browser frame main
Dialogs
alert and beforeunload are auto-accepted so agents never block. For
confirm and prompt:
agent-browser dialog status
agent-browser dialog accept
agent-browser dialog accept "text"
agent-browser dialog dismiss
Diagnosing install issues
If a command fails unexpectedly (Unknown command, Failed to connect,
stale daemons, version mismatches after upgrade, missing Chrome, etc.)
run doctor before anything else:
agent-browser doctor
agent-browser doctor --offline --quick
agent-browser doctor --fix
agent-browser doctor --json
doctor auto-cleans stale socket/pid/version sidecar files on every run.
Destructive actions require --fix. Exit code is 0 if all checks pass
(warnings OK), 1 if any fail.
Troubleshooting
"Ref not found" / "Element not found: @eN"
Page changed since the snapshot. Run agent-browser snapshot -i again,
then use the new refs.
Element exists in the DOM but not in the snapshot
It's probably off-screen or not yet rendered. Try:
agent-browser scroll down 1000
agent-browser snapshot -i
agent-browser wait --text "..."
agent-browser snapshot -i
Click does nothing / overlay swallows the click
Some modals and cookie banners block other clicks. Snapshot, find the
dismiss/close button, click it, then re-snapshot.
Fill / type doesn't work
Some custom input components intercept key events. Try:
agent-browser focus @e1
agent-browser keyboard inserttext "text"
agent-browser keyboard type "text"
Page needs JS you can't get right in one shot
Use eval --stdin with a heredoc instead of inline:
cat <<'EOF' | agent-browser eval --stdin
// Complex script with quotes, backticks, whatever
document.querySelectorAll('[data-id]').length
EOF
Cross-origin iframe not accessible
Cross-origin iframes that block accessibility tree access are silently
skipped. Use frame "#iframe" to switch into them explicitly if the
parent opts in, otherwise the iframe's contents aren't available via
snapshot — fall back to eval in the iframe's origin or use the
--headers flag to satisfy CORS.
Authentication expires mid-workflow
Use --session-name <name> or state save/state load so your session
survives browser restarts. See references/session-management.md
and references/authentication.md.
Global flags worth knowing
--session <name>
--json
--headed
--auto-connect
--cdp <port>
--profile <name|path>
--headers <json>
--proxy <url>
--state <path>
--session-name <name>
When to load another skill
- Electron desktop app (VS Code, Slack desktop, Discord, Figma, etc.):
agent-browser skills get electron
- Slack workspace automation:
agent-browser skills get slack
- Exploratory testing / QA / bug hunts:
agent-browser skills get dogfood
- Vercel Sandbox microVMs:
agent-browser skills get vercel-sandbox
- AWS Bedrock AgentCore cloud browser:
agent-browser skills get agentcore
Full reference
Everything covered here plus the complete command/flag/env listing:
agent-browser skills get core --full
That pulls in:
references/commands.md — every command, flag, alias
references/snapshot-refs.md — deep dive on the snapshot + ref model
references/authentication.md — auth vault, credential handling
references/session-management.md — persistence, multi-session workflows
references/profiling.md — Chrome DevTools tracing and profiling
references/video-recording.md — video capture options
references/proxy-support.md — proxy configuration
templates/* — starter shell scripts for auth, capture, form automation