GitHub PR Review
Use this skill when the review must happen inside GitHub itself.
This is not a local review-note skill. It is for reading a pull request, mapping defects to the real diff, posting a review in a human voice, and selecting the correct GitHub review state.
The review should read like a direct human reviewer:
- blunt
- specific
- concise
- unsentimental
- briefly positive only when something is genuinely strong
Do not write like an automated assistant. Do not use filler. Do not post a decorative summary.
When to use
Use this skill for prompts like:
- "review PR 482"
- "request changes on this GitHub PR"
- "leave inline comments on the pull request"
- "re-review the open findings on this PR"
- "check the GitHub diff and submit the review"
- "review this PR against the stated intent"
Use it whenever the output must be a GitHub review event rather than a local markdown artifact.
Core posture
- Review against intent, behavior change, and regression risk, not just diff mechanics.
- Treat security, correctness, maintainability, and architecture as higher priority than code style.
- Treat API layer abuse, database anti-patterns, and runtime health issues as first-class review targets.
- Treat missing tests for critical behavior as a real defect.
- Treat skipped validation, hidden risk, or misleading PR framing as a real defect.
- For frontend work, enforce accessibility, semantic HTML, framework compliance, reusable component boundaries, and zero inline styling shortcuts.
- For backend and cloud-facing work, enforce ingestion-only API boundaries, async worker or event-driven offloading for heavy workflows, Postgres-safe query patterns, and runtime-safe concurrency.
- If something is good, note it briefly and move on.
Mandatory workflow
- Resolve the best available review interface using github-routing.md.
- Capture the PR intent, head commit SHA, changed files, and the complete unified diff before drafting comments.
- Review the change using review-standards.md.
- Classify each finding using findings-and-comment-shape.md.
- Build one batched review payload. Do not drip comments one by one.
- Use review-body-template.md for the overall review body, comment-payload-examples.json for MCP-native payload shapes, and comment-payload-examples-gh.json for gh REST payload shapes.
- If you assemble a payload locally, run validate-review-payload.ts against it in the correct mode before submission.
- Submit the review once with the correct GitHub review state.
- For re-review, use re-review-and-verdicts.md before deciding whether older findings are resolved.
Non-negotiable rules
- Do not approve a PR with an unresolved blocker.
- Do not post review comments without first checking the full diff and stated intent.
- Do not target unchanged lines for inline comments.
- Do not use relative hunk offsets when the API expects absolute target lines.
- Do not use
suggestion blocks in file-level comments.
- Do not post vague comments that lack the defect, the impact, or the required correction.
- Do not soften critical defects into preference language.
- Do not turn architecture, security, accessibility, or test gaps into nits.
- Do not ignore repeated patterns across files just because the diff is large.
- Do not let frontend styling hacks through because "it works."
- Do not use inline styles.
- Do not accept ad hoc style props or
sx shortcuts when a styled extension or shared component boundary is the correct fix.
- Do not invent one-off UI primitives when an existing framework or shared component should be extended.
Review state selection
changes-requested: use when the PR should not merge as-is because of blockers. Any open P0, P1, P2, or P3 finding blocks approval by default.
comment: use when the PR has non-blocking issues, questions, or future-facing recommendations.
approved: use only when no blocker remains and the changed behavior is acceptable. Open P4 items are the only findings that may remain on an autonomous approval path unless the PR author has explicitly acknowledged and deferred a higher-severity item and the reviewer judges that deferral safe.
For fundamentally unacceptable PRs, still use changes-requested and say directly that the current direction is not acceptable in the review body and inline findings.
State selection details and re-review expectations live in re-review-and-verdicts.md.
Required review content
Each real finding must be specific about:
- what is wrong
- why it matters
- what level of issue it is
- what should change
Use the exact title format and category scheme defined in findings-and-comment-shape.md.
Frontend and UI enforcement
For React, component systems, or UI-heavy PRs, read review-standards.md before writing comments.
Apply all of the following:
- accessibility defects are real defects
- semantic HTML and keyboard access matter
- framework misuse is a defect
- inline styling is a defect
- hardcoded one-off visual values are a defect when a shared token or component should own them
- shared UI concerns should move into a reusable component or styled extension, not copied into page files
Apply the same rigor to backend and API-heavy PRs:
- the API layer should ingest, validate, and orchestrate, not execute heavy external workflows inline
- Postgres and ORM code should be judged on the database plan it implies, not on whether the code looks tidy
- async code should be judged on runtime safety, bounded concurrency, and job durability, not just syntax
Final response to the user
After posting the GitHub review, report only the essentials:
- final review state
- count of inline comments posted
- the main blockers or risks that drove the decision
- any reason the review had to fall back to a lower-priority interface
Keep that response tight. The substantive review belongs on the PR.
References
1---2name: github-pr-review3description: Review GitHub pull requests directly in GitHub using GitHub MCP or gh, leave precise inline comments and final review states, and apply hard-nosed scrutiny for security, architecture, maintainability, testing, accessibility, and frontend compliance. Use whenever the user asks to review a PR, inspect a GitHub pull request, request changes, re-review a PR, post inline review comments, or submit a GitHub review instead of a local-only code review.4license: Apache-2.05---67# GitHub PR Review89Use this skill when the review must happen inside GitHub itself.1011This is not a local review-note skill. It is for reading a pull request, mapping defects to the real diff, posting a review in a human voice, and selecting the correct GitHub review state.1213The review should read like a direct human reviewer:1415- blunt16- specific17- concise18- unsentimental19- briefly positive only when something is genuinely strong2021Do not write like an automated assistant. Do not use filler. Do not post a decorative summary.2223## When to use2425Use this skill for prompts like:2627- "review PR 482"28- "request changes on this GitHub PR"29- "leave inline comments on the pull request"30- "re-review the open findings on this PR"31- "check the GitHub diff and submit the review"32- "review this PR against the stated intent"3334Use it whenever the output must be a GitHub review event rather than a local markdown artifact.3536## Core posture3738- Review against intent, behavior change, and regression risk, not just diff mechanics.39- Treat security, correctness, maintainability, and architecture as higher priority than code style.40- Treat API layer abuse, database anti-patterns, and runtime health issues as first-class review targets.41- Treat missing tests for critical behavior as a real defect.42- Treat skipped validation, hidden risk, or misleading PR framing as a real defect.43- For frontend work, enforce accessibility, semantic HTML, framework compliance, reusable component boundaries, and zero inline styling shortcuts.44- For backend and cloud-facing work, enforce ingestion-only API boundaries, async worker or event-driven offloading for heavy workflows, Postgres-safe query patterns, and runtime-safe concurrency.45- If something is good, note it briefly and move on.4647## Mandatory workflow48491. Resolve the best available review interface using [github-routing.md](./references/github-routing.md).502. Capture the PR intent, head commit SHA, changed files, and the complete unified diff before drafting comments.513. Review the change using [review-standards.md](./references/review-standards.md).524. Classify each finding using [findings-and-comment-shape.md](./references/findings-and-comment-shape.md).535. Build one batched review payload. Do not drip comments one by one.546. Use [review-body-template.md](./assets/review-body-template.md) for the overall review body, [comment-payload-examples.json](./assets/comment-payload-examples.json) for MCP-native payload shapes, and [comment-payload-examples-gh.json](./assets/comment-payload-examples-gh.json) for gh REST payload shapes.557. If you assemble a payload locally, run [validate-review-payload.ts](./scripts/validate-review-payload.ts) against it in the correct mode before submission.568. Submit the review once with the correct GitHub review state.579. For re-review, use [re-review-and-verdicts.md](./references/re-review-and-verdicts.md) before deciding whether older findings are resolved.5859## Non-negotiable rules6061- Do not approve a PR with an unresolved blocker.62- Do not post review comments without first checking the full diff and stated intent.63- Do not target unchanged lines for inline comments.64- Do not use relative hunk offsets when the API expects absolute target lines.65- Do not use `suggestion` blocks in file-level comments.66- Do not post vague comments that lack the defect, the impact, or the required correction.67- Do not soften critical defects into preference language.68- Do not turn architecture, security, accessibility, or test gaps into nits.69- Do not ignore repeated patterns across files just because the diff is large.70- Do not let frontend styling hacks through because "it works."71- Do not use inline styles.72- Do not accept ad hoc style props or `sx` shortcuts when a styled extension or shared component boundary is the correct fix.73- Do not invent one-off UI primitives when an existing framework or shared component should be extended.7475## Review state selection7677- `changes-requested`: use when the PR should not merge as-is because of blockers. Any open `P0`, `P1`, `P2`, or `P3` finding blocks approval by default.78- `comment`: use when the PR has non-blocking issues, questions, or future-facing recommendations.79- `approved`: use only when no blocker remains and the changed behavior is acceptable. Open `P4` items are the only findings that may remain on an autonomous approval path unless the PR author has explicitly acknowledged and deferred a higher-severity item and the reviewer judges that deferral safe.8081For fundamentally unacceptable PRs, still use `changes-requested` and say directly that the current direction is not acceptable in the review body and inline findings.8283State selection details and re-review expectations live in [re-review-and-verdicts.md](./references/re-review-and-verdicts.md).8485## Required review content8687Each real finding must be specific about:8889- what is wrong90- why it matters91- what level of issue it is92- what should change9394Use the exact title format and category scheme defined in [findings-and-comment-shape.md](./references/findings-and-comment-shape.md).9596## Frontend and UI enforcement9798For React, component systems, or UI-heavy PRs, read [review-standards.md](./references/review-standards.md) before writing comments.99100Apply all of the following:101102- accessibility defects are real defects103- semantic HTML and keyboard access matter104- framework misuse is a defect105- inline styling is a defect106- hardcoded one-off visual values are a defect when a shared token or component should own them107- shared UI concerns should move into a reusable component or styled extension, not copied into page files108109Apply the same rigor to backend and API-heavy PRs:110111- the API layer should ingest, validate, and orchestrate, not execute heavy external workflows inline112- Postgres and ORM code should be judged on the database plan it implies, not on whether the code looks tidy113- async code should be judged on runtime safety, bounded concurrency, and job durability, not just syntax114115## Final response to the user116117After posting the GitHub review, report only the essentials:118119- final review state120- count of inline comments posted121- the main blockers or risks that drove the decision122- any reason the review had to fall back to a lower-priority interface123124Keep that response tight. The substantive review belongs on the PR.125126## References127128- [github-routing.md](./references/github-routing.md)129- [findings-and-comment-shape.md](./references/findings-and-comment-shape.md)130- [review-standards.md](./references/review-standards.md)131- [re-review-and-verdicts.md](./references/re-review-and-verdicts.md)132- [review-body-template.md](./assets/review-body-template.md)133- [comment-payload-examples.json](./assets/comment-payload-examples.json)134- [comment-payload-examples-gh.json](./assets/comment-payload-examples-gh.json)135- [validate-review-payload.ts](./scripts/validate-review-payload.ts)