| name | auto-critique |
| description | Fires reviewer-shaped critiques on the current diff one at a time using the durable notes in ~/notes/auto-critique/. Each round, a finder subagent picks the next candidate, a verifier subagent validates it with repo skills, then the parent agent applies the fix. Use when the user invokes /auto-critique, asks to review a diff in a specific review voice, asks to apply persona-specific critique, asks to self-critique, or wants a draft cleaned up the way their reviewer would push back on it before review. |
auto-critique
Reviewer-shaped critiques on the current diff, one at a time. Per round: a finder subagent picks the next candidate, a verifier subagent validates it with /how and /why, the parent agent applies the fix. Loop until the finder returns nothing, or the round cap hits.
Splitting find / verify / fix across focused agents (instead of one giant subagent) keeps each step fast and prevents drift.
The notes that drive this live in ~/notes/auto-critique/. Schema: ~/notes/auto-critique/README.md.
Diff scope (pick one)
| Mode | Command |
|---|
| Default | git diff — unstaged |
--staged | git diff --cached |
--branch | git diff <base>...HEAD — base defaults to main; honor whatever base the user names |
If the diff is empty in the chosen mode, stop and report. Don't escalate without the user asking.
Round (run serially)
The parent agent owns the loop. Each round runs three steps in order.
A — Finder subagent
Pick the next candidate. Quick and focused.
subagent_type: generalPurpose
- omit
model — inherit the parent's model
readonly: true
Prompt: reference/finder-prompt.md. The parent passes the diff (with ±60 lines of context per hunk), the chosen scope, and the running session log of already-addressed sites.
The finder loads the notes substrate, walks the diff against every angle, and returns exactly one candidate or none. Highest-impact angle wins: structural / data-shape > naming / necessity > style.
If the finder returns none, stop the loop.
B — Verifier subagent
Validate the candidate against the real code.
subagent_type: generalPurpose
- omit
model — inherit the parent's model
readonly: true
Prompt: reference/verifier-prompt.md. The parent passes the finder's output plus the diff hunk and surrounding context.
The verifier uses repo skills — /how over the relevant subsystem, and /why when the critique is about necessity, history, or defensive shape — and returns one of:
- valid — fix fits a small surgical edit; the parent will apply it.
- defer — true but needs scope beyond this turn.
- reject — doesn't actually apply.
Inconclusive evidence is reject. Hedged fixes ship as wrong critiques and erode trust in the skill.
C — Parent applies the fix
If the verifier returned valid, the parent edits the code directly. Don't delegate the fix — the parent has the full conversation context and can keep the change surgical and consistent. After the edit, re-read the changed lines to confirm the smell is actually gone, not renamed.
Record the site in the session log either way — applied, deferred, or rejected — so the next round's finder skips it.
Stop conditions
Stop when any of:
- Finder returns
none.
- Round count reaches N. Default
5; the user can override up to 10.
- The same
angle@site re-fires twice in a row — stalemate. Report and stop.
Final report
Match meta/critique-style.md. Lead with the useful thing.
## auto-critique report
scope: <unstaged | staged | branch:<base>>
rounds: <n>
### applied
- [file:line] <one-line summary> -- from `<category>#<angle>`
### deferred (needs larger scope)
- [file:line] <summary> -- why bigger
### rejected on validation
- [file:line] <angle> -- reason
### unchanged smells (stalemate)
- [file:line] <angle>
### diff
<git diff stat>
Skip sections with no items.
Subagent guardrails
- Finder and verifier are read-only. Only the parent edits.
- Neither subagent runs
/auto-critique recursively, writes to ~/notes/auto-critique/, pushes, or force-pushes.
- Note updates are for
learn-critique, run by a human-in-the-loop.
When auto-critique is the wrong tool
- Diff is large and unfamiliar — run
/walk or /review-pr first; auto-critique is a polish layer.
- Mechanical change (rename, format, dep bump) — no critique angle fires usefully.
- Mid-implementation, intentionally rough — wait for a self-review-ready stage.
Notes substrate dependency
Only as sharp as the notes feeding it. If categories/ is thin, the finder returns none on round one. That's not "diff is clean" — it's "no angles to test against." Report: "notes substrate is thin — N angles loaded. run learn-critique after the next critique."