@open-agent-toolkit/cli 0.3.17 → 0.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/assets/agents/oat-phase-implementer.md +81 -3
  2. package/assets/agents/oat-reviewer.md +15 -5
  3. package/assets/bundle-metadata.json +1 -1
  4. package/assets/docs/reference/cli-reference.md +8 -5
  5. package/assets/docs/reference/oat-directory-structure.md +1 -0
  6. package/assets/docs/reference/project-artifacts.md +17 -1
  7. package/assets/docs/reference/project-state-machine.md +19 -4
  8. package/assets/docs/skills/brainstorm.md +2 -1
  9. package/assets/docs/skills/index.md +1 -0
  10. package/assets/docs/workflows/advanced/autonomy.md +9 -1
  11. package/assets/docs/workflows/advanced/workflow-gates.md +11 -6
  12. package/assets/docs/workflows/approvals-and-automation.md +13 -8
  13. package/assets/docs/workflows/choose-workflow.md +16 -8
  14. package/assets/docs/workflows/projects/closeout/closeout-skills.md +8 -3
  15. package/assets/docs/workflows/projects/closeout/pr-flow.md +2 -0
  16. package/assets/docs/workflows/projects/execution/execution-skills.md +14 -2
  17. package/assets/docs/workflows/projects/execution/implementation-execution.md +15 -0
  18. package/assets/docs/workflows/projects/execution/picking-up-projects.md +10 -1
  19. package/assets/docs/workflows/projects/execution/project-log.md +22 -0
  20. package/assets/docs/workflows/projects/lifecycle.md +73 -9
  21. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +18 -1
  22. package/assets/docs/workflows/projects/planning/planning-skills.md +11 -10
  23. package/assets/docs/workflows/projects/planning/starting-projects.md +92 -20
  24. package/assets/docs/workflows/projects/reviews/index.md +15 -2
  25. package/assets/docs/workflows/projects/reviews/review-flavors.md +5 -3
  26. package/assets/public-package-versions.json +4 -4
  27. package/assets/skills/oat-brainstorm/SKILL.md +33 -9
  28. package/assets/skills/oat-brainstorm/references/destinations.md +9 -4
  29. package/assets/skills/oat-docs/SKILL.md +9 -4
  30. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  31. package/assets/skills/oat-project-autonomous/SKILL.md +14 -8
  32. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +17 -2
  33. package/assets/skills/oat-project-brief/SKILL.md +592 -0
  34. package/assets/skills/oat-project-brief/references/brief-contract.md +294 -0
  35. package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +393 -0
  36. package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +84 -0
  37. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  38. package/assets/skills/oat-project-complete/SKILL.md +7 -2
  39. package/assets/skills/oat-project-discover/SKILL.md +3 -2
  40. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +9 -1
  41. package/assets/skills/oat-project-document/SKILL.md +11 -1
  42. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +17 -2
  43. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  44. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +40 -0
  45. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +17 -2
  46. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +4 -0
  47. package/assets/skills/oat-project-implement/references/phase-execution.md +166 -1
  48. package/assets/skills/oat-project-implement/references/plan-and-resume.md +97 -3
  49. package/assets/skills/oat-project-import-plan/SKILL.md +5 -1
  50. package/assets/skills/oat-project-lite/SKILL.md +4 -1
  51. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +17 -2
  52. package/assets/skills/oat-project-new/SKILL.md +5 -1
  53. package/assets/skills/oat-project-next/SKILL.md +31 -4
  54. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +4 -0
  55. package/assets/skills/oat-project-plan/SKILL.md +12 -2
  56. package/assets/skills/oat-project-plan-writing/SKILL.md +6 -4
  57. package/assets/skills/oat-project-pr-final/SKILL.md +15 -3
  58. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +17 -2
  59. package/assets/skills/oat-project-pr-progress/SKILL.md +31 -4
  60. package/assets/skills/oat-project-progress/SKILL.md +30 -8
  61. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +4 -0
  62. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
  63. package/assets/skills/oat-project-quick-start/SKILL.md +60 -1
  64. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +17 -2
  65. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +4 -0
  66. package/assets/skills/oat-project-reconcile/SKILL.md +65 -3
  67. package/assets/skills/oat-project-review-provide/SKILL.md +331 -12
  68. package/assets/skills/oat-project-review-receive/SKILL.md +86 -1
  69. package/assets/skills/oat-project-revise/SKILL.md +27 -4
  70. package/assets/skills/oat-project-summary/SKILL.md +95 -2
  71. package/assets/skills/oat-wave-execute/SKILL.md +3 -2
  72. package/assets/templates/implementation-brief.md +165 -0
  73. package/assets/templates/plan-brief.md +140 -0
  74. package/assets/templates/plan.md +1 -1
  75. package/assets/templates/state.md +8 -2
  76. package/dist/commands/init/tools/shared/skill-script-references.d.ts.map +1 -1
  77. package/dist/commands/init/tools/shared/skill-script-references.js +8 -1
  78. package/dist/commands/project/log/append.d.ts.map +1 -1
  79. package/dist/commands/project/log/append.js +70 -10
  80. package/dist/commands/project/new/scaffold.d.ts +1 -1
  81. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  82. package/dist/commands/project/new/scaffold.js +35 -7
  83. package/dist/commands/project/promote/promote.d.ts +32 -1
  84. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  85. package/dist/commands/project/promote/promote.js +562 -5
  86. package/dist/commands/project/validate-plan/frontmatter.d.ts +12 -0
  87. package/dist/commands/project/validate-plan/frontmatter.d.ts.map +1 -0
  88. package/dist/commands/project/validate-plan/frontmatter.js +27 -0
  89. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  90. package/dist/commands/project/validate-plan/index.js +52 -18
  91. package/dist/commands/project/validate-plan/profiles.d.ts +54 -0
  92. package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -0
  93. package/dist/commands/project/validate-plan/profiles.js +269 -0
  94. package/dist/commands/project/validate-plan/validate-plan.d.ts +3 -19
  95. package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
  96. package/dist/commands/project/validate-plan/validate-plan.js +5 -82
  97. package/dist/commands/shared/agents-md-lock.d.ts +3 -0
  98. package/dist/commands/shared/agents-md-lock.d.ts.map +1 -0
  99. package/dist/commands/shared/agents-md-lock.js +130 -0
  100. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  101. package/dist/commands/shared/agents-md.js +26 -8
  102. package/dist/commands/shared/frontmatter.d.ts +1 -1
  103. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  104. package/dist/commands/shared/frontmatter.js +1 -0
  105. package/dist/commands/state/generate.d.ts.map +1 -1
  106. package/dist/commands/state/generate.js +51 -2
  107. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  108. package/dist/commands/tools/shared/pack-manifest.js +3 -0
  109. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-phase-implementer
3
- version: 1.1.7
3
+ version: 1.1.8
4
4
  description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
5
5
  tools: Read, Write, Edit, Bash, Grep, Glob, Task
6
6
  color: cyan
@@ -29,7 +29,7 @@ The root supplies:
29
29
  - `mode`: `implement`, `fix`, or `recover`;
