@open-agent-toolkit/cli 0.3.12 → 0.3.14

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 (152) hide show
  1. package/README.md +1 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/index.md +14 -1
  4. package/assets/docs/contributing/skills.md +64 -2
  5. package/assets/docs/contributing/smoke-testing.md +3 -3
  6. package/assets/docs/contributing/updating-model-guidance.md +2 -2
  7. package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
  8. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +112 -15
  9. package/assets/docs/docs-tooling/agent-instructions.md +131 -0
  10. package/assets/docs/docs-tooling/commands.md +74 -30
  11. package/assets/docs/docs-tooling/index.md +7 -6
  12. package/assets/docs/docs-tooling/meta.json +1 -1
  13. package/assets/docs/docs-tooling/workflows.md +357 -11
  14. package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
  15. package/assets/docs/{guide → getting-started}/concepts.md +28 -10
  16. package/assets/docs/getting-started/index.md +68 -0
  17. package/assets/docs/getting-started/meta.json +4 -0
  18. package/assets/docs/getting-started/quickstart.md +174 -0
  19. package/assets/docs/{cli-utilities → getting-started}/tool-packs.md +146 -15
  20. package/assets/docs/index.md +47 -48
  21. package/assets/docs/meta.json +6 -7
  22. package/assets/docs/provider-sync/commands.md +26 -3
  23. package/assets/docs/provider-sync/config.md +60 -1
  24. package/assets/docs/provider-sync/index.md +31 -15
  25. package/assets/docs/provider-sync/instruction-sync.md +43 -5
  26. package/assets/docs/provider-sync/manifest-and-drift.md +85 -0
  27. package/assets/docs/provider-sync/meta.json +1 -0
  28. package/assets/docs/provider-sync/pilot-with-a-team.md +236 -0
  29. package/assets/docs/provider-sync/scope-and-surface.md +37 -3
  30. package/assets/docs/reference/cli-reference.md +34 -34
  31. package/assets/docs/{cli-utilities → reference}/config-and-local-state.md +25 -9
  32. package/assets/docs/{cli-utilities → reference}/configuration.md +151 -34
  33. package/assets/docs/reference/docs-index-contract.md +19 -4
  34. package/assets/docs/reference/file-locations.md +7 -2
  35. package/assets/docs/reference/index.md +13 -1
  36. package/assets/docs/reference/meta.json +7 -1
  37. package/assets/docs/reference/oat-directory-structure.md +24 -22
  38. package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
  39. package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +1 -1
  40. package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
  41. package/assets/docs/reference/troubleshooting.md +125 -10
  42. package/assets/docs/reference/what-oat-writes.md +410 -0
  43. package/assets/docs/skills/brainstorm.md +77 -0
  44. package/assets/docs/skills/diagnostics.md +56 -0
  45. package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
  46. package/assets/docs/skills/index.md +416 -0
  47. package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
  48. package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
  49. package/assets/docs/skills/repo-improve.md +254 -0
  50. package/assets/docs/skills/research.md +237 -0
  51. package/assets/docs/skills/session-closeout.md +61 -0
  52. package/assets/docs/workflows/advanced/autonomy.md +344 -0
  53. package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
  54. package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
  55. package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +1 -1
  56. package/assets/docs/workflows/advanced/index.md +19 -0
  57. package/assets/docs/workflows/advanced/meta.json +13 -0
  58. package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +63 -4
  59. package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
  60. package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
  61. package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
  62. package/assets/docs/workflows/approvals-and-automation.md +261 -0
  63. package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
  64. package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
  65. package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
  66. package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
  67. package/assets/docs/workflows/choose-workflow.md +114 -0
  68. package/assets/docs/workflows/ideas/index.md +3 -3
  69. package/assets/docs/workflows/ideas/lifecycle.md +218 -1
  70. package/assets/docs/workflows/index.md +11 -62
  71. package/assets/docs/workflows/meta.json +10 -2
  72. package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
  73. package/assets/docs/workflows/projects/closeout/index.md +14 -0
  74. package/assets/docs/workflows/projects/closeout/meta.json +4 -0
  75. package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
  76. package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
  77. package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
  78. package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +8 -8
  79. package/assets/docs/workflows/projects/execution/index.md +15 -0
  80. package/assets/docs/workflows/projects/execution/meta.json +9 -0
  81. package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
  82. package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
  83. package/assets/docs/workflows/projects/index.md +38 -49
  84. package/assets/docs/workflows/projects/lifecycle.md +47 -11
  85. package/assets/docs/workflows/projects/meta.json +2 -23
  86. package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
  87. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
  88. package/assets/docs/workflows/projects/planning/index.md +16 -0
  89. package/assets/docs/workflows/projects/planning/meta.json +10 -0
  90. package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
  91. package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
  92. package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
  93. package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
  94. package/assets/docs/workflows/projects/reviews/meta.json +4 -0
  95. package/assets/docs/workflows/projects/reviews/review-flavors.md +643 -0
  96. package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
  97. package/assets/docs/workflows/waves/index.md +12 -0
  98. package/assets/docs/workflows/waves/meta.json +4 -0
  99. package/assets/docs/workflows/waves/wave-workflows.md +206 -0
  100. package/assets/public-package-versions.json +4 -4
  101. package/assets/skills/oat-docs/SKILL.md +19 -19
  102. package/assets/skills/oat-docs-analyze/SKILL.md +27 -7
  103. package/assets/skills/oat-docs-analyze/references/quality-checklist.md +16 -3
  104. package/assets/skills/oat-docs-apply/SKILL.md +20 -3
  105. package/assets/skills/oat-docs-authoring/SKILL.md +11 -7
  106. package/assets/skills/oat-docs-authoring/references/docs-root-resolution.md +12 -5
  107. package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +7 -7
  108. package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +13 -3
  109. package/assets/skills/oat-docs-authoring/references/targeted-authoring-workflow.md +5 -4
  110. package/assets/skills/oat-docs-authoring/references/validation.md +11 -1
  111. package/assets/skills/oat-docs-bootstrap/SKILL.md +31 -8
  112. package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +2 -1
  113. package/assets/skills/oat-doctor/SKILL.md +25 -25
  114. package/assets/skills/oat-project-document/SKILL.md +21 -2
  115. package/assets/templates/docs-markdown/contributing.md +35 -0
  116. package/assets/templates/docs-markdown/index.md +18 -0
  117. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  118. package/dist/commands/docs/index-generate/index.js +41 -8
  119. package/dist/commands/docs/init/index.d.ts +17 -2
  120. package/dist/commands/docs/init/index.d.ts.map +1 -1
  121. package/dist/commands/docs/init/index.js +194 -14
  122. package/dist/commands/docs/init/markdown.d.ts +39 -0
  123. package/dist/commands/docs/init/markdown.d.ts.map +1 -0
  124. package/dist/commands/docs/init/markdown.js +317 -0
  125. package/dist/commands/docs/init/resolve-options.d.ts +3 -1
  126. package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
  127. package/dist/commands/docs/init/resolve-options.js +36 -0
  128. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  129. package/dist/commands/docs/init/scaffold.js +11 -0
  130. package/dist/commands/shared/agents-md.d.ts +7 -0
  131. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  132. package/dist/commands/shared/agents-md.js +131 -91
  133. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  134. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  135. package/dist/config/oat-config.d.ts +2 -1
  136. package/dist/config/oat-config.d.ts.map +1 -1
  137. package/dist/config/oat-config.js +4 -2
  138. package/package.json +2 -2
  139. package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
  140. package/assets/docs/cli-utilities/index.md +0 -74
  141. package/assets/docs/cli-utilities/meta.json +0 -13
  142. package/assets/docs/cli-utilities/remote-project-management.md +0 -191
  143. package/assets/docs/guide/index.md +0 -31
  144. package/assets/docs/guide/meta.json +0 -4
  145. package/assets/docs/quickstart.md +0 -88
  146. package/assets/docs/workflows/projects/autonomy.md +0 -196
  147. package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
  148. package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
  149. package/assets/docs/workflows/projects/review-flavors.md +0 -138
  150. package/assets/docs/workflows/skills/index.md +0 -184
  151. package/assets/docs/workflows/skills/repo-improve.md +0 -89
  152. package/assets/docs/workflows/wave-workflows.md +0 -77
