pr-verify/SKILL.md
Use when the user wants to verify a PR's feature works at runtime by booting the dev server, exercising the affected UI via Chrome DevTools MCP, and posting a screenshot summary back to the PR. Idempotent — skips if `verified` or `verify-failed` is already on the PR. Trigger phrases - "/pr-verify", "verify this PR", "runtime check the pr".
npx skillsauth add paulund/skills pr-verifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Boot the dev server, drive the affected UI via Chrome DevTools MCP, and post a runtime-verification comment + screenshot to the PR. Idempotent: skips if a verified or verify-failed label is already set.
When invoked with arguments, the first line of the prompt may carry a context envelope as JSON:
{ "pr": 123, "branch": "agent/issue-582-foo" }
This skill assumes the Chrome DevTools MCP server is connected. If not, post a verify-failed comment explaining the missing MCP and stop.
gh pr view <pr> --json labels --jq '.labels[].name'
If verified or verify-failed is already on the PR, skip and exit with a one-line report. The chain or poller can re-trigger by removing the label.
gh pr view <pr> --json number,title,body,closingIssuesReferences
gh pr diff <pr> --name-only
For each closingIssuesReferences entry, read the issue body — its acceptance criteria are what pr-verify proves.
From the file list, identify the entry points the change touches:
app/, pages/, or framework equivalentsIf the change is purely backend / infra (no UI surface), post a verified (backend-only) comment and add verified label without booting the browser.
Detect the dev script from package.json and start in background:
# Pick the first that exists in package.json scripts
pnpm dev # or: npm run dev / yarn dev / bun dev
Wait for the readiness banner (typical localhost:3000). Cap at 60 seconds; on timeout, post verify-failed with the boot log.
Using the connected Chrome DevTools MCP, for each acceptance criterion:
page.evaluate(() => window.console.errors) or equivalent).If a step throws or the console has uncaught errors, mark the run as verify-failed and capture the error + screenshot.
Kill the dev-server process (SIGTERM, then SIGKILL after 5s if still alive). Don't leave it running.
gh pr comment <pr> --body "$(cat <<EOF
## Runtime verification
**Status:** ${pass ? "✅ Passed" : "❌ Failed"}
### Acceptance criteria
- [ ] criterion 1 — pass / fail (screenshot link)
- [ ] criterion 2 — pass / fail
### Console errors
- [error message + stack | none]
### Screenshots
- [list of screenshot URLs / paths committed under .verify-screenshots/<pr>/<step>.png]
EOF
)"
If passed: gh pr edit <pr> --add-label verified
If failed: gh pr edit <pr> --add-label verify-failed
{ "pr": <N>, "verdict": "pass" | "fail" | "skip-backend-only", "criteria": <count>, "consoleErrors": <count> }
try/finally mental model).verified or verify-failed is already on the PR.development
Use when the user wants to run the project's lint + types + build sequence as a gate before pushing, opening a PR, or merging. Invoked by chained dev skills between phases. Trigger phrases - "/quality-gate", "run the quality gate", "check it builds".
testing
Use when the user wants a security-focused review pass on a PR with findings actioned as commits on the same branch. Trigger phrases - "/pr-security-review", "security review and fix".
testing
Use when the user wants to open a pull request for an already-pushed branch that implements a specific issue. Idempotent — returns the existing PR if one is already open for the branch. Trigger phrases - "/pr-open", "open the pr", "create pr for this branch".
testing
Use when the user wants to action external review feedback or fix CI failures on an open pull request. Single-purpose — does not handle merge conflicts (use merge-main) or open PRs (use pr-open). Trigger phrases - "/pr-fix", "fix the pr", "address review comments", "fix ci".