Files
browse/CLAUDE.md
T
Adam Ladachowski 15f4ef8d54 Add plugin integration docs with correct MCP tool names
Document that when installed as browse@saiden plugin, MCP server is
named 'context' and tools are accessed as mcp__context__*.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 17:27:47 +01:00

5.8 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Build & Development

npm install                    # Install dependencies
npx playwright install webkit  # Install WebKit browser
npm run build                  # Compile TypeScript to dist/
npm run dev                    # Watch mode compilation
npm start                      # Run the CLI (after build)

Lint, Format & Typecheck

npm run check                  # Run all checks (lint + format)
npm run fix                    # Fix all auto-fixable issues
npm run lint                   # Lint only
npm run lint:fix               # Lint with autofix
npm run format                 # Check formatting
npm run format:fix             # Fix formatting
npm run typecheck              # TypeScript type checking

Code Style

  • Short methods: Keep methods under 20 lines. Extract logic into focused helper methods.
  • Single responsibility: Each class handles one concern. Split large classes by domain.
  • Class structure:
    • ClaudeBrowser - browser lifecycle and page interactions
    • BrowserServer - HTTP server and request handling
    • Logger (planned) - colored console output
  • Naming: Commands use verbNoun pattern (e.g., getCookies, setStorage).
  • Types: All commands in discriminated union. Add new commands to BrowserCommand type.

Architecture

This is a TypeScript library providing headless browser automation via Playwright WebKit. It has three modes of operation:

  1. CLI (src/cli.ts) - Direct command-line usage for screenshots, clicking, typing, and querying
  2. Server (src/server.ts) - HTTP server accepting JSON commands via POST requests
  3. Library (src/index.ts) - Programmatic API via ClaudeBrowser class

Core Components

  • ClaudeBrowser (src/browser.ts) - Main class wrapping Playwright WebKit. Handles browser lifecycle, navigation, and all DOM interactions. Uses executeCommand() to process typed command objects.
  • BrowserServer (src/server.ts) - HTTP server that wraps ClaudeBrowser. Accepts JSON POST requests and returns JSON responses. CORS-enabled.
  • Types (src/types.ts) - Discriminated union of command types (BrowserCommand) and response types (CommandResponse).

Command Flow

Commands are typed objects with a cmd discriminator:

{ cmd: 'goto', url: string }
{ cmd: 'click', selector: string }
{ cmd: 'type', selector: string, text: string }
{ cmd: 'query', selector: string }
// etc.

All commands return { ok: true, ...data } or { ok: false, error: string }.

Command Categories

Category Commands
Navigation goto, back, forward, reload, wait
Interaction click, type, hover, select, keys, scroll, upload
Content query, screenshot, url, html, eval
Debugging console, errors, network, intercept, metrics, a11y
Storage cookies, storage, dialog, session_save, session_restore
Viewport viewport, emulate
Image favicon, convert, resize, crop, compress, thumbnail

Event Listeners

The browser automatically captures events when launched:

  • Console: page.on('console') - Captures all console messages
  • Errors: page.on('pageerror') - Captures uncaught exceptions
  • Network: page.on('request/response/requestfailed') - Captures all network activity
  • Dialogs: page.on('dialog') - Handles alert/confirm/prompt dialogs

CLI Options

Key flags: -s <port> (server mode), -q <selector> (query), -c <selector> (click), -t <sel>=<text> (type), -i (interactive), --headed (visible browser).

Screenshots

Save screenshots to screenshots/ directory:

curl localhost:13373 -d '{"cmd":"screenshot","path":"screenshots/page.png"}'

MCP Server

Run as MCP server for Claude Code integration:

browse-mcp

The MCP server (src/mcp.ts) exposes all browser commands as tools. It uses stdio transport and auto-launches the browser on first command.

Plugin Integration

When installed as a Claude Code plugin (browse@saiden), the MCP server is named context. Tools are accessed as:

  • mcp__context__goto - Navigate to URL
  • mcp__context__query - Query elements by CSS selector
  • mcp__context__click - Click an element
  • mcp__context__type - Type into an input field
  • mcp__context__screenshot - Take a screenshot
  • mcp__context__close - Close the browser

The plugin also provides slash commands: /browse:start, /browse:goto, /browse:end, etc.

Debugging Tools

# Get console logs
curl localhost:13373 -d '{"cmd":"console","level":"error"}'

# Get page errors
curl localhost:13373 -d '{"cmd":"errors"}'

# Get network requests (all or failed only)
curl localhost:13373 -d '{"cmd":"network","filter":"failed"}'

# Block requests matching pattern
curl localhost:13373 -d '{"cmd":"intercept","action":"block","pattern":"**/*ads*"}'

# Mock API response
curl localhost:13373 -d '{"cmd":"intercept","action":"mock","pattern":"**/api/*","status":200,"body":"{\"mock\":true}"}'

# Get performance metrics
curl localhost:13373 -d '{"cmd":"metrics","resources":true}'

# Get accessibility tree
curl localhost:13373 -d '{"cmd":"a11y"}'

# Emulate mobile device
curl localhost:13373 -d '{"cmd":"emulate","device":"iPhone 13"}'

MCP Resources

Resources can be accessed via @ mentions in Claude Code:

Resource Description
browser://state Current browser state
browser://console Console messages
browser://network All network requests
browser://network/failed Failed requests only
browser://errors Page errors
browser://a11y Accessibility tree
browser://html Page HTML (truncated)
browser://screenshot Page screenshot