30
30
  - `artifact_paths`: available plan, design, spec, discovery, implementation,
31
31
  and imported-plan paths;
32
- - `workflow_mode`: `spec-driven`, `quick`, `import`, or `lite`;
32
+ - `workflow_mode`: `spec-driven`, `quick`, `import`, `lite`, or `brief`;
33
33
  - `commit_convention`: exact task/fix commit convention;
34
34
  - `phase_base_head`: root-recorded HEAD before phase dispatch;
35
35
  - `worktree`: assigned phase worktree or orchestration checkout;
@@ -125,9 +125,19 @@ Read each required artifact once at phase start:
125
125
  Criteria, and the Product Behavior and/or Technical Design selected by its
126
126
  recorded `minimal`, `product`, `technical`, or `both` content shape.
127
127
  Discovery, spec, and design are absent by design.
128
+ - `brief`: read the assigned `## Phase pNN:` block (`**Intent:**`,
129
+ `**Exit evidence:**`, `**Provisional:**`) and the brief's Goal, Outcomes,
130
+ Approach, Constraints and Out of Scope, Decisions, Known Unknowns, and
131
+ Delivery endpoint and authority sections in `plan.md`; the phase's section of
132
+ `implementation.md`; and sections 3, 6, 7, and 10 of
133
+ `oat-project-brief/references/brief-contract.md`. Discovery, spec, and design
134
+ are absent by design.
128
135
 
129
136
  Extract all phase tasks, dependency order, file boundaries, verification
130
- commands, commit messages, and phase-wide verification before editing.
137
+ commands, commit messages, and phase-wide verification before editing. In
138
+ `brief` mode there are no planned tasks to extract: extract the phase's Intent,
139
+ its Exit evidence as the phase-wide verification, and the Phase Scope's commit
140
+ convention, and follow `## Brief Mode` below.
131
141
 
132
142
  ## Artifact Hygiene
133
143
 
@@ -348,6 +358,72 @@ disposition:
348
358
  - Reason: {eligibility or stop-boundary evidence}
349
359
  ```
350
360
 
361
+ ## Brief Mode
362
+
363
+ This section applies only when `workflow_mode` is `brief`. It replaces task
364
+ extraction and adapts the task loop; every other rule in this contract,
365
+ including recovery, still applies. The brief contract wins where this section
366
+ restates it.
367
+
368
+ **Requirement source.** The phase's Intent and Exit evidence plus the brief's
369
+ Outcomes, Constraints and Out of Scope, and Decisions. A provisional phase is
370
+ never executed: return `NEEDS_CONTEXT` naming it, because the root makes
371
+ phases concrete before dispatch.
372
+
373
+ **Execution records replace planned tasks.** Work in coherent units, each tied
374
+ to one implementation commit. For each unit:
375
+
376
+ 1. Open `### Task pNN-tNN: <name>` under the phase's section of
377
+ `implementation.md` with `**Status:** in_progress`,
378
+ `**Executor:** phase-implementer:<original_request_id>`, intent, files,
379
+ proof command, and your handle. Use the next free ordinal in the phase
380
+ (`prevN-tNN` in a revision phase); never reuse an ID. Lookahead is allowed:
381
+ you may open several independent records before working them.
382
+ 2. Implement the unit and run its proof command plus the Prevention checks.
383
+ 3. Create its one implementation commit through `oat internal commit-paths`
384
+ with identity `${ORIGINAL_REQUEST_ID}:${RECORD_ID}`, a message carrying
385
+ `(pNN-tNN)`, and an owned-file list that excludes the journal.
386
+ 4. Close the record with `**Status:** completed` and `**Commit:** <full SHA>`,
387
+ or with `failed`, `cancelled`, or `no-change` and no fabricated commit, and
388
+ commit only `implementation.md` as `chore(oat): record {pNN-tNN}` with
389
+ identity `${ORIGINAL_REQUEST_ID}:${RECORD_ID}:record`.
390
+
391
+ Step 2's per-task verification then expects exactly one implementation commit
392
+ inside the record's effective boundary followed by one journal-only record
393
+ commit; a record closed with a terminal status and no implementation commit
394
+ produces only the journal-only commit. A request for a maintained up-front task
395
+ plan is a promotion question for the root, never lookahead.
396
+
397
+ **Journal ownership.** You write only your phase's section of
398
+ `implementation.md`: its execution records and, in a sequential phase, its
399
+ `**Head:**` line and verification summary. Never write `**Base:**` (the root
400
+ records it before dispatch and passes it as `anchor_base`), never write the
401
+ phase's `**Status:** completed` (acceptance is root-owned), and never edit
402
+ `state.md`, `plan.md`, the `## Reviews` table, or another phase's section. In a
403
+ parallel-group worktree, write the records but no anchors; the root writes the
404
+ group's fork base and integration-merge heads at fan-in. Report your worktree
405
+ head: it is the review head of your phase's per-phase review, which runs on
406
+ `EXPECTED_HEAD..<that head>` before the merge.
407
+
408
+ **Phase head.** After the last record closes and phase-wide verification
409
+ passes, in a sequential phase write `**Head:** <full SHA of the last commit of
410
+ the phase>` plus a short verification summary under the phase heading and
411
+ commit only the journal as `chore(oat): record {pNN} head`. Report the head.
412
+
413
+ **Nested workers never commit.** An optional nested worker returns edits on
414
+ owned paths; you, the committing owner, create every commit.
415
+
416
+ **Fix mode.** Record each review fix as a record whose name starts with
417
+ `(review)` and that carries `**Source review:**` with the review filename and
418
+ finding IDs, through the same open, commit, close sequence. While no later
419
+ phase has a `**Base:**`, also advance `**Head:**` to the new last commit in the
420
+ closing journal commit; otherwise stop and report, because the correction
421
+ belongs to a revision phase the root appends.
422
+
423
+ **Report.** In the Task Outcomes table, list one row per execution record in
424
+ the Task column with its terminal status and commit, and add
425
+ `**Phase anchors:** {anchor_base}..{head}` below the header fields.
426
+
351
427
  ## Mode: Implement
352
428
 
353
429
  ### 1. Verify Phase Base
@@ -484,6 +560,8 @@ After all task commits:
484
560
  - `spec-driven`: `plan.md`, `design.md`, and `spec.md`;
485
561
  - `quick`: `plan.md` and `discovery.md`, plus design/spec when present; and
486
562
  - `import`: `plan.md` and the imported plan, plus design/spec when present;
563
+ - `brief`: the phase's Intent and Exit evidence plus the brief's Outcomes,
564
+ Constraints and Out of Scope, and Decisions;
487
565
  - confirm no task boundary or dependency was missed; and
488
566
  - report Medium/Low concerns without launching a reviewer.
489
567
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-reviewer
3
- version: 1.2.11
3
+ version: 1.2.12
4
4
  description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
5
5
  tools: Read, Bash, Grep, Glob, Write, Task
6
6
  color: yellow
