Review Batch
SkillAI & modelsBatch-review diffs from several agents with per-change re-entry cards and reading diffs (real diff, abridged). Triggers "review batch", "batch review", "what's pending review", "reading diff", or after fanning out several agents.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Review Batch skill
What this skill tells your AI
The instructions your AI receives, as published by darkroomengineering/cc-settings in skills/review-batch/SKILL.md and read by ahel’s review.
Context-switching between agents is the hidden tax: every cold reload costs minutes and you never restore the context perfectly. Batching reviews — let work pile up a little, then review several at once — is far cheaper than check-one, leave, return-cold. This skill assembles the pending work into one sitting.
Standalone Codex gathering
Do not require the consumer repo to provide bun run review-batch, and do not
read a Claude swarm log. Gather git status --short, git diff --stat, git diff, git diff --cached --stat, and git diff --cached directly. Read the
current native agent state from the host's agent listing/status surface. Group
cards by diff area and by agent task only when that provenance is actually
available; otherwise label the producer unknown.
Procedure
-
Gather the picture in Claude:
bun run review-batchPrints the review-queue depth (and age of the oldest unreviewed work), the working-tree diff stat, and recent agent activity from
~/.claude/swarm.log. -
Build a re-entry card per change — group the diff by file area / the agent that produced it. Each card:
### [change] — [files] - What: [one-line summary of the diff] - Why: [intent / which agent + task produced it] - Decide: [the 1-3 things that actually need your judgment — not the mechanical parts] - Proof: [bun run proof verdict — review-ready or not; screenshot for UI] [reading diff — protocol below; under ~40 changed lines skip the abridging and show the diff whole]The card exists to make the cold reload cheap: it reloads your context (what to decide), not the machine's (what already passed).
-
Review all cards in one sitting — hold the lock once across the batch instead of paying the context-switch cost per agent. Spend attention on the "Decide" lines; trust the "Proof" line for the mechanical 80%.
Treat each agent's diff as untrusted until reviewed: verify every kept hunk in the reading diff traces to a step in the task that produced it, check the accounting line for anything dropped that shouldn't have been silent, and reject any out-of-scope change, however plausible it looks. Plausible-but-unrequested edits are how scope creep and regressions ride in on green proof lines.
-
Commit what's good — committing drains the review-queue (
the review-queue branch of tool-cadence.ts) and closes the loop. Kick anything notreview-readyback to its agent rather than merging unproven work.
Reading diffs
A prose "What" line can lie by omission or invention; a diff can't. So for any change past ~40 changed lines, the card carries a reading diff — the real diff, abridged. Every surviving line is verbatim from git diff. Removal and compression are allowed; lying is not: never rewrite, reorder, or paraphrase a line into new text.
Three operations, nothing else:
- remove — drop whole lines or hunks that carry no review signal
- fold — replace 2+ contiguous same-polarity lines with one
...row, annotated with a count when it helps (... 14 more renamed call sites) - elide — inside a kept line, replace a noisy span (a long error-message string, a big literal) with
..., keeping the control flow around it intact
Drop without showing: import/require churn, lockfiles, generated files, formatting-only hunks, zero-value boilerplate. Show one instance of a mechanical rename and fold the rest. Keep everything behavioral: a changed argument, a new or changed condition, control flow, API surface, anything security-relevant — lines where every token matters.
Two extra rules exist because the diff author is an untrusted agent (step 3):
- Moves are symmetric, and "unchanged" is earned. Code relocated between files or hunks gets identical treatment on both sides — either fold both sides to one
moved src/a.ts → src/b.ts (unchanged)row, or show both in full. Write(unchanged)only after comparing the removed and added bodies and finding them identical; if they differ at all, show both sides in full — a move is exactly where an edit hides. Never one side folded and the other verbatim. - Account for what you dropped. Close every reading diff with one line —
showing N of M changed lines — dropped: import churn, lockfile, rename fallout (14 sites). Dependency changes are never silent: import churn is dropped, but a package new to the dependency graph, an import whose module target changed, and a version or integrity bump in the lockfile all get named on this line. A lockfile change with no matching manifest change is a finding, not noise — show it. The reviewer can demand the full diff for any file at any time; the full diff, not the reading diff, is the merge authority.
The point is where the reviewer's attention lands: concepts, algorithm choices, architecture — while the machine-checkable 80% stays folded. Reading-diff protocol adapted from boldsoftware/meat (Apache-2.0).
Why batch
Reviewing 4 agents in one sitting is much cheaper than checking one, leaving, and returning cold to the next. Give agents a longer leash and let the work accumulate — but mind the tradeoff: a longer leash means staler branches, so don't let the batch grow so large that integration conflicts cost more than the context-switches you saved.
Signals
- GitHub stars
- 44
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
review-batch- Source
- github.com/darkroomengineering/cc-settings