Add element crop (CSS selector or @ref), region clip (--clip x,y,w,h),
and viewport-only (--viewport) modes to the screenshot command. Uses
Playwright's native locator.screenshot() and page.screenshot({ clip }).
Full page remains the default. Includes 10 new tests covering all modes
and error paths.
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.
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).
Tell the user: "gstack browse needs a one-time build (~10 seconds). OK to proceed?" Then STOP and wait.
Run: cd <SKILL_DIR> && ./setup
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
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
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
Command
Description
chain
Run commands from JSON stdin. Format: [["cmd","arg1",...],...]