| name | browse |
| description | Use when needing to automate browser interactions, navigate websites, fill forms, take screenshots, extract data from web pages, or manage browser sessions via Playwright |
| allowed-tools | Bash(**/browse.sh*:*) |
Browser Automation with @playwright/cli
All commands use browse.sh — a wrapper script bundled with this skill that calls npx @playwright/cli with the correct config. The config enables headed mode, persistent sessions, and stores all data in the project's .playwright/data/ directory.
Project conventions
Check ## Browser testing in CLAUDE.md for project-specific overrides (base URL, browser choice, dev server instructions).
Quick start
<skill-base-dir>/browse.sh open
<skill-base-dir>/browse.sh open https://example.com
<skill-base-dir>/browse.sh click e15
<skill-base-dir>/browse.sh fill e5 "search query"
<skill-base-dir>/browse.sh press Enter
<skill-base-dir>/browse.sh snapshot
<skill-base-dir>/browse.sh close
Commands
Core
browse.sh open
browse.sh open https://example.com/
browse.sh goto https://playwright.dev
browse.sh type "search query"
browse.sh click e3
browse.sh dblclick e7
browse.sh fill e5 "user@example.com"
browse.sh drag e2 e8
browse.sh hover e4
browse.sh select e9 "option-value"
browse.sh upload ./document.pdf
browse.sh check e12
browse.sh uncheck e12
browse.sh snapshot
browse.sh snapshot --filename=after-click.yaml
browse.sh eval "document.title"
browse.sh eval "el => el.textContent" e5
browse.sh dialog-accept
browse.sh dialog-accept "confirmation text"
browse.sh dialog-dismiss
browse.sh resize 1920 1080
browse.sh close
Navigation
browse.sh go-back
browse.sh go-forward
browse.sh reload
Keyboard
browse.sh press Enter
browse.sh press ArrowDown
browse.sh keydown Shift
browse.sh keyup Shift
Mouse
browse.sh mousemove 150 300
browse.sh mousedown
browse.sh mousedown right
browse.sh mouseup
browse.sh mouseup right
browse.sh mousewheel 0 100
Save as
Always save screenshots to .playwright/data/screenshots/.
browse.sh screenshot --filename=.playwright/data/screenshots/page.png
browse.sh screenshot e5 --filename=.playwright/data/screenshots/element.png
browse.sh pdf --filename=page.pdf
Tabs
browse.sh tab-list
browse.sh tab-new
browse.sh tab-new https://example.com/page
browse.sh tab-close
browse.sh tab-close 2
browse.sh tab-select 0
Storage
browse.sh state-save
browse.sh state-save auth.json
browse.sh state-load auth.json
browse.sh cookie-list
browse.sh cookie-list --domain=example.com
browse.sh cookie-get session_id
browse.sh cookie-set session_id abc123
browse.sh cookie-set session_id abc123 --domain=example.com --httpOnly --secure
browse.sh cookie-delete session_id
browse.sh cookie-clear
browse.sh localstorage-list
browse.sh localstorage-get theme
browse.sh localstorage-set theme dark
browse.sh localstorage-delete theme
browse.sh localstorage-clear
browse.sh sessionstorage-list
browse.sh sessionstorage-get step
browse.sh sessionstorage-set step 3
browse.sh sessionstorage-delete step
browse.sh sessionstorage-clear
Network
browse.sh route "**/*.jpg" --status=404
browse.sh route "https://api.example.com/**" --body='{"mock": true}'
browse.sh route-list
browse.sh unroute "**/*.jpg"
browse.sh unroute
DevTools
browse.sh console
browse.sh console warning
browse.sh network
browse.sh run-code "async page => await page.context().grantPermissions(['geolocation'])"
browse.sh tracing-start
browse.sh tracing-stop
browse.sh video-start
browse.sh video-stop video.webm
Open parameters
browse.sh open --browser=chrome
browse.sh open --browser=firefox
browse.sh open --browser=webkit
browse.sh open --browser=msedge
browse.sh open --extension
browse.sh delete-data
Snapshots
After each command, a snapshot of the current browser state is provided.
> browse.sh goto https://example.com
- Page URL: https://example.com/
- Page Title: Example Domain
[Snapshot](.playwright/data/output/page-2026-02-14T19-22-42-679Z.yml)
You can also take a snapshot on demand using browse.sh snapshot.
If --filename is not provided, a new snapshot file is created with a timestamp. Default to automatic file naming, use --filename= when artifact is a part of the workflow result.
Browser Sessions
browse.sh -s=mysession open example.com
browse.sh -s=mysession click e6
browse.sh -s=mysession close
browse.sh -s=mysession delete-data
browse.sh list
browse.sh close-all
browse.sh kill-all
Example: Form submission
browse.sh open https://example.com/form
browse.sh snapshot
browse.sh fill e1 "user@example.com"
browse.sh fill e2 "password123"
browse.sh click e3
browse.sh snapshot
browse.sh close
Example: Multi-tab workflow
browse.sh open https://example.com
browse.sh tab-new https://example.com/other
browse.sh tab-list
browse.sh tab-select 0
browse.sh snapshot
browse.sh close
Example: Debugging with DevTools
browse.sh open https://example.com
browse.sh click e4
browse.sh fill e7 "test"
browse.sh console
browse.sh network
browse.sh close
browse.sh open https://example.com
browse.sh tracing-start
browse.sh click e4
browse.sh fill e7 "test"
browse.sh tracing-stop
browse.sh close
Specific tasks