@@ -50,9 +50,10 @@ You will be given a "Review Scope" block including:
50
50
  - **commits/range**: Git commits or SHA range for changed files. For code review, this is the authoritative review surface.
51
51
  - **files_changed**: Optional orientation hint listing files believed to be modified in scope. If this disagrees with the commit range, trust the commit range.
52
52
  - **analysis_artifact**: For `type: analysis`, path to the severity-rated analysis artifact to fact-check.
53
- - **workflow_mode**: `spec-driven` | `quick` | `import` | `lite` (default to `spec-driven` if absent)
53
+ - **workflow_mode**: `spec-driven` | `quick` | `import` | `lite` | `brief` (default to `spec-driven` if absent)
54
54
  - **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
55
- - **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
55
+ - **tasks_in_scope**: Task IDs being reviewed (if task/phase scope). In `brief` mode these are the execution-record IDs under the phases in scope; they label commits and never narrow the range.
56
+ - **Brief anchor record**: For `brief` code reviews, the caller supplies `oat_review_requested_scope`, `oat_review_phase_ids` (ordered), `oat_review_base_sha`, `oat_review_scope_source` (`anchors` | `merge-base-range` | `explicit` | `merge-base` | `narrowed`), and, when they apply, `oat_review_fallback_reason`, `oat_review_integration_commits`, and `oat_review_narrowed_from`. Copy them verbatim into artifact frontmatter (Step 8).
56
57
  - **oat_output_mode**: Optional output-sink selector. Absent (or any value other than `structured`) means **artifact mode** — write the review artifact to disk per Step 8. `structured` means **structured-output mode** — return a `StructuredFindings` object in-memory and write NO artifact file (see **Structured-Output Mode**). This key parallels the existing `oat_review_invocation` dispatch-payload naming.
57
58
  - **oat_review_invocation**: Optional provenance selector for artifact-mode reviews. Use `manual`, `auto`, or `gate`; default to `manual` when absent.
58
59
  - **Code-review provenance**: For artifact-mode code reviews, resolve the authoritative range head with `git rev-parse <authoritative-range-head>^{commit}` and record the resulting full 40-character commit SHA as `oat_review_head_sha`. If the review is narrowed, also record the resolved range, prior artifact path, and prior reviewed head supplied by the caller.
@@ -129,6 +130,7 @@ Use workflow mode to determine required evidence:
129
130
  - **quick**: `discovery.md` + `plan.md` are expected (`spec.md`/`design.md` optional if present).
130
131
  - **import**: `plan.md` is expected (`references/imported-plan.md` preferred; `spec.md`/`design.md` optional).
131
132
  - **lite**: `plan.md` and `implementation.md` are expected; discovery, spec, and design are absent by design.
133
+ - **brief**: `plan.md` (a Project Brief) and `implementation.md` (the per-phase journal) are expected; discovery, spec, and design are absent by design. `oat-project-brief/references/brief-contract.md` defines the brief sections, phase grammar, journal markers, and anchor rules, and the caller supplies it with the Review Scope.
132
134
 
133
135
  Do not mark missing optional artifacts as findings.
134
136
  If required artifacts for the mode are unexpectedly missing, record a workflow contract gap.
@@ -152,6 +154,7 @@ Read available artifacts to understand what SHOULD have been built:
152
154
  - `quick`: read `discovery.md` and `plan.md`; read `spec.md`/`design.md` only if they exist.
153
155
  - `import`: read `plan.md` and `references/imported-plan.md` (if present); read `spec.md`/`design.md` only if they exist.
154
156
  - `lite`: read `plan.md` and `implementation.md`; do not require discovery, spec, design, or an import reference.
157
+ - `brief`: read the brief in `plan.md`, the journal in `implementation.md`, and the brief contract when supplied; do not require discovery, spec, design, or an import reference.
155
158
  3. For `type: analysis`, read `analysis_artifact` and then inspect only the cited evidence sources needed to verify its findings:
156
159
  - `scope: docs`: consult the docs contract, docs navigation/index files, and cited docs source files relevant to the analysis.
157
160
  - `scope: agent-instructions`: consult the repo/root instruction files, provider instruction files, and cited skill/agent instruction files relevant to the analysis.
@@ -161,6 +164,8 @@ Read available artifacts to understand what SHOULD have been built:
161
164
 
162
165
  Only review files/changes within the provided scope.
163
166
 
167
+ In `brief` mode the authoritative code-review range comes from the recorded phase anchors: `Base..Head` for one phase, or the first selected base through the last selected phase's head for a range or `final`. Commit-message `(pNN-` matches only label which commits belong to which phase and never narrow the range. When `oat_review_scope_source` is `merge-base-range`, review the entire supplied range. If an anchor is missing, does not exist, or contradicts the ordering rules in brief contract section 10, record a workflow contract gap rather than narrowing silently. Treat the listed integration commits as inside the range.
168
+
164
169
  Do NOT:
165
170
 
166
171
  - Review unrelated work outside the scope
@@ -177,6 +182,7 @@ For each requirement in scope, use the best available requirement source by mode
177
182
  - `quick`: `discovery.md` + `plan.md`
178
183
  - `import`: normalized `plan.md` + `references/imported-plan.md` (if present)
179
184
  - `lite`: the requirements contract in `plan.md`: Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria. Also use Product Behavior and/or Technical Design when selected by the recorded `minimal`, `product`, `technical`, or `both` content shape.
185
+ - `brief`: each phase in scope's `**Intent:**` and `**Exit evidence:**` lines plus the brief's Outcomes, Constraints and Out of Scope, and Decisions. A `final` review also audits every numbered Outcome against its observed evidence in the journal; an Outcome with neither evidence nor a recorded deferral is a finding. Execution records are evidence of committed work, not requirements.
180
186
 
181
187
  Then verify:
182
188
 
@@ -267,13 +273,14 @@ Treat the artifact as a product deliverable. Verify it is:
267
273
  - `quick`: discovery (+ spec/design if present)
268
274
  - `import`: imported-plan reference (+ discovery/spec/design if present)
269
275
  - `lite`: plan.md Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria. Also review the Product Behavior and/or Technical Design required by its recorded content shape; challenge `minimal` when an observable shape trigger applies.
276
+ - `brief`: the brief is self-contained; review it against the brief contract and the user's request, with no upstream discovery, spec, or design.
270
277
  - For import-mode `plan` reviews, bias findings toward canonical-format conformance and completeness. Do not rewrite the imported author's intent merely to match OAT house style.
271
278
 
272
279
  4. **Actionable**
273
280
  - Clear next steps and readiness signals
274
281
  - For spec: Verification entries are meaningful (`method: pointer`)
275
282
  - For design: requirement-to-test mapping exists and includes concrete scenarios
276
- - For plan: tasks have clear verification commands and commit messages
283
+ - For plan: tasks have clear verification commands and commit messages (for a brief, each phase has concrete Intent and Exit evidence instead; tasks are not required)
277
284
 
278
285
  5. **Plan-specific checklist**
279
286
  - Canonical-format conformance: required frontmatter and sections are present, the Reviews table exists, and artifact/code rows are shaped consistently.
