browser-discovery

Browser automation for documentation discovery. Use when curl fails on JS-rendered sites, when detecting available browser tools, or when configuring browser-based documentation collection.

$ Installieren

git clone https://github.com/Consiliency/treesitter-chunker /tmp/treesitter-chunker && cp -r /tmp/treesitter-chunker/.ai-dev-kit/skills/browser-discovery ~/.claude/skills/treesitter-chunker

// tip: Run this command in your terminal to install the skill


name: browser-discovery description: "Browser automation for documentation discovery. Use when curl fails on JS-rendered sites, when detecting available browser tools, or when configuring browser-based documentation collection."

Browser Discovery Skill

Detect and use browser automation tools for documentation discovery when static fetching fails.

Variables

VariableDefaultDescription
PREFERRED_TOOLautoauto, antigravity, cursor, playwright
WAIT_TIMEOUT3Seconds to wait for JS rendering
MAX_PAGES50Maximum pages to discover per site

Instructions

MANDATORY - Follow the Workflow steps below when browser automation is needed.

  • Always try curl first unless js_required: true is set
  • Detect available browser tools before attempting automation
  • Prefer accessibility snapshots over screenshots for link extraction

Quick Decision Tree

Do you need browser automation?
│
├─ Curl returns full content? ──────────â–ș NO - Use curl (docs-fetch-url)
│
├─ Curl returns <1KB or 403? ───────────â–ș YES - Continue below
│
Which browser tool to use?
│
├─ browser_subagent available? ─────────â–ș antigravity-browser.md
│
├─ In Cursor IDE? ──────────────────────â–ș cursor-browser.md
│
├─ Chrome debugging on :9222? ──────────â–ș playwright-browser.md (wrapper)
│
└─ No browser tool? ────────────────────â–ș See "No Browser Available" section

Red Flags - STOP and Reconsider

If you're about to:

  • Use browser automation when curl would work
  • Skip tool detection and assume a specific tool exists
  • Take screenshots when snapshot would provide structured data
  • Navigate without waiting for JS rendering

STOP -> Check the appropriate cookbook -> Then proceed

Workflow

  1. CHECKPOINT: Verify browser automation is actually needed
    • Curl response < 1KB?
    • Curl gets 403 Forbidden?
    • js_required: true in config?
  2. Detect available browser tools (priority order)
  3. Select best available tool
  4. CHECKPOINT: Read the cookbook for selected tool
  5. Execute browser-based discovery
  6. Parse results and return structured data

Tool Detection Priority

PriorityToolDetectionBest For
1Antigravity browser_subagentTool in tool listZero-config native
2Cursor MCP (in-IDE)mcp__cursor__browser_*In Cursor IDE
3Cursor CLIwhich cursor-agentDelegation from CLI
4Playwright (wrapper)curl localhost:9222/json/versionFull automation

Cookbook

Antigravity Browser

  • IF: browser_subagent tool available
  • THEN: Read cookbook/antigravity-browser.md

Cursor Browser

  • IF: In Cursor IDE or cursor-agent available
  • THEN: Read cookbook/cursor-browser.md

Playwright Browser

  • IF: Chrome debugging accessible at localhost:9222
  • THEN: Read cookbook/playwright-browser.md

When Browser Is Needed

Signs that a site requires browser automation:

  • Curl response < 1KB (JS-rendered content)
  • Response contains "please enable javascript"
  • Framework markers: __NEXT_DATA__, window.__remixContext, window.__NUXT__
  • Only CSS/font resources returned (no text content)

No Browser Available

If no browser tool is detected:

No browser automation tool detected.

Setup options:
1. Antigravity IDE: Built-in (zero config)
2. Cursor: cursor-agent available when installed
3. Claude Code: Launch Chrome with debugging:
   google-chrome --remote-debugging-port=9222

   Then use the Playwright wrapper:
   python3 .claude/ai-dev-kit/dev-tools/mcp/wrappers/playwright_wrapper.py navigate "https://..."

Output

Return discovered pages as structured data:

{
  "pages": [
    {"url": "...", "title": "...", "section": "..."}
  ],
  "nav_structure": "sidebar | tabs | accordion",
  "js_required": true
}