agentleFS
mthlimthli/skills/review-iterate/SKILL.md

review-iterate

Skill19 starsChanged 3 months agoMITView on GitHub

Multi-round review for work-in-progress code or docs. Each round: Claude lists findings by severity (πŸ”΄/🟠/🟑/🟒), user picks what to fix, Claude fixes only those, then re-reviews. Includes a stopping rule β€” when a round finds only 🟒 polish-tier items, Claude proactively recommends wrapping up rather than padding the list. Invoke whenever the user wants iterative review or to drive prioritization themselves β€” phrasings like "review this / review again / what else needs fixing / list issues for me / another round / do another pass", or right after a fix burst when verification is needed before shipping. Distinct from /review (one-shot PR review) and /security-review (security focus). Trigger even when "review-iterate" isn't explicitly named.

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. About 0 are common, 14 are distinctive, and 0 are very specific to this project.

  • β‰ˆ0

    Common Β· estimate

    Many files like this have a rule of this kind.

  • β‰ˆ14

    Distinctive Β· estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Don't use for:

    line 20
  2. Distinctive:

    3. End the list with an explicit recommendation: Don't punt the prioritization back.

    line 35
  3. Distinctive:

    4. Wait for the user to pick: Don't proceed until they explicitly tell you what to fix.

    line 40
  4. Distinctive:

    How to phrase the wrap-up: Don't ask "another round?" β€” make a concrete recommendation:

    line 73
  5. Distinctive:

    If the user pushes for another round after a wrap-up recommendation, do the round honestly but lead with the diminishing-returns …

    line 77
  6. Distinctive:

    Don't pretend the next round's findings are weightier than they are just because you were asked to keep going.

    line 81
  7. Distinctive:

    Don't manufacture findings: If a round genuinely turns up nothing, say so plainly: "I re-read everything.

    line 87
  8. Distinctive:

    Don't bury the lead: If the takeaway is "wrap up", state it first.

    line 90
  9. Distinctive:

    Backing out of recommendations: If you said "wrap up", don't immediately turn around and find 5 new things when the user says "really?

    line 127
  10. Distinctive:

    Sneaking in extra fixes: When the user picks fixes #1 and #3, only fix #1 and #3.

    line 128
  11. Distinctive:

    Round 2: After fixes, 4 new findings β€” including 1 regression from round 1's changes.

    line 136
  12. Distinctive:

    Round 3: After fixes, 2 findings, both 🟑.

    line 138
  13. Distinctive:

    Round 4: After fixes, all 🟒. Recommend wrap-up.

    line 140
  14. Distinctive:

    If round 4 had produced "5 more 🟑 items" you'd be padding.

    line 142

β‰ˆ β€œCommon” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. β€œVery specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

review-iterate

Multi-round structured review. Claude lists findings, the user picks what to fix, Claude fixes, then re-reviews surfacing only new findings. Repeat until findings degrade to cosmetic-only, at which point Claude proactively recommends wrapping up.

This skill exists because the natural "want to do another round?" prompt tends to make Claude pad findings β€” manufacturing nitpicks to seem thorough when there's nothing real to raise. The protocol below counters that explicitly.

When this skill applies

Triggers:

  • The user asks "review this / review what we did / what else needs fixing / list issues for me to decide / can you do another pass"
  • They invoke /review-iterate
  • They've just finished a fix burst and want verification before shipping
  • A back-and-forth refinement loop is already in progress and they want another pass

