Agent Browser
am-will/codex-skills
Fast Rust-based headless browser automation for AI agents to navigate, click, type, and extract data from web pages.
What is Agent Browser?
Agent Browser is a CLI tool that enables AI agents to automate web interactions through structured commands. It provides a Rust-based implementation with Node.js fallback, supporting navigation, form filling, element interaction, and page snapshots with deterministic element references.
- Navigate pages, go back/forward, reload, and wait for elements or network states
- Click, type, fill forms, drag, upload files, and interact with checkboxes and dropdowns
- Extract text, HTML, attributes, titles, URLs, and take screenshots or PDFs
- Find elements by role, text, label, placeholder, alt text, testid, or CSS selector
- Run multiple isolated browser sessions simultaneously
- Use OAuth and logged-in sessions via Chrome profile connection or session persistence
How to install Agent Browser
npx skills add https://github.com/am-will/codex-skills --skill agent browser- Node.js and npm installed
- For Rust version: Rust toolchain (optional; Node.js fallback available)
- For Chrome profile method: Google Chrome installed with remote debugging enabled
How to use Agent Browser
- 1.Install globally: npm install -g agent-browser && agent-browser install
- 2.Open a URL: agent-browser open <url>
- 3.Take a snapshot to see page structure and element refs: agent-browser snapshot -i --json
- 4.Interact with elements using refs from snapshot: agent-browser click @e2 or agent-browser fill @e3 "text"
- 5.Extract data: agent-browser get text <selector> or agent-browser screenshot
- 6.For authenticated sessions: use --session flag or connect to Chrome profile via --cdp 9222
Use cases
- Automating web form submission and data entry workflows
- Extracting structured data from dynamic web pages
- Testing web UI interactions programmatically
- Logging into sites with OAuth and maintaining authenticated sessions
- Taking screenshots and PDFs of web pages for documentation
- AI agents and coding assistants automating web tasks
- QA engineers testing web UIs programmatically
- Data extraction and web scraping workflows
- Developers building browser automation into agents
Agent Browser FAQ
Launch Chrome with remote debugging (google-chrome --remote-debugging-port=9222), then connect agent-browser with --cdp 9222. Alternatively, use --session flag for first-time manual login, and cookies persist for future runs.
Refs (like @e2) are deterministic element identifiers from snapshots. Run snapshot to see available refs, then use them in commands like click @e2 or fill @e3 "value".
Use the --session flag to create isolated browser instances: agent-browser --session agent1 open site-a.com and agent-browser --session agent2 open site-b.com.
Use --json flag for machine-readable output: agent-browser snapshot --json. The optimal workflow is navigate → snapshot -i --json → act with @refs → verify.
Use agent-browser wait with selectors, milliseconds, text, URL patterns, or network states: agent-browser wait <selector>, agent-browser wait 2000, or agent-browser wait --load networkidle.
Full instructions (SKILL.md)
Source of truth, from am-will/codex-skills.
name: Agent Browser description: A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands. read_when:
- Automating web interactions
- Extracting structured data from pages
- Filling forms programmatically
- Testing web UIs metadata: {"clawdbot":{"emoji":"🌐","requires":{"bins":["node","npm"]}}}
Agent Browser
A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.
Installation
npm recommended
npm install -g agent-browser
agent-browser install
agent-browser install --with-deps
From Source
git clone https://github.com/vercel-labs/agent-browser
cd agent-browser
pnpm install
pnpm build
agent-browser install
Quick Start
agent-browser open example.com
agent-browser snapshot
agent-browser click @e2
agent-browser fill @e3 "test@example.com"
agent-browser get text @e1
agent-browser screenshot page.png
agent-browser close
Using Real Chrome Profile (for OAuth/Logged-in Sessions)
For sites requiring Google/Discord/etc login (like star-swap.com):
Method 1: Launch Chrome with custom profile, connect via CDP
# Terminal 1: Launch Chrome with your real profile and remote debugging
google-chrome --remote-debugging-port=9222 --user-data-dir=/home/willr/.config/google-chrome/Default &
# Terminal 2: Connect agent-browser to that Chrome instance
agent-browser --cdp 9222 open "https://star-swap.com"
agent-browser --cdp 9222 snapshot -i
agent-browser --cdp 9222 click e2
# This reuses your existing Google session - no re-login needed!
# Works for: Google OAuth, Discord OAuth, any site you're logged into in Chrome
Method 2: Session persistence (first-time manual login)
# First time: headed mode, login manually
agent-browser --headed --session starswap open "https://star-swap.com"
# Complete Google OAuth manually in the browser window
# Close when done
# Future runs: cookies persist!
agent-browser --session starswap open "https://star-swap.com"
# Already logged in automatically
am.will.ryan Chrome profile: /home/willr/.config/google-chrome/Default
Core Commands
Navigation
agent-browser open <url>
agent-browser back
agent-browser forward
agent-browser reload
Interaction
agent-browser click <sel>
agent-browser dblclick <sel>
agent-browser focus <sel>
agent-browser type <sel> <text>
agent-browser fill <sel> <text>
agent-browser clear <sel>
agent-browser press <key>
agent-browser keydown <key>
agent-browser keyup <key>
agent-browser hover <sel>
agent-browser select <sel> <val>
agent-browser check <sel>
agent-browser uncheck <sel>
agent-browser drag <src> <tgt>
agent-browser upload <sel> <files>
Extraction and Info
agent-browser snapshot
agent-browser get text <sel>
agent-browser get html <sel>
agent-browser get value <sel>
agent-browser get attr <sel> <attr>
agent-browser get title
agent-browser get url
agent-browser get count <sel>
agent-browser get box <sel>
agent-browser screenshot [path]
agent-browser pdf <path>
Check State
agent-browser is visible <sel>
agent-browser is enabled <sel>
agent-browser is checked <sel>
Find Elements
- agent-browser find role <role> <action> [value]
- agent-browser find text <text> <action>
- agent-browser find label <label> <action> [value]
- agent-browser find placeholder <ph> <action> [value]
- agent-browser find alt <text> <action>
- agent-browser find title <text> <action>
- agent-browser find testid <id> <action> [value]
Actions include click, fill, check, hover, and text.
Wait and Timing
agent-browser wait <selector>
agent-browser wait <ms>
agent-browser wait --text "Welcome"
agent-browser wait --url "**/dash"
agent-browser wait --load networkidle
Advanced Control
agent-browser scroll <dir> [px]
agent-browser scrollintoview <sel>
agent-browser eval <js>
agent-browser mouse move <x> <y>
agent-browser cookies
agent-browser storage local
agent-browser tab new [url]
agent-browser frame <sel>
agent-browser dialog accept [text]
Sessions
Run multiple isolated browser instances.
agent-browser --session agent1 open site-a.com
agent-browser --session agent2 open site-b.com
Snapshot Options
The snapshot command supports filtering to reduce output size.
- agent-browser snapshot -i
- agent-browser snapshot -c
- agent-browser snapshot -d 3
- agent-browser snapshot -s "#main"
Selectors and Refs
Refs provide deterministic element selection from snapshots. Use the @ref syntax.
agent-browser snapshot
agent-browser click @e2
Agent Mode
Use --json for machine readable output.
agent-browser snapshot --json
Optimal AI Workflow
- Navigate with agent-browser open <url>
- Observe with agent-browser snapshot -i --json
- Act with @ref from the snapshot
- Verify with agent-browser snapshot
Troubleshooting
- If the command is not found on Linux ARM64, use the full path in the bin folder.
- If an element is not found, use snapshot to find the correct ref.
- If the page is not loaded, add a wait command after navigation.
- Use --headed to see the browser window for debugging.
Options
- --session <name> uses an isolated session.
- --json provides JSON output.
- --full takes a full page screenshot.
- --headed shows the browser window.
- --timeout sets the command timeout in milliseconds.
Notes
- Refs are stable per page load but change on navigation.
- Always snapshot after navigation to get new refs.
- Use fill instead of type for input fields to ensure existing text is cleared.
Related skills
More from am-will/codex-skills and the wider catalog.

context7
Fetch current library documentation via Context7 API to avoid outdated knowledge.

Frontend Responsive Design Standards
Build responsive, mobile-first layouts with fluid containers, flexible units, and touch-friendly design across all screen sizes.

gemini-computer-use
Automate web browser tasks with Gemini 2.5 Computer Use and Playwright.

llm-council
Orchestrate multi-agent planning councils to produce bias-resistant implementation plans with structured JSON outputs and failure handling.

markdown-url
Route websites through markdown.new to extract clean, copy-friendly Markdown content from docs and articles.

openai-docs-skill
Query OpenAI's official developer docs via MCP server for API, SDK, and platform guidance.