{"id":"2ea494c6-7b1b-4727-b7a0-2454cc854820","shortId":"Kmc5nX","kind":"skill","title":"browser-ops","tagline":"Browser automation skill for AI coding agents. 25 Playwright-based tools for navigation, interaction, observation, and session management.","description":"# Browser Ops\n\nBrowser automation via [agent-browser](https://github.com/anthropics/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.\n\nTerminology used in this file:\n- **Playwright:** A browser automation framework that lets tools control Chromium/Chrome.\n- **a11y tree:** The accessibility tree (screen-reader-friendly page structure) used by `browser_snapshot`.\n- **DOM:** Document Object Model, the browser's structured representation of page elements.\n- **CSS selector:** A rule for targeting specific DOM elements (for example `.price` or `#submit`).\n- **OAuth:** A standard login/authorization flow that redirects through an identity provider (for example, \"Sign in with GitHub\").\n\n## Setup\n\n```bash\nnpm install -g @anthropic-ai/agent-browser\nagent-browser start\n```\n\n- **Claude Code:** copy this skill folder into `.claude/skills/browser-ops/`\n- **Codex CLI:** append this SKILL.md content to your project's root `AGENTS.md`\n\nFor the full installation walkthrough (prerequisites, verification, troubleshooting), see [references/installation-guide.md](references/installation-guide.md).\n\n## Staying Updated\n\nThis skill ships with an `UPDATES.md` changelog and `UPDATE-GUIDE.md` for your AI agent.\n\nAfter installing, tell your agent: \"Check `UPDATES.md` in the browser-ops skill for any new features or changes.\"\n\nWhen updating, tell your agent: \"Read `UPDATE-GUIDE.md` and apply the latest changes from `UPDATES.md`.\"\n\nFollow `UPDATE-GUIDE.md` so customized local files are diffed before any overwrite.\n\n---\n\n## Quick Start\n\nThe simplest possible browser flow: navigate, inspect, capture.\n\n```text\nbrowser_navigate(url=\"https://example.com\")\nbrowser_snapshot(mode=\"interactive\")\nbrowser_screenshot(path=\"/tmp/example.png\")\nbrowser_close()\n```\n\n---\n\n## Decision Tree: Browser vs Other Tools\n\n**Ask this FIRST. Getting it wrong wastes significant token budget.**\n\n```text\nNeed data from the web?\n  |\n  +-- Is it static content? (prices, articles, search results, public data)\n  |     YES --> Use WebSearch / WebFetch (built-in tools)\n  |             ~100 tokens. No browser overhead.\n  |\n  +-- Does it require interaction? (login, form fill, click sequences, session state)\n  |     YES --> Use browser tools\n  |\n  +-- Does it require email verification?\n  |     YES --> Use browser + AgentMail (see Email Verification section)\n  |\n  +-- Is the target known to block bots? (Cloudflare-protected, etc.)\n        YES --> Check references/failure-log.md before starting.\n              May need stealth config or alternative approach.\n```\n\n**Rule of thumb:** If you can get the data with `curl`, you don't need a browser.\n\n---\n\n## Core Workflow\n\nEvery browser task follows this loop:\n\n```text\n1. browser_navigate(url)                       -- go to the page\n2. browser_snapshot(mode='interactive')        -- get refs (@e1, @e2...)\n3. Identify target ref from snapshot           -- find the button/input/link\n4. browser_click(@ref) / browser_fill(@ref, text) -- act\n5. browser_snapshot(mode='interactive')        -- verify result\n6. Repeat 3-5 until done\n7. browser_close()                             -- ALWAYS close when done\n```\n\n**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.\n\n---\n\n## Token Efficiency: Snapshot Modes\n\n| Mode | Tokens/page | Shows | Use when |\n|------|-------------|-------|----------|\n| `interactive` | ~1,400 | Buttons, links, inputs only | **Default for everything** |\n| `compact` | ~3,000-5,000 | Condensed full tree | Need text content + interactive |\n| `full` | ~15,000 | Complete a11y tree | Last resort, known need |\n\n**Default to `interactive`.** It is 10x cheaper than `full` and sufficient for 90% of tasks.\n\n---\n\n## Tiered Access Model\n\n```text\nTier 1: A11y Tree Snapshot (~1,400 tokens/page)\n  browser_snapshot(mode='interactive') --> get refs --> click/fill\n  For: navigation, form filling, structured page interaction\n  This is your DEFAULT.\n\nTier 2: Screenshot + VLM (0 API tokens) [EXPERIMENTAL]\n  browser_screenshot() --> local VLM (Qwen3-VL-2B / UI-TARS-1.5-7B)\n  For: visual-only content, CAPTCHAs, pages where a11y tree misses data\n\nTier 3: Targeted DOM Extraction (variable tokens)\n  browser_evaluate('document.querySelector(sel).textContent')\n  For: known pages with known CSS selectors, JSON-LD extraction\n  Use when you know EXACTLY what element contains the data.\n```\n\n**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.\n\n### Token Optimization for Data-Heavy Pages\n\nFor 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.\n\n**Pattern:** Snapshot first to understand page structure, then `browser_evaluate` with targeted JS for bulk extraction.\n\n```text\n1. browser_navigate(url)\n2. browser_snapshot(mode='interactive')   -- understand structure (pay cost once)\n3. browser_evaluate('                     -- extract data surgically\n     JSON.stringify(\n       [...document.querySelectorAll(\".titleline a\")]\n         .map(a => ({title: a.textContent, href: a.href}))\n     )\n   ')\n4. Parse JSON result -- structured data at ~200 tokens vs 47K snapshot\n```\n\n**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.\n\n---\n\n## Email Verification (AgentMail)\n\nFor tasks requiring email verification (account signup, OTP flows).\n\n### Setup\n- AgentMail Python wrapper: `./scripts/mailbox.py` (self-contained)\n- CLI wrapper: `./scripts/agentmail.sh`\n- Dependencies: `./scripts/requirements.txt`\n- First-time setup: `./scripts/agentmail.sh setup`\n- Create your own mailbox (see pattern below)\n\n[AgentMail](https://agentmail.to) 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.\n\n### The Pattern (Validated on Notion Signup)\n\n```text\n1. Create mailbox:     ./scripts/agentmail.sh create <username>\n2. Fill signup form:   browser_fill(ref, \"username@agentmail.to\")\n3. Submit form:        browser_click(ref)\n4. Poll for email:     ./scripts/agentmail.sh poll username@agentmail.to --timeout 120\n5. Extract OTP/link:   ./scripts/agentmail.sh extract <inbox_id> <msg_id>\n6. Enter OTP:          browser_fill(ref, \"123456\")\n7. Submit:             browser_click(ref)\n```\n\n### Gotchas\n- Emails take 5-30 seconds to arrive. Always poll with timeout.\n- Some services detect `agentmail.to` domain -- have backup strategy.\n- OTP codes expire. Extract and submit promptly after polling.\n\n### Validated Flows\n- **Notion signup:** Full end-to-end -- signup, OTP poll, extract, submit, onboarding, page creation.\n- **PKP forum:** Email verification worked. Blocked by moderator approval gate (external).\n\n---\n\n## Session Rules\n\n**CRITICAL: No parallel browser sessions.**\n\n- All tools share one browser daemon per session\n- Parallel usage causes state collisions (one action navigates, another loses its page)\n- Run browser tasks SEQUENTIALLY. Always.\n- `AGENT_BROWSER_SESSION` env var controls session name (default: \"mcp\")\n- Per-session isolation is NOT yet implemented\n\n**Always close the browser when done:**\n```text\nbrowser_close()  -- releases the session for the next task\n```\n\nForgetting to close leaves an orphaned Chromium process.\n\n---\n\n## Stealth Configuration\n\n**Layer 1** provides basic stealth via environment variables. All browser sessions can run with headed mode, custom UA, persistent profile, and automation flag disabled.\n\nFor stricter sites, escalate to Layer 2+. Full guide: `./references/stealth-config.md`.\n\n### Quick Setup (5 min, $0)\n```bash\nexport AGENT_BROWSER_HEADED=1\nexport AGENT_BROWSER_USER_AGENT=\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36\"\nexport AGENT_BROWSER_PROFILE=\"$HOME/.agent-browser/profiles/stealth\"\nexport AGENT_BROWSER_ARGS=\"--disable-blink-features=AutomationControlled\"\nmkdir -p ~/.agent-browser/profiles/stealth\n```\n\n### Escalation Path\n1. **Layer 1** (env vars above) -- beats Cloudflare free tier\n2. **Layer 2** (rebrowser-patches: `npx rebrowser-patches@latest patch`) -- beats Cloudflare Pro\n3. **Layer 3** (Kernel cloud: `AGENT_BROWSER_PROVIDER=kernel`) -- beats most anti-bot\n4. **Layer 4** (residential proxy: `AGENT_BROWSER_PROXY=...`) -- beats IP-based blocking\n\n### Key Env Vars\n\n| Env Var | Purpose | Default |\n|---------|---------|---------|\n| `AGENT_BROWSER_SESSION` | Session name for isolation | `mcp` |\n| `AGENT_BROWSER_HEADED` | `\"1\"` = headed mode | off |\n| `AGENT_BROWSER_USER_AGENT` | Custom UA string | Chromium default |\n| `AGENT_BROWSER_ARGS` | Chromium launch args | none |\n| `AGENT_BROWSER_PROFILE` | Persistent browser profile path | none |\n| `AGENT_BROWSER_PROXY` | Proxy server URL | none |\n| `AGENT_BROWSER_PROVIDER` | Cloud provider (kernel, browserbase) | none |\n\n---\n\n## Benchmark Results (Feb 2026)\n\n15-task browser autonomy benchmark. **12/15 pass (100% excluding external blockers).**\n\n| Capability | Tasks | Evidence |\n|-----------|-------|----------|\n| Login + session cookies | 1, 6, 9 | Sauce Demo, HN, quotes.toscrape |\n| Multi-field registration | 2, 7 | 11-step account lifecycle |\n| Complex form widgets | 3 | Date pickers, React Select, file upload |\n| Drag-drop, alerts, iframes | 5, 14 | Multiple interaction types |\n| Paginated scraping with session | 9 | 50 quotes across 5 pages |\n| SaaS signup with email OTP | 12 | **Notion end-to-end** |\n| OAuth redirect flow | 13 | GitHub OAuth chain |\n| Google Flights SPA | 11 | Dynamic JS search + filter |\n| Multi-site autonomous flow | 15 | Two sites, single session |\n| Error recovery | 14 | Form validation, alerts, iframes |\n\n3 failures (all external): SSL outage, Cloudflare transparent challenge, moderator gate.\n\n### Test Suite v2 (10-Task Progressive)\n\n| # | Tier | Task | Result | Calls | Time |\n|---|------|------|--------|-------|------|\n| 1 | Medium | Reddit scraping (old.reddit.com) | PASS | 14 | 25s |\n| 2 | Medium | HN thread extraction | PASS | 13 | 35s |\n| 3 | Medium | SauceDemo e-commerce flow | PASS | 38 | 61s |\n| 4 | Hard | GitHub repo data extraction | PASS | 37 | 83s |\n| 5 | Hard | Google Flights search + filter | PASS | 21 | 48s |\n| 6 | Hard | HN account lifecycle | PASS | 22 | 39s |\n| 7 | Brutal | Stripe iframe checkout | PASS | 59 | 168s |\n| 8 | Brutal | Wikipedia multi-language | PASS | 11 | 63s |\n| 9 | Brutal | Cloudflare stealth gauntlet | PASS | 12 | 36s |\n| 10 | Final Boss | Linear E2E + AgentMail | PARTIAL | ~40 | ~180s |\n\nTest 10 blocked by Cloudflare Turnstile CAPTCHA -- requires Layer 2+ stealth. Not an agent or skill gap.\n\n---\n\n## Quick Tool Reference\n\n25 tools in 5 categories. Full details in `./references/tool-inventory.md`.\n\n| Category | Tools |\n|----------|-------|\n| **Navigation** | `navigate`, `back`, `forward`, `reload` |\n| **Observation** | `snapshot`, `screenshot`, `get_url`, `get_title`, `get_text`, `get_html` |\n| **Interaction** | `click`, `dblclick`, `fill`, `type`, `press`, `select`, `hover`, `focus`, `clear`, `check`, `uncheck` |\n| **Page** | `scroll`, `wait`, `evaluate` |\n| **Session** | `close` |\n\nAll tool names are prefixed with `browser_` (e.g., `browser_click`, `browser_snapshot`).\n\n### fill vs type\n\n| Method | Behavior | Use when |\n|--------|----------|----------|\n| `browser_fill` | Clears field, sets value instantly | Standard form fields (95% of cases) |\n| `browser_type` | Types character by character, triggers keystrokes | Autocomplete, search-as-you-type, custom widgets |\n\n---\n\n## Common Workflow Patterns\n\nSee `./references/battle-tested-patterns.md` for 12 complete patterns with examples.\n\n| Pattern | Complexity | Key Technique |\n|---------|-----------|---------------|\n| Standard login | Low | fill + click + wait + snapshot |\n| Multi-field registration | Medium | fill + select + check + click |\n| SaaS signup with OTP | High | AgentMail create + fill + poll + extract + fill |\n| Paginated scraping | Medium | snapshot(compact) + click(Next) loop |\n| OAuth redirect | Medium | click(OAuth button) + wait + follow redirects |\n| Error recovery | Medium | submit + snapshot(check errors) + fix + resubmit |\n| SPA navigation | Medium | type(not fill) + wait + snapshot for dynamic content |\n| Targeted extraction | Low | browser_evaluate(JS selector) |\n| Multi-site flow | High | Multiple navigates, single session, screenshot evidence |\n| Targeted DOM extraction | Low | browser_evaluate(JS selector) for JSON-LD and specific elements |\n| Post-search verification | Medium | snapshot results + verify params + recovery loop |\n| Calendar widget protocol | Medium | click date field + navigate months + click date cells |\n\n---\n\n## Health Check\n\nBefore starting browser work, verify the stack:\n\n```bash\n./scripts/browser-check.sh           # full check (CLI + daemon + stealth + agentmail)\n./scripts/browser-check.sh quick     # just CLI + daemon\n./scripts/browser-check.sh stealth   # stealth config status\n```\n\n---\n\n## URL Pre-Population Pattern\n\nFor complex SPAs with autocomplete widgets, geo-defaults, or custom form components that resist `browser_type`:\n- **Skip the form.** Navigate directly to a URL with parameters pre-encoded.\n- **Google Flights example:** `https://www.google.com/travel/flights?q=Flights+from+SFO+to+NRT+on+2026-04-17+return+2026-05-01`\n- **Why:** Custom React/Material autocomplete widgets often ignore `browser_type` input or revert to geo-defaults. URL params bypass the widget layer entirely.\n- **When to use:** After 2-3 failed attempts to interact with a complex form widget. Don't fight the DOM -- go around it.\n\n### iframe Bypass Pattern\nWhen cross-origin iframes block `browser_fill`/`browser_type` (e.g., Stripe payment forms):\n1. Snapshot the page and identify the iframe element\n2. Use `browser_evaluate` to extract the iframe's `src` URL: `document.querySelector('iframe').src`\n3. Navigate directly to that URL -- this renders the iframe content as a regular page\n4. Interact with all fields normally using `browser_fill`/`browser_type`\n\n### Evaluate-Only Mode for Heavy Pages\nFor content-heavy pages (Wikipedia, documentation sites, long articles):\n- **Skip snapshots entirely.** The a11y tree will be massive and blow your token budget.\n- Use `browser_evaluate` with targeted CSS selectors for all data extraction\n- Common selectors: `document.querySelector('p').textContent`, `document.querySelectorAll('.reference').length`, `Array.from(document.querySelectorAll('h2')).map(e => e.textContent)`\n\n---\n\n## Playbooks\n\nPer-site recipes with validated approaches. Load the relevant playbook before starting a task against a tested site.\n\n| Playbook | Site | Status | Key Pattern |\n|----------|------|--------|-------------|\n| `references/playbooks/booking-com.md` | Booking.com | PASS (workaround) | Landmark search + hotel calendar pricing |\n| `references/playbooks/google-flights.md` | Google Flights | PASS | URL pre-population (`?q=`) bypasses autocomplete |\n| `references/playbooks/linear-signup.md` | Linear | PARTIAL | Blocked by Cloudflare Turnstile; requires Layer 3 |\n| `references/playbooks/notion-signup.md` | Notion | PASS | Full E2E signup with AgentMail OTP verification |\n| `references/playbooks/reddit-scraping.md` | Reddit | PASS | old.reddit.com + `?sort=hot` retry + evaluate extraction |\n| `references/playbooks/stripe-iframe.md` | Stripe (iframe) | PASS | Extract iframe `src`, navigate directly, fill normally |\n| `references/playbooks/cloudflare-sites.md` | Cloudflare (general) | Mixed | Decision tree: free tier (L1) vs Turnstile (L3) |\n| `references/playbooks/wikipedia-extraction.md` | Wikipedia | PASS | Evaluate-only mode, zero snapshots, CSS selectors |\n| `references/playbooks/headed-browser-setup.md` | (general) | Reference | Headed mode + persistent profile setup |\n\n---\n\n## Anti-Patterns\n\n| Do NOT | Do instead |\n|--------|------------|\n| Use browser for static content (prices, articles) | `WebSearch` or `WebFetch` (built-in tools) |\n| Use `snapshot(mode='full')` by default | Use `interactive` mode (10x cheaper) |\n| Run parallel browser sessions | Run sequentially, one at a time |\n| Forget `browser_close()` at end | Always close when done |\n| Retry failed anti-bot sites blindly | Check `references/failure-log.md` first |\n| Load browser tools for non-browser tasks | Only use browser when interaction is needed |\n| Use `browser_type` when `browser_fill` works | `fill` is faster; `type` is for keystroke-sensitive inputs |\n| Skip screenshot evidence | Screenshot at key milestones for verification |\n| Use `browser_fill` for autocomplete fields | `browser_type` triggers keystroke events for suggestions |\n| Attempt Cloudflare Turnstile sites at Layer 1 | Interactive CAPTCHA requires Layer 2+ stealth |\n\n---\n\n## Error Handling\n\nCommon browser automation errors and recovery strategies.\n\n| Error | Symptoms | Recovery |\n|-------|----------|----------|\n| **Playwright timeout** | `TimeoutError: waiting for selector` or navigation timeout | Retry with longer `browser_wait` (double the timeout). Check if page is still loading. If persistent, the element may not exist -- re-snapshot to verify page state. |\n| **Stale element ref** | Action fails on a previously valid `@eN` ref | Refs reset after any navigation or major DOM change. Re-run `browser_snapshot()` to get fresh refs, then retry the action with the new ref. |\n| **Element not found** | `browser_click`/`browser_fill` fails -- ref not in snapshot | 1) Verify the page fully loaded (`browser_wait` or check URL). 2) Try a CSS selector fallback. 3) The element may be below the fold -- `browser_scroll(direction=\"down\")` then re-snapshot. |\n| **Network error** | Navigation fails, page doesn't load | Retry `browser_navigate` to the same URL. If persistent, check if site is down or blocking (see `references/failure-log.md`). |\n| **Session collision** | Random failures, wrong page content, unexpected state | Another task is using the browser. Browser tasks must run SEQUENTIALLY. Close any orphaned sessions with `browser_close()` and retry. |\n| **Anti-bot block** | Blank page, CAPTCHA, access denied, redirect to challenge page | Check `references/stealth-config.md` for escalation layers. Do not retry blindly -- escalate stealth level first. |\n| **`browser_evaluate` syntax error** | `SyntaxError: Unexpected token` in eval expression | Do NOT use `return` keyword in `browser_evaluate` expressions -- eval expects a JS expression, not a statement. Use `document.title` not `return document.title`. |\n\n**General principle:** When an action fails, always re-snapshot before retrying. The page state may have changed since your last observation.\n\n---\n\n## Bundled Resources Index\n\n| Path | What | When to load |\n|------|------|-------------|\n| `./UPDATES.md` | Structured changelog for AI agents | When checking for new features or updates |\n| `./UPDATE-GUIDE.md` | Instructions for AI agents performing updates | When updating this skill |\n| `./references/installation-guide.md` | Detailed install walkthrough for Claude Code and Codex CLI | First-time setup or environment repair |\n| `./references/tool-inventory.md` | Full 25-tool API reference with params and examples | When you need exact tool syntax |\n| `./references/battle-tested-patterns.md` | 12 validated workflow patterns from benchmark | When building a new browser workflow |\n| `./references/failure-log.md` | Benchmark results, anti-bot findings, AgentMail details | Before targeting a new site |\n| `./references/stealth-config.md` | Anti-detection layered configuration guide | When hitting bot detection |\n| `./references/test-results.md` | Full benchmark test cases (v1 + v2) with detailed logs | When reviewing what has been tested and what works |\n| `./references/anti-detection-guide.md` | 4-tier stealth escalation with decision tree | When planning stealth strategy for a new target |\n| `./references/playbooks/` | Per-site recipes with validated approaches | Before automating a tested site |\n| `./references/playbooks/headed-browser-setup.md` | Profile setup, trust building, headed mode guide | When setting up headed browser for high-detection sites |\n| `./scripts/agentmail.sh` | AgentMail CLI wrapper (setup/create/poll/extract) | For email verification flows |\n| `./scripts/mailbox.py` | AgentMail Python SDK wrapper | Called by agentmail.sh (self-contained) |\n| `./scripts/requirements.txt` | Python dependencies for AgentMail | Used by agentmail.sh setup |\n| `./scripts/browser-check.sh` | Browser stack health check | Before first browser task in a session |","tags":["browser","ops","fieldwork","skills","buildoak","agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills"],"capabilities":["skill","source-buildoak","skill-browser-ops","topic-agent-skills","topic-ai-agents","topic-ai-tools","topic-automation","topic-browser-automation","topic-claude-code","topic-claude-skills","topic-codex"],"categories":["fieldwork-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/buildoak/fieldwork-skills/browser-ops","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add buildoak/fieldwork-skills","source_repo":"https://github.com/buildoak/fieldwork-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (21,074 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T19:06:32.497Z","embedding":null,"createdAt":"2026-04-18T23:07:11.466Z","updatedAt":"2026-04-22T19:06:32.497Z","lastSeenAt":"2026-04-22T19:06:32.497Z","tsv":"'-3':1802 '-30':913 '-5':447,505 '-7':589 '/.agent-browser/profiles/stealth':1123 '/agent-browser':160 '/anthropics/agent-browser).':33 '/references/anti-detection-guide.md':2574 '/references/battle-tested-patterns.md':1575,2517 '/references/failure-log.md':2530 '/references/installation-guide.md':2484 '/references/playbooks':2590 '/references/playbooks/headed-browser-setup.md':2603 '/references/stealth-config.md':1075,2544 '/references/test-results.md':2555 '/references/tool-inventory.md':1486,2501 '/scripts/agentmail.sh':810,817,867,887,895,2621 '/scripts/browser-check.sh':1716,1723,1728,2650 '/scripts/mailbox.py':804,2630 '/scripts/requirements.txt':812,2641 '/tmp/example.png':277 '/travel/flights?q=flights+from+sfo+to+nrt+on+2026-04-17+return+2026-05-01':1773 '/update-guide.md':2473 '/updates.md':2460 '0':573,1080 '000':504,506,516 '1':402,493,544,548,641,688,718,864,1043,1086,1126,1128,1196,1260,1372,1837,2179,2284 '1.5':588 '10':64,770,1098,1364,1449,1459 '100':57,320,1250 '10x':529,2088 '11':1273,1328,1439 '12':1312,1447,1577,2518 '12/15':50,1248 '120':891 '123456':903 '13':1321,1386 '14':1293,1345,1378 '15':54,515,1099,1243,1338 '168s':1431 '180s':1457 '2':410,570,661,722,869,1072,1136,1138,1271,1380,1467,1801,1846,2184,2295 '200':755 '2026':1242 '21':1414 '22':1422 '25':11,34,1478,2503 '25s':1379 '2b':584 '3':419,446,503,604,653,732,877,1151,1153,1280,1350,1388,1860,1996,2301 '35s':1387 '36s':1448 '37':1405 '38':1396 '39s':1423 '4':428,748,883,1165,1167,1398,1875,2575 '40':1456 '400':494,549,689 '47k':694,758 '48s':1415 '5':437,892,912,1078,1292,1305,1407,1481 '50':1302 '59':1430 '6':444,897,1261,1416 '61s':1397 '63s':1440 '7':450,904,1100,1272,1424 '8':1432 '83s':1406 '9':1262,1301,1441 '9/10':61 '90':536 '95':1552 'a.href':747 'a.textcontent':745 'a11y':94,518,545,599,1907 'access':97,540,2379 'account':796,1275,1419 'across':1304 'act':436 'action':987,2238,2267,2434 'address':841 'agent':10,29,162,210,215,234,834,998,1083,1088,1091,1108,1113,1156,1170,1185,1193,1200,1203,1209,1216,1224,1231,1471,2465,2477 'agent-brows':28,161 'agentmail':76,348,790,801,826,1454,1607,1722,2004,2537,2622,2631,2645 'agentmail.sh':2637,2648 'agentmail.to':827,924 'agents.md':184 'ai':8,159,209,833,2464,2476 'alert':1290,1348 'altern':374 'alway':453,917,997,1016,2105,2436 'anoth':989,2352 'anthrop':158 'anthropic-ai':157 'anti':1163,2059,2112,2373,2534,2546 'anti-bot':1162,2111,2372,2533 'anti-detect':2545 'anti-pattern':2058 'api':574,2505 'append':175 'applewebkit/537.36':1101 'appli':238 'approach':375,1949,2597 'approv':963 'arg':1115,1211,1214 'around':1818 'array.from':1936 'arriv':916 'articl':307,1902,2071 'ask':286 'attempt':1804,2173 'autocomplet':1563,1742,1777,1986,2164 'autom':5,26,87,1063,2190,2599 'automationcontrol':1120 'autonom':1336 'autonomi':1246 'b':590 'back':1491 'backup':927 'balloon':686 'base':14,1176 'bash':153,1081,1715 'basic':1045 'beat':1132,1148,1160,1173 'behavior':1539 'benchmark':48,1239,1247,2523,2531,2557 'blank':2376 'blind':2115,2393 'blink':1118 'block':358,960,1177,1460,1828,1990,2340,2375 'blocker':60,1253 'blow':1913 'booking.com':1968 'boss':1451 'bot':359,1164,2113,2374,2535,2553 'browser':2,4,23,25,30,86,107,114,163,221,260,266,270,274,278,282,323,338,347,392,396,403,411,429,432,438,451,551,577,610,709,719,723,733,873,880,900,906,971,977,994,999,1019,1023,1051,1084,1089,1109,1114,1157,1171,1186,1194,1201,1210,1217,1220,1225,1232,1245,1529,1531,1533,1542,1555,1653,1672,1710,1753,1781,1829,1831,1848,1882,1884,1918,2066,2092,2101,2120,2125,2129,2135,2138,2161,2166,2189,2210,2258,2275,2277,2290,2309,2326,2357,2358,2368,2398,2414,2528,2615,2651,2657 'browser-op':1,220 'browserbas':1237 'brutal':1425,1433,1442 'budget':295,700,1916 'build':2525,2607 'built':317,2076 'built-in':316,2075 'bulk':715 'bundl':2452 'button':495,1626 'button/input/link':427 'bypass':1792,1821,1985 'calendar':1694,1974 'call':1370,2635 'capabl':1254 'captcha':596,1464,2181,2378 'captur':264 'case':1554,2559 'categori':1482,1487 'caus':983 'cell':1705 'chain':1324 'challeng':1358,2383 'chang':229,241,2254,2447 'changelog':204,2462 'charact':1558,1560 'cheaper':530,2089 'cheapli':787 'check':216,365,1515,1600,1635,1707,1718,2116,2215,2293,2334,2385,2467,2654 'checkout':1428 'chrome/132.0.0.0':1105 'chromium':1038,1207,1212 'chromium/chrome':93 'claud':165,2489 'claude/skills/browser-ops':172 'clear':1514,1544 'cli':174,808,1719,1726,2493,2623 'click':332,430,881,907,1506,1532,1590,1601,1618,1624,1698,1703,2276 'click/fill':557 'click/fill/type':471 'close':279,452,454,1017,1024,1034,1522,2102,2106,2363,2369 'cloud':1155,1234 'cloudflar':361,1133,1149,1356,1443,1462,1992,2028,2174 'cloudflare-protect':360 'code':9,166,854,930,2490 'codex':173,2492 'collis':985,2344 'commerc':1393 'common':1571,1928,2188 'compact':502,1617 'complet':517,1578 'complex':1277,1583,1739,1809 'compon':1750 'condens':507 'config':372,1731 'configur':1041,2549 'contain':633,807,2640 'content':178,305,512,595,676,1649,1870,1895,2069,2349 'content-heavi':1894 'content-rich':675 'control':92,1003 'cooki':1259 'copi':167 'core':393 'cost':730 'creat':819,836,865,868,1608 'creation':954 'critic':968 'cross':1825 'cross-origin':1824 'css':121,620,1922,2048,2298 'curl':386 'custom':247,1058,1204,1569,1748,1775 'daemon':978,1720,1727 'dashboard':682 'data':298,311,384,602,635,648,671,736,753,786,1402,1926 'data-heavi':670 'date':1281,1699,1704 'dblclick':1507 'decis':280,2031,2580 'default':499,524,568,1006,1184,1208,1746,1789,2084 'demo':1264 'deni':2380 'dens':696 'depend':811,2643 'detail':1484,2485,2538,2563 'detect':923,2547,2554,2619 'dif':251 'direct':1759,1862,2024,2311 'disabl':1065,1117 'disable-blink-featur':1116 'dispos':829 'document':110,1899 'document.queryselector':612,1857,1930 'document.queryselectorall':739,1933,1937 'document.title':2426,2429 'doesn':644,2322 'dom':109,128,606,1669,1816,2253 'domain':925 'done':449,456,1021,2108 'doubl':2212 'drag':1288 'drag-drop':1287 'drop':1289 'dynam':1329,1648 'e':1392,1940 'e-commerc':1391 'e.g':1530,1833 'e.textcontent':1941 'e1':417,465 'e2':418,466 'e2e':1453,2001 'effici':484 'element':120,129,462,632,1682,1845,2224,2236,2272,2303 'email':343,350,788,794,830,850,886,910,957,1310,2627 'en':2244 'encod':1767 'end':71,73,944,946,1315,1317,2104 'end-to-end':70,943,1314 'enter':898 'entir':1796,1905 'env':1001,1129,1179,1181 'environ':1048,2499 'error':1343,1630,1636,2186,2191,2195,2318,2401 'escal':636,1069,1124,2388,2394,2578 'etc':363 'eval':782,2406,2417 'evalu':611,710,734,1520,1654,1673,1849,1887,1919,2014,2043,2399,2415 'evaluate-on':1886,2042 'event':2170 'everi':395 'everyth':501 'evid':1256,1667,2153 'exact':630,2514 'exampl':131,147,1581,1770,2510 'example.com':269 'exclud':58,1251 'exist':2227 'expect':2418 'experiment':576 'expir':931 'export':1082,1087,1107,1112 'express':2407,2416,2421 'extern':59,965,1252,1353 'extract':607,625,716,735,769,852,893,896,932,950,1384,1403,1611,1651,1670,1851,1927,2015,2020 'fail':1803,2110,2239,2279,2320,2435 'failur':1351,2346 'fallback':2300 'faster':2143 'featur':227,1119,2470 'feb':1241 'field':1269,1545,1551,1595,1700,1879,2165 'fight':1814 'file':83,249,1285 'fill':331,433,561,870,874,901,1508,1535,1543,1589,1598,1609,1612,1644,1830,1883,2025,2139,2141,2162,2278 'filter':1332,1412 'final':1450 'find':425,2536 'first':288,703,814,2118,2397,2495,2656 'first-tim':813,2494 'fix':1637 'flag':1064 'flight':1326,1410,1769,1978 'flow':139,261,799,939,1320,1337,1394,1660,2629 'focus':1513 'fold':2308 'folder':170 'follow':244,398,1628 'forget':1032,2100 'form':330,560,844,872,879,1278,1346,1550,1749,1757,1810,1836 'forum':681,956 'forward':1492 'found':2274 'framework':88 'free':1134,2033 'fresh':2262 'friend':102 'full':187,508,514,532,942,1073,1483,1717,2000,2082,2502,2556 'fulli':2288 'g':156 'gap':1474 'gate':964,1360 'gauntlet':1445 'gecko':1104 'general':2029,2051,2430 'geo':1745,1788 'geo-default':1744,1787 'get':289,382,415,555,1497,1499,1501,1503,2261 'github':151,1322,1400 'github.com':32 'github.com/anthropics/agent-browser).':31 'give':777,783 'go':406,1817 'googl':1325,1409,1768,1977 'gotcha':909 'guid':1074,2550,2610 'h2':1938 'handl':2187 'hard':1399,1408,1417 'head':1056,1085,1195,1197,2053,2608,2614 'health':1706,2653 'heavi':672,1891,1896 'high':1606,1661,2618 'high-detect':2617 'hit':2552 'hn':679,1265,1382,1418 'home/.agent-browser/profiles/stealth':1111 'hot':2012 'hotel':1973 'hover':1512 'href':746 'html':1504 'ident':144 'identifi':420,1842 'ifram':1291,1349,1427,1820,1827,1844,1853,1858,1869,2018,2021 'ignor':1780 'implement':1015 'inbox':831 'incom':848 'index':2454 'input':497,1783,2150 'inspect':263 'instal':155,188,212,2486 'instant':1548 'instead':2064 'instruct':2474 'intel':1094 'interact':18,40,273,328,414,441,492,513,526,554,564,684,726,1295,1505,1806,1876,2086,2131,2180 'ip':1175 'ip-bas':1174 'isol':1011,1191 'item':771 'js':713,1330,1655,1674,2420 'json':623,750,1678 'json-ld':622,1677 'json.stringify':738 'kernel':1154,1159,1236 'key':1178,1584,1965,2156 'keystrok':1562,2148,2169 'keystroke-sensit':2147 'keyword':2412 'khtml':1102 'know':629 'knowledg':781 'known':356,522,616,619 'l1':2035 'l3':2038 'landmark':1971 'languag':1437 'last':520,2450 'latest':240,1146 'launch':1213 'layer':1042,1071,1127,1137,1152,1166,1466,1795,1995,2178,2183,2389,2548 'ld':624,1679 'leav':1035 'length':1935 'let':90 'level':2396 'lifecycl':1276,1420 'like':464,1103 'linear':1452,1988 'link':496,856 'load':1950,2119,2220,2289,2324,2459 'local':248,579 'log':2564 'login':329,1257,1587 'login/authorization':138 'long':1901 'longer':2209 'loop':400,1620,1693 'lose':990 'low':1588,1652,1671 'mac':1095 'macintosh':1093 'mailbox':822,838,866 'major':2252 'manag':22,44 'map':742,1939 'massiv':1911 'may':369,2225,2304,2445 'mcp':1007,1192 'medium':1373,1381,1389,1597,1615,1623,1632,1641,1687,1697 'method':1538 'mileston':2157 'min':1079 'miss':601 'mix':2030 'mkdir':1121 'mode':272,413,440,486,487,553,725,1057,1198,1889,2045,2054,2081,2087,2609 'model':112,541 'moder':962,1359 'month':1702 'mozilla/5.0':1092 'multi':1268,1334,1436,1594,1658 'multi-field':1267,1593 'multi-languag':1435 'multi-sit':1333,1657 'multipl':1294,1662 'must':2360 'name':1005,1189,1525 'navig':17,39,262,267,404,482,559,720,988,1489,1490,1640,1663,1701,1758,1861,2023,2205,2250,2319,2327 'need':297,370,390,510,523,650,767,2133,2513 'network':2317 'new':226,2270,2469,2527,2542,2588 'next':1030,1619 'non':2124 'non-brows':2123 'none':1215,1223,1230,1238 'normal':1880,2026 'notion':69,861,940,1313,1998 'npm':154 'npx':1142 'oauth':135,1318,1323,1621,1625 'object':111 'observ':19,41,1494,2451 'often':1779 'old.reddit.com':1376,2010 'onboard':952 'one':976,986,2096 'op':3,24,222 'optim':668 'origin':1826 'orphan':1037,2365 'os':1096 'otp':77,798,853,899,929,948,1311,1605,2005 'otp/link':894 'outag':1355 'overhead':324 'overwrit':254 'p':1122,1931 'page':103,119,409,477,563,597,617,673,678,692,697,706,764,953,992,1306,1517,1840,1874,1892,1897,2217,2233,2287,2321,2348,2377,2384,2443 'pagin':1297,1613 'parallel':970,981,2091 'param':1691,1791,2508 'paramet':1764 'pars':749 'partial':1455,1989 'pass':51,1249,1377,1385,1395,1404,1413,1421,1429,1438,1446,1969,1979,1999,2009,2019,2041 'patch':1141,1145,1147 'path':276,637,1125,1222,2455 'pattern':701,824,858,1573,1579,1582,1737,1822,1966,2060,2521 'pay':729 'payment':1835 'per':979,1009,1944,2592 'per-sess':1008 'per-sit':1943,2591 'perform':2478 'persist':1060,1219,2055,2222,2333 'picker':1282 'pkp':955 'plan':2583 'playbook':1942,1953,1962 'playwright':13,37,84,2198 'playwright-bas':12 'poll':846,884,888,918,937,949,1610 'popul':1736,1983 'possibl':259 'post':1684 'post-search':1683 'pre':1735,1766,1982 'pre-encod':1765 'pre-popul':1734,1981 'prefix':1527 'prerequisit':190 'press':1510 'previous':2242 'price':132,306,1975,2070 'principl':2431 'pro':1150 'process':1039 'profil':1061,1110,1218,1221,2056,2604 'progress':66,1366 'project':181 'prompt':935 'protect':362 'protocol':1696 'provid':145,828,1044,1158,1233,1235 'proxi':1169,1172,1226,1227 'public':310 'purpos':1183 'python':802,2632,2642 'q':1984 'quick':255,1076,1475,1724 'quot':1303 'quotes.toscrape':1266 'qwen3':582 'qwen3-vl-2b':581 'random':2345 're':2229,2256,2315,2438 're-run':2255 're-snapshot':2228,2314,2437 'react':1283 'react/material':1776 'read':235 'reader':101 'rebrows':1140,1144 'rebrowser-patch':1139,1143 'recip':1946,2594 'recoveri':1344,1631,1692,2193,2197 'reddit':680,1374,2008 'redirect':141,1319,1622,1629,2381 'ref':416,422,431,434,458,469,472,556,875,882,902,908,2237,2245,2246,2263,2271,2280 'refer':463,1477,1934,2052,2506 'references/failure-log.md':366,2117,2342 'references/installation-guide.md':194,195 'references/playbooks/booking-com.md':1967 'references/playbooks/cloudflare-sites.md':2027 'references/playbooks/google-flights.md':1976 'references/playbooks/headed-browser-setup.md':2050 'references/playbooks/linear-signup.md':1987 'references/playbooks/notion-signup.md':1997 'references/playbooks/reddit-scraping.md':2007 'references/playbooks/stripe-iframe.md':2016 'references/playbooks/wikipedia-extraction.md':2039 'references/stealth-config.md':2386 'registr':1270,1596 'regular':1873 'releas':1025 'relev':1952 'reload':1493 'render':1867 'repair':2500 'repeat':445 'repo':1401 'represent':117 'requir':327,342,666,793,1465,1994,2182 'reset':480,2247 'residenti':1168 'resist':1752 'resort':521 'resourc':2453 'resubmit':1638 'result':309,443,751,1240,1369,1689,2532 'retri':2013,2109,2207,2265,2325,2371,2392,2441 'return':461,2411,2428 'revert':1785 'review':2566 'rich':677 'root':183 'rule':124,376,967 'run':993,1054,2090,2094,2257,2361 'saa':1307,1602 'safari/537.36':1106 'sauc':1263 'saucedemo':1390 'scrape':1298,1375,1614 'screen':100 'screen-reader-friend':99 'screenshot':275,571,578,1496,1666,2152,2154 'scroll':1518,2310 'sdk':2633 'search':308,1331,1411,1565,1685,1972 'search-as-you-typ':1564 'second':914 'section':352 'see':193,349,823,1574,2341 'sel':613 'select':1284,1511,1599 'selector':122,621,657,780,1656,1675,1923,1929,2049,2203,2299 'self':806,2639 'self-contain':805,2638 'sensit':2149 'sequenc':333 'sequenti':996,2095,2362 'server':1228 'servic':922 'session':21,43,334,966,972,980,1000,1004,1010,1027,1052,1187,1188,1258,1300,1342,1521,1665,2093,2343,2366,2661 'set':1546,2612 'setup':152,800,816,818,1077,2057,2497,2605,2649 'setup/create/poll/extract':2625 'share':975 'ship':200 'show':489,646 'sign':148 'signific':293 'signup':74,797,843,862,871,941,947,1308,1603,2002 'simpl':691 'simplest':258 'sinc':2448 'singl':1341,1664 'site':1068,1335,1340,1659,1900,1945,1961,1963,2114,2176,2336,2543,2593,2602,2620 'skill':6,169,199,223,1473,2483 'skill-browser-ops' 'skill.md':177 'skip':1755,1903,2151 'snapshot':108,271,412,424,439,460,485,547,552,643,685,702,724,759,776,1495,1534,1592,1616,1634,1646,1688,1838,1904,2047,2080,2230,2259,2283,2316,2439 'sort':2011 'source-buildoak' 'spa':1327,1639 'spas':1740 'specif':127,1681 'src':1855,1859,2022 'ssl':1354 'stabl':474 'stack':1714,2652 'stale':2235 'standard':137,1549,1586 'standout':68 'start':164,256,368,638,1709,1955 'state':335,478,984,2234,2351,2444 'statement':2424 'static':304,2068 'status':1732,1964 'stay':196 'stealth':371,1040,1046,1444,1468,1721,1729,1730,2185,2395,2577,2584 'step':1274 'still':2219 'strategi':928,2194,2585 'stricter':1067 'string':1206 'stripe':1426,1834,2017 'structur':104,116,562,707,728,752,2461 'submit':134,878,905,934,951,1633 'suffici':534 'suggest':2172 'suit':49,56,67,1362 'surgic':737 'symptom':2196 'syntax':2400,2516 'syntaxerror':2402 'system':459 'take':911 'tar':587 'target':126,355,421,605,656,712,1650,1668,1921,2540,2589 'task':55,65,397,538,792,995,1031,1244,1255,1365,1368,1957,2126,2353,2359,2658 'techniqu':1585 'tell':213,232 'terminolog':79 'test':1361,1458,1960,2558,2570,2601 'text':265,296,401,435,511,542,717,863,1022,1502 'textcont':614,1932 'thread':1383 'thumb':378 'tier':539,543,569,603,640,652,660,1135,1367,2034,2576 'time':815,1371,2099,2496 'timeout':890,920,2199,2206,2214 'timeouterror':2200 'titl':744,1500 'titlelin':740 'token':294,321,483,575,609,667,690,695,756,1915,2404 'tokens/page':488,550 'tool':15,35,91,285,319,339,974,1476,1479,1488,1524,2078,2121,2504,2515 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-tools' 'topic-automation' 'topic-browser-automation' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'transpar':1357 'tree':95,98,281,509,519,546,600,1908,2032,2581 'tri':651,2296 'trigger':1561,2168 'troubleshoot':192 'trust':2606 'turnstil':1463,1993,2037,2175 'two':47,1339 'type':775,1296,1509,1537,1556,1557,1568,1642,1754,1782,1832,1885,2136,2144,2167 'ua':1059,1205 'ui':586 'ui-tar':585 'uncheck':1516 'understand':664,705,727 'unexpect':2350,2403 'updat':197,231,2472,2479,2481 'update-guide.md':206,236,245 'updates.md':203,217,243 'upload':1286 'url':268,405,721,1229,1498,1733,1762,1790,1856,1865,1980,2294,2331 'usag':982 'use':80,105,313,337,346,467,490,626,659,762,839,1540,1799,1847,1881,1917,2065,2079,2085,2128,2134,2160,2355,2410,2425,2646 'user':1090,1202 'username@agentmail.to':876,889 'v1':2560 'v2':1363,2561 'valid':45,859,938,1347,1948,2243,2519,2596 'valu':1547 'var':1002,1130,1180,1182 'variabl':608,1049 'verif':78,191,344,351,789,795,849,958,1686,2006,2159,2628 'verifi':442,1690,1712,2232,2285 'via':27,1047 'visual':593,663 'visual-on':592 'vl':583 'vlm':572,580 'vs':283,757,1536,2036 'wait':1519,1591,1627,1645,2201,2211,2291 'walkthrough':189,2487 'wast':292 'web':301 'webfetch':315,2074 'websearch':314,2072 'widget':1279,1570,1695,1743,1778,1794,1811 'wikipedia':1434,1898,2040 'within':475 'work':959,1711,2140,2573 'workaround':1970 'workflow':394,1572,2520,2529 'wrap':36 'wrapper':803,809,2624,2634 'wreck':699 'wrong':291,2347 'www.google.com':1772 'www.google.com/travel/flights?q=flights+from+sfo+to+nrt+on+2026-04-17+return+2026-05-01':1771 'x':1097 'yes':312,336,345,364 'yet':1014 'zero':2046","prices":[{"id":"a0cf4cb9-927e-4e71-8920-8f852c11749f","listingId":"2ea494c6-7b1b-4727-b7a0-2454cc854820","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"buildoak","category":"fieldwork-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:07:11.466Z"}],"sources":[{"listingId":"2ea494c6-7b1b-4727-b7a0-2454cc854820","source":"github","sourceId":"buildoak/fieldwork-skills/browser-ops","sourceUrl":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/browser-ops","isPrimary":false,"firstSeenAt":"2026-04-18T23:07:11.466Z","lastSeenAt":"2026-04-22T19:06:32.497Z"}],"details":{"listingId":"2ea494c6-7b1b-4727-b7a0-2454cc854820","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"buildoak","slug":"browser-ops","github":{"repo":"buildoak/fieldwork-skills","stars":15,"topics":["agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills","codex"],"license":"apache-2.0","html_url":"https://github.com/buildoak/fieldwork-skills","pushed_at":"2026-03-18T08:36:25Z","description":"Battle-tested skills for AI agents that do real work","skill_md_sha":"fe771f881b03007dd039aa4b63893308038957df","skill_md_path":"skills/browser-ops/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/browser-ops"},"layout":"multi","source":"github","category":"fieldwork-skills","frontmatter":{"name":"browser-ops","description":"Browser automation skill for AI coding agents. 25 Playwright-based tools for navigation, interaction, observation, and session management."},"skills_sh_url":"https://skills.sh/buildoak/fieldwork-skills/browser-ops"},"updatedAt":"2026-04-22T19:06:32.497Z"}}