Don't use for:

  • One-shot PR review (use /review instead β€” it's optimized for single-pass thoroughness)
  • Security-focused review (use /security-review β€” different threat-model orientation)
  • Tasks where the user wants Claude to fix things autonomously without their prioritization (this skill's promise is user-driven; don't break it)

Scope calibration. For trivial change sets (1-2 line edits, comment fixes, no logic change), don't run the full 7-step protocol β€” it's overkill and feels bureaucratic. Do a single brief pass and call it done, unless the user explicitly says they want a deeper inspection. The protocol's value scales with the size and complexity of the change being reviewed; small changes need small reviews.

The protocol

Each round follows this exact shape. Don't skip steps.

1. Re-read the target carefully. Re-examine the most recent changes (or whatever scope the user named). Don't trust your prior pass β€” read with fresh eyes.

2. List findings, grouped by severity (see definitions below). Order: πŸ”΄ first, then 🟠, 🟑, 🟒. Each finding is one short paragraph with the specific location, the issue, and why it matters. Don't write multi-paragraph explanations β€” the user is scanning to prioritize, not reading deeply.

3. End the list with an explicit recommendation. Don't punt the prioritization back. Examples of good closing lines:

  • "I'd fix #1-#3 (the πŸ”΄s) and skip #4-#6"
  • "All four are small. I'd suggest collapsing #1+#3 into one fix."
  • "Everything I found is 🟒. I'd suggest wrapping up."

4. Wait for the user to pick. Don't proceed until they explicitly tell you what to fix.

5. Fix only what they picked. If you notice something else while fixing, append a short note in the same message as the fix ("I also noticed X β€” will surface in next round's review if you want"). Don't bundle the extra fix into the current round β€” the user-driven prioritization is the whole point; preserve it. The deferred note then either gets picked up in the next review round or the user explicitly tells you to fix it now.

6. Re-review. Look for:

  • Regressions β€” did this round's fixes introduce new issues?
  • Fresh-eyes finds β€” does anything stand out now that didn't before?
  • Fix-verification β€” did the fixes actually address what was raised, or just look like they did?

Crucially: do not re-list previously-raised items to fill space. Each round produces new findings or recommends stopping.

7. Apply the stopping rule.

Severity tiers

TierMeaningExamples
πŸ”΄ CriticalShips as broken behavior, data loss, security issueLogic bug returning wrong results; crash on common input; secret leak; missing migration
🟠 ImportantReal issue that doesn't block ship but lowers quality / accuracyWrong docs that mislead readers; test that gives false confidence; misleading error message; off-by-one in non-critical path
🟑 MediumImprovement worth doing if you have the appetiteBetter naming; refactor opportunity; missing test for an edge case; clearer comments
🟒 PolishCosmetic or paranoid-defensiveTrailing whitespace; type-hint nitpicks; "what if the user passes 5 as the ratio" (already validated); style preferences

If you're genuinely undecided between two tiers (e.g., "maybe 🟑, maybe 🟒"), mark it as the lower one and add (uncertain) in parens after the title β€” don't drop it just because you can't classify it confidently. The user can re-tier from your description if needed. What you shouldn't do is invent a fifth "FYI" or "informational" tier β€” that's a yellow flag for padding. Stick to the four levels. Truly off-topic observations (e.g., "this whole file could be refactored" when the user asked about a specific change) belong in conversational asides, not the findings list.

Stopping rule

This is the most important part of the skill.

Recommend wrapping up when any of these hold:

  • A round produces only 🟒 findings
  • Two consecutive rounds produce ≀ 2 findings total
  • You re-read everything and honestly can't find anything you didn't already raise

How to phrase the wrap-up. Don't ask "another round?" β€” make a concrete recommendation:

"These are all polish (🟒). I don't see anything that would change ship-readiness. I'd suggest wrapping up β€” happy to do these as a batch if you want them anyway, or call it done."

If the user pushes for another round after a wrap-up recommendation, do the round honestly but lead with the diminishing-returns observation:

"I went looking again. Most of what I found is borderline β€” see below β€” but here are 2 small items."

Don't pretend the next round's findings are weightier than they are just because you were asked to keep going.

Honesty contract

These rules exist because the failure mode this skill addresses is Claude trying to seem thorough by manufacturing findings. Counter the tendency explicitly:

  • Don't manufacture findings. If a round genuinely turns up nothing, say so plainly: "I re-read everything. I don't see anything new worth raising."
  • Don't recycle. A finding that was raised and fixed doesn't come back for a victory lap. A finding that was raised and explicitly skipped by the user doesn't come back either β€” they already chose. Exception: a previously-skipped finding can be re-raised if its severity has escalated due to subsequent changes (e.g., a 🟑 from round 1 is now πŸ”΄ because round 2 added code that depends on the unfixed behavior). When re-raising, lead with the escalation explicitly so the user sees the new context: "Round 1 #3 was skipped β€” it's now πŸ”΄ because round 2's X depends on the broken behavior."
  • Don't inflate severity. A 🟒 stays 🟒. Don't promote polish to 🟑 to make a list look longer.
  • Don't bury the lead. If the takeaway is "wrap up", state it first; don't hide it after a long list.
  • If the user explicitly asks for "more", do the round honestly but flag the diminishing returns. Maintain your assessment even under pressure to find things.

Output format

A round's review is in markdown, in the user's language β€” mirror whatever language they used in their most recent message. When the user mixes languages within a single message (interleaving English with another language they're more fluent in is common), default to the dominant language in that message. If it's genuinely 50/50 and you can't tell which they'd prefer, ask once at the top of the round and let it stick for subsequent rounds. Use the severity emojis explicitly so the user can scan quickly.

Section structure within a round:

### πŸ”΄ Critical
- **#1**: [specific location] β€” [what's wrong, why it matters]
- **#2**: ...

### 🟠 Important
- ...

### 🟑 Medium
- ...

### 🟒 Polish
- ...

### Recommendation
[Explicit recommendation on what to fix and whether to continue]

Skip any tier that's empty (don't print "🟑 None"). Group adjacent fixes when they're really the same issue surfaced two ways.

Anti-patterns

Specific things NOT to do. These are based on real failure modes from the session that motivated this skill:

  • Padding. Listing :.3f vs :g formatting as a finding when there's no real concern. If you're scraping for content, the right move is "I don't see anything new."
  • Asking "another round?" indefinitely. That's the user's job β€” to ask for another round or to call it done. Your job is to recommend.
  • Recycling. Re-raising the same caveat across multiple rounds because you've run out of fresh material.
  • Inventing FYI tiers. "Informational:", "Note:", "Worth mentioning:" β€” all attempts to insert non-findings as if they were findings.
  • Backing out of recommendations. If you said "wrap up", don't immediately turn around and find 5 new things when the user says "really? look again". Do the next round honestly but maintain your diminishing-returns assessment in the same response.
  • Sneaking in extra fixes. When the user picks fixes #1 and #3, only fix #1 and #3. If you also fix #5 because it bugs you, you've broken the user-driven promise.

Worked example

A typical session looks like this (collapsed for brevity):

Round 1: 8 findings across πŸ”΄/🟠/🟑 β€” the real bugs, doc issues, and a few polish items. User picks 5 to fix.

Round 2: After fixes, 4 new findings β€” including 1 regression from round 1's changes. User picks 3.

Round 3: After fixes, 2 findings, both 🟑. User asks "do them all".

Round 4: After fixes, all 🟒. Recommend wrap-up. User agrees, done.

If round 4 had produced "5 more 🟑 items" you'd be padding. Stop at round 4 by recommending wrap-up.

Handling pushback after a wrap-up recommendation

The honesty contract is tested most when the user disagrees with a wrap-up recommendation. Concrete example of how to handle it:

Round 4 (yours): "These are all 🟒. I'd suggest wrapping up."

User: "are you sure? look again, I think there's more"

Round 5 (yours) β€” correct form:

"I went back through everything. Most of what I can find is borderline β€” see below β€” and none of it would change my recommendation. Here are 3 small items, but I'd still suggest wrapping up after these.

🟒 Polish

  • #1: trailing whitespace in [file]
  • #2: type hint int could be int | None in [function]
  • #3: docstring missing for [internal helper]

If you fix these and ask again, I'll re-read but I don't expect to find more."

What NOT to do: Suddenly produce 5 findings labeled 🟑 to justify the new round. That's caving to social pressure at the cost of the honesty contract. The 🟒 stays 🟒, the recommendation stays "wrap up", and you do the work the user asked for without inflating the importance.

Interaction with related skills

  • /review runs a single thorough PR-style review and produces one comprehensive list. Use that when the user wants one pass before approval, not iterative back-and-forth.
  • /security-review is the same shape but focused on auth / injection / data-exposure / supply-chain risks. Use that when the user's prompt mentions security or the change touches auth, secrets, or external boundaries.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.