Use this skill when asked to review one or more pull requests. It covers reading diffs, forming opinions, and posting structured feedback.
gh authRun gh auth status. If unauthenticated, tell the user and stop — do not attempt to read diffs or post comments without it.
COMMENT — do not APPROVE or REQUEST_CHANGES a draft.For each PR:
gh pr diff <number>.grep/Glob to find callers and read them. Diffs lack context — read the surrounding code.gh pr view <number> --comments to understand what has already been discussed. Do not re-raise issues already resolved in thread.gh pr checks <number>. If checks are failing, determine whether the failure is pre-existing on the base branch or introduced by this PR. Failures introduced by this PR are at minimum a HIGH finding; test suite failures are a BLOCKER.Before forming opinions:
Evaluate the code across these dimensions:
Assign each finding a severity:
| Level | Meaning |
|---|---|
| BLOCKER | Must be fixed before merge. Correctness bug, security vuln, broken contract, or CI failure introduced by this PR. |
| HIGH | Serious design or reliability issue. Should be fixed; needs discussion if deferred. |
| MEDIUM | Real improvement but not blocking. Author should address or explicitly accept the risk. |
| LOW / NIT | Style, naming, minor cleanup. Optional. Don’t block merge over these. |
| QUESTION | Unclear intent — ask for clarification before judging. |
| PRAISE | Something done especially well. Say it. |
Do not manufacture findings to look thorough. If the code is good, say so.
These are set by the human on existing findings — the agent never assigns them to new findings.
| Label | Meaning |
|---|---|
| IRRELEVANT | The human changed a finding’s severity to IRRELEVANT in the draft review file. The agent must skip posting this comment and must not re-raise it in future review passes of the same PR. The review-multiple-prs skill persists these to .review-suppressed.md. |
True inline comments (anchored to a file and line) require either:
gh api directly:
gh api repos/{owner}/{repo}/pulls/{number}/reviews \
--method POST \
--field body="" \
--field event="COMMENT" \
--field "comments[][path]=path/to/file.ts" \
--field "comments[][line]=42" \
--field "comments[][body]={your identity} says: <finding>"
Each inline comment body must open with “{your identity} says:” (using your identity from CLAUDE.md) so the author knows who left it.
If neither the GitHub MCP nor gh api inline posting is feasible, fall back to referencing file.ts:42 inline in the consolidated summary instead — do not post top-level comment blobs pretending they are inline.
After inline comments, post a single top-level PR comment with this format:
## {your identity}'s Code Review
**Verdict:** APPROVE / REQUEST_CHANGES / COMMENT
### Summary
<2–4 sentences: what the PR does, overall quality, biggest concern if any>
### Findings
#### BLOCKER
- `path/to/file.ts:42` — <finding>
#### What's Good
- <something done well>
---
_Reviewed by {your identity}_
Only include sections that have entries. Omit empty sections entirely. The template above shows two sections as an example — do not copy-paste all section headers when they are empty.
APPROVE — no BLOCKERs or HIGHs, CI passing (or failures pre-existing on base), ready to merge.REQUEST_CHANGES — one or more BLOCKERs or HIGHs introduced by this PR.COMMENT — draft PR, questions only, or observations with no blocking concerns.After posting:
/resolve-ci-failures.