Reviews
Review loop:
- Request review (
oat-project-review-provide) - Receive review and convert findings into tasks (
oat-project-review-receive) - Implement fixes (
oat-project-implement) - Re-review until passing status
Storage contract
- New project review artifacts are written to tracked
reviews/directories. oat-project-review-receiveconsumes the active top-level review artifact, updates project bookkeeping, then archives that artifact toreviews/archived/.reviews/archived/is the local-only historical surface. Activereviews/content is not gitignored by default.- Ad-hoc review artifacts still default to local-only orphan storage under
.oat/projects/local/orphan-reviews/.
Bookkeeping commits (required)
Both oat-project-review-receive and oat-project-review-receive-remote conclude with a required atomic commit of plan.md, implementation.md, state.md, and the archived review artifact (when tracked). This is the safety net that prevents cross-agent bookkeeping drift: when a subagent runs a receive skill in isolation, the commit ensures the original agent sees a clean checkout on return.
The commit is scoped and explicit — it stages only the project's tracking files and the project's reviews/ directory. It never uses git add -A or repo-wide glob patterns. Deferring this commit requires explicit user approval and must be recorded in the receive skill's summary so the original agent knows state is uncommitted.
Project vs ad-hoc
Provide (request a review):
oat-project-review-provideis project-scoped and requires active project state (resolved viaoat config get activeProject/.oat/config.local.json) plus projectstate.md.oat-review-provideis for non-project commit-range reviews (ad-hoc, no project state required).
Receive (process review findings):
oat-project-review-receiveprocesses local review artifacts within a project context (converts findings to plan tasks).oat-project-review-receive-remoteprocesses GitHub PR comment feedback within a project context (converts findings to plan tasks with stablepNN-tNNIDs).oat-review-receiveprocesses local review artifacts in ad-hoc mode (standalone task-list output, no project state mutation).oat-review-receive-remoteprocesses GitHub PR comment feedback in ad-hoc mode (standalone task-list output, optional reply posting).
Status model
Status progression in plan.md Reviews table:
pendingreceivedfixes_addedfixes_completedpassed
Current policy
- Critical/Important: address before pass.
- Medium: address by default; defer only with explicit approval and recorded rationale/disposition.
- Minor (non-final scopes): auto-deferred by default with rationale; do not block review completion.
- Minor (final scope): not auto-deferred; require explicit user disposition (defer vs convert), and explain each minor in plain language before asking.
Auto-review at checkpoints
When autoReviewAtCheckpoints is enabled (via oat config set autoReviewAtCheckpoints true or per-project in plan.md frontmatter), completing a plan phase checkpoint automatically spawns a subagent review. The review scope covers every implementation phase not already covered by a passed whole-phase code review, through the just-completed checkpoint. Mid-implementation multi-phase checkpoint reviews use inclusive phase-range scopes such as p02-p03. The final phase checkpoint triggers a code final review.
Auto-triggered reviews use oat_review_invocation: auto in the review artifact frontmatter. In auto mode, oat-project-review-receive auto-converts all findings to fix tasks without user prompts (Minor findings that are clearly out of scope are deferred with a note).
This feature is opt-in and disabled by default. When disabled, the manual oat-project-review-provide workflow applies.
Re-review scope narrowing
When re-reviewing after fix tasks have been applied, oat-project-review-provide detects completed (review) fix tasks and offers to narrow the re-review scope to just the fix-task commits. This avoids re-examining already-approved code.
The behavior can be set as a default via workflow.autoNarrowReReviewScope:
true— automatically narrow to fix commits, no promptfalse— always use the full scope, no prompt- unset (default) — prompt the user on each re-review
Typically set at user scope since it's a personal workflow preference:
oat config set workflow.autoNarrowReReviewScope true --userThe preference only applies when there are completed fix tasks to narrow to. Initial reviews (before any fix tasks exist) always use the full scope regardless of the preference. See Workflow preferences in the Configuration guide for the full list of preference keys.
Phase and final review
Use phase-scoped review artifacts during implementation (p01, p02, etc), then run final review before project closeout.
Final review passed gate requires:
- No unresolved Critical/Important/Medium findings.
- Deferred Medium findings resurfaced and explicitly dispositioned.
- Minor findings explicitly dispositioned (after plain-language explanation).
Subagent Compatibility
oat-project-review-provide uses provider-aware subagent dispatch when available:
- Claude Code: dispatch
oat-reviewerwithsubagent_type(resolved from.claude/agents/oat-reviewer.md). - Cursor: dispatch
oat-reviewervia explicit/oat-reviewerinvocation or natural mention (resolved from.cursor/agents/oat-reviewer.md;.claude/agents/oat-reviewer.mdis also supported for compatibility). - Codex multi-agent runtimes: Codex can auto-decide when to spawn agents, or you can explicitly request agent spawning (optionally with
agent_type).- Requires Codex config prerequisites:
[features] multi_agent = true- If explicit role pinning is used, role must be built-in (
default/worker/explorer) or configured under[agents.<name>].
- Project-scope Codex role files are generated from canonical
.agents/agents/*.mdduringoat sync --scope project. - User-scope Codex role generation (
~/.codex) is intentionally deferred. - Some Codex hosts require explicit user authorization before the skill may call
spawn_agent. In those hosts,oat-project-review-provideshould ask whether to delegate tooat-reviewerinstead of reporting the reviewer as unresolved.
- Requires Codex config prerequisites:
- If subagent dispatch is unavailable, follow the existing fallback path (fresh session preferred, inline reset as fallback).
Reference artifacts
.oat/projects/<scope>/<project>/plan.md(## Reviews).oat/projects/<scope>/<project>/reviews/(active tracked review artifacts).oat/projects/<scope>/<project>/reviews/archived/(local-only historical review artifacts).oat/projects/local/orphan-reviews/(default local-only storage for ad-hoc review artifacts).oat/repo/reviews/(tracked storage convention when explicitly desired).agents/skills/oat-review-provide/SKILL.md.agents/skills/oat-review-receive/SKILL.md.agents/skills/oat-review-receive-remote/SKILL.md.agents/skills/oat-project-review-provide/SKILL.md.agents/skills/oat-project-review-receive/SKILL.md.agents/skills/oat-project-review-receive-remote/SKILL.md