Lifecycle
This lifecycle is an optional OAT layer. Interop-only users can skip it.
OAT lifecycle order:
- Discovery (
oat-project-discover) - Spec (
oat-project-spec) - Design (
oat-project-design) - Plan (
oat-project-plan) - Implement (
oat-project-implement) - Review loop (
oat-project-review-provide/oat-project-review-receive) - Summary (
oat-project-summary) — generatessummary.mdas institutional memory;oat-project-pr-finalandoat-project-completeauto-refresh it when missing or stale - PR (
oat-project-pr-progress/oat-project-pr-final) — setspr_openstatus - Revision loop (
oat-project-revise) — optional; accepts post-PR feedback - Documentation sync (
oat-project-document) — optional; reads project artifacts and code evidence to identify docs needing updates, checks for missing coverage of newly shipped capability areas, checkstools.project-management, and auto-runsoat-pjm-update-repo-referencebefore scanning docs when the project-management pack is installed - Complete (
oat-project-complete)
Shortcut: oat-project-next reads project state and invokes the correct next skill automatically — use it instead of remembering which skill comes next. Complements oat-project-progress (which is read-only diagnostic).
Full spec-driven design supports three interaction modes: collaborative, selective collaborative, and draft-and-review. Selective collaborative drafts routine sections silently and presents high-risk or uncertain sections for live review. Quick-start lightweight design stays simpler and offers only collaborative or draft-and-review. See Design Modes for details.
Quick Look
- What it does: explains the end-to-end lifecycle for tracked OAT projects, including alternate quick and import lanes.
- When to use it: when you need the actual project execution model, not just a high-level overview of workflow mode.
- Primary entry points:
oat-project-new,oat-project-quick-start,oat-project-import-plan,oat-project-implement
Lifecycle Map
Post-implementation flow
After implementation and final review pass:
- Summary (
oat-project-summary) — generatessummary.mdas institutional memory from project artifacts; PR-final and completion will auto-refresh it if you have not already run it or if it is stale - Documentation (
oat-project-document) — optional sync of project docs; now uses the sharedtools.project-managementconfig signal to decide whether repo-reference refresh should run before docs analysis, and should recommend new docs pages/directories when the shipped work introduces a capability area that the docs app does not already cover - PR (
oat-project-pr-final) — creates PR description (auto-refreshessummary.mdfirst when needed, then uses it as source), setsoat_phase_status: pr_open, and tracks actual PR existence withoat_pr_status/oat_pr_url - Revision loop (
oat-project-revise) — accepts post-PR feedback:- Inline feedback creates
p-revNrevision phases withprevN-tNNtask IDs - GitHub PR feedback delegates to
oat-project-review-receive-remote - Review artifacts delegate to
oat-project-review-receive - After revision tasks complete, state returns to
pr_open
- Inline feedback creates
- Complete (
oat-project-complete) — accepts any phase status (pr_open,complete,in_progress), auto-refreshessummary.mdbefore closeout when needed, and always archives the project locally
Completion archive behavior
On completion, OAT now treats archive handling as part of the closeout lifecycle:
- Local archive is always written to
.oat/projects/archived/<project>/. - If
.oat/config.jsonenablesarchive.s3SyncOnCompleteand setsarchive.s3Uri, completion also attempts an S3 upload for a dated snapshot such as<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/. - If
.oat/config.jsonsetsarchive.summaryExportPath, completion copiessummary.mdto<archive.summaryExportPath>/20260401-<project>.md. - Missing or unusable AWS CLI configuration produces warnings during completion instead of blocking closeout.
oat project archive synccan later sync all archived projects, or one named archived project, back down from S3; it selects the latest dated remote snapshot and materializes it into the local bare archive tree.
Phase status: pr_open
After oat-project-pr-final runs, state.md shows oat_phase_status: pr_open. This signals:
- The project is in its post-PR review posture
- The project is NOT done — agents should not start a new project
- Next steps:
oat-project-revise(for feedback) oroat-project-complete(when approved)
Actual PR existence is tracked separately from oat_phase_status:
oat_pr_statusrecords whether the PR is merely ready to create, open, closed, or mergedoat_pr_urlrecords the tracked PR URL when a PR exists
This distinction matters during completion: oat-project-complete can skip the "Open a PR?" prompt when oat_pr_status: open is already present.
Auto-review at HiLL checkpoints
When workflow.autoReviewAtHillCheckpoints is enabled or plan.md frontmatter sets oat_auto_review_at_hill_checkpoints, completing a HiLL checkpoint automatically runs the extra lifecycle review scoped to every implementation phase not already covered by a passed whole-phase code review, through the just-completed checkpoint. Mid-implementation multi-phase reviews use inclusive phase-range scopes such as p02-p03; the final implementation checkpoint uses code final. The review uses auto-disposition mode (minors auto-converted to fix tasks, no user prompts). Disabled by default. Legacy autoReviewAtCheckpoints and oat_auto_review_at_checkpoints are still read as fallbacks. This does not control Tier 1 per-phase oat-reviewer gates.
Implementation modes
oat-project-implement v2.0 dispatches one subagent per phase (not per task). Capability detection at skill start selects a tier, locked for the run:
- Tier 1 (subagents): native subagent dispatch via Claude Code, Cursor, or Codex with spawn authorization.
- Tier 2 (inline): orchestrator reads the agent files and executes the process itself when subagents are unavailable or authorization is declined.
Within either tier, parallelism is expressed as plan metadata:
- Sequential (default): plans with no
oat_plan_parallel_groupsfield, or with an empty array. Phases run in plan order on the orchestration branch. - Parallel groups: phases listed together in
oat_plan_parallel_groupsrun concurrently in worktrees (Tier 1 only) and merge back to the orchestration branch in plan order. Groups themselves execute sequentially.
See Implementation Execution for the full execution model — tier detection, bounded fix loop, fan-in, merge-conflict handling, dry-run, and resumption.
Review receive behavior
oat-project-review-receivenow presents a findings overview before asking for any disposition decisions.- Findings are shown with stable IDs by severity (
C*,I*,M*,m*) so follow-up choices map clearly to specific items. - For each finding, the receive step summarizes the reviewer note, adds agent analysis, and gives a recommendation (convert now vs defer with rationale).
Alternate lifecycle lanes
Quick lane diagram
oat-project-quick-start(adaptive discovery — provide a project name and optional description; if only the name is provided, quick-start asks for the missing description before discovery. Well-understood requests synthesize quickly, exploratory requests invest in solution space exploration)- Decision point: straight to plan, optional lightweight
design.md, or promote to spec-driven - Implement:
oat-project-implement(sequential by default; parallel whenoat_plan_parallel_groupsis declared) oat-project-review-provide/oat-project-pr-final- Optional
oat-project-promote-spec-drivento backfill spec-driven lifecycle artifacts in-place
Import lane diagram
oat-project-import-plan- Implement:
oat-project-implement(sequential by default; parallel whenoat_plan_parallel_groupsis declared) oat-project-review-provide/oat-project-pr-final- Optional
oat-project-promote-spec-drivento switch project mode to spec-driven lifecycle
Lane diagrams
Spec-Driven workflow lane
During the Design step, oat-project-design asks how to work through the document unless a mode was selected by argument, environment, or workflow.designMode. The three full-design choices are collaborative, selective collaborative, and draft-and-review.
Quick lane
Quick lane lightweight design intentionally keeps a smaller collaborative/draft choice. Selective collaborative becomes available only after promotion into the full spec-driven design lane.
Import lane
Capture lane
Retroactive project creation for work done outside the OAT project workflow. Common scenario: mobile/cloud sessions where you brainstorm and implement with an agent, then want to open a PR and review from your desktop.
Entry point: /oat-project-capture (skill-only, no CLI command — requires agent conversation context).
Key differences from other lanes:
- No plan generation — the work is already done; the scaffold-created
plan.mdtemplate is kept but not authored - Discovery from conversation —
discovery.mdcaptures intent and decisions from the agent's conversation context, not from requirements analysis - Implementation from commits —
implementation.mdis populated from commit history with SHAs, not from executing plan tasks - Lifecycle state is user-chosen — user decides whether the project is ready for review or still in progress
Artifact progression
discovery.md -> spec.md -> design.md -> plan.md -> implementation.md -> summary.md
Quick lane progression:
discovery.md -> [design.md (optional lightweight)] -> plan.md -> implementation.md
Import lane progression:
references/imported-plan.md -> plan.md -> implementation.md (spec.md/design.md optional)
Capture lane progression:
discovery.md (from conversation) + implementation.md (from commits) — no forward-looking artifacts
Operational rules
- Keep
state.md,plan.md, andimplementation.mdsynchronized. - Stop at configured HiLL checkpoints.
- Do not move lifecycle forward when required review gates are unresolved.
Reducing lifecycle friction with workflow preferences
The lifecycle has several interactive prompts that power users often answer the same way every time — HiLL checkpoint behavior, archive on complete, auto-create PR, post-implementation chaining, final review execution model, and re-review scope narrowing. These can be configured once via workflow.* preference keys and respected automatically by skills.
See the Workflow preferences section in the Configuration guide for the full list of keys and how to set them. Preferences resolve through a three-layer chain (env > repo-local > repo-shared > user > default), so you can set personal defaults at user scope once and override per-repo only when needed.
Active project resolution
- Active project state is stored in
.oat/config.local.json(activeProject, repo-relative path). - Projects root is stored in
.oat/config.json(projects.root) and can be read viaoat config get projects.root. - Workflow skills prefer
oat config get activeProject/oat config get projects.rootrather than reading pointer files directly.
Reference artifacts
.oat/projects/<scope>/<project>/spec.md.oat/projects/<scope>/<project>/design.md.oat/projects/<scope>/<project>/plan.md.oat/projects/<scope>/<project>/implementation.md