| name | agent-browser-automation |
| description | Headless browser automation CLI for AI agents using native Rust binary with Chrome DevTools Protocol |
| triggers | ["automate browser with agent-browser","use agent-browser for web scraping","browser automation CLI for AI","take screenshot with agent-browser","click and fill forms with agent-browser","agent-browser snapshot accessibility tree","batch browser commands with agent-browser","install agent-browser for automation"] |
agent-browser
Skill by ara.so — Daily 2026 Skills collection.
agent-browser is a headless browser automation CLI built in Rust, designed for AI agents. It wraps Chrome via the Chrome DevTools Protocol (CDP) and exposes a fast, ergonomic command-line interface for navigation, interaction, accessibility snapshots, screenshots, network interception, and more — with no Node.js or Playwright runtime required.
Installation
Recommended (npm global)
npm install -g agent-browser
agent-browser install
macOS (Homebrew)
brew install agent-browser
agent-browser install
Rust / Cargo
cargo install agent-browser
agent-browser install
Local project dependency
npm install agent-browser
Linux (with system dependencies)
agent-browser install --with-deps
Quick Start
agent-browser open https://example.com
agent-browser snapshot
agent-browser click @e2
agent-browser fill @e3 "hello@example.com"
agent-browser get text @e1
agent-browser screenshot page.png
agent-browser close
Core Commands
Navigation
agent-browser open <url>
agent-browser get url
agent-browser get title
agent-browser close
Accessibility Snapshot (recommended for AI agents)
agent-browser snapshot
agent-browser snapshot -i
Snapshot output includes @eN refs you can use directly:
@e1 [button] "Submit"
@e2 [textbox] "Email" value=""
@e3 [link] "Sign in"
Then act on them:
agent-browser fill @e2 "user@example.com"
agent-browser click @e1
Interaction
agent-browser click <sel>
agent-browser dblclick <sel>
agent-browser fill <sel> <text>
agent-browser type <sel> <text>
agent-browser press <key>
agent-browser keyboard type <text>
agent-browser keyboard inserttext <text>
agent-browser hover <sel>
agent-browser select <sel> <value>
agent-browser check <sel>
agent-browser uncheck <sel>
agent-browser scroll down 500
agent-browser scroll down --selector "#feed"
agent-browser scrollintoview <sel>
agent-browser drag <src> <target>
agent-browser upload <sel> /path/file.pdf
Screenshots & PDF
agent-browser screenshot
agent-browser screenshot page.png
agent-browser screenshot --full page.png
agent-browser screenshot --annotate
agent-browser screenshot --screenshot-dir ./shots
agent-browser screenshot --screenshot-format jpeg --screenshot-quality 80
agent-browser pdf output.pdf
Getting Element Info
agent-browser get text <sel>
agent-browser get html <sel>
agent-browser get value <sel>
agent-browser get attr <sel> <attr>
agent-browser get count <sel>
agent-browser get box <sel>
agent-browser get styles <sel>
agent-browser get cdp-url
State Checks
agent-browser is visible <sel>
agent-browser is enabled <sel>
agent-browser is checked <sel>
Semantic Locators (find)
agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find label "Email" fill "test@example.com"
agent-browser find placeholder "Search..." fill "rust"
agent-browser find testid "login-btn" click
agent-browser find first ".item" click
agent-browser find nth 2 "a" text
agent-browser find role textbox fill "hello" --name "Username"
Actions: click, fill, type, hover, focus, check, uncheck, text
Waiting
agent-browser wait "#modal"
agent-browser wait 2000
agent-browser wait --text "Welcome back"
agent-browser wait --url "**/dashboard"
agent-browser wait --load networkidle
agent-browser wait --fn "window.appReady === true"
agent-browser wait "#spinner" --state hidden
Load states: load, domcontentloaded, networkidle
JavaScript Eval
agent-browser eval "document.title"
agent-browser eval "JSON.stringify(window.__STATE__)"
agent-browser eval -b "BASE64_ENCODED_JS"
echo "return document.body.innerHTML" | agent-browser eval --stdin
Batch Execution (efficient multi-step)
echo '[
["open", "https://example.com"],
["snapshot", "-i"],
["fill", "@e2", "user@example.com"],
["click", "@e1"],
["screenshot", "result.png"]
]' | agent-browser batch --json
agent-browser batch --bail < commands.json
Tabs & Frames
agent-browser tab
agent-browser tab new https://...
agent-browser tab 2
agent-browser tab close
agent-browser frame "#my-iframe"
agent-browser frame main
Cookies & Storage
agent-browser cookies
agent-browser cookies set session_id "abc123"
agent-browser cookies clear
agent-browser storage local
agent-browser storage local set theme dark
agent-browser storage local clear
agent-browser storage session set cart '{"items":[]}'
Network
agent-browser network route "**/api/users" --body '{"users":[]}'
agent-browser network route "**/ads/**" --abort
agent-browser network unroute
agent-browser network requests --filter api
agent-browser network har start
agent-browser network har stop recording.har
Browser Settings
agent-browser set viewport 1280 800
agent-browser set viewport 375 812 2
agent-browser set device "iPhone 14"
agent-browser set geo 37.7749 -122.4194
agent-browser set offline on
agent-browser set headers '{"X-Custom":"value"}'
agent-browser set credentials admin secret
agent-browser set media dark
Auth State
agent-browser state save ./auth.json
agent-browser state load ./auth.json
agent-browser state list
agent-browser state show auth.json
Dialogs
agent-browser dialog accept
agent-browser dialog accept "My input"
agent-browser dialog dismiss
Clipboard
agent-browser clipboard read
agent-browser clipboard write "Hello, World!"
agent-browser clipboard copy
agent-browser clipboard paste
Diff & Visual Testing
agent-browser diff snapshot
agent-browser diff snapshot --baseline before.txt
agent-browser diff snapshot --selector "#main" --compact
agent-browser diff screenshot --baseline before.png
agent-browser diff screenshot --baseline b.png -o diff.png
agent-browser diff url https://v1.example.com https://v2.example.com
agent-browser diff url https://v1.example.com https://v2.example.com --screenshot
agent-browser diff url https://v1.example.com https://v2.example.com --selector "#content"
Debug & Profiling
agent-browser trace start trace.zip
agent-browser trace stop
agent-browser profiler start
agent-browser profiler stop profile.json
agent-browser console
agent-browser errors
agent-browser highlight "#button"
agent-browser inspect
agent-browser connect 9222
Common Patterns
Login flow and save session
#!/bin/bash
agent-browser open https://app.example.com/login
agent-browser fill "#email" "$LOGIN_EMAIL"
agent-browser fill "#password" "$LOGIN_PASSWORD"
agent-browser click "[type=submit]"
agent-browser wait --url "**/dashboard"
agent-browser state save ./session.json
AI agent loop with snapshot-driven interaction
#!/bin/bash
agent-browser open https://app.example.com
agent-browser state load ./session.json
SNAPSHOT=$(agent-browser snapshot)
echo "$SNAPSHOT"
agent-browser fill @e5 "quarterly report"
agent-browser press Enter
agent-browser wait --load networkidle
agent-browser snapshot
agent-browser screenshot results.png
Batch commands from a script (JSON)
cat > commands.json << 'EOF'
[
["open", "https://news.ycombinator.com"],
["wait", "--load", "networkidle"],
["get", "title"],
["snapshot"],
["screenshot", "hn.png"]
]
EOF
agent-browser batch --json < commands.json
Scrape with mocked network
agent-browser open https://api-heavy-app.example.com
agent-browser network route "**/api/slow-endpoint" --body '{"data":"mocked"}'
agent-browser snapshot
agent-browser network unroute
Full-page screenshot with annotations
agent-browser open https://example.com
agent-browser wait --load networkidle
agent-browser screenshot --full --annotate annotated.png
Connect to already-running Chrome
google-chrome --remote-debugging-port=9222 &
agent-browser connect 9222
agent-browser open https://example.com
agent-browser snapshot
Emulate mobile device
agent-browser set device "iPhone 14"
agent-browser open https://example.com
agent-browser screenshot mobile.png
HAR recording for network analysis
agent-browser open https://example.com
agent-browser network har start
agent-browser click "#load-data"
agent-browser wait --load networkidle
agent-browser network har stop session.har
Selector Reference
| Format | Example | Notes |
|---|
@ref | @e1, @e12 | From snapshot output — preferred for AI |
| CSS | #id, .class, [attr=val] | Standard CSS selectors |
| Text | "Sign In" | Exact text match |
| XPath | //button[@type='submit'] | Full XPath |
Troubleshooting
Chrome not found
agent-browser install
agent-browser install --with-deps
Element not found / timing issues
agent-browser wait "#my-element"
agent-browser wait --load networkidle
agent-browser wait --fn "!!document.querySelector('#app')"
Selector issues — use snapshot refs instead
agent-browser click ".btn.btn-primary.submit-form"
agent-browser snapshot
agent-browser click @e7
Debug what's on the page
agent-browser screenshot debug.png
agent-browser snapshot
agent-browser console
agent-browser errors
agent-browser eval "document.readyState"
Auth issues between sessions
agent-browser state save ./auth.json
agent-browser state load ./auth.json
Handling alerts/dialogs
agent-browser dialog accept
agent-browser click "#delete-button"
Performance — use batch for multi-step workflows
agent-browser open https://example.com
agent-browser fill "#q" "search"
agent-browser click "#submit"
echo '[["open","https://example.com"],["fill","#q","search"],["click","#submit"]]' \
| agent-browser batch --json