Verify web application changes work by launching the app stack and testing in a real browser. This skill should be used when the user asks to "verify the change", "test in browser", "check if it works", or after completing a PR to validate the implementation. Requires Playwright MCP server. MUST exit if Playwright MCP is unavailable.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
references/playwright-mcp.mdscripts/check-playwright-mcp.shscripts/launch-app-stack.shVerify that pull request changes work correctly in a running web application using browser automation.
Playwright MCP is MANDATORY. This skill cannot function without it.
Execute these steps in order. Do not skip steps.
MUST exit if this step fails.
Test Playwright MCP by attempting to list browser tabs:
mcp__playwright__browser_tabs
action: "list"
If this tool:
❌ VERIFICATION FAILED: Playwright MCP server is not installed.
To install:
1. Run: npx @anthropic-ai/mcp-server-playwright
2. Configure in Claude Code MCP settings
3. Restart Claude Code
Do NOT proceed if Playwright MCP is unavailable.
Before launching the application, understand what to verify.
git diff main --name-only
git diff main --stat
Read the changed files and related context to understand:
# Check for existing Playwright/E2E tests
find . -name "*.spec.ts" -o -name "*.test.ts" -o -name "*.e2e.ts" | head -20
ls -la tests/ e2e/ playwright/ __tests__/ 2>/dev/null || true
If Playwright tests exist, read them to understand:
Create a mental checklist of what must be verified:
Check for docker-compose/compose files:
ls -la docker-compose.yml docker-compose.yaml compose.yml compose.yaml 2>/dev/null || echo "No compose file found"
If compose file exists:
docker compose up -d
sleep 5 # Wait for services to initialize
# Check for lockfiles in order of preference
if [[ -f "bun.lockb" ]] || [[ -f "bun.lock" ]]; then
PM="bun"
elif [[ -f "pnpm-lock.yaml" ]]; then
PM="pnpm"
elif [[ -f "yarn.lock" ]]; then
PM="yarn"
else
PM="npm"
fi
echo "Package manager: $PM"
# Only if node_modules doesn't exist
[[ -d "node_modules" ]] || $PM install
Start the dev server in background:
# Common dev commands - check package.json scripts
$PM run dev &
Wait for server to be ready:
sleep 10 # Adjust based on typical startup time
Or use Playwright to wait:
mcp__playwright__browser_navigate
url: "http://localhost:3000" # Adjust port as needed
mcp__playwright__browser_navigate
url: "http://localhost:3000"
mcp__playwright__browser_snapshot
mcp__playwright__browser_console_messages
level: "error"
If critical errors exist, report them and investigate.
Confirm the application loads and shows expected content. If it doesn't load:
This is the core verification step. Based on the PR changes identified in Step 2:
If the change affects a specific route/page:
mcp__playwright__browser_navigate
url: "http://localhost:3000/affected-route"
mcp__playwright__browser_snapshot
Check the snapshot for:
For interactive changes, test the interaction:
mcp__playwright__browser_click
element: "description of element"
ref: "ref-from-snapshot"
Then snapshot again to verify the result:
mcp__playwright__browser_snapshot
If the codebase has Playwright tests for the changed area:
The ONLY success criteria is: The actual changes made in the PR are verified to be present and working in the running application.
✅ VERIFICATION PASSED
Changes Verified:
- [specific change 1]: ✅ Working
- [specific change 2]: ✅ Working
- [specific change N]: ✅ Working
Evidence:
- [what was observed that confirms each change]
❌ VERIFICATION FAILED
Expected: [what should have been observed]
Actual: [what was actually observed]
Details:
- [specific issue 1]
- [specific issue 2]
Console Errors: [if any]
Stop background processes:
# Kill dev server if started
pkill -f "bun run dev" || pkill -f "npm run dev" || true
# Stop docker services if started
docker compose down 2>/dev/null || true
For detailed Playwright MCP tool documentation, see: references/playwright-mcp.md
scripts/launch-app-stack.sh - Detect and launch application stackscripts/check-playwright-mcp.sh - Verify Playwright MCP availability| Framework | Default Port |
|---|---|
| Vite | 5173 |
| Next.js | 3000 |
| Create React App | 3000 |
| TanStack Start | 3000 |
| Remix | 3000 |
| Nuxt | 3000 |
| SvelteKit | 5173 |
Install the MCP server and configure it in Claude Code settings.
browser_wait_for