Back to Skills
    🦞

    browser-ladder

    Climb the browser ladder β€” start free, escalate only

    By @ktpriyatham
    View on GitHub
    SKILL.md
    ---
    name: browser-ladder
    version: 1.0.0
    description: Climb the browser ladder β€” start free, escalate only when needed. L1 (fetch) β†’ L2 (local Playwright) β†’ L3 (BrowserCat) β†’ L4 (Browserless.io for CAPTCHA/bot bypass).
    metadata:
      clawdbot:
        emoji: "πŸͺœ"
        requires:
          bins:
            - node
            - docker
        env:
          - name: BROWSERCAT_API_KEY
            description: BrowserCat API key (free tier) - get at https://browsercat.com
            required: false
          - name: BROWSERLESS_TOKEN
            description: Browserless.io token ($10/mo) - get at https://browserless.io
            required: false
    ---
    
    # Browser Ladder πŸͺœ
    
    Climb from free to paid only when you need to.
    
    ## Quick Setup
    
    Run the setup script after installation:
    ```bash
    ./skills/browser-ladder/scripts/setup.sh
    ```
    
    Or manually add to your `.env`:
    ```bash
    # Optional - only needed for Rungs 3-4
    BROWSERCAT_API_KEY=your-key    # Free: https://browsercat.com
    BROWSERLESS_TOKEN=your-token   # Paid: https://browserless.io
    ```
    
    ## The Ladder
    
    ```
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  πŸͺœ Rung 4: Browserless.io (Cloud Paid)     β”‚
    β”‚  β€’ CAPTCHA solving, bot detection bypass    β”‚
    β”‚  β€’ Cost: $10+/mo                            β”‚
    β”‚  β€’ Requires: BROWSERLESS_TOKEN              β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    β”‚  πŸͺœ Rung 3: BrowserCat (Cloud Free)         β”‚
    β”‚  β€’ When local Docker fails                  β”‚
    β”‚  β€’ Cost: FREE (limited)                     β”‚
    β”‚  β€’ Requires: BROWSERCAT_API_KEY             β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    β”‚  πŸͺœ Rung 2: Playwright Docker (Local)       β”‚
    β”‚  β€’ JavaScript rendering, screenshots        β”‚
    β”‚  β€’ Cost: FREE (CPU only)                    β”‚
    β”‚  β€’ Requires: Docker installed               β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    β”‚  πŸͺœ Rung 1: web_fetch (No browser)          β”‚
    β”‚  β€’ Static pages, APIs, simple HTML          β”‚
    β”‚  β€’ Cost: FREE                               β”‚
    β”‚  β€’ Requires: Nothing                        β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    
    Start at the bottom. Climb only when needed.
    ```
    
    ## When to Climb
    
    | Situation | Rung | Why |
    |-----------|------|-----|
    | Static HTML, APIs | 1 | No JS needed |
    | React/Vue/SPA apps | 2 | JS rendering |
    | Docker unavailable | 3 | Cloud fallback |
    | CAPTCHA/Cloudflare | 4 | Bot bypass needed |
    | OAuth/MFA flows | 4 | Complex auth |
    
    ## Decision Flow
    
    ```
    Need to access a URL
             β”‚
             β–Ό
        Static content? ──YES──▢ Rung 1 (web_fetch)
             β”‚ NO
             β–Ό
        JS rendering only? ──YES──▢ Rung 2 (Playwright Docker)
             β”‚ NO                        β”‚
             β”‚                     Success? ──NO──▢ Rung 3
             β–Ό                           β”‚ YES
        CAPTCHA/bot detection? ────────────────────▢ DONE
             β”‚ YES
             β–Ό
        Rung 4 (Browserless.io) ──▢ DONE
    ```
    
    ## Usage Examples
    
    ### Rung 1: Static content
    ```javascript
    // Built into Clawdbot
    const content = await web_fetch("https://example.com");
    ```
    
    ### Rung 2: JS-rendered page
    ```bash
    docker run --rm -v /tmp:/output mcr.microsoft.com/playwright:v1.58.0-jammy \
      npx playwright screenshot https://spa-app.com /output/shot.png
    ```
    
    ### Rung 3: Cloud browser (BrowserCat)
    ```javascript
    const { chromium } = require('playwright');
    const browser = await chromium.connect('wss://api.browsercat.com/connect', {
      headers: { 'Api-Key': process.env.BROWSERCAT_API_KEY }
    });
    ```
    
    ### Rung 4: CAPTCHA bypass (Browserless)
    ```javascript
    const { chromium } = require('playwright');
    const browser = await chromium.connectOverCDP(
      `wss://production-sfo.browserless.io?token=${process.env.BROWSERLESS_TOKEN}`
    );
    // CAPTCHA handled automatically
    ```
    
    ## Cost Optimization
    
    1. **Start low** β€” Always try Rung 1 first
    2. **Cache results** β€” Don't re-fetch unnecessarily  
    3. **Batch requests** β€” One browser session for multiple pages
    4. **Check success** β€” Only climb if lower rung fails
    
    ## Get Your Keys
    
    | Service | Cost | Sign Up |
    |---------|------|---------|
    | BrowserCat | Free tier | https://browsercat.com |
    | Browserless.io | $10+/mo | https://browserless.io |
    
    Both are optional β€” Rungs 1-2 work without any API keys.