--- name: gsd-browser description: > Native Rust browser automation CLI for AI agents. Use when the user needs to interact with websites, navigate pages, fill forms, click buttons, take screenshots, share a live browser view, narrate browser actions, extract structured data, run assertions, test web apps, mock network requests, or automate any browser task. Triggers include "open a website", "fill out a form", "take a screenshot", "show me the browser", "share the screen", "pause the browser", "step through this", "scrape data", "test this web app", "login to a site", "visual regression test", or any task requiring programmatic web interaction. allowed-tools: Bash(gsd-browser:*), Bash(gsd-browser *) --- **The daemon auto-starts on browser commands.** `gsd-browser daemon health` reports state and does not start a session. Use `gsd-browser daemon start` only when you want to pre-warm or verify daemon lifecycle explicitly. **Always re-snapshot after page changes.** Refs are versioned (`@v1:e1`, `@v2:e3`). After navigation, form submission, or dynamic content loading, old refs are stale. Run `gsd-browser snapshot` to get fresh refs before interacting. **Use `--json` when parsing output.** Use text mode when reading output yourself. Use `--json` when you need to extract values programmatically. **Positional args have no flag prefix.** Commands like `click`, `type`, `hover` take positional args. Do NOT add `--selector`: - `gsd-browser click "button.submit"` (correct) - `gsd-browser click --selector "button.submit"` (WRONG) **Core workflow pattern:** Every browser automation follows: navigate -> snapshot -> interact -> re-snapshot (after DOM changes). ```bash gsd-browser navigate https://example.com gsd-browser snapshot # Read snapshot output: @v1:e1 [input type="email"], @v1:e2 [button] "Submit" gsd-browser fill-ref @v1:e1 "user@example.com" gsd-browser click-ref @v1:e2 gsd-browser wait-for --condition network_idle gsd-browser snapshot # REQUIRED - old refs are now stale ``` **Command chaining:** Use `&&` when you don't need intermediate output. Run separately when you need to parse output first (e.g., snapshot to discover refs, then interact). **Use the live viewer when the user wants to watch or direct the browser.** `gsd-browser view` opens a localhost viewer with live frames, narrated action history, ref overlays, and pause/step/resume/abort controls. Keep using CLI commands for actions; the viewer is the shared screen and control surface. **Global options** available on all commands: | Flag | Purpose | |------|---------| | `--json` | Structured JSON output | | `--browser-path ` | Path to Chrome/Chromium | | `--cdp-url ` | Attach to an already-running Chrome instance | | `--session ` | Named session for parallel instances | | `--no-narration-delay` | Skip narration lead-time sleeps while keeping history/events | Based on what the user needs, read the appropriate workflow: | User intent | Workflow | |-------------|----------| | Navigate, click, type, fill forms, interact with pages | `workflows/navigate-and-interact.md` | | Share the browser screen, narrate actions, pause/step/resume/abort | `workflows/live-viewer-and-narration.md` | | Scrape data, extract content, read page structure | `workflows/scrape-and-extract.md` | | Test pages, run assertions, visual regression, mock network | `workflows/test-and-assert.md` | | Debug issues, check logs, diagnose problems | `workflows/debug-and-diagnose.md` | | Install, configure, set up sessions | `workflows/setup-and-configure.md` | **After reading the workflow, follow it. Load references only when the workflow directs you to.** All domain knowledge in `references/`: **Commands:** command-reference.md (complete command syntax) **Snapshots:** snapshot-and-refs.md (versioned refs, snapshot modes) **Intents:** semantic-intents.md (15 predefined intents for find-best/act) **Errors:** error-recovery.md (common errors and fixes) **Config:** configuration.md (TOML config, env vars, 5-layer merge) | Workflow | Purpose | |----------|---------| | navigate-and-interact.md | Page navigation, clicking, typing, forms, intents | | live-viewer-and-narration.md | Live shared viewer, narrated history, refs overlay, controls | | scrape-and-extract.md | Data extraction, accessibility tree, page source | | test-and-assert.md | Assertions, visual regression, network mocking, test generation | | debug-and-diagnose.md | Console/network logs, timeline, debug bundles | | setup-and-configure.md | Installation, configuration, sessions, daemon management | Browser automation task is complete when: - Target page state is achieved and verified (via assertions or visual confirmation) - Daemon is stopped if no further browser work is needed (`gsd-browser daemon stop`) - Extracted data is returned in the expected format - Any saved state (auth, cookies) is persisted for reuse if appropriate