@@ -283,6 +290,7 @@ Treat the artifact as a product deliverable. Verify it is:
283
290
  - Task atomicity and verifiability: each task is independently committable, has bounded file scope, and has executable verification intent. Require a proportionate implementation and proof strategy only when the applicable workflow plan contract declares it; otherwise review the task's existing verification commands and evidence.
284
291
  - Coverage of design/discovery: every in-scope design component or discovery decision is mapped to at least one task or explicitly deferred/out of scope.
285
292
  - Parallelism-claim sanity: any parallel phase group or parallelism statement is consistent with declared file boundaries and dependency order.
293
+ - **Brief plan review** replaces the task-oriented items above with the brief section list: Goal; numbered Outcomes, each naming its intended evidence; Approach (optional `### Design`); Constraints and Out of Scope; Decisions with rationale and rejected alternatives; Known Unknowns, each with the phase that settles it; Delivery endpoint and authority; an empty `## Milestones` section; `## Phase pNN:` blocks with non-empty Intent and Exit evidence, a `**Provisional:**` value of `yes` or `no`, and a concrete first phase; Parallelism; Reviews (preserved rows); Implementation Complete; References. Stable, never-reused phase IDs in document order replace stable task IDs. There is no task requirement; `### Task` headings in a brief are a finding, because execution records belong in the journal. Check that every Outcome is reachable through some phase's Exit evidence and that any declared parallel group passes the independence test in brief contract section 6.
286
294
 
287
295
  6. **Necessary**
288
296
  - Evaluate whether the proposed approach materially serves the requested
@@ -307,7 +315,7 @@ Treat the artifact as a product deliverable. Verify it is:
307
315
 
308
316
  This step applies to **code reviews** only.
309
317
 
310
- If `design.md` is absent in quick/import/lite mode, mark design alignment as "not applicable (design artifact not present for mode)" and continue.
318
+ If `design.md` is absent in quick/import/lite/brief mode, mark design alignment as "not applicable (design artifact not present for mode)" and continue. A brief's `### Design` subsection, when present, is the design source for this step.
311
319
 
312
320
  For each design decision relevant to scope:
313
321
 
@@ -550,6 +558,8 @@ Gate parsing contract: artifact-mode reviews, including reviews spawned by `oat
550
558
 
551
559
  For every artifact-mode code review, `oat_review_head_sha` is required and must be the full 40-character commit SHA at the head of the authoritative review range. Resolve it with `git rev-parse <authoritative-range-head>^{commit}`. An abbreviated SHA, symbolic ref, or range string is invalid. When the review narrowed, `oat_review_range`, `oat_prior_review_artifact`, and `oat_prior_review_head_sha` are also required; the prior head must likewise be a full 40-character SHA. These code-review fields are independent of the gate-only block and do not apply to artifact, analysis, or structured-output reviews.
552
560
 
561
+ For a `brief` code review, also copy the supplied anchor record fields (`oat_review_requested_scope`, `oat_review_phase_ids`, `oat_review_base_sha`, `oat_review_scope_source`, and any supplied `oat_review_fallback_reason`, `oat_review_integration_commits`, and `oat_review_narrowed_from`) verbatim into frontmatter beside `oat_review_head_sha`, which is the aggregate head of the anchored range. Never infer them from commit messages or the current HEAD.
562
+
553
563
  For a narrowed review, do not restate requirements-coverage claims that this pass did not itself verify. Reference the prior artifact's coverage or mark inherited coverage rows as inherited so the union of passes remains auditable.
554
564
 
555
565
  For gate-originated artifacts, all six gate-only fields are required when the prompt supplies gate context. Copy the values exactly. Do not parse the provider command, infer values from the target id, or replace configured values with observed/self-reported identity. Any optional self-report belongs in review prose and is non-authoritative; the gate validates the copied frontmatter against its immutable configured invocation record before applying severity thresholds.
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.3.17"
3
+ "oatVersion": "0.3.19"
4
4
  }
@@ -100,12 +100,15 @@ Lifecycle](../workflows/backlog-and-planning/backlog-lifecycle.md).
100
100
 
101
101
  Notable commands introduced in the current CLI surface:
102
102
 
103
- - `oat project new <slug> [--mode spec-driven|quick|import|lite] --scope shared|local|synced [--force]` - create a
103
+ - `oat project new <slug> [--mode spec-driven|quick|import|lite|brief] --scope shared|local|synced [--force]` - create a
104
104
  project in an explicit scope. `--mode` selects the workflow mode and therefore
105
105
  which artifacts are scaffolded; it defaults to `spec-driven`. Use `quick` for a
106
106
  bounded feature with clear requirements, `import` to normalize an externally
107
- authored plan, and `lite` for a single-sitting change that scaffolds only
108
- `plan.md`, `state.md`, and `implementation.md`. See
107
+ authored plan, `lite` for a single-sitting change that scaffolds only
108
+ `plan.md`, `state.md`, and `implementation.md`, and `brief` for one delivery
109
+ planned as a Project Brief, which scaffolds the `plan-brief` and
110
+ `implementation-brief` templates plus `references/research/`. Start brief
111
+ projects with `oat-project-brief`, which runs this command itself. See
109
112
  [Lifecycle](../workflows/projects/lifecycle.md) for the per-lane flow. Without
110
113
  `--scope`, creation uses
111
114
  `projects.defaultScope`, which defaults to `synced`. Project slugs are
@@ -190,7 +193,7 @@ Notable commands introduced in the current CLI surface:
190
193
  - `oat project status --field <path>` - print one arbitrary dot-path field from the same status payload, e.g. `project.workflowMode` or `project.timestamps.stateUpdated`. Missing/null fields print `null`; object and array fields print compact JSON.
191
194
  - `oat project status --project-path <path>` - read from a repo-relative or absolute project path instead of `.oat/config.local.json`'s active project pointer. Combine it with `--field` or `--shell` when a skill has already resolved the target project path.
192
195
  - `oat project status --shell NAME=path ...` - print shell-safe assignments for one or more fields from one status read, e.g. `WORKFLOW_MODE='quick'`. This is the preferred multi-field read API for skills. See [Writing Skills → Reading project state](../contributing/skills.md#reading-project-state) for examples and the `npx`-backed `oat` shim contract.
193
- - `oat project promote <project-path> --to quick [--json]` - promote an authored lite project to quick mode. The command derives `discovery.md` from the lite plan's Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria; carries Product Behavior into Success Criteria and Technical Design into a carried-forward discovery section when those adaptive sections are present; preserves the original as `references/lite-plan.md`; and scaffolds a fresh quick `plan.md`. It refuses unsupported targets, non-lite or unreadable projects, an existing lite-plan reference, invalid authored sections, unresolved scope, unavailable templates, failed writes, or failed persistence. JSON output is `{ status: "promoted" | "refused", reason, files }`; `reason` is the stable categorical contract and refused results exit non-zero.
196
+ - `oat project promote <project-path> --to quick [--json]` - promote an authored lite or brief project to quick mode. For a lite project, the command derives `discovery.md` from the lite plan's Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria; carries Product Behavior into Success Criteria and Technical Design into a carried-forward discovery section when those adaptive sections are present; preserves the original as `references/lite-plan.md`; and scaffolds a fresh quick `plan.md`. For a brief project, it migrates each phase by state: accepted phases keep their completed execution records as quick tasks or get one synthesized `Accepted via phase evidence` task against the phase's `**Head:**`, active phases keep their completed records, and pending or provisional phases stay taskless and are listed in `oat_promotion_pending_phases` (quick plan readiness stays false until that list is empty); it renders the brief's sections into `discovery.md`, archives the original as `references/brief-archive.md`, and sets `oat_promoted_from: brief`. There is no reverse direction. It refuses unsupported targets, projects that are neither lite nor brief, unreadable projects, an existing lite-plan reference, invalid authored sections, an existing brief archive (`brief-archive-exists`), an extracted journal phase (`extracted-phases`), a brief with no parseable phases (`invalid-brief-plan`), an accepted brief phase with no completed record and no `**Head:**` anchor (`missing-phase-head`), unresolved scope, unavailable templates, failed writes, or failed persistence. JSON output is `{ status: "promoted" | "refused", reason, files }`, plus an optional `phases` array naming the refused phases when `reason` is `missing-phase-head`; `reason` is the stable categorical contract and refused results exit non-zero.
194
197
  - `oat template resolve <name> [--output <path>] [--json]` - resolve a template in repository (`<repo>/.oat/templates/`), user (`~/.oat/templates/`), then bundled order and report `name`, `found`, `tier` (`repository` | `user` | `bundle`), and `path`. `path` is set only for the repository and user tiers; it is `null` for the bundled tier, so callers never depend on a package-manager path. `<name>` accepts `plan` or `plan.md` and rejects path separators and `..`. `--output <path>` copies the resolved content to that file, replacing an existing file, and does not create missing parent directories; JSON output adds the absolute `output` path. A template missing from every tier exits 1 with `found: false`. Lifecycle skills use `--output` to copy their artifact templates, so a user-scope-only install works without a repository `.oat/templates/` directory.
195
198
  - `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