@@ -15,13 +15,59 @@ constraints:
15
15
  - A **phase target** is one exact configured candidate selected at invocation
16
16
  time at or below the named maximum. Optional nested work resolves separately.
17
17
 
18
+ **In short:**
19
+
20
+ - **What this page is for:** choosing the _dispatch policy_, the highest model
21
+ tier (Economy, Balanced, High, or Frontier) that OAT may use when it starts
22
+ agents to implement and review each phase, or no cap, or leaving model choice
23
+ to the provider; and deciding where the list of candidate models (the
24
+ _ladder_) is stored.
25
+ - **Who needs it:** anyone starting a quick, spec-driven, lite, or imported
26
+ project, because planning asks you to choose a policy; and team leads who
27
+ manage model cost.
28
+ - **Know first:** there is no default policy, and a policy set in any config
29
+ file overrides the one each project chose. A tier is a cap: phase agents may
30
+ run below it, but per-phase and final code reviews run on the last model
31
+ listed in the capped tier. Codex and Claude enforce the cap; Cursor pins the model
32
+ but cannot confirm which one ran; other providers treat it as a suggestion.
33
+ - **Decide:** [Which tier for which work](#which-tier-for-which-work),
34
+ [How each provider applies the cap](#how-each-provider-applies-the-cap), and
35
+ [Where the ladder lives](#where-the-ladder-lives). Most other sections are
36
+ the detailed resolution contract.
37
+
18
38
  The CLI command remains `oat project dispatch-ceiling resolve` for compatibility.
19
39
  Legacy `workflow.dispatchCeiling.*` and `oat_dispatch_ceiling` values remain
20
40
  readable, but new projects use ordered candidates plus `oat_dispatch_policy`.
21
41
 
22
- For raw config keys, see [Configuration](../../cli-utilities/configuration.md).
42
+ For raw config keys, see [Configuration](../../reference/configuration.md).
23
43
  For the root-owned phase-agent loop, see
24
- [Implementation Execution](implementation-execution.md).
44
+ [Implementation Execution](../projects/execution/implementation-execution.md).
45
+
46
+ To pick a tier for a project, start with
47
+ [Which tier for which work](#which-tier-for-which-work) and the rest of
48
+ [Choosing policy and ladder ownership](#choosing-policy-and-ladder-ownership)
49
+ near the end of this page.
50
+
51
+ ## How each provider applies the cap
52
+
53
+ The cap is the named ceiling: the highest tier a project or phase may use. A
54
+ provider is the agent tool running OAT. How firmly the cap holds depends on
55
+ the provider:
56
+
57
+ - **Codex: enforced.** OAT launches each phase on an agent role that
58
+ `oat sync` generated, pinned to one model and effort.
59
+ - **Claude: enforced.** OAT launches a generated role pinned to one model and
60
+ effort, or passes the exact model on each call.
61
+ - **Cursor: pinned, not verified.** OAT launches a generated role pinned to
62
+ the mapped model, but Cursor can substitute a different model without an
63
+ error, for example when your plan or account cannot use the pinned one or
64
+ the pin has a typo. OAT records the model it requested, not the model that
65
+ ran.
66
+ - **Other providers: advisory.** OAT has no way to pin a model there, so the
67
+ cap is only a suggestion.
68
+
69
+ The full rules are in [Provider Enforcement](#provider-enforcement) and
70
+ [Cursor evidence authority](#cursor-evidence-authority).
25
71
 
26
72
  ## Named Policy Choices
27
73
 
@@ -36,8 +82,11 @@ For the root-owned phase-agent loop, see
36
82
 
37
83
  A named `High` ceiling therefore keeps configured Economy, Balanced, and High
38
84
  candidates eligible and available. It does not pin Sol, `opus`, one Cursor
39
- string, or one effort value. The project root chooses one exact candidate it
40
- judges sufficient for the phase.
85
+ string, or one effort value. (Model names on this page, such as Sol, Luna,
86
+ Astra, Opus, Sonnet, and Fable, are provider models listed in the ladder that
87
+ ships with OAT; they are examples, and your own ladder may list different
88
+ models.) The project root, meaning the main agent session running the project,
89
+ chooses one exact candidate it judges sufficient for the phase.
41
90
 
42
91
  `Uncapped` is explicit managed state. It is not represented by omitted policy
43
92
  state. `Unresolved` is a planning or preflight deferral and cannot begin
@@ -45,6 +94,18 @@ implementation.
45
94
 
46
95
  ## Ownership and Adoption
47
96
 
97
+ **Who chose the bundled ladder.** OAT ships a recommended ladder, the bundled
98
+ recommendation. OAT's maintainers choose which models go in each tier and in
99
+ what order, using provider documentation, vendor benchmarks and their own
100
+ model-selection guidance, and they refresh it as providers release new models
101
+ (see [Updating Model Guidance](../../contributing/updating-model-guidance.md)).
102
+ OAT has not compared these models on its own workloads, so treat the ladder as
103
+ the maintainers' recommended starting point, not a measured ranking. Your team
104
+ does not have to use it as shipped. You can adopt it and then edit any cell in
105
+ the config file that owns it (see [Config Shapes](#config-shapes)), or write
106
+ your own cells without adopting. Rerunning adoption later replaces edited cells
107
+ unless you pass `--keep-existing`.
108
+
48
109
  Adopt the complete bundled recommendation into one explicit owning scope:
49
110
 
50
111
  ```bash
@@ -58,6 +119,10 @@ oat config adopt dispatch-matrix --local
58
119
  oat config adopt dispatch-matrix --user
59
120
  ```
60
121
 
122
+ With no scope flag, `oat config adopt dispatch-matrix` writes repo-local config
123
+ (`.oat/config.local.json`), the same as `--local`. The examples on this page
124
+ pass a flag so the owning scope is always explicit.
125
+
61
126
  Adoption replaces populated cells from the bundled recommendation in the
62
127
  chosen scope, fills missing cells, and retains extra custom tiers when the
63
128
  bundled provider remains a tier map. A bundled provider-level scalar replaces
@@ -87,9 +152,10 @@ Run the same command without `--dry-run` to replace bundled cells. Use
87
152
 
88
153
  Version `2026-10-01.1` is the current bundled recommendation. It prefers
89
154
  GPT-6 Luna and GPT-6.1 Sol in Codex, then Sol 6.1 xhigh, Astra high, and Astra xhigh in
90
- Codex Frontier. Astra's task advantage has not been measured locally; this is
91
- an explicit user-directed preference, not acceptance by the separately
92
- maintained model-selection policy. Sonnet 5.5 medium replaces Sonnet 5 medium
155
+ Codex Frontier. OAT's maintainers added the Astra entries as a preference:
156
+ public benchmarks show task-dependent gains for Astra over GPT-6 Sol, but OAT
157
+ has not tested Astra on its own workloads, and the maintainers' separate
158
+ model-selection review has not yet confirmed the choice. Sonnet 5.5 medium replaces Sonnet 5 medium
93
159
  in Claude Economy; the older generation stays supported for explicit cells.
94
160
  Opus 5.5 low/medium/high remains in Claude High.
95
161
  The Claude low option suits bounded intelligent recon in Balanced or High;
@@ -100,9 +166,9 @@ Opus 5.5 low above Terra high, High orders Sol medium, Opus low, Sol high,
100
166
  Opus medium, then Opus high, and Frontier places Opus high and xhigh between
101
167
  Sol max and Fable 5.1. Grok 4.6 medium replaces Grok 4.5 high at the bottom of
102
168
  Balanced, and Fable 5.1 thinking high replaces Fable 5 as Frontier's terminal
103
- target. The ordering is an explicit user-directed preference informed by
104
- vendor benchmarks and the model-selection matrix, not a local workload
105
- comparison. Grok 4.5 and Fable 5 stay supported for explicit configurations.
169
+ target. OAT's maintainers chose this ordering using vendor benchmarks and their
170
+ model-selection guidance; it is not the result of comparing models on OAT's own
171
+ workloads. Grok 4.5 and Fable 5 stay supported for explicit configurations.
106
172
  Rerunning adoption replaces the bundled cells in the chosen scope; use
107
173
  `--keep-existing` to preserve explicit older cells. For the complete
108
174
  maintenance procedure, see
@@ -455,9 +521,8 @@ defaults to `xhigh`. A typo in a pinned selector therefore ships a
455
521
  working-but-wrong model that silently tracks a vendor-controlled default, so
456
522
  capability can change with no corresponding change in the repository.
457
523
 
458
- OAT does not currently validate effort rungs at sync time; that is tracked as
459
- `BL-260726-validate-cursor-pin-effort`. Until it lands, the probe runbook is
460
- the only guard.
524
+ OAT does not currently validate effort rungs at sync time; that check is
525
+ planned but not yet built. Until it is, the probe runbook is the only guard.
461
526
 
462
527
  ## Phase and Optional-Worker Layers
463
528
 
@@ -476,7 +541,7 @@ tasks and do not own phase commits or review dispatch.
476
541
  Tasks run serially in the same worktree. Parallelism remains limited to
477
542
  plan-declared phase worktrees unless optional work has explicitly isolated
478
543
  write authority. See
479
- [Implementation Execution](implementation-execution.md) for the full loop.
544
+ [Implementation Execution](../projects/execution/implementation-execution.md) for the full loop.
480
545
 
481
546
  ## Dispatch Report V1 and Producer Provenance
482
547
 
@@ -585,7 +650,87 @@ The following remain readable during migration:
585
650
  - project `oat_dispatch_ceiling`
586
651
  - `--preferred` resolver selection
587
652
 
588
- Legacy preset names map to managed named tiers: `cost-conscious` to Economy,
589
- `balanced` to Balanced, and `maximum` to High. Legacy values are migration
590
- inputs, not evidence that a new project should persist exact provider-family
591
- pins.
653
+ Legacy presets (`cost-conscious`, `balanced`, `maximum`) compile to bare legacy
654
+ provider ceilings, not complete named candidate tiers. Their values can resemble
655
+ tier caps without supplying a ladder. They remain migration inputs, not evidence
656
+ that a new project should persist exact provider-family pins.
657
+
658
+ ## Choosing policy and ladder ownership
659
+
660
+ The dispatch policy decides how strong (and how expensive) the models that OAT
661
+ starts for each phase and review may be. A **ladder** is the configured list of
662
+ model and effort candidates for each provider, grouped into four tiers from
663
+ Economy to Frontier. The policy sets the highest tier a project may use.
664
+ Planning asks you for the policy and saves it in the project's `state.md`.
665
+
666
+ > [!WARNING]
667
+ > A dispatch policy set in any config file (`workflow.dispatchPolicy.*`, or a
668
+ > legacy plain value in `workflow.dispatchCeiling.providers.<provider>`)
669
+ > overrides the policy every project chose for itself in `state.md`. To let each
670
+ > project choose its own policy, leave those keys unset. Adopting a ladder is a
671
+ > separate step from setting a policy.
672
+
673
+ | Policy | Choose it when | What you give up |
674
+ | ------------------ | ------------------------------------------------------ | -------------------------------------------------------------------------- |
675
+ | Economy / Balanced | Routine or normal work where cost matters | The higher tiers |
676
+ | High / Frontier | Broad, security-sensitive, or consequential changes | Cost: implementation code reviews run on the cap tier, which can cost more |
677
+ | Uncapped | You trust the main session to choose a model per phase | Any tier ceiling on cost. You must choose it explicitly |
678
+ | Inherit | The provider's own model settings must stay untouched | All OAT model control: OAT passes no model or effort setting |
679
+
680
+ There is no default policy, and a missing policy never means Uncapped. If a
681
+ project has none when implementation starts, an interactive run asks you and a
682
+ non-interactive run stops. The agents that implement a phase may use a lower
683
+ tier than the cap, but when a cap is set, the per-phase and final code reviews
684
+ always use the last candidate listed in the cap tier. Planning-artifact reviews
685
+ and gates choose their reviewers separately.
686
+
687
+ - If you are trying OAT for the first time, choose Balanced for the project.
688
+ - If cost matters most, choose Economy for routine work or Balanced for normal
689
+ work.
690
+ - If the change is high-risk, choose High. Choose Frontier only if you want
691
+ every implementation code review to run on Frontier's last candidate. For a
692
+ reviewer from a different model family, add a
693
+ [gate](workflow-gates.md#choosing-gate-posture) instead.
694
+ - If the provider's own settings must stay untouched, choose Inherit.
695
+
696
+ ### Which tier for which work
697
+
698
+ The tier is a cap, not a target: for each phase the main session still picks
699
+ one candidate at or below it. A Dispatch Profile row is an optional per-phase
700
+ limit in `plan.md` that can lower the cap for one phase.
701
+
702
+ | Work | Tier to start with | What the tier limits | Cost and speed direction |
703
+ | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
704
+ | Routine, bounded work: one component and a clear outcome, such as a bug fix | Balanced, or Economy if cost matters most | Phase agents use only Economy and Balanced candidates. Per-phase and final code reviews run on the last Balanced candidate | Lower cost; usually faster |
705
+ | Ambiguous or cross-cutting work: a broad change across several components | High | Economy through High candidates are eligible. Code reviews run on the last High candidate | Higher, because every implementation code review runs at High |
706
+ | Consequential or high-risk change: security-sensitive, or a missed defect costs more than the run | High. Choose Frontier only if every implementation code review should run on Frontier's last candidate | At Frontier all four tiers are eligible, and its last candidate may need model access your account lacks. For a reviewer from a different model family, add a [gate](workflow-gates.md#choosing-gate-posture) | Higher at High; highest and usually slowest at Frontier |
707
+ | Cost-sensitive team | Economy for routine work and Balanced for normal work, set per project | Economy allows only Economy candidates. A Dispatch Profile row can lower one phase, but code reviews still run at the project cap | Lowest of the managed tiers |
708
+
709
+ OAT sets no prices and does not measure cost or speed. What a run costs depends
710
+ on your provider plan and on the models in your ladder. The directions above
711
+ assume a ladder ordered like the bundled one, where higher tiers hold larger
712
+ models or higher effort settings, which usually cost more per run and take
713
+ longer.
714
+
715
+ ### Where the ladder lives
716
+
717
+ `oat config adopt dispatch-matrix` writes the bundled ladder to the config scope
718
+ you choose, and to repo-local config if you pass no flag. Without
719
+ `--keep-existing` it replaces cells you already set, so preview with `--dry-run`
720
+ first.
721
+
722
+ - If you are rolling OAT out to a team, adopt the ladder with `--shared` so
723
+ everyone uses the same candidates and the change is reviewed in Git.
724
+ - If you are trying OAT alone, run `oat config adopt dispatch-matrix --user
725
+ --dry-run`, then rerun it without `--dry-run`. A shared or repo-local ladder
726
+ in a repository still overrides your user ladder there.
727
+ - If you are testing candidates in one checkout, use `--local`. After
728
+ `oat sync`, the agent roles generated from it still appear in the tracked
729
+ `.codex`, `.claude`, and `.cursor` folders, so check `git status` before
730
+ committing.
731
+
732
+ How firmly the cap holds depends on the provider. Codex and Claude enforce the
733
+ model and effort that OAT selects. Cursor pins mapped candidates, but OAT
734
+ cannot confirm at run time which model actually ran, so it records what it
735
+ requested. Other providers treat the cap as a suggestion only. See
736
+ [Provider Enforcement](#provider-enforcement).
@@ -235,7 +235,7 @@ For how to run this end to end and when to refresh the fixture, see
235
235
  producer-provenance record that back Layers 1 and 2.
236
236
  - [Orchestration Model](orchestration-model.md) — the dispatch topology that
237
237
  produces these records.
238
- - [Review Flavors](review-flavors.md) — how the four review flavors are recorded
238
+ - [Review Flavors](../projects/reviews/review-flavors.md) — how the four review flavors are recorded
239
239
  through the same launcher-owned evidence.
240
240
  - [Smoke testing](../../contributing/smoke-testing.md) — operating the evidence
241
241
  pipeline against real providers.
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: Advanced
3
+ description: 'Dispatch, autonomy, execution surfaces, evidence layers and workflow gates.'
4
+ ---
5
+
6
+ # Advanced
7
+
8
+ Use these guides for advanced workflow execution and its safety boundaries.
9
+
10
+ ## Contents
11
+
12
+ - [Worktree bootstrap](worktree-bootstrap.md) - Prepare an isolated checkout with repository-specific readiness checks.
13
+ - [Workflow Gates](workflow-gates.md) - Completion-safe headless reviews, budgets, liveness evidence, and cross-runtime dispatch with `oat gate`.
14
+ - [Autonomous Project Execution](autonomy.md) - Session-scoped autonomy signals, gate boundaries, review requirements, and execution learnings.
15
+ - [OAT in Cursor Cloud](cursor-cloud.md) - Project-home, provisioning, asset-precedence, and execution-surface guidance for cloud agents.
16
+ - [Dispatch Policy](dispatch-ceiling.md) - Managed capped tiers, managed Uncapped, Inherit Host Defaults, and provider-specific enforcement.
17
+ - [Orchestration Model](orchestration-model.md) - The layered dispatch model: roles, selection flow, and per-harness topology.
18
+ - [Evidence Layers](evidence-layers.md) - The three-layer dispatch evidence model behind records and smoke verification.
19
+ - [Programmatic Execution](programmatic-execution.md) - Per-harness headless/CLI execution surfaces and where OAT uses them.
@@ -0,0 +1,13 @@
1
+ {
2
+ "title": "Advanced",
3
+ "pages": [
4
+ "worktree-bootstrap",
5
+ "workflow-gates",
6
+ "autonomy",
7
+ "cursor-cloud",
8
+ "dispatch-ceiling",
9
+ "orchestration-model",
10
+ "evidence-layers",
11
+ "programmatic-execution"
12
+ ]
13
+ }
@@ -15,6 +15,18 @@ OAT separates lifecycle ownership from implementation ownership:
15
15
  This topology keeps model control at the meaningful phase boundary without
16
16
  making every task pay another dispatch and context-loading round.
17
17
 
18
+ Terms used on this page:
19
+
20
+ - **Phase:** one numbered section of a project's `plan.md` (for example `p02`)
21
+ that groups related tasks.
22
+ - **Dispatch:** launching a worker or reviewer subagent on a chosen model and
23
+ route. The **dispatch policy** is the project's rule for which models those
24
+ subagents may use; see [Dispatch Policy](dispatch-ceiling.md).
25
+ - **Worktree:** a separate Git checkout of the same repository on its own
26
+ branch, used so parallel phases do not overwrite each other's files.
27
+ - **HiLL checkpoint:** a human-in-the-loop stop after a phase where an
28
+ interactive run waits for your approval.
29
+
18
30
  ## Default Topology
19
31
 
20
32
  ```mermaid
@@ -103,7 +115,7 @@ The root verifies the report against Git rather than trusting child prose:
103
115
  - clean worktree; and
104
116
  - optional child records, if any.
105
117
 
106
- See [Implementation Execution](implementation-execution.md) for the executable
118
+ See [Implementation Execution](../projects/execution/implementation-execution.md) for the executable
107
119
  contract.
108
120
 
109
121
  ## Independent Phase Review
@@ -172,7 +184,7 @@ terminated at its background-wait ceiling (600 seconds by default). Interactive
172
184
  Claude Code is unaffected. Headless gate children therefore do not follow the
173
185
  ordinary background preference; they use the gate's inline or synchronously
174
186
  awaited route and fail closed when neither is available. See
175
- [Workflow Gates](../../cli-utilities/workflow-gates.md#headless-completion-safety).
187
+ [Workflow Gates](workflow-gates.md#headless-completion-safety).
176
188
 
177
189
  ## Catalogs and Exact Selection
178
190
 
@@ -229,9 +241,56 @@ optional child has explicitly isolated write authority.
229
241
 
230
242
  ## Related
231
243
 
232
- - [Implementation Execution](implementation-execution.md)
244
+ - [Implementation Execution](../projects/execution/implementation-execution.md)
233
245
  - [Dispatch Policy](dispatch-ceiling.md)
234
- - [Review Flavors](review-flavors.md)
246
+ - [Review Flavors](../projects/reviews/review-flavors.md)
235
247
  - [Programmatic Execution](programmatic-execution.md)
236
248
  - [Evidence Layers](evidence-layers.md)
237
249
  - [Workflow Smoke Testing](../../contributing/smoke-testing.md)
250
+
251
+ ## subagent-orchestration
252
+
253
+ Use this skill to decide what to delegate and which capability class the task
254
+ needs. It supplies model-selection guidance, not a command that launches workers.
255
+ OAT's dispatch skills own capability checks, exact routes, acceptance records,
256
+ and recovery.
257
+
258
+ **Invocation:** Give the agent a bounded delegation decision. The slash form is
259
+ a skill request, not a terminal command. Providers with `$` syntax use
260
+ `$subagent-orchestration`.
261
+
262
+ ```text
263
+ /subagent-orchestration
264
+ Classify a read-only API-usage audit and a final approval-provenance review. Define their scopes, required evidence, and escalation conditions before selecting models.
265
+ ```
266
+
267
+ **Prerequisites:** Needs an active OAT project: no. The guidance is
268
+ self-contained and needs no OAT project or installation. You need the task's
269
+ objective, authority, verification needs, and active provider context. Read
270
+ exactly that provider's selection reference. Current catalogs and instructions
271
+ outrank dated model examples.
272
+
273
+ **What it does without asking:** nothing outside the conversation. The skill
274
+ is guidance only: it writes no files, makes no commits, and launches no
275
+ subagents. Any launch happens later, through the dispatch skills, under their
276
+ own checks.
277
+
278
+ **Example scenario:** A root agent needs an unfamiliar API audit and an
279
+ independent review of approval handling. The audit needs intelligent
280
+ reconnaissance because a missed usage could be silent. Approval provenance
281
+ needs consequential review because a subtle miss could authorize unsafe work.
282
+ The root keeps authorization and cross-scope judgment while defining each
283
+ worker's output and evidence. Choosing a stronger model does not repair an
284
+ over-broad assignment.
285
+
286
+ **Expected output:** A routing decision states the task class, role, exact model
287
+ selector, provider-native effort, service tier, route, and authority separately.
288
+ It preserves each class's capability floor and names escalation conditions.
289
+ Load-bearing worker claims require verified evidence before the root acts on
290
+ them. File count or duration alone does not justify a higher reasoning class.
291
+
292
+ **Next step:** Use the appropriate dispatch machinery only after the bounded
293
+ scope and route are justified. Within OAT, follow the project adapter
294
+ (`oat-project-dispatch-subagents`) and the dispatch engine
295
+ (`oat-dispatch-subagents`). Guidance alone is not evidence that a worker launched or that
296
+ its result passed review.
@@ -77,14 +77,14 @@ independent of the harness's native subagent catalog — the point of a gate is
77
77
  route the producing context could not have selected for itself. The
78
78
  lifecycle/final gate is the one flavor that may spawn a **nested managed
79
79
  reviewer child inside the gate exec target**; see
80
- [Review Flavors](review-flavors.md) for which flavor fires when and how
80
+ [Review Flavors](../projects/reviews/review-flavors.md) for which flavor fires when and how
81
81
  independent each must be.
82
82
 
83
83
  Gates **fail closed**. If no different-family target is available, OAT records
84
84
  the degraded achieved level rather than pretending diversity was achieved, and
85
85
  an unavailable required-independent target blocks the gate instead of quietly
86
86
  downgrading to a same-context self-review. Only summarize the execution-surface
87
- angle here — see [Workflow Gates](../../cli-utilities/workflow-gates.md) for the
87
+ angle here — see [Workflow Gates](workflow-gates.md) for the
88
88
  gate envelope, exec-target configuration, receive-eligibility, and completion
89
89
  contract. The cross-runtime `gates.execTargets` design (host-avoidance and
90
90
  independence from native catalogs) is the smoke fixture's cross-runtime gate
@@ -126,13 +126,13 @@ require either capability.
126
126
 
127
127
  - [Orchestration Model](orchestration-model.md) — route tiers, native-first
128
128
  selection, and per-harness topology.
129
- - [Review Flavors](review-flavors.md) — the four review flavors and which one
129
+ - [Review Flavors](../projects/reviews/review-flavors.md) — the four review flavors and which one
130
130
  may spawn a nested managed reviewer inside a gate.
131
131
  - [Evidence Layers](evidence-layers.md) — the three-layer dispatch evidence
132
132
  model these launches feed.
133
133
  - [Dispatch Policy](dispatch-ceiling.md) — candidate ladders, named ceilings,
134
134
  and the dispatch report.
135
- - [Workflow Gates](../../cli-utilities/workflow-gates.md) — gate envelope,
135
+ - [Workflow Gates](workflow-gates.md) — gate envelope,
136
136
  exec-target configuration, and completion contract.
137
137
  - [Smoke Testing](../../contributing/smoke-testing.md) — per-harness drive
138
138
  protocols and live evidence.
@@ -11,17 +11,52 @@ the work, then `oat gate review` dispatches a normal OAT review to another
11
11
  runtime such as Codex or Claude and maps blocking review findings to the gate
12
12
  exit status.
13
13
 
14
+ **In short:**
15
+
16
+ - **What this page is for:** setting up a _gate_, an extra review (or other
17
+ command) that a lifecycle skill runs as its last step, usually by a second
18
+ agent CLI such as Codex, Claude Code, or Cursor. No gate is configured by
19
+ default.
20
+ - **Who needs it:** a team lead setting a review policy, or anyone who wants a
21
+ second model to check plans or code. If you have only one agent CLI
22
+ installed, you can skip gates.
23
+ - **Know first:** every gate needs an explicit `--on-failure` (`block`,
24
+ `prompt`, or `warn`). The reviewer prefers a different model family but falls
25
+ back to the best available reviewer with only a warning, so check
26
+ `diversity.achieved` in the gate result. A shared gate guides agents; a
27
+ teammate can still turn it off on their own machine.
28
+ - **Decide:** [Choosing gate posture](#choosing-gate-posture),
29
+ [When the gate finds blocking problems](#when-the-gate-finds-blocking-problems),
30
+ and [How independent the reviewer must be](#how-independent-the-reviewer-must-be).
31
+ The sections between here and there are the detailed contract.
32
+
33
+ The shortest way to add an independent review to the implement step, shared
34
+ with your team through the committed `.oat/config.json`, is the same command as
35
+ in
36
+ [Approvals and Automation](../approvals-and-automation.md#a-person-approves-the-plan-and-the-final-result-and-an-independent-model-reviews-the-code):
37
+
38
+ ```bash
39
+ oat gate set oat-project-implement \
40
+ --command 'oat --json gate review --project "$PROJECT_PATH" --review-type code --review-scope final "Use oat-project-review-provide code final for the declared project"' \
41
+ --on-failure block \
42
+ --layer shared
43
+ ```
44
+
45
+ Type it exactly as shown; `$PROJECT_PATH` stays literal, because the skill sets
46
+ it when the gate runs. Commit `.oat/config.json` afterwards.
47
+
14
48
  `oat gate cross-provider-exec` remains the generic child-status executor. It
15
49
  selects an exec target, runs the prompt, and exits with the child process
16
50
  status. Use `oat gate review` when the command is specifically an OAT review
17
51
  gate that should inspect the produced review artifact.
18
52
 
19
- :::note Release note: default avoidance changed
20
- Gate dispatch now defaults to `--avoid same-family`, not `same-runtime`.
21
- For multi-family providers such as Cursor, this prevents a gate from reviewing
22
- with the same model family that produced the work. Use `--avoid none` only when
23
- you intentionally allow same-family review.
24
- :::
53
+ > [!NOTE]
54
+ > **Release note: default avoidance changed.**
55
+ > Gate dispatch now defaults to `--avoid same-family`, not `same-runtime`.
56
+ > For multi-family providers such as Cursor, this prefers a different model
57
+ > family, but falls back to the best available target with a recorded warning
58
+ > when diversity is unavailable. Inspect `diversity.achieved`; use `--avoid none` only when
59
+ > you intentionally allow same-family review.
25
60
 
26
61
  ## Gate config
27
62
 
@@ -205,7 +240,7 @@ generation stale again, and a malformed waiver fails closed. An interactive
205
240
  implement run offers the waiver before it persists `stale`; an operator can
206
241
  also give it when resuming implementation after `oat-project-next` reports
207
242
  stale state. See
208
- [Implementation Execution](../workflows/projects/implementation-execution.md).
243
+ [Implementation Execution](../projects/execution/implementation-execution.md).
209
244
 
210
245
  Only an artifact with `oat_review_invocation: gate` and the matching
211
246
  `oat_gate_run_id` can satisfy configured-gate provenance. A normal final
@@ -405,7 +440,7 @@ status.
405
440
  `oat-project-implement` uses `oat gate review` per phase when a project opts in
406
441
  via the `oat_phase_review_gate` plan frontmatter — a non-pausing gate that runs
407
442
  after each selected phase's standard reviewer passes. See
408
- [Reviews → Phase review gate](../workflows/projects/reviews.md#phase-review-gate)
443
+ [Reviews → Phase review gate](../projects/reviews/index.md#phase-review-gate)
409
444
  for the frontmatter contract and how passing versus blocking gates are
410
445
  dispositioned.
411
446
 
@@ -1058,3 +1093,122 @@ starts and then fails, OAT does not try another target after dispatch. If no
1058
1093
  different-family target is available, OAT warns, records the degraded achieved
1059
1094
  level, and runs the best available target rather than pretending diversity was
1060
1095
  achieved.
1096
+
1097
+ ## Choosing gate posture
1098
+
1099
+ A gate is an extra review that a lifecycle skill runs as its last step: the
1100
+ skill hands the work to a second agent CLI (the reviewer) and turns its findings
1101
+ into a pass or a fail. No gate is configured by default. A gate on a planning
1102
+ skill reviews the plan before any code is written; a gate on
1103
+ `oat-project-implement` reviews the finished code before closeout. Either one
1104
+ needs a working reviewer CLI on the machine and adds time to every run.
1105
+
1106
+ `oat gate set` writes to your user config unless you pass `--layer`. A gate set
1107
+ with `--layer shared` is committed with the repository and wins over a
1108
+ user-level gate for the same skill. It does not bind every machine: a
1109
+ repo-local setting, stored in the gitignored `.oat/config.local.json`,
1110
+ overrides the shared gate on that machine (for example
1111
+ `oat gate set <skill> --disable --layer local`), and a project can disable a
1112
+ configured gate in its own `state.md` (see
1113
+ [Per-project gate overrides](#per-project-gate-overrides)). See
1114
+ [Can a teammate weaken a team rule?](../approvals-and-automation.md#can-a-teammate-weaken-a-team-rule).
1115
+
1116
+ - If you are a solo developer and want speed, or you have only one agent CLI
1117
+ installed, skip gates.
1118
+ - If you want a second model to check every plan before coding, gate the
1119
+ planning skills.
1120
+ - If your team is rolling out a review policy, set the gate with
1121
+ `--layer shared` and commit it.
1122
+
1123
+ ### When the gate finds blocking problems
1124
+
1125
+ | `onFailure` | Choose it when | What you give up |
1126
+ | ----------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------- |
1127
+ | `block` | Findings must be fixed | Time: the agent fixes and reruns, then hands over to a person and leaves the skill incomplete if still failing |
1128
+ | `prompt` | A person should decide each case | Unattended runs: with no answer, the gate stays blocked |
1129
+ | `warn` | The review is advisory only | Enforcement: the failure is recorded and the skill continues |
1130
+
1131
+ Every gate needs an explicit `onFailure`; there is no default.
1132
+ `maxAttempts` defaults to two runs in total: the first run plus one
1133
+ fix-and-rerun. A reviewer that fails to start, times out without producing a
1134
+ review, or produces an invalid result has not reviewed anything, so treat that
1135
+ as a failed gate, never as a pass.
1136
+
1137
+ How the skills handle that case differs:
1138
+
1139
+ - `oat-project-implement` and `oat-project-lite` keep it blocked whatever
1140
+ `onFailure` says, so even a `warn` gate does not let them continue.
1141
+ - `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan`
1142
+ apply your `onFailure` setting to any failed gate run, including one where no
1143
+ review happened. With `block`, they retry and then hand the problem to you,
1144
+ as for findings. With `prompt`, they ask you. With `warn`, they record the
1145
+ failure and finish planning, so the plan can be marked ready although no
1146
+ reviewer looked at it.
1147
+
1148
+ So if you put a `warn` gate on a planning skill, check the outcome before you
1149
+ run `/oat-project-implement`. The gate's JSON result has a `status` field, and
1150
+ each `oat gate review` run that starts a reviewer also adds a line to the
1151
+ project's `project-log.md` ending in `status=…` and `run=…` (it skips this only when `workflow.projectLog` is `false` and the
1152
+ project has no `project-log.md` yet): `status=ok` means the review ran and passed; `status=review_failed`,
1153
+ `artifact_validation_failed`, or `targeting_correlation_failed` means no usable
1154
+ review was produced. If you need a planning gate that cannot be skipped this
1155
+ way, use `block`.
1156
+
1157
+ - If the work is high-risk (production, security, or data-migration code),
1158
+ choose `block`.
1159
+ - If a maintainer is available and should decide whether to accept findings,
1160
+ choose `prompt`.
1161
+ - If the gate runs in CI or a script, choose `block` to enforce it or `warn` to
1162
+ keep it advisory. Never choose `prompt`, because nobody can answer it.
1163
+
1164
+ ### How independent the reviewer must be
1165
+
1166
+ The `--avoid` option in the gate command controls which reviewers are excluded.
1167
+ A model family is the maker or line of model, such as Claude versus GPT; a
1168
+ runtime is the agent CLI, such as Claude Code, Codex, or Cursor.
1169
+
1170
+ > [!WARNING]
1171
+ > The default, `same-family`, falls back to the best available reviewer when no
1172
+ > reviewer from a different model family is available, and only records a
1173
+ > warning in the result. That fallback can pick the same agent CLI that did
1174
+ > the work. Before relying on a gate for an independent review, check
1175
+ > `diversity.achieved` in the gate result: `different-family` means the
1176
+ > reviewer really was from another family. A reviewer that cannot start, or a
1177
+ > review that cannot be validated, is different: that blocks the gate. See
1178
+ > [Independence: what blocks and what falls back](../projects/reviews/review-flavors.md#independence-what-blocks-and-what-falls-back).
1179
+
1180
+ | `--avoid` | Choose it when | What you give up |
1181
+ | ----------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
1182
+ | `same-family` (default) | You want a different model family when one exists | A guarantee, because of the fallback above |
1183
+ | `same-runtime` | You need the reviewer to use a different agent CLI | Runs on machines with only one CLI. On a host OAT does not recognize, such as CI, it excludes nothing. It never checks the model family |
1184
+ | `none` | You knowingly accept a review from the same family | Independence |
1185
+
1186
+ - For most teams, including mixed Claude Code, Cursor, and Codex teams, keep
1187
+ `same-family`.
1188
+ - For a high-risk change, keep `same-family` and check `diversity.achieved` in
1189
+ every gate result. For a hard guarantee in a manual run, pin a known
1190
+ independent reviewer with `--target`. Stored lifecycle gate commands refuse
1191
+ `--target`.
1192
+ - Choose `none` only when you deliberately want a same-family review, and do not
1193
+ present it as independent evidence.
1194
+
1195
+ ### Reviewer setup and time budget
1196
+
1197
+ An exec target is a saved command that starts a reviewer CLI, such as
1198
+ `claude -p`. The built-in targets deliberately leave out the provider flags that
1199
+ skip tool-approval prompts, so an unattended reviewer can stall on such a
1200
+ prompt. On a trusted machine that runs gates unattended, add your own target
1201
+ with the permissions it needs, for example with `--layer user`.
1202
+
1203
+ A code review of a whole phase, a phase range, or the final result may run for
1204
+ 30 minutes by default; other reviews get 15 minutes. OAT uses the first timeout
1205
+ it finds: the command's `--timeout-ms`, then the target's `timeoutMs`, then
1206
+ `workflow.gateTimeouts`, then the `OAT_GATE_EXEC_TIMEOUT_MS` environment
1207
+ variable, then the built-in default.
1208
+
1209
+ - If one reviewer keeps timing out on large final reviews, raise that target's
1210
+ `timeoutMs` rather than slowing every review.
1211
+
1212
+ A timeout that leaves no valid review artifact is a failed review, never a pass.
1213
+ If the reviewer did write a valid artifact after the timeout, OAT uses it and
1214
+ reports it as a late completion.