Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Drive a PR to an approved code review by looping OCR's multi-agent review and address steps. Runs /ocr:review then /ocr:address repeatedly until the review verdict is APPROVE, then one final /ocr:address for leftover suggestions, posting every review and every address round to the GitHub PR as comments. Use when the user asks to 'review and address in a loop', 'iterate review until approved', 'auto review-and-fix this PR', 'loop /ocr:review and /ocr:address', or to take a changeset all the way t
.claude/skills/spencermarx-ocr-review-to-approval-loop/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 390% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 74% | 0% |
Orchestrates an autonomous review → address → re-review loop on a pull request, using OCR's existing multi-agent review pipeline, until the review reaches an APPROVE verdict — then runs one final address pass for leftover suggestions. Every review and every address round is posted to the GitHub PR as a comment, producing a transparent, reviewable audit trail.
It is a thin orchestrator over two skills it does not reimplement:
/ocr:review → .ocr/commands/review.md (the 8-phase multi-agent review that emits a verdict)/ocr:address → .ocr/commands/address.md (corroborate feedback against code, then implement)/ocr:review./ocr:address.gh CLI installed and authenticated (for posting; skip with --no-post)..ocr/ exists, ocr CLI available). Run /ocr:doctor if unsure./ocr-review-loop [pr] [--team <spec>] [--max-rounds N] [--no-final-suggestions] [--no-post]pr (optional): PR number. Default: the open PR for the current branch.--team <spec> (optional): reviewer team override (reviewer-id:count,...), forwarded to/ocr:review. Default: the project's default team (ocr team resolve).
--max-rounds N (optional): safety cap on review rounds. Default: 5. The loop neverruns forever.
--no-final-suggestions (optional): stop at APPROVE; skip the final suggestions pass.--no-post (optional): run locally; do not post to GitHub. Present the trail in-chat instead.> Execute this inline, to completion, in the conversation. Do not schedule across turns or > background the work. Drive each review's phases 4→7 within one turn (OCR's "don't strand > the pipeline" rule). See reference/loop-mechanics.md for the exact CLI/session details > and the GitHub comment templates.
0. Preconditions. Resolve the PR and branch; refuse to run on the default branch. Confirm gh (unless --no-post) and OCR setup. Resolve the reviewer team (default unless --team).
1. Review-address loop. Starting at round = 1, while the verdict is not APPROVE and round <= max-rounds:
/ocr:review (default team, or --team). It runs the full pipelineand finalizes rounds/round-{round}/final.md + round-meta.json with a verdict.
OCR review — Round {round}. (skip if `--no-post`)round-meta.json / final.md):APPROVE → exit the loop (proceed to step 2 below).NEEDS DISCUSSION → STOP the loop. This is a human gate — surface theclarifying questions to the user and await direction. Do not fabricate a fix.
REQUEST CHANGES → continue./ocr:address on rounds/round-{round}/final.md. Corroborate everyitem against the actual code; implement the blockers and should-fixes (these clear the gate); decline incorrect feedback with evidence; you MAY defer pure suggestions to the final pass. Verify (typecheck + lint + tests) until green, then commit (atomic, conventional) and push.
deferred. (skip if `--no-post`)
round += 1; loop.2. Final suggestions pass (only after APPROVE, unless --no-final-suggestions): invoke /ocr:address once more to clear remaining suggestions, verify, commit, push, and post a final address comment that includes a loop-summary table (round → verdict → outcome).
3. Stop conditions. If round exceeds max-rounds without APPROVE, stop and report the outstanding blockers — never loop indefinitely. If APPROVE was reached on round 1, skip the loop body and go straight to the final suggestions pass.
--max-rounds (default 5). If not approved by then, stop and surface why.NEEDS DISCUSSION is a human gate. Pause and ask; never invent a resolution for genuineambiguity.
.ocr/commands/address.md: verify each finding against thecode; implement valid items; decline wrong feedback with evidence. Don't gold-plate — fix only what the review actually raised.
failures before pushing.
be fixed (needs a product/architecture decision), stop and say so rather than forcing APPROVE.
(a closed session starts round-{n+1}), reusing discovered-standards.md / context.md.
comment templates → reference/loop-mechanics.md
/ocr:review,/ocr:address
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | fail→pass | 7,765 | 2,410 | -69% | 1 | 1 | 0% | 1,231 | 1,966 | +60% | 0 | 0 | — |
case-01 | fail→fail | 9,133 | 5,647 | -38% | 1 | 1 | 0% | 1,041 | 1,892 | +82% | 0 | 0 | — |
case-02 | fail→fail | 5,592 | 5,499 | -2% | 1 | 1 | 0% | 181 | 1,924 | +963% | 0 | 0 | — |
case-03 | fail→fail | 13,863 | 25,873 | +87% | 1 | 1 | 0% | 629 | 1,941 | +209% | 0 | 0 | — |
case-04 | fail→pass | 14,119 | 3,971 | -72% | 1 | 1 | 0% | 1,419 | 2,175 | +53% | 0 | 0 | — |
case-09 | pass→pass | 7,715 | 1,728 | -78% | 1 | 1 | 0% | 1,198 | 1,848 | +54% | 0 | 0 | — |
case-05 | pass→pass | 9,573 | 3,464 | -64% | 1 | 1 | 0% | 1,539 | 2,210 | +44% | 0 | 0 | — |
case-06 | fail→pass | 2,923 | 3,340 | +14% | 1 | 1 | 0% | 438 | 2,145 | +390% | 0 | 0 | — |
case-07 | fail→pass | 7,963 | 3,930 | -51% | 1 | 1 | 0% | 1,272 | 2,254 | +77% | 0 | 0 | — |
case-08 | pass→pass | 7,614 | 3,875 | -49% | 1 | 1 | 0% | 1,212 | 1,996 | +65% | 0 | 0 | — |
case-10 | pass→pass | 10,832 | 2,484 | -77% | 1 | 1 | 0% | 1,894 | 1,989 | +5% | 0 | 0 | — |
case-11 | pass→fail | 9,270 | 3,453 | -63% | 1 | 1 | 0% | 1,592 | 2,124 | +33% | 0 | 0 | — |
case-12 | fail→pass | 8,240 | 4,140 | -50% | 1 | 1 | 0% | 1,318 | 2,294 | +74% | 0 | 0 | — |
case-13 | fail→pass | 11,649 | 7,124 | -39% | 1 | 1 | 0% | 1,948 | 2,691 | +38% | 0 | 0 | — |
case-14 | fail→pass | 14,222 | 7,929 | -44% | 1 | 1 | 0% | 2,134 | 3,041 | +43% | 0 | 0 | — |
case-15 | fail→pass | 10,367 | 4,463 | -57% | 1 | 1 | 0% | 1,576 | 2,258 | +43% | 0 | 0 | — |
case-16 | fail→pass | 8,180 | 2,812 | -66% | 1 | 1 | 0% | 1,294 | 1,970 | +52% | 0 | 0 | — |
case-17 | fail→pass | 9,131 | 4,278 | -53% | 1 | 1 | 0% | 1,539 | 2,082 | +35% | 0 | 0 | — |
case-19 | pass→pass | 11,594 | 4,210 | -64% | 1 | 1 | 0% | 1,825 | 2,238 | +23% | 0 | 0 | — |
case-20 | fail→pass | 3,219 | 3,591 | +12% | 1 | 1 | 0% | 325 | 1,994 | +514% | 0 | 0 | — |
case-21 | fail→pass | 10,831 | 3,410 | -69% | 1 | 1 | 0% | 686 | 2,128 | +210% | 0 | 0 | — |
case-22 | fail→fail | 1,437 | 2,616 | +82% | 1 | 1 | 0% | 199 | 1,752 | +780% | 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. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 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 +50 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is 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.
Other measured skills in the registry, with their headline benchmark lift.