/gsd-browser
Native Rust browser automation CLI for AI agents. Use when the user needs to interact with websites — navigating pages, filling forms, clicking buttons, taking screenshots, sharing a live browser view, narrating browser actions, extracting structured data, running assertions,
$ npx -y skills add gsd-build/gsd-browser --skill gsd-browser --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/gsd-browser
Context preview
The summary Claude sees to decide when to auto-load this skill.
Native Rust browser automation CLI for AI agents. Use when the user needs to interact with websites — navigating pages, filling forms, clicking buttons, taking screenshots, sharing a live browser view, narrating browser actions, extracting structured data, running assertions,
SKILL.md
gsd-browser.SKILL.mdname: gsd-browser
description: >
Native Rust browser automation CLI for AI agents. Use when the user needs to
interact with websites — navigating pages, filling forms, clicking buttons,
taking screenshots, sharing a live browser view, narrating browser actions,
extracting structured data, running assertions, testing web apps, or
automating any browser task. Triggers include requests to "open a website",
"fill out a form", "click a button", "take a screenshot", "show me the
browser", "share the screen", "pause the browser", "step through this",
"scrape data from a page", "test this web app", "login to a site",
"automate browser actions", "visual regression test", "check for prompt
injection", or any task requiring programmatic web interaction.
allowed-tools: Bash(gsd-browser:*), Bash(gsd-browser *)
Browser Automation with gsd-browser
Critical Rules
1. **The daemon auto-starts on browser commands.** `daemon health` only reports state; it does not start a session. Use `daemon start` only when you want to pre-warm or verify daemon lifecycle explicitly. 2. **Always re-snapshot after page changes.** Refs are versioned (`@v1:e1`). After navigation, form submission, or dynamic content loading, old refs are stale. Run `gsd-browser snapshot` to get fresh refs. 3. **Use `--json` when parsing output.** Use text mode when reading output yourself. Use `--json` when you need to extract values programmatically (e.g., checking assertion results, parsing snapshot refs). 4. **Positional args have no flag prefix.** Commands like `click`, `type`, `hover` take positional args — do NOT add `--selector`. See exact syntax in command reference below. 5. **Use `batch` for atomic multi-step flows.** Batch reduces round trips and keeps pass/fail checks in one call. Use separate commands when you need intermediate output (e.g., snapshot to discover refs). 6. **Use `view` when the user wants to watch or direct the browser.** The live viewer is an authenticated local workbench with Control, Annotate, Record, and Sensitive modes. Keep CLI commands on the same named session.
Core Workflow
Every browser automation follows this pattern:
1. **Navigate**: `gsd-browser navigate <url>` 2. **Snapshot**: `gsd-browser snapshot` (get versioned refs like `@v1:e1`, `@v1:e2`) 3. **Interact**: Use refs to click, fill, hover 4. **Re-snapshot**: After navigation or DOM changes, get fresh refs
gsd-browser navigate https://example.com/form
gsd-browser snapshot
# Output: @v1:e1 [input type="email"], @v1:e2 [input type="password"], @v1:e3 [button] "Submit"
gsd-browser fill-ref @v1:e1 "user@example.com"
gsd-browser fill-ref @v1:e2 "password123"
gsd-browser click-ref @v1:e3
gsd-browser wait-for --condition network_idle
gsd-browser snapshot # REQUIRED — old refs are now stale
Command Chaining
Commands can be chained with `&&` in a single shell invocation. Browser state also persists across separate invocations through the background daemon when you stay on the same session.
# Chain navigate + wait + snapshot
gsd-browser navigate https://example.com && gsd-browser wait-for --condition network_idle && gsd-browser snapshot
# Chain multiple interactions
gsd-browser fill-ref @v1:e1 "user@example.com" && gsd-browser fill-ref @v1:e2 "password123" && gsd-browser click-ref @v1:e3
**When to chain:** Use `&&` when you don't need intermediate output. Run commands separately when you need to parse output first (e.g., snapshot to discover refs, then interact).
---
Command Reference
Argument syntax: `<arg>` = required positional, `[arg]` = optional positional, `--flag` = named option. Do NOT add `--` prefix to positional args.
Navigation
gsd-browser navigate <url> # Navigate to a URL
gsd-browser back # Go back in browser history
gsd-browser forward # Go forward in browser history
gsd-browser reload # Reload the current page
Interaction
All selectors are **positional** — do NOT use `--selector`.
# Click
gsd-browser click <selector> # Click by CSS selector
gsd-browser click --x 100 --y 200 # Click by coordinates (no selector)
# Type — positional: <selector> <text>
gsd-browser type <selector> <text> # Atomic fill (replaces content)
gsd-browser type <selector> <text> --slowly # Character-by-character
gsd-browser type <selector> <text> --clear-first # Clear field before typing
gsd-browser type <selector> <text> --submit # Press Enter after typing
# Other interaction — all positional selectors
gsd-browser press <key> # Press key: Enter, Escape, Tab, Meta+A
gsd-browser hover <selector> # Hover over element
gsd-browser scroll --direction down # Scroll down 300px (default)
gsd-browser scroll --direction up --amount 500 # Scroll up 500px
gsd-browser select-option <selector> <option> # Select dropdown by label or value
gsd-browser set-checked <selector> --checked # Check checkbox/radio (omit --checked to uncheck)
gsd-browser drag <source-selector> <target-selector> # Drag-and-drop
gsd-browser upload-file <selector> <file>... # Set files on <input type="file">
gsd-browser set-viewport --preset mobile # Preset: mobile, tablet, desktop, wide
gsd-browser set-viewport --width 1920 --height 1080 # Custom dimensions
Snapshot & Refs
Refs are versioned (`@v1:e1`, `@v2:e3`). The version increments each snapshot. **Old refs become stale after page changes — always re-snapshot.**
# Take snapshot
gsd-browser snapshot # Snapshot interactive elements, assign refs
gsd-browser snapshot --selector "form" # Scope to a CSS selector
gsd-browser snapshot --mode <mode> # Semantic mode (see below)
gsd-browser snapshot
Read more
name: gsd-browser description: > Native Rust browser automation CLI for AI agents. Use when the user needs to interact with websites — navigating pages, filling forms, clicking buttons, taking screenshots, sharing a live browser view, narrating browser actions, extracting structured data, running assertions, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "show me the browser", "share the screen", "pause the browser", "step through this", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", "visual regression test", "check for prompt injection", or any task requiring programmatic web interaction. allowed-tools: Bash(gsd-browser:*), Bash(gsd-browser *)
Browser Automation with gsd-browser
Critical Rules
1. **The daemon auto-starts on browser commands.** `daemon health` only reports state; it does not start a session. Use `daemon start` only when you want to pre-warm or verify daemon lifecycle explicitly. 2. **Always re-snapshot after page changes.** Refs are versioned (`@v1:e1`). After navigation, form submission, or dynamic content loading, old refs are stale. Run `gsd-browser snapshot` to get fresh refs. 3. **Use `--json` when parsing output.** Use text mode when reading output yourself. Use `--json` when you need to extract values programmatically (e.g., checking assertion results, parsing snapshot refs). 4. **Positional args have no flag prefix.** Commands like `click`, `type`, `hover` take positional args — do NOT add `--selector`. See exact syntax in command reference below. 5. **Use `batch` for atomic multi-step flows.** Batch reduces round trips and keeps pass/fail checks in one call. Use separate commands when you need intermediate output (e.g., snapshot to discover refs). 6. **Use `view` when the user wants to watch or direct the browser.** The live viewer is an authenticated local workbench with Control, Annotate, Record, and Sensitive modes. Keep CLI commands on the same named session.
Core Workflow
Every browser automation follows this pattern:
1. **Navigate**: `gsd-browser navigate <url>` 2. **Snapshot**: `gsd-browser snapshot` (get versioned refs like `@v1:e1`, `@v1:e2`) 3. **Interact**: Use refs to click, fill, hover 4. **Re-snapshot**: After navigation or DOM changes, get fresh refs
gsd-browser navigate https://example.com/form gsd-browser snapshot # Output: @v1:e1 [input type="email"], @v1:e2 [input type="password"], @v1:e3 [button] "Submit" gsd-browser fill-ref @v1:e1 "user@example.com" gsd-browser fill-ref @v1:e2 "password123" gsd-browser click-ref @v1:e3 gsd-browser wait-for --condition network_idle gsd-browser snapshot # REQUIRED — old refs are now stale
Command Chaining
Commands can be chained with `&&` in a single shell invocation. Browser state also persists across separate invocations through the background daemon when you stay on the same session.
# Chain navigate + wait + snapshot gsd-browser navigate https://example.com && gsd-browser wait-for --condition network_idle && gsd-browser snapshot # Chain multiple interactions gsd-browser fill-ref @v1:e1 "user@example.com" && gsd-browser fill-ref @v1:e2 "password123" && gsd-browser click-ref @v1:e3
**When to chain:** Use `&&` when you don't need intermediate output. Run commands separately when you need to parse output first (e.g., snapshot to discover refs, then interact).
---
Command Reference
Argument syntax: `<arg>` = required positional, `[arg]` = optional positional, `--flag` = named option. Do NOT add `--` prefix to positional args.
Navigation
gsd-browser navigate <url> # Navigate to a URL gsd-browser back # Go back in browser history gsd-browser forward # Go forward in browser history gsd-browser reload # Reload the current page
Interaction
All selectors are **positional** — do NOT use `--selector`.
# Click gsd-browser click <selector> # Click by CSS selector gsd-browser click --x 100 --y 200 # Click by coordinates (no selector) # Type — positional: <selector> <text> gsd-browser type <selector> <text> # Atomic fill (replaces content) gsd-browser type <selector> <text> --slowly # Character-by-character gsd-browser type <selector> <text> --clear-first # Clear field before typing gsd-browser type <selector> <text> --submit # Press Enter after typing # Other interaction — all positional selectors gsd-browser press <key> # Press key: Enter, Escape, Tab, Meta+A gsd-browser hover <selector> # Hover over element gsd-browser scroll --direction down # Scroll down 300px (default) gsd-browser scroll --direction up --amount 500 # Scroll up 500px gsd-browser select-option <selector> <option> # Select dropdown by label or value gsd-browser set-checked <selector> --checked # Check checkbox/radio (omit --checked to uncheck) gsd-browser drag <source-selector> <target-selector> # Drag-and-drop gsd-browser upload-file <selector> <file>... # Set files on <input type="file"> gsd-browser set-viewport --preset mobile # Preset: mobile, tablet, desktop, wide gsd-browser set-viewport --width 1920 --height 1080 # Custom dimensions
Snapshot & Refs
Refs are versioned (`@v1:e1`, `@v2:e3`). The version increments each snapshot. **Old refs become stale after page changes — always re-snapshot.**
# Take snapshot gsd-browser snapshot # Snapshot interactive elements, assign refs gsd-browser snapshot --selector "form" # Scope to a CSS selector gsd-browser snapshot --mode <mode> # Semantic mode (see below) gsd-browser snapshot
Native Rust browser automation CLI for Chrome/Chromium via CDP. gsd-browser keeps a persistent background daemon, auto-starts on first use, and exposes 92 top-level commands for navigation, interaction, authenticated live viewing, annotations, recording

