Skip to content
cccskills
FreePublished on GitHub

browse

Fast headless browser for QA testing and site dogfooding. Navigate any URL, interact with elements, verify page state, diff before/after actions, take annotated screenshots, check responsive layouts, test forms and uploads, handle dialogs, and assert element states. ~100ms per command. Use when you need to test a feature, verify a deployment, dogfood a user flow, or file a bug with evidence.

The English summary is being prepared. Showing the original description.

Run score Not tested

See how to install

Files included (35)

  • SKILL.md9.3 KB
  • bin/find-browse722 B
  • SKILL.md.tmpl3.0 KB
  • src/browser-manager.ts14.6 KB
  • src/buffers.ts4.2 KB
  • src/cli.ts10.7 KB
  • src/commands.ts7.6 KB
  • src/config.ts2.9 KB
  • src/cookie-import-browser.ts15.3 KB
  • src/cookie-picker-routes.ts7.5 KB
  • src/cookie-picker-ui.ts16.4 KB
  • src/find-browse.ts1.6 KB
  • src/meta-commands.ts7.5 KB
  • src/read-commands.ts10.4 KB
  • src/server.ts13.3 KB
  • src/snapshot.ts14.7 KB
  • src/write-commands.ts11.2 KB
  • test/commands.test.ts57.5 KB
  • test/config.test.ts4.9 KB
  • test/cookie-import-browser.test.ts16.1 KB
  • test/cookie-picker-routes.test.ts7.4 KB
  • test/find-browse.test.ts782 B
  • test/fixtures/basic.html914 B
  • test/fixtures/cursor-interactive.html883 B
  • test/fixtures/dialog.html603 B
  • test/fixtures/empty.html43 B
  • test/fixtures/forms.html1.8 KB
  • test/fixtures/responsive.html1.4 KB
  • test/fixtures/snapshot.html1.5 KB
  • test/fixtures/spa.html638 B
  • test/fixtures/states.html567 B
  • test/fixtures/upload.html849 B
  • test/gstack-update-check.test.ts7.7 KB
  • test/snapshot.test.ts17.6 KB
  • test/test-server.ts1.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->

Update Check (run first)

_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true

If output shows UPGRADE_AVAILABLE <old> <new>: read ~/.claude/skills/gstack/gstack-upgrade/SKILL.md and follow the "Inline upgrade flow" (AskUserQuestion → upgrade if yes, touch ~/.gstack/last-update-check if no). If JUST_UPGRADED <from> <to>: tell user "Running gstack v{to} (just updated!)" and continue.

browse: QA Testing & Dogfooding

Persistent headless Chromium. First call auto-starts (~3s), then ~100ms per command. State persists between calls (cookies, tabs, login sessions).

SETUP (run this check BEFORE any browse command)

