Review gauntlet (serial)
SkillAI & modelsRun /be's review gauntlet SERIALLY — architecture-first-principles FIRST (framework/structure diffs), then /lens-debate (lowy ∥ hickey), then /agent-debate with an explicitly selected Claude/Codex/Grok peer, then /simplify, then code-police, each editing and committing on the live branch in turn. Use from /be §4, or when the user asks to "run the review gauntlet".
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 gauntlet (serial) skill
What this skill tells your AI
The instructions your AI receives, as published by juspay/kolu in .agents/skills/be-review/SKILL.md and read by ahel’s review.
Run the reviewers one after another on the live branch, each the sole
editor while it runs — every reviewer reads a settled tree and applies its own
fixes. Why serial, and the incidents behind these rules:
RATIONALE.md — read when editing this skill, not running it.
- architecture-first-principles — FIRST, for a diff touching framework
packages (
@kolu/surface*), adding/reshaping module structure, or whose correctness rests on a concurrency/ordering claim (a race declared closed, an asserted happens-before, a flag one callback sets and another path reads as truth). Skip ONLY for pure-docs or trivially-local diffs — a diff leaning on a happens-before is not trivially-local. Say so either way. Confirmed findings are dispositioned like any stage's: fix now or record where, never "acceptable for scope". /lens-debate— lowy ∥ hickey as parallel subagents, one reconcile-and-apply pass commits the fixes. Pass therationale./agent-debate— the selected peer debates to consensus; author rounds commitfix(…)./simplify— the self-applying reuse/simplification pass.- code-police — rules + fact-check passes, applying fixes.
PR comments come after the push, never before. Each step commits locally;
be-review pushes once after all steps, then posts. The debate skills run with
--no-comment and leave their bodies on disk. No PR comment may reference a
local-only commit.
Preflight
- Non-empty diff vs
<base>(default: the repo default branch). Empty → stop. Reviewers review committed code — commit/stash outstanding work. - Verify
<base>is a remote-tracking ref, mechanically. A caller's--base masternames the local master — routinely tens of commits stale, swelling the diff with history nobody wrote. Aftergit fetch origin:git -C "$repoPath" rev-parse --verify --quiet "refs/remotes/$base"; on failure retry asorigin/$base; if that fails too, stop and say so. - Resolve the scope once:
MB=$(git merge-base <base> HEAD),START=$(git rev-parse HEAD). PassMBto every step so each reviews against the identical fork point (later reviewers seeing earlier reviewers' fixes is intended). - Pin
repoPath— the repo under review may not be the cwd (a/berun can carry a companion repo). Thread it into every step and subagent prompt with absolute paths andgit -C "$repoPath". A cross-repo step returningcleanagainst a non-empty target diff meansrepoPathdidn't take effect. - Debate peer (unless
--tracksexcludesdebate): require--agent <claude|codex|grok>and run its auth preflight. On failure, name the login command or exact error and stop — never skip a mandatory track or substitute a fallback peer.
Run the steps
--tracks checks,lens,debate,simplify,police selects steps (default all), in
order, each to completion. Preflight already fetched and resolved the base —
don't redo it per step. Both review steps run inline in your own turn; act
on real signals (a subagent returning, a peer ping), never timers — no
ScheduleWakeup polling.
- lens —
/lens-debatewithrepoPath,base = MB,--no-comment, and therationale. It commits agreed fixes and leaves its comment at$repoPath/.lens-debate/comment.md— post that file after the push, don't improvise a summary. Statuses:clean/applied(settled);needs-human(adjudicate each finding yourself — decide drop or apply, apply survivors, fold the adjudication into the deferred comment; never report it as settled);merge-base-error(report and move on). - debate — capture
DEBATE_START=$(git -C "$repoPath" rev-parse HEAD), then invoke/agent-debate:review --agent <selected> --repo "$repoPath" --base MB --no-comment --context <context> --rationale <rationale>(no reasoning-effort flag — the peer runs at its CLI default). When an API-facing shared-surface change trips the drishti companion-repo gate, note in--rationalethat the gate defers to §ship (it can only be checked against final post-gauntlet HEAD). On consensus, assemble the deferred comment at$repoPath/.agent-debate/comment.md: peer ⇄ author header, round count (from theverdict-*.jsonfiles), a commit table of$DEBATE_START..HEAD(or "peer approved after author disputes" when empty), and a legend of the findings raised (unique by id across the verdicts). Fill both agent names from the actual harness and peer — never hardcode. Onreviewer-error/merge-base-error, post no false-consensus body; report the failure and move on. - simplify —
/simplifyscoped toMB; commit what it changed (refactor: simplify <area>, staging only its files). - police —
/code-policewith--no-elegancewhenever simplify ran (its elegance pass would re-invoke/simplifyover an already-simplified tree); omit the flag only when--tracksexcluded simplify. Tell its passes to scope toMB— their defaultorigin/HEAD...HEADdiff is wrong whenever--baseisn't the repo default. Apply and commit each fix (fix(police): <title>).
Push, then comment
Settle whether anything is new: git log --oneline $START..HEAD. Then:
just fmtbefore any push with new commits — no reviewer guarantees formatting,just checknever runs the formatter, and an unformatted tree redsci::fmtlater. Commit any reformat (style: just fmt).- New commits + a PR exists →
git push; only after it succeeds, post the deferred comments (their SHAs are now remote). - No new commits but a PR exists → post the comments immediately.
- No PR → nothing to push or comment on; findings live in chat and the log.
- A required push fails → do not post; report the failure.
Post one comment per track that produced a body: the lens body, the
agent-debate body (gh pr comment -F), and the code-police summary
(## [👮 Code-police](https://agency.srid.ca/)). Never merge.
Report
Summarize in chat, covering only the selected tracks and naming any skipped
track explicitly: lens status + adjudications; debate peer +
consensus/reviewer-error; what simplify changed; police findings and their
disposition; whether fixes were pushed; git log --oneline <base>..HEAD +
git diff --stat <base>.
ARGUMENTS:
Signals
- GitHub stars
- 78
- Forks
- 12
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
be-review- Source
- github.com/juspay/kolu