Skip to main content
/pm:review-mode sets the review intensity for the entire repository. The dial controls how many fresh-context reviewers run at each gate — a single repo-wide setting that a lane or an individual epic can override in either direction (0.51.0; it was escalate-only before). It is one field of the execution profile. It is a pure instruction-layer setting: PM never runs a review itself, it only shapes what the CLAUDE.md rules block tells your agent to do.

The three levels

If set-review-mode has never been run, the mode is standard — matching the default Gate 1/Gate 2 behavior already documented in the conductor skill.

Setting repo review mode

Pass the desired mode with the --mode flag:
Re-running the command replaces the prior mode outright — there is only one active mode at a time. The CLAUDE.md rules block is refreshed automatically so the “Current mode” line stays accurate.

If the rules block cannot be located — exit 11 (0.44.0)

The block is found by whole marker LINES, and anything other than exactly one BEGIN line followed by one END line — an orphan marker, or two blocks — is refused rather than guessed at. With a second copy of the block appended to CLAUDE.md:
Unlike init and upgrade, this verb refuses AT the block write, after its state save. So state.reviewMode already reads thorough, while CLAUDE.md and PROJECT.md were not written — and verify-state reports PROJECT.md as stale until they are. That is why the message says to run write-rules then render rather than to re-run the verb. Delete the stray marker lines (here, the whole second block), then write-rules and render (or /pm:status); after that CLAUDE.md carries Current mode: **thorough**. and verify-state reports that the last render is current. An unreadable .conductor/state.json is refused before anything is written, exit 11, with the git remedies (see /pm:gate-guard).

Per-epic override — any direction, most specific wins

Changed in 0.51.0. A single epic can carry its own review mode, stricter or looser than the repo-wide dial: a security-sensitive epic in an otherwise standard repo, or a docs tweak in a thorough one.
The rules:
  • The effective mode for an epic is resolved most-specific-wins: the epic’s own value, else its lane’s (set-profile --lane <lane> --review <m>), else the repo-wide dial, else standard. It is not the maximum of the layers: an epic set below the dial resolves to its own lower value.
  • Earlier versions refused that (escalate only, max(global dial, epic override)). The refusal is gone by decision. What replaces it is visibility: conductor.mjs profile --epic <id> and rules --epic <id> name the layer each value came from and, when an epic lowers a value, the higher value it overrides, and the activity log records the change.
  • --review-mode is accepted by add-epic, add-many (as the batch key reviewMode) and update-epic.
  • Query the effective value with conductor.mjs rules --epic <id> (look for “Current mode”) or conductor.mjs profile --epic <id>.
Every override has an unset. conductor.mjs update-epic <id> --clear review-mode drops the epic’s own value, and the epic then follows its lane’s value or the repo dial. That may be higher or lower than what the epic held. The repo-wide dial has its inverse too: set-review-mode ships none of its own, and set-profile --unset review is it (it removes the recorded dial, so the default standard applies again).

When several changes are reviewed as one release candidate

New in 0.51.0. Building a release from several changes, the budget applies per candidate, not per change: the converged review runs at the highest effective review among the candidate members (the members that are not archived and have built work), so one thorough member makes the whole candidate thorough. When members resolve to different levels, the procedure names each and recommends splitting the candidate by level. The whole procedure (batching, one integration branch, one capped review round, recording the same range as every member’s Gate 2) is the shipped release-candidate skill; release show prints the derived candidate review: line, see /pm:status.

Recording the verdict this dial asked for

The dial is lane-agnostic, and record-gate-review accepts any lane to match. Each gate takes its own kind of evidence, and 0.45.0 corrected every form that taught otherwise — a --gate 1|2 --verdict pass with no evidence exited 1, and a sha range recorded against Gate 1 records the wrong kind of evidence entirely:
Recording one creates no archive obligation — the archive gate stays openspec-only.
The review mode setting is stored in state.json under reviewMode. It persists across sessions and is re-applied by every fresh CLAUDE.md rules refresh — you do not need to re-run set-review-mode after a context compaction.
For high-stakes production changes, escalate the specific epic to thorough even if the repo is set to standard. One command before starting the epic is all it takes — the rest of the repo’s epics continue at standard.