_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
B=""
[ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse"
[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse
if [ -x "$B" ]; then
  echo "READY: $B"
else
  echo "NEEDS_SETUP"
fi

If NEEDS_SETUP:

  1. Tell the user: "gstack browse needs a one-time build (~10 seconds). OK to proceed?" Then STOP and wait.
  2. Run: cd <SKILL_DIR> && ./setup
  3. If bun is not installed: curl -fsSL https://bun.sh/install | bash

Core QA Patterns

1. Verify a page loads correctly

$B goto https://yourapp.com
$B text                          # content loads?
$B console                       # JS errors?
$B network                       # failed requests?
$B is visible ".main-content"    # key elements present?

2. Test a user flow

$B goto https://app.com/login
$B snapshot -i                   # see all interactive elements
$B fill @e3 "user@test.com"
$B fill @e4 "password"
$B click @e5                     # submit
$B snapshot -D                   # diff: what changed after submit?
$B is visible ".dashboard"       # success state present?

3. Verify an action worked

$B snapshot                      # baseline
$B click @e3                     # do something
$B snapshot -D                   # unified diff shows exactly what changed

4. Visual evidence for bug reports

$B snapshot -i -a -o /tmp/annotated.png   # labeled screenshot
$B screenshot /tmp/bug.png                # plain screenshot
$B console                                # error log

5. Find all clickable elements (including non-ARIA)

$B snapshot -C                   # finds divs with cursor:pointer, onclick, tabindex
$B click @c1                     # interact with them

6. Assert element states

$B is visible ".modal"
$B is enabled "#submit-btn"
$B is disabled "#submit-btn"
$B is checked "#agree-checkbox"
$B is editable "#name-field"
$B is focused "#search-input"
$B js "document.body.textContent.includes('Success')"

7. Test responsive layouts

$B responsive /tmp/layout        # mobile + tablet + desktop screenshots
$B viewport 375x812              # or set specific viewport
$B screenshot /tmp/mobile.png

8. Test file uploads

$B upload "#file-input" /path/to/file.pdf
$B is visible ".upload-success"

9. Test dialogs

$B dialog-accept "yes"           # set up handler
$B click "#delete-button"        # trigger dialog
$B dialog                        # see what appeared
$B snapshot -D                   # verify deletion happened

10. Compare environments

$B diff https://staging.app.com https://prod.app.com

Snapshot Flags

The snapshot is your primary tool for understanding and interacting with pages.

-i        --interactive           Interactive elements only (buttons, links, inputs) with @e refs
-c        --compact               Compact (no empty structural nodes)
-d <N>    --depth                 Limit tree depth (0 = root only, default: unlimited)
-s <sel>  --selector              Scope to CSS selector
-D        --diff                  Unified diff against previous snapshot (first call stores baseline)
-a        --annotate              Annotated screenshot with red overlay boxes and ref labels
-o <path> --output                Output path for annotated screenshot (default: /tmp/browse-annotated.png)
-C        --cursor-interactive    Cursor-interactive elements (@c refs — divs with pointer, onclick)

All flags can be combined freely. -o only applies when -a is also used. Example: $B snapshot -i -a -C -o /tmp/annotated.png

Ref numbering: @e refs are assigned sequentially (@e1, @e2, ...) in tree order. @c refs from -C are numbered separately (@c1, @c2, ...).

After snapshot, use @refs as selectors in any command:

$B click @e3       $B fill @e4 "value"     $B hover @e1
$B html @e2        $B css @e5 "color"      $B attrs @e6
$B click @c1       # cursor-interactive ref (from -C)

Output format: indented accessibility tree with @ref IDs, one element per line.

  @e1 [heading] "Welcome" [level=1]
  @e2 [textbox] "Email"
  @e3 [button] "Submit"

Refs are invalidated on navigation — run snapshot again after goto.

Full Command List

Navigation

CommandDescription
backHistory back
forwardHistory forward
goto <url>Navigate to URL
reloadReload page
urlPrint current URL

Reading

CommandDescription
accessibilityFull ARIA tree
formsForm fields as JSON
html [selector]innerHTML of selector (throws if not found), or full page HTML if no selector given
linksAll links as "text → href"
textCleaned page text

Interaction

CommandDescription
click <sel>Click element
cookie <name>=<value>Set cookie on current page domain
cookie-import <json>Import cookies from JSON file
cookie-import-browser [browser] [--domain d]Import cookies from Comet, Chrome, Arc, Brave, or Edge (opens picker, or use --domain for direct import)
dialog-accept [text]Auto-accept next alert/confirm/prompt. Optional text is sent as the prompt response
dialog-dismissAuto-dismiss next dialog
fill <sel> <val>Fill input
header <name>:<value>Set custom request header (colon-separated, sensitive values auto-redacted)
hover <sel>Hover element
press <key>Press key — Enter, Tab, Escape, ArrowUp/Down/Left/Right, Backspace, Delete, Home, End, PageUp, PageDown, or modifiers like Shift+Enter
scroll [sel]Scroll element into view, or scroll to page bottom if no selector
select <sel> <val>Select dropdown option by value, label, or visible text
type <text>Type into focused element
upload <sel> <file> [file2...]Upload file(s)
useragent <string>Set user agent
viewport <WxH>Set viewport size
`wait <sel--networkidle

Inspection

CommandDescription
`attrs <sel@ref>`
`console [--clear--errors]`
cookiesAll cookies as JSON
css <sel> <prop>Computed CSS value
dialog [--clear]Dialog messages
eval <file>Run JavaScript from file and return result as string (path must be under /tmp or cwd)
is <prop> <sel>State check (visible/hidden/enabled/disabled/checked/editable/focused)
js <expr>Run JavaScript expression and return result as string
network [--clear]Network requests
perfPage load timings
storage [set k v]Read all localStorage + sessionStorage as JSON, or set <key> <value> to write localStorage

Visual

CommandDescription
diff <url1> <url2>Text diff between pages
pdf [path]Save as PDF
responsive [prefix]Screenshots at mobile (375x812), tablet (768x1024), desktop (1280x720). Saves as {prefix}-mobile.png etc.
screenshot [path]Save screenshot

Snapshot

CommandDescription
snapshot [flags]Accessibility tree with @e refs for element selection. Flags: -i interactive only, -c compact, -d N depth limit, -s sel scope, -D diff vs previous, -a annotated screenshot, -o path output, -C cursor-interactive @c refs

Meta

CommandDescription
chainRun commands from JSON stdin. Format: [["cmd","arg1",...],...]

Tabs

CommandDescription
closetab [id]Close tab
newtab [url]Open new tab
tab <id>Switch to tab
tabsList open tabs

Server

CommandDescription
restartRestart server
statusHealth check
stopShutdown server

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

2D game development principles. Sprites, tilemaps, physics, camera.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

3D game development principles. Rendering, shaders, physics, cameras.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

API design principles and decision-making. REST vs GraphQL vs tRPC selection, response formats, versioning, pagination.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

Main application building orchestrator. Creates full-stack applications from natural language requests. Determines project type, selects tech stack, coordinates agents.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

Architectural decision-making framework. Requirements analysis, trade-off evaluation, ADR documentation. Use when making architecture decisions or analyzing system design.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

Bash/Linux terminal patterns. Critical commands, piping, error handling, scripting. Use when working on macOS or Linux systems.

The English summary is being prepared. Showing the original description.

umairinayat/Specter-AI19Updated Sep 29, 2026

See all skills by umairinayat

Report a problem with this skill