buildoak/fieldwork-skills/browser-ops
Claude Code and agent skill by buildoak/fieldwork-skills
- community
Checking that the SKILL.md file is still in the repository.
Browser automation skill for AI coding agents. 25 Playwright-based tools for navigation, interaction, observation, and session management.
Install
npx vskill@latest install buildoak/fieldwork-skills/browser-opsSKILL.md
Browser Ops
Browser automation via agent-browser. 25 tools wrapping Playwright for navigation, interaction, observation, and session management. Validated on two benchmark suites: 12/15 pass on a 15-task suite (100% excluding external blockers), 9/10 on a 10-task progressive suite. Standout: Notion end-to-end signup with AgentMail OTP verification.
Terminology used in this file:
- Playwright: A browser automation framework that lets tools control Chromium/Chrome.
- a11y tree: The accessibility tree (screen-reader-friendly page structure) used by
browser_snapshot. - DOM: Document Object Model, the browser's structured representation of page elements.
- CSS selector: A rule for targeting specific DOM elements (for example
.priceor#submit). - OAuth: A standard login/authorization flow that redirects through an identity provider (for example, "Sign in with GitHub").
Setup
- Claude Code: copy this skill folder into
.claude/skills/browser-ops/ - Codex CLI: append this SKILL.md content to your project's root
AGENTS.md
For the full installation walkthrough (prerequisites, verification, troubleshooting), see references/installation-guide.md.
Staying Updated
This skill ships with an UPDATES.md changelog and UPDATE-GUIDE.md for your AI agent.
After installing, tell your agent: "Check UPDATES.md in the browser-ops skill for any new features or changes."
When updating, tell your agent: "Read UPDATE-GUIDE.md and apply the latest changes from UPDATES.md."
Follow UPDATE-GUIDE.md so customized local files are diffed before any overwrite.
Quick Start
The simplest possible browser flow: navigate, inspect, capture.
Decision Tree: Browser vs Other Tools
Ask this FIRST. Getting it wrong wastes significant token budget.
Rule of thumb: If you can get the data with curl, you don't need a browser.
Core Workflow
Every browser task follows this loop:
The ref system: Snapshot returns element references like @e1, @e2. Use these refs with click/fill/type. Refs are stable within a page state but reset after navigation.
Token Efficiency: Snapshot Modes
| Mode | Tokens/page | Shows | Use when | |
|---|---|---|---|---|
interactive | ~1,400 | Buttons, links, inputs only | Default for everything | |
compact | ~3,000-5,000 | Condensed full tree | Need text content + interactive | |
full | ~15,000 | Complete a11y tree | Last resort, known need |
Default to `interactive`. It is 10x cheaper than full and sufficient for 90% of tasks.
Tiered Access Model
Escalation path: Start at Tier 1. If snapshot doesn't show the data you need, try Tier 3 with a targeted selector. Only use Tier 2 when visual understanding is required.
Token Optimization for Data-Heavy Pages
For content-rich pages (HN, Reddit, forums, dashboards), the interactive snapshot balloons from ~1,400 tokens (simple pages) to ~47K tokens (dense pages). This wrecks budgets.
Pattern: Snapshot first to understand page structure, then browser_evaluate with targeted JS for bulk extraction.
When to use: Any page where you need to extract 10+ items of the same type. Snapshot gives you the selector knowledge; eval gives you the data cheaply.
Email Verification (AgentMail)
For tasks requiring email verification (account signup, OTP flows).
Setup
- AgentMail Python wrapper:
./scripts/mailbox.py(self-contained) - CLI wrapper:
./scripts/agentmail.sh - Dependencies:
./scripts/requirements.txt - First-time setup:
./scripts/agentmail.sh setup - Create your own mailbox (see pattern below)
AgentMail provides disposable email inboxes for AI agents. You create a mailbox, use the address in signup forms, then poll for incoming verification emails and extract OTP codes or links.
The Pattern (Validated on Notion Signup)
Gotchas
- Emails take 5-30 seconds to arrive. Always poll with timeout.
- Some services detect
agentmail.todomain -- have backup strategy. - OTP codes expire. Extract and submit promptly after polling.
Validated Flows
- Notion signup: Full end-to-end -- signup, OTP poll, extract, submit, onboarding, page creation.
- PKP forum: Email verification worked. Blocked by moderator approval gate (external).
Session Rules
CRITICAL: No parallel browser sessions.
- All tools share one browser daemon per session
- Parallel usage causes state collisions (one action navigates, another loses its page)
- Run browser tasks SEQUENTIALLY. Always.
AGENT_BROWSER_SESSIONenv var controls session name (default: "mcp")- Per-session isolation is NOT yet implemented
Always close the browser when done:
Forgetting to close leaves an orphaned Chromium process.
Stealth Configuration
Layer 1 provides basic stealth via environment variables. All browser sessions can run with headed mode, custom UA, persistent profile, and automation flag disabled.
For stricter sites, escalate to Layer 2+. Full guide: ./references/stealth-config.md.
Quick Setup (5 min, $0)
Escalation Path
- Layer 1 (env vars above) -- beats Cloudflare free tier
- Layer 2 (rebrowser-patches:
npx rebrowser-patches@latest patch) -- beats Cloudflare Pro - Layer 3 (Kernel cloud:
AGENT_BROWSER_PROVIDER=kernel) -- beats most anti-bot - Layer 4 (residential proxy:
AGENT_BROWSER_PROXY=...) -- beats IP-based blocking
Key Env Vars
| Env Var | Purpose | Default | |
|---|---|---|---|
AGENT_BROWSER_SESSION | Session name for isolation | mcp | |
AGENT_BROWSER_HEADED | "1" = headed mode | off | |
AGENT_BROWSER_USER_AGENT | Custom UA string | Chromium default | |
AGENT_BROWSER_ARGS | Chromium launch args | none | |
AGENT_BROWSER_PROFILE | Persistent browser profile path | none | |
AGENT_BROWSER_PROXY | Proxy server URL | none | |
AGENT_BROWSER_PROVIDER | Cloud provider (kernel, browserbase) | none |
Benchmark Results (Feb 2026)
15-task browser autonomy benchmark. 12/15 pass (100% excluding external blockers).
| Capability | Tasks | Evidence | |
|---|---|---|---|
| Login + session cookies | 1, 6, 9 | Sauce Demo, HN, quotes.toscrape | |
| Multi-field registration | 2, 7 | 11-step account lifecycle | |
| Complex form widgets | 3 | Date pickers, React Select, file upload | |
| Drag-drop, alerts, iframes | 5, 14 | Multiple interaction types | |
| Paginated scraping with session | 9 | 50 quotes across 5 pages | |
| SaaS signup with email OTP | 12 | Notion end-to-end | |
| OAuth redirect flow | 13 | GitHub OAuth chain | |
| Google Flights SPA | 11 | Dynamic JS search + filter | |
| Multi-site autonomous flow | 15 | Two sites, single session | |
| Error recovery | 14 | Form validation, alerts, iframes |
3 failures (all external): SSL outage, Cloudflare transparent challenge, moderator gate.
Test Suite v2 (10-Task Progressive)
| # | Tier | Task | Result | Calls | Time | |
|---|---|---|---|---|---|---|
| 1 | Medium | Reddit scraping (old.reddit.com) | PASS | 14 | 25s | |
| 2 | Medium | HN thread extraction | PASS | 13 | 35s | |
| 3 | Medium | SauceDemo e-commerce flow | PASS | 38 | 61s | |
| 4 | Hard | GitHub repo data extraction | PASS | 37 | 83s | |
| 5 | Hard | Google Flights search + filter | PASS | 21 | 48s | |
| 6 | Hard | HN account lifecycle | PASS | 22 | 39s | |
| 7 | Brutal | Stripe iframe checkout | PASS | 59 | 168s | |
| 8 | Brutal | Wikipedia multi-language | PASS | 11 | 63s | |
| 9 | Brutal | Cloudflare stealth gauntlet | PASS | 12 | 36s | |
| 10 | Final Boss | Linear E2E + AgentMail | PARTIAL | ~40 | ~180s |
Test 10 blocked by Cloudflare Turnstile CAPTCHA -- requires Layer 2+ stealth. Not an agent or skill gap.
Quick Tool Reference
25 tools in 5 categories. Full details in ./references/tool-inventory.md.
| Category | Tools | |
|---|---|---|
| Navigation | navigate, back, forward, reload | |
| Observation | snapshot, screenshot, get_url, get_title, get_text, get_html | |
| Interaction | click, dblclick, fill, type, press, select, hover, focus, clear, check, uncheck | |
| Page | scroll, wait, evaluate | |
| Session | close |
All tool names are prefixed with browser_ (e.g., browser_click, browser_snapshot).
fill vs type
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/browser-ops/SKILL.md
Popularity
- Repository stars
- 15
- Repository forks
- 1
- 7-day trend score
- 14
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/buildoak/fieldwork-skills/browser-ops)