mcpField
B
Browser

Browser

github.com/danielmiesslerDevelopment19.7k136 installsUpdated 4d ago
Repository

About Browser

Browser is a skill for browser automation using the agent-browser CLI. It supports headless sessions, persistent authentication profiles, page interaction, screenshots, and reusable recipes for browser tasks.

Key features

  1. 01Automates pages with agent-browser CLI
  2. 02Persists authentication profiles
  3. 03Supports page interaction and screenshots
  4. 04Batches commands into sessions
  5. 05Runs YAML story validations and recipes

Use cases

  1. 01Browse pages with saved authentication
  2. 02Capture page screenshots or PDFs
  3. 03Run repeatable form-filling recipes
  4. 04Validate UI stories across pages

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/danielmiessler/lifeos --skill browser

After installing, type/browserin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

README.md
Recipes/
README.md
FormFill.md
SummarizePage.md
ScreenshotCompare.md
Stories/
README.md
ExampleApp.yaml
HackerNews.yaml
Workflows/
Automate.md
ReviewStories.md
Update.md

Details

From the project README

Customization

Before executing, check for user customizations at: ~/.claude/PAI/USER/SKILLCUSTOMIZATIONS/Browser/

If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults.

MANDATORY: Voice Notification (REQUIRED BEFORE ANY ACTION)

You MUST send this notification BEFORE doing anything else when this skill is invoked.

  1. Send voice notification:

    curl -s -X POST http://localhost:31337/notify \
      -H "Content-Type: application/json" \
      -d '{"message": "Running the WORKFLOWNAME workflow in the Browser skill to ACTION"}' \
      > /dev/null 2>&1 &
    
  2. Output text notification:

    Running the **WorkflowName** workflow in the **Browser** skill to ACTION...
    

This is not optional. Execute this curl command immediately upon skill invocation.

Browser v10.0.0 — Browser Automation

Tool: agent-browser — headless Rust CLI daemon with persistent auth profiles.

If agent-browser isn't working or a site has bot detection, use the Interceptor skill instead. Interceptor is a Chrome extension with zero CDP fingerprint — passes all major bot detection checks.

Does the site need auth?

Use --profile ~/.agent-browser/profiles/<site>. If profile exists, auth is automatic. If not, run --headed once for login, then headless forever.


agent-browser

Native Rust daemon. Persistent profiles for auth. Headless by default.

Quick One-Shot Commands
agent-browser open https://example.com && agent-browser screenshot /tmp/shot.png
agent-browser open https://example.com && agent-browser screenshot --full /tmp/full.png
agent-browser open https://example.com && agent-browser pdf /tmp/page.pdf
Session-Based Interaction
# 1. OPEN
agent-browser open https://example.com

# 2. WORK
agent-browser snapshot                    # a11y tree with @eN refs (for AI)
agent-browser click @e12                  # click by ref
agent-browser fill @e15 "hello"           # fill input by ref
agent-browser screenshot /tmp/shot.png    # screenshot
agent-browser eval "document.title"       # run JS

# 3. CLOSE — when done
agent-browser close
Authenticated Browsing (Per-Site Profiles)

First-time setup (headed, one-time):

# Close any running daemon first
agent-browser close --all

# Launch headed with persistent profile — log in manually
agent-browser --headed --profile ~/.agent-browser/profiles/<site> open https://example.com

# After login completes, all future runs reuse the profile headlessly

Subsequent runs (headless, automatic):

agent-browser --profile ~/.agent-browser/profiles/<site> open https://example.com
# Auth is automatic — cookies, IndexedDB, cache all persist

To add a new site: Close daemon, run --headed --profile ~/.agent-browser/profiles/<name> once, log in, done.

Auth Vault (Alternative)
agent-browser auth save mysite --url https://example.com --username user --password-stdin
agent-browser auth login mysite    # auto-fills login form
agent-browser auth list            # show saved profiles
Batch Execution
# Send multiple commands in one shot (fewer tool calls = fewer tokens)
echo '[["open","https://example.com"],["snapshot"],["click","@e12"]]' | agent-browser batch
Advanced Features
# Connect to already-running Chrome
agent-browser --auto-connect snapshot

# Network interception
agent-browser route "**/*.{png,jpg}" abort     # block images
agent-browser route "https://api.com/*" mock '{"data":"test"}'

# Device emulation
agent-browser --device "iPhone 15" open https://example.com

# Session persistence (cookies + localStorage by name)
agent-browser --session-name myapp open https://example.com
agent-browser Rules
  • Daemon model — first command starts daemon, subsequent commands connect instantly.
  • Refs use @eN syntax — @e12 not e12.
  • Profiles persist everything — cookies, IndexedDB, cache, localStorage.
  • Close with agent-browser close or close --all to kill daemon.

Delegating Browser Work to Agents

When you need parallel or background browser work (scraping multiple pages, monitoring), spawn general-purpose agents with browser instructions. No dedicated browser agent type needed — this skill IS the expertise.

Agent(subagent_type="general-purpose", prompt="
  Use agent-browser CLI for all browser work.
  Commands: open <url>, snapshot, click @eN, fill @eN 'text', screenshot /path.
  For authenticated sites: --profile ~/.agent-browser/profiles/<site>
  Refs use @eN syntax from snapshots.
  [your specific task instructions here]
")

For parallel isolation, each agent uses --session <name>:

Agent 1: agent-browser --session scrape1 open https://site-a.com
Agent 2: agent-browser --session scrape2 open https://site-b.com

Fallback: If agent-browser fails or the site has bot detection, use the Interceptor skill instead.

Legacy built-in agents — DEPRECATED, do not invoke. BrowserAgent and UIReviewer are Claude Code built-ins whose internals cannot be modified; they run browser automation that PAI no longer uses. Route all browser work through the Interceptor skill (verification, authenticated flows) or agent-browser (headless scraping).


Workflow Routing

Trigger WordsWorkflowWhat It Does
"review stories", "run stories", "ui review", "validate stories"Workflows/ReviewStories.mdFan out YAML stories to parallel UIReviewers
"automate", "recipe", "template", or a recipe nameWorkflows/Automate.mdLoad and execute a parameterized recipe template
"update", "check version"Workflows/Update.mdVerify browser tools are current and working

Stories — YAML User Story Validation

Define user stories in YAML and validate them in parallel with UIReviewer agents.

Directory: skills/Browser/Stories/

name: App Name
url: https://example.com
stories:
  - name: Story name
    steps:
      - action: click
        target: "LLM-readable description"
    assertions:
      - type: snapshot_contains
        text: "expected text"

Run with: "review stories" or "run stories in HackerNews.yaml"


Recipes — Parameterized Templates

Reusable Markdown templates with {PROMPT} injection.

Directory: skills/Browser/Recipes/

RecipeDescriptionTool
SummarizePage.mdExtract content summaryBrowserAgent
ScreenshotCompare.mdBefore/after comparisonagent-browser
FormFill.mdFill form fieldsagent-browser

Run with: "automate SummarizePage for https://example.com"


Execution Log

After completing any workflow, append a single JSONL entry:

echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"Browser","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/PAI/MEMORY/SKILLS/execution.jsonl

Comments

Markdown supported