code-review: state the worker constraints as instructions, not tool permissions

A skill cannot restrict a subagent's tools - that is harness configuration, not
something SKILL.md can assert. Reframed both worker rules as things the
coordinator must SAY in the worker's prompt: name the coordinator's own model
explicitly on every spawn and bring in no other model, and tell the worker it is
reading rather than editing, then verify the tree is unchanged at the end.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G42vsxSKL7je39AsHZ5aJm
This commit is contained in:
Pawel Huryn
2026-09-13 15:33:35 +02:00
co-authored by Claude Opus 5
parent 76c51f3ae8
commit c64c2d868d
+12 -13
View File
@@ -196,20 +196,19 @@ drops to a cheaper model or a lower effort is the cheapest way to lose one. If a
or downgraded, say which in the report — a reader who assumes one model saw everything will
misjudge the coverage.
**One model, unless told otherwise.** Fan-out here is for coverage, not for a second opinion: every
worker runs the same model as the coordinator. Do not bring in a second model to cross-check findings
unless explicitly asked. Mixing models makes the result unattributable — when this skill is being
measured, or compared across models, a single foreign worker invalidates the number. The independent
second-model pass is a separate, explicitly-invoked step (`/ship-check` Step 6), never something this
skill reaches for on its own.
**One model. Name it on every worker.** Fan-out here buys coverage, not a second opinion. Pass the
coordinator's own model explicitly on each spawn — "inherit" is not a routing decision, and a worker
that quietly lands on a cheaper model is the easiest way to lose a finding. **Do not bring in a
different model**, to review or to cross-check, unless you are explicitly asked: mixing models makes
the result unattributable, and when this skill is being measured or compared across models, one
foreign worker invalidates the number. The independent second-model pass is a separate,
explicitly-invoked step (`/ship-check` Step 6), never something this skill reaches for on its own.
**Give workers read-only tools.** A review worker needs to read, search and navigate — nothing more.
Withhold file writes, edits and any mutating command; allow read, search and non-mutating inspection.
Three reasons, in order of importance: a worker that can edit will drift from reviewing into
"helpfully" fixing and stop reporting what it silently repaired; the repository under review must end
the run byte-identical to how it started, or the findings cannot be checked against it; and a
read-only worker cannot damage a working tree it misunderstood. If the host cannot restrict tools,
say so in the prompt and verify the tree is unchanged when the run ends.
**Tell workers they are reading, not editing.** A review worker needs to read, search and navigate;
it must not modify the tree. State that in the worker's instructions — a worker that starts editing
drifts from reviewing into "helpfully" fixing and stops reporting what it silently repaired, and the
findings can no longer be checked against the code they describe. Say it in the prompt rather than
assuming the host will enforce it, and confirm the tree is unchanged when the run ends.
## Report