196
199
  - `oat project list --json` - summary state for tracked projects under the configured projects root
@@ -200,7 +203,7 @@ Notable commands introduced in the current CLI surface:
200
203
  - `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
201
204
  - `oat project dispatch record --event-file <json-file-or-dash>` - validate one generic dispatch record plus its namespaced OAT evidence event and print the result with `status: validated-only`. The command writes nothing; launches are recorded in the calling workflow's run record. Managed, effort-pinned Claude launches run it before launch: the input carries `claudeLaunch` with the real resolver result, generated definition, and proposed payload, plus `recordBase` and `event`. The command validates their agreement and derives the configured invocation fields; callers cannot copy those fields into `recordBase`. One validation run reports every violation across `claudeLaunch`, `recordBase`, and `event` in a single error message, one `stage path: message` line each; the `recordBase` cross-field rules run even when a required field is missing, checks that need a value that failed to parse are skipped and named on a final line, secret-shaped values and absolute paths are scrubbed from the message, and the exit code stays 1. A validated input per role is published at `.agents/skills/oat-dispatch-subagents/references/managed-claude-example.json`. The command validates evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never echoed in the output, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/advanced/evidence-layers.md).
202
205
  - `oat project dispatch canonical-role --role <name> --request-id <id> --skill-dir <dir> [--json]` - resolve a canonical role through the loaded, user (`$HOME/.agents`), and project (`<repo>/.agents`) tiers and print the `canonical-role-resolution` event that `oat project dispatch record` accepts unchanged: redacted `canonicalPath` and `selectedPath` in the form `<loaded|user|project>/agents/<name>.md`, the role's `contentDigest`, and `candidateMisses`. `--skill-dir` is required because the loaded tier is derived from the loaded skill's directory; a missing or invalid directory exits 1 with a redacted error. An unknown role prints `missing` evidence with its recovery commands. Read-only; the dependency is the `workflows` pack.
203
- - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/execution/implementation-execution.md#parallel-phase-groups).
206
+ - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. Brief plans (`oat_workflow_mode: brief`) are validated with the brief profile: phases need non-empty `**Intent:**` and `**Exit evidence:**`, a `**Provisional:**` value of `yes` or `no`, unique IDs, and a concrete first phase; `### Task` headings in a brief are reported as a warning, and taskless parallel groups are valid. See [Implementation Execution](../workflows/projects/execution/implementation-execution.md#parallel-phase-groups).
204
207
  - `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../workflows/projects/execution/project-log.md).
205
208
  - `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
