Browser Screenshot
Capture screenshots of the web application for visual verification during UI/CSS iteration.
Setup
- Install playwright in the project (if not already):
npm install playwright
npx playwright install chromium
- Symlink the screenshot script into the project's
scripts/directory:
SKILLS_DIR="${SKILLS_DIR:-${CODEX_HOME:-$HOME/.codex}/skills}"
if [[ ! -d "$SKILLS_DIR" ]]; then
SKILLS_DIR="${CLAUDE_HOME:-$HOME/.claude}/skills"
fi
ln -sfn "$SKILLS_DIR/browser-screenshot/scripts/screenshot.sh" scripts/screenshot
Usage
/browser-screenshot
/browser-screenshot http://localhost:3000
/browser-screenshot http://localhost:3000 mobile
Instructions
Determine the URL to screenshot:
- If
$ARGUMENTScontains a URL, use it - Otherwise use the
SCREENSHOT_URLenv var if set - Default:
http://localhost:3000
- If
Determine the viewport:
- If
$ARGUMENTScontainsmobile, use mobile viewport (375x812) - If
$ARGUMENTScontainstablet, use tablet viewport (768x1024) - If
$ARGUMENTScontains a custom size like1024x768, use those dimensions - Default: desktop viewport (1280x900)
- If
$ARGUMENTScontainsboth, take two screenshots (desktop and mobile) - Keep both dimensions under 2000px to avoid image limit errors
- If
Run the screenshot script via the project symlink:
scripts/screenshot <url> <viewport>
If the symlink doesn't exist yet, create it first (see Setup above).
Screenshots are saved to a fresh private directory (mode 0700) created per run, unless you pass an explicit output path as the third argument. The script prints the full path it wrote — read it from the output rather than assuming a location. Screenshots may capture authenticated pages, which is why the directory is not a predictable shared one.
Read the screenshot using the available image-reading tool to view the captured image. This is the critical step because the model can inspect the captured UI directly.
Analyze the screenshot and report what you see, especially:
- Layout issues (overlapping elements, alignment problems)
- Spacing/margin problems
- Color or styling discrepancies
- Responsive behavior (if both viewports captured)
If the user asked you to fix a specific CSS issue, compare what you see against their description and suggest or apply fixes.
Notes
- The script uses
waitUntil: 'networkidle'with a 15s timeout — if the page loads async content, the screenshot will wait for it. - Screenshots capture the viewport only (not full-page scroll) to stay within the 2000px image dimension limit.
- For rapid iteration: make the CSS change, then run
/browser-screenshotto verify, repeat.