Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review a pull request by fetching PR comments, running a comprehensive code review, evaluating findings, and dispatching to implementation. Use when the user asks to "review PR", "review pull request", "review this PR", "check PR before merging", or "full PR review".
.claude/skills/tobihagemann-review-pr/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -50% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -59% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -52% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -43% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -63% | 0% |
Fetch PR context, run a comprehensive code review, evaluate findings, and dispatch accepted findings to implementation.
At the start, use update_plan to track each step, restating any remaining steps of a parent workflow alongside them:
$fetch-pr-comments skill$review-code skill$evaluate-findings skill$resolve-findings skill$fetch-pr-comments SkillRun the $fetch-pr-comments skill to get unresolved review comments.
Detect the PR's base branch via gh pr view --json baseRefName --jq '.baseRefName', then run git fetch origin <base-branch> to bring the remote ref up to date.
$review-code SkillRun the $review-code skill. The diff command is git diff origin/<base-branch>...HEAD. Take the base from origin/: a local branch of the same name can sit behind the remote, which puts the merge base before an already-merged pull request and pulls merged work into the review as if it were new.
$evaluate-findings SkillRun the $evaluate-findings skill on the combined results from Step 3. Include any unresolved PR comments from Step 1 as additional findings for evaluation.
$resolve-findings SkillIf zero actionable findings survive evaluation, report that the code looks clean and stop.
Otherwise, run the $resolve-findings skill on the accepted findings from Step 4.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→fail | 8,536 | 2,015 | -76% | 1 | 1 | 0% | 1,454 | 708 | -51% | 0 | 0 | — |
case-01 | fail→fail | 2,425 | 35,611 | +1368% | 1 | 1 | 0% | 368 | 711 | +93% | 0 | 0 | — |
case-02 | fail→fail | 4,993 | 6,609 | +32% | 1 | 1 | 0% | 222 | 777 | +250% | 0 | 0 | — |
case-03 | fail→fail | 8,660 | 52,615 | +508% | 1 | 1 | 0% | 645 | 854 | +32% | 0 | 0 | — |
case-04 | pass→pass | 5,339 | 6,969 | +31% | 1 | 1 | 0% | 939 | 1,674 | +78% | 0 | 0 | — |
case-05 | pass→pass | 9,105 | 4,277 | -53% | 1 | 1 | 0% | 1,639 | 1,128 | -31% | 0 | 0 | — |
case-06 | pass→pass | 4,528 | 13,326 | +194% | 1 | 1 | 0% | 844 | 2,128 | +152% | 0 | 0 | — |
case-07 | fail→pass | 12,099 | 3,374 | -72% | 1 | 1 | 0% | 1,958 | 987 | -50% | 0 | 0 | — |
case-08 | pass→pass | 4,985 | 2,280 | -54% | 1 | 1 | 0% | 940 | 766 | -19% | 0 | 0 | — |
case-09 | fail→pass | 14,479 | 12,655 | -13% | 1 | 1 | 0% | 2,665 | 1,090 | -59% | 0 | 0 | — |
case-10 | fail→fail | 11,351 | 1,395 | -88% | 1 | 1 | 0% | 2,048 | 590 | -71% | 0 | 0 | — |
case-12 | pass→fail | 5,733 | 1,738 | -70% | 1 | 1 | 0% | 1,026 | 695 | -32% | 0 | 0 | — |
case-13 | fail→pass | 8,637 | 15,672 | +81% | 1 | 1 | 0% | 1,480 | 711 | -52% | 0 | 0 | — |
case-14 | pass→pass | 11,955 | 23,897 | +100% | 1 | 1 | 0% | 2,240 | 2,686 | +20% | 0 | 0 | — |
case-15 | fail→pass | 8,781 | 1,715 | -80% | 1 | 1 | 0% | 1,117 | 635 | -43% | 0 | 0 | — |
case-16 | fail→fail | 5,668 | 10,198 | +80% | 1 | 1 | 0% | 952 | 826 | -13% | 0 | 0 | — |
case-17 | pass→pass | 5,643 | 6,427 | +14% | 1 | 1 | 0% | 1,069 | 1,659 | +55% | 0 | 0 | — |
case-18 | fail→pass | 11,278 | 1,883 | -83% | 1 | 1 | 0% | 1,879 | 690 | -63% | 0 | 0 | — |
case-19 | pass→pass | 6,660 | 2,014 | -70% | 1 | 1 | 0% | 1,073 | 734 | -32% | 0 | 0 | — |
case-20 | fail→pass | 8,474 | 2,283 | -73% | 1 | 1 | 0% | 1,625 | 827 | -49% | 0 | 0 | — |
case-21 | pass→pass | 5,990 | 15,507 | +159% | 1 | 1 | 0% | 1,149 | 1,938 | +69% | 0 | 0 | — |
case-22 | pass→pass | 8,083 | 8,573 | +6% | 1 | 1 | 0% | 1,252 | 2,046 | +63% | 0 | 0 | — |
case-23 | pass→fail | 8,982 | 11,807 | +31% | 1 | 1 | 0% | 1,542 | 1,340 | -13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +17 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | +37% |
Other measured skills in the registry, with their headline benchmark lift.