206
209
  - `oat gate review <prompt...>` - run a stateful, headless OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. `--timeout-ms <milliseconds>` overrides target, `workflow.gateTimeouts`, environment, and scope defaults; accepted values are 1,000–14,400,000. Final/phase/range code reviews and artifact reviews default to 30 minutes, while task code reviews default to 15 minutes. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_missing` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. `artifact_missing` means an accepted child exited cleanly without an artifact; fix synchronous review/artifact completion and start a new run, without review-receive or same-run remediation. For `targeting_correlation_failed`, correct the project declaration or artifact routing and start a new run; do not run review-receive even if an artifact path is present. For `artifact_validation_failed`, correct the artifact and rerun the gate until it revalidates as `ok` or `blocked`. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. `review_failed` may include structured `refusal`, `noOutputProduced`, and metadata-only `activityEvidence`; these diagnostic fields never make a run receive-eligible. After a timeout, a validated run-correlated artifact returns the ordinary `ok` or `blocked` envelope with additive `lateCompletion: true`. When post-selection work fails after the reviewer already committed a run-correlated artifact, the gate re-validates that selected snapshot through the same eligibility path rather than re-parsing whatever the path now holds, never re-dispatching, and returns the ordinary `ok` or `blocked` envelope with additive `postSelectionRecovery: true`; the artifact must still be present and unchanged for re-validation to succeed. When nothing recovers, `review_failed` names the failing sub-step in `postSelection.step` and its cause in `postSelection.code`. Duplicate run-ID matches or a changed artifact with a mismatched run ID retain `targeting_correlation_failed` and `receiveEligible: false`. Orchestrators should read the structured result rather than poll the filesystem. See [Workflow Gates](../workflows/advanced/workflow-gates.md).
@@ -322,6 +322,7 @@ Not all workflow modes require every artifact:
322
322
  - `quick`: discovery + plan + implementation (spec/design optional)
323
323
  - `import`: imported plan + implementation (spec/design optional)
324
324
  - `lite`: single-phase plan + implementation (summary/documentation optional at closeout)
325
+ - `brief`: Project Brief in `plan.md` + per-phase journal in `implementation.md` (`references/research/` scaffolded; no discovery, spec, or design)
325
326
 
326
327
  ## `.oat/repo/` structure
327
328
 
@@ -50,7 +50,7 @@ archive metadata own terminal reachability and retry identity.
50
50
 
51
51
  Mode-sensitive notes:
52
52
 
53
- - `state.md` includes workflow mode metadata (`spec-driven`, `quick`, `import`, `lite`) for routing.
53
+ - `state.md` includes workflow mode metadata (`spec-driven`, `quick`, `import`, `lite`, `brief`) for routing.
54
54
  - `plan.md` remains the canonical execution artifact across all modes.
55
55
 
56
56
  | Mode | Core authored artifacts | Optional artifacts |
@@ -59,6 +59,7 @@ Mode-sensitive notes:
59
59
  | `quick` | `discovery.md`, `plan.md` | Lightweight `design.md`, `spec.md` |
60
60
  | `import` | `references/imported-plan.md`, `plan.md` | `spec.md`, `design.md` |
61
61
  | `lite` | Single-phase `plan.md` with Summary, Decisions, Assumptions, Out of Scope, Validation Criteria, and an explicit adaptive content shape | `summary.md` and documentation at closeout |
62
+ | `brief` | `plan.md` as a Project Brief (phases with Intent and Exit evidence) and `implementation.md` as the per-phase journal | `references/research/`, `project-log.md` |
62
63
 
63
64
  Every Lite plan keeps Summary, Decisions, Assumptions, Out of Scope, and
64
65
  Validation Criteria. User-visible changes add numbered, testable Product
@@ -75,6 +76,21 @@ implementation-then-regression, static/build, or manual/visual. Static or build
75
76
  checks alone fit only changes that cannot affect runtime behavior; every
76
77
  behavioral change needs evidence that fails without the change.
77
78
 
79
+ In brief mode, `plan.md` is the Project Brief: Goal, numbered Outcomes (each
80
+ naming its intended evidence), Approach with an optional `### Design`,
81
+ Constraints and Out of Scope, Decisions, Known Unknowns, Delivery endpoint and
82
+ authority, an empty `## Milestones` section reserved for goal mode, and
83
+ `## Phase pNN:` blocks with `**Intent:**`, `**Exit evidence:**`, and
84
+ `**Provisional:**` lines instead of tasks. `implementation.md` is the
85
+ per-phase journal: each phase section carries exact `**Status:**`,
86
+ `**Base:**`, `**Head:**`, and `**Executor:**` marker lines, followed by
87
+ `### Task pNN-tNN` execution records opened as work happens. Progress counts
88
+ phase-units, and `**Status:** completed` under a phase heading is what accepts
89
+ it. The journal's Final Summary adds an `**Outcomes audit:**` block with one
90
+ line per numbered Outcome. When a brief artifact gate is configured,
91
+ `state.md` records its outcome as `oat_brief_gate`, with the same core fields
92
+ as `oat_quick_start_gate`.
93
+
78
94
  ## Blockers in state.md
79
95
 
80
96
  `oat_blockers` accepts legacy reason strings and structured workflow records:
@@ -17,8 +17,8 @@ This page is the compact contract for how project lifecycle state and review sta
17
17
 
18
18
  === "Diagram"
19
19
 
20
- ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite enters at planning](/diagrams/project-state-machine-light.svg)
21
- ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite enters at planning](/diagrams/project-state-machine-dark.svg)
20
+ ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite and brief enter at planning](/diagrams/project-state-machine-light.svg)
21
+ ![Project state machine: discovery, spec, design, plan and implementation phases, then PR open and complete; a review loop returns to implementation, a revise loop runs from PR open and back, and lite and brief enter at planning](/diagrams/project-state-machine-dark.svg)
22
22
 
23
23
  === "Mermaid source"
24
24
 
@@ -41,10 +41,11 @@ This page is the compact contract for how project lifecycle state and review sta
41
41
  PASSED --> I
42
42
 
43
43
  LITE["Lite: batched interview\n(no discovery/spec/design)"] -. entry point .-> P
44
+ BRIEF["Brief: alignment interview\n(one Project Brief)"] -. entry point .-> P
44
45
  ```
45
46
 
46
- The solid chain is the spec-driven progression. Lite enters at **Plan in
47
- progress** and never sets `oat_phase` to `discovery`, `spec`, or `design`;
47
+ The solid chain is the spec-driven progression. Lite and brief enter at **Plan
48
+ in progress** and never set `oat_phase` to `discovery`, `spec`, or `design`;
48
49
  quick and import projects also skip part of the leading chain.
49
50
 
50
51
  ## Phase status values
@@ -92,6 +93,20 @@ project promote <project-path> --to quick`, which flips `oat_workflow_mode` to
92
93
  `quick` and sets `oat_phase: discovery` with `oat_phase_status: complete`. See
93
94
  [Lifecycle](../workflows/projects/lifecycle.md#promoting-a-lite-project-to-quick).
94
95
 
96
+ Brief progression:
97
+
98
+ 1. Plan in progress (`oat_workflow_mode: brief`, `oat_phase: plan`) — `oat-project-brief` owns the interview, the artifact review, any configured gate, and the single approval
99
+ 2. Ready for implement (`plan.md` complete and pointing to `oat-project-implement`)
100
+ 3. Implement in progress — progress counts phase-units; a phase is accepted only by `**Status:** completed` under its heading in `implementation.md`
101
+ 4. Implement complete (final review passed). While any phase-unit is provisional or unaccepted, the router's brief-unit guard sends the project back to `oat-project-implement` ("Incomplete phase-units remain in the active scope") before every later check
102
+ 5. PR open (`pr_open`) through the same post-implementation sequence as quick
103
+ 6. Complete
104
+
105
+ A brief project can move to the quick chain with `oat project promote
106
+ <project-path> --to quick`; quick plan readiness stays false while
107
+ `oat_promotion_pending_phases` lists phases that still need tasks. See
108
+ [Lifecycle](../workflows/projects/lifecycle.md#promoting-a-brief-project-to-quick).
109
+
95
110
  ## Review progression
96
111
 
97
112
  In `plan.md` Reviews table:
@@ -47,7 +47,8 @@ instead). Saving a brainstorming reference file under the active project also
47
47
  commits or pushes that file. Promoting to a new project runs
48
48
  `oat project new`, which scaffolds the project and makes it your active
49
49
  project, and then writes a completed `discovery.md` (or, for a lite project,
50
- fills in its `plan.md`). Capturing a new idea also sets it as your active
50
+ fills in its `plan.md`; for a brief project, writes a research note under
51
+ `references/research/` and leaves the brief to `oat-project-brief`). Capturing a new idea also sets it as your active
51
52
  idea in local OAT config. Each destination is confirmed before anything is
52
53
  written.
53
54
 
@@ -307,6 +307,7 @@ Visibility reports source metadata: “user” is `user-invocable` and “model
307
307
 
308
308
  | Skill | Description | Visibility | Needs an active project? |
309
309
  | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------ |
310
+ | [`oat-project-brief`](../workflows/projects/planning/starting-projects.md#oat-project-brief) | Use when one delivery needs a design-aligned interview, a single approved Project Brief with phases of intent and exit evidence instead of planned tasks, and resumable OAT implementation. | user: true; model disabled: true | No |
310
311
  | [`oat-project-capture`](../workflows/projects/planning/starting-projects.md#oat-project-capture) | Use when work happened outside the OAT project workflow and needs retroactive project tracking. Creates a full project from an existing branch and conversation context. | user: true; model disabled: true | No |
311
312
  | [`oat-project-import-plan`](../workflows/projects/planning/starting-projects.md#oat-project-import-plan) | Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format. | user: true; model disabled: true | No |
312
313
  | [`oat-project-lite`](../workflows/projects/planning/starting-projects.md#oat-project-lite) | Use when a single-sitting change needs a critical interview, an approved single-phase plan, and resumable OAT implementation with minimal ceremony. | user: true; model disabled: true | No |
@@ -336,11 +336,19 @@ must resolve before the run makes any change.
336
336
  and a dispatch policy is already configured. You authorize the bounded
337
337
  resumable-export goal through a final PR without ordinary mid-run approval
338
338
  pauses. Autonomous entry chooses
339
- lite, quick, or spec-driven review density from the actual uncertainty and
339
+ lite, brief, quick, or spec-driven review density from the actual uncertainty and
340
340
  invokes its owning creation skill. If an export-filter project is already
341
341
  active, the second example explicitly resumes its earliest incomplete step
342
342
  instead of replaying finished phases.
343
343
 
344
+ When autonomous entry selects brief, `oat-project-brief` derives the project
345
+ name and description only from the explicit goal and stops if it is not
346
+ substantive. The brief's single approval resolves autonomously under
347
+ `BRIEF-11`: the reviewed brief is approved and the approval line records the
348
+ autonomous run, while contradictory or materially incomplete outcomes stop at
349
+ a product-judgment boundary. A brief records no HiLL checkpoints unless it
350
+ lists phases explicitly.
351
+
344
352
  **Expected output:** Session-only autonomy signals, persisted lifecycle
345
353
  progress, reviewed task commits, and project-local execution learnings. Existing
346
354
  projects retain their mode. A successful run reports the actual final PR and
@@ -98,7 +98,7 @@ string, and the lifecycle executes it unchanged; OAT does not inject, reorder,
98
98
  or rewrite its shell arguments.
99
99
 
100
100
  `oat-project-plan`, `oat-project-implement`, `oat-project-quick-start`,
101
- `oat-project-lite`, and `oat-project-import-plan` are currently gate-aware. Gate awareness is declared
101
+ `oat-project-lite`, `oat-project-brief`, and `oat-project-import-plan` are currently gate-aware. Gate awareness is declared
102
102
  in skill frontmatter with `oat_gateable: true`, and
103
103
  `oat internal validate-oat-skills` warns when config targets a missing or
104
104
  non-gateable skill.
@@ -249,7 +249,7 @@ for it.
249
249
 
250
250
  ### Gate approval records
251
251
 
252
- Two lifecycle gates persist their outcome in project `state.md` with a shared
252
+ Three lifecycle gates persist their outcome in project `state.md` with a shared
253
253
  five-field core:
254
254
 
255
255
  | Field | Meaning |
@@ -277,8 +277,13 @@ carries exactly the core:
277
277
  - a gate that is not configured writes no record (implement writes
278
278
  `allowed/no_gate` instead).
279
279
 
280
- `oat-project-next` and `oat-project-progress` report the quick-start record as
281
- recorded: status, disposition, `decided_at`, and `config_fingerprint` as
280
+ `oat_brief_gate`, written by `oat-project-brief` for its configured gate on the
281
+ committed brief, carries exactly the same core with the same outcome rules. It
282
+ is provenance only: no route reads it back, and the brief's single approval
283
+ still follows the gate.
284
+
285
+ `oat-project-next` and `oat-project-progress` report the quick-start record
286
+ (and `oat-project-progress` the brief record) as recorded: status, disposition, `decided_at`, and `config_fingerprint` as
282
287
  provenance, or `malformed` when the fields do not form a valid record. They do
283
288
  not recompute the fingerprint, because no CLI emits a canonical one for the
284
289
  quick-start gate, and they never route on the record: quick plan readiness
@@ -840,7 +845,7 @@ oat gate set oat-project-implement \
840
845
  ```
841
846
 
842
847
  Apply the same command shape to `oat-project-plan`,
843
- `oat-project-quick-start`, `oat-project-lite`, and `oat-project-import-plan` when those lifecycle
848
+ `oat-project-quick-start`, `oat-project-lite`, `oat-project-brief`, and `oat-project-import-plan` when those lifecycle
844
849
  skills have configured review gates. Do not add `--target`; explicit targets
845
850
  remain manual/debug or deliberate local/user-specific overrides.
846
851
 
@@ -1234,7 +1239,7 @@ as a failed gate, never as a pass.
1234
1239
 
1235
1240
  How the skills handle that case differs:
1236
1241
 
1237
- - `oat-project-implement` and `oat-project-lite` keep it blocked whatever
1242
+ - `oat-project-implement`, `oat-project-lite`, and `oat-project-brief` keep it blocked whatever
1238
1243
  `onFailure` says, so even a `warn` gate does not let them continue.
1239
1244
  - `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan`
1240
1245
  apply your `onFailure` setting to any failed gate run, including one where no
@@ -15,14 +15,15 @@ to the detail.
15
15
  A HiLL (human-in-the-loop lifecycle) checkpoint is a point where the agent
16
16
  stops and waits for a person to approve before it continues.
17
17
 
18
- | Mode | A person approves before code is written | Pauses during implementation | Reviews that run automatically | At the end | Never |
19
- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------- |
20
- | No project | You direct each step yourself | None | None; run `oat-review-provide` when you want a review | OAT opens no pull request | Not applicable |
21
- | Lite | Once: the requirements and the single-phase plan | None | Plan review, phase review, final review | Opens a pull request by itself; no setting removes this step | Merges a pull request |
22
- | Quick | You confirm the requirements (or the lightweight design). No plan-approval prompt: the plan is marked ready after an automatic review | First run lists the phases and asks where to stop; suggested: after every phase | Plan review, a review after every phase, final review | Opens a pull request by itself only if `workflow.postImplementSequence` asks | Merges a pull request |
23
- | Spec-driven | Discovery, then the requirements and design. Planning asks you in chat to confirm the task breakdown, but no plan approval is recorded; the plan is marked ready after an automatic review | Same as quick | Same as quick | Same as quick | Merges a pull request |
24
- | Imported plan | No approval step; OAT normalizes your plan and reviews it automatically | Same as quick | Same as quick | Same as quick | Merges a pull request |
25
- | Autonomous run | None; it answers its own questions and stops only at defined boundaries | None; it approves the final checkpoint itself after a passing final review | All of the above, plus a review at every checkpoint | Opens a pull request by default | Merges or force-pushes |
18
+ | Mode | A person approves before code is written | Pauses during implementation | Reviews that run automatically | At the end | Never |
19
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------- | ---------------------- |
20
+ | No project | You direct each step yourself | None | None; run `oat-review-provide` when you want a review | OAT opens no pull request | Not applicable |
21
+ | Lite | Once: the requirements and the single-phase plan | None | Plan review, phase review, final review | Opens a pull request by itself; no setting removes this step | Merges a pull request |
22
+ | Brief | Once: the reviewed Project Brief, after you have agreed its design in the interview | None by default; a pause happens only for a phase listed in `oat_plan_hill_phases` | Brief review, a review after every phase, final review | Same as quick | Merges a pull request |
23
+ | Quick | You confirm the requirements (or the lightweight design). No plan-approval prompt: the plan is marked ready after an automatic review | First run lists the phases and asks where to stop; suggested: after every phase | Plan review, a review after every phase, final review | Opens a pull request by itself only if `workflow.postImplementSequence` asks | Merges a pull request |
24
+ | Spec-driven | Discovery, then the requirements and design. Planning asks you in chat to confirm the task breakdown, but no plan approval is recorded; the plan is marked ready after an automatic review | Same as quick | Same as quick | Same as quick | Merges a pull request |
25
+ | Imported plan | No approval step; OAT normalizes your plan and reviews it automatically | Same as quick | Same as quick | Same as quick | Merges a pull request |
26
+ | Autonomous run | None; it answers its own questions and stops only at defined boundaries | None; it approves the final checkpoint itself after a passing final review | All of the above, plus a review at every checkpoint | Opens a pull request by default | Merges or force-pushes |
26
27
 
27
28
  Phase reviews need no person. The final review always runs, but an interactive
28
29
  run first asks how to run it unless `workflow.reviewExecutionModel` is set. If
@@ -46,6 +47,10 @@ What does and does not give a person a say on the plan:
46
47
 
47
48
  - **Lite:** its single approval covers the requirements and the plan, and the
48
49
  decision is written into `plan.md`.
50
+ - **Brief:** its single approval covers the reviewed Project Brief. The
51
+ interview reaches explicit design alignment first, so approval confirms a
52
+ design you already agreed to; the artifact review and any configured
53
+ `oat-project-brief` gate run on the committed brief before you approve.
49
54
  - **Spec-driven:** `/oat-project-plan` asks "Does this breakdown make sense? Any
50
55
  tasks missing?" in the chat and revises until you confirm. That confirmation
51
56
  is not recorded as an approval, and the automatic review that follows can
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Choose a Workflow
3
- description: Choose how to run tracked, resumable work in OAT, from no project to lite, quick, spec-driven, or imported projects, and what each mode does at the end.
3
+ description: Choose how to run tracked, resumable work in OAT, from no project to lite, brief, quick, spec-driven, or imported projects, and what each mode does at the end.
4
4
  ---
5
5
 
6
6
  # Choose a Workflow
@@ -48,6 +48,7 @@ Stay with direct CLI usage when:
48
48
 
49
49
  - CLI only: direct commands, no tracked project artifacts
50
50
  - Lite mode: a batched interview and one approval produce a single-phase `plan.md` for a single-sitting change
51
+ - Brief mode: a design-aligned interview produces one reviewed Project Brief whose phases carry intent and exit evidence instead of tasks
51
52
  - Quick mode: tracked work with a lighter upfront planning path
52
53
  - Spec-driven mode: explicit discovery, requirements, design, and plan artifacts
53
54
  - Import mode: an externally-authored plan imported into OAT for tracked execution
@@ -78,13 +79,14 @@ it by running that mode's entry skill, and the skill creates the project for
78
79
  you. An OAT project is a folder of tracked files (plan, state, reviews) that lets
79
80
  an agent pick the work up again in a later session.
80
81
 
81
- | Mode | Start it with | Choose it when | What you give up | At the end |
82
- | ----------- | ----------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
83
- | No project | No skill; ask your agent or run CLI commands | The work is small, or is just provider sync or a single CLI command | Resuming later, a tracked plan, and lifecycle reviews. Ad-hoc reviews still work | OAT pushes nothing and opens no pull request |
84
- | Lite | `/oat-project-lite` | The change fits in one sitting and the outcome is clear | Discovery and design documents, multiple phases, and approval pauses between phases. You approve one plan, once | Always pushes your current branch and opens a pull request by itself; no setting removes this step |
85
- | Quick | `/oat-project-quick-start` | The work is bounded and the requirements are clear | A formal requirements document (`spec.md`). Design is optional | Pushes your branch and opens a pull request only when `workflow.postImplementSequence` asks for it, or in an autonomous run |
86
- | Spec-driven | `/oat-project-new` | The requirements are unclear, or the change cuts across many parts of the code | Speed: you approve discovery and design before any planning or code | Same as quick |
87
- | Import | `/oat-project-import-plan` with the plan's path | A plan already exists in another tool or document | OAT's own discovery and design steps | Same as quick |
82
+ | Mode | Start it with | Choose it when | What you give up | At the end |
83
+ | ----------- | ----------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
84
+ | No project | No skill; ask your agent or run CLI commands | The work is small, or is just provider sync or a single CLI command | Resuming later, a tracked plan, and lifecycle reviews. Ad-hoc reviews still work | OAT pushes nothing and opens no pull request |
85
+ | Lite | `/oat-project-lite` | The change fits in one sitting and the outcome is clear | Discovery and design documents, multiple phases, and approval pauses between phases. You approve one plan, once | Always pushes your current branch and opens a pull request by itself; no setting removes this step |
86
+ | Brief | `/oat-project-brief` | The work is one delivery whose outcome and design you can agree in conversation | Discovery and design documents and an up-front task list. Phases state intent and exit evidence; tasks are recorded as the work runs | Same as quick |
87
+ | Quick | `/oat-project-quick-start` | The work is bounded and the requirements are clear | A formal requirements document (`spec.md`). Design is optional | Pushes your branch and opens a pull request only when `workflow.postImplementSequence` asks for it, or in an autonomous run |
88
+ | Spec-driven | `/oat-project-new` | The requirements are unclear, or the change cuts across many parts of the code | Speed: you approve discovery and design before any planning or code | Same as quick |
89
+ | Import | `/oat-project-import-plan` with the plan's path | A plan already exists in another tool or document | OAT's own discovery and design steps | Same as quick |
88
90
 
89
91
  Type the skill names in your coding agent's chat, not a terminal; Codex uses
90
92
  `$` instead of `/`. No mode ever merges a pull request. Separately,
@@ -105,6 +107,12 @@ is what holds the planning conversation, so start with the skill.
105
107
  asking, so start it on a feature branch; if you do not want that, choose
106
108
  quick instead, which opens a pull request only when
107
109
  `workflow.postImplementSequence` asks for one or the run is autonomous.
110
+ - If you can agree the outcome and the design with your agent in one
111
+ conversation and want to approve that once, choose brief. You approve one
112
+ reviewed Project Brief; the agent then works phase by phase and records each
113
+ task as it happens rather than planning them all first. Promote it to quick
114
+ with `oat project promote <path> --to quick` if you later want a maintained
115
+ task plan.
108
116
  - If your team is building a feature with agreed, bounded requirements, choose
109
117
  quick. A long task list alone does not call for a formal spec.
110
118
  - If the change is high-risk or regulated, or its requirements are still being