@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.
- package/README.md +1 -1
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/index.md +14 -1
- package/assets/docs/contributing/skills.md +64 -2
- package/assets/docs/contributing/smoke-testing.md +3 -3
- package/assets/docs/contributing/updating-model-guidance.md +2 -2
- package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
- package/assets/docs/docs-tooling/add-docs-to-a-repo.md +112 -15
- package/assets/docs/docs-tooling/agent-instructions.md +131 -0
- package/assets/docs/docs-tooling/commands.md +74 -30
- package/assets/docs/docs-tooling/index.md +7 -6
- package/assets/docs/docs-tooling/meta.json +1 -1
- package/assets/docs/docs-tooling/workflows.md +357 -11
- package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
- package/assets/docs/{guide → getting-started}/concepts.md +28 -10
- package/assets/docs/getting-started/index.md +68 -0
- package/assets/docs/getting-started/meta.json +4 -0
- package/assets/docs/getting-started/quickstart.md +174 -0
- package/assets/docs/{cli-utilities → getting-started}/tool-packs.md +146 -15
- package/assets/docs/index.md +47 -48
- package/assets/docs/meta.json +6 -7
- package/assets/docs/provider-sync/commands.md +26 -3
- package/assets/docs/provider-sync/config.md +60 -1
- package/assets/docs/provider-sync/index.md +31 -15
- package/assets/docs/provider-sync/instruction-sync.md +43 -5
- package/assets/docs/provider-sync/manifest-and-drift.md +85 -0
- package/assets/docs/provider-sync/meta.json +1 -0
- package/assets/docs/provider-sync/pilot-with-a-team.md +236 -0
- package/assets/docs/provider-sync/scope-and-surface.md +37 -3
- package/assets/docs/reference/cli-reference.md +34 -34
- package/assets/docs/{cli-utilities → reference}/config-and-local-state.md +25 -9
- package/assets/docs/{cli-utilities → reference}/configuration.md +151 -34
- package/assets/docs/reference/docs-index-contract.md +19 -4
- package/assets/docs/reference/file-locations.md +7 -2
- package/assets/docs/reference/index.md +13 -1
- package/assets/docs/reference/meta.json +7 -1
- package/assets/docs/reference/oat-directory-structure.md +24 -22
- package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
- package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +1 -1
- package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
- package/assets/docs/reference/troubleshooting.md +125 -10
- package/assets/docs/reference/what-oat-writes.md +410 -0
- package/assets/docs/skills/brainstorm.md +77 -0
- package/assets/docs/skills/diagnostics.md +56 -0
- package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
- package/assets/docs/skills/index.md +416 -0
- package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
- package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
- package/assets/docs/skills/repo-improve.md +254 -0
- package/assets/docs/skills/research.md +237 -0
- package/assets/docs/skills/session-closeout.md +61 -0
- package/assets/docs/workflows/advanced/autonomy.md +344 -0
- package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
- package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
- package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +1 -1
- package/assets/docs/workflows/advanced/index.md +19 -0
- package/assets/docs/workflows/advanced/meta.json +13 -0
- package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +63 -4
- package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
- package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
- package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
- package/assets/docs/workflows/approvals-and-automation.md +261 -0
- package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
- package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
- package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
- package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
- package/assets/docs/workflows/choose-workflow.md +114 -0
- package/assets/docs/workflows/ideas/index.md +3 -3
- package/assets/docs/workflows/ideas/lifecycle.md +218 -1
- package/assets/docs/workflows/index.md +11 -62
- package/assets/docs/workflows/meta.json +10 -2
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
- package/assets/docs/workflows/projects/closeout/index.md +14 -0
- package/assets/docs/workflows/projects/closeout/meta.json +4 -0
- package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
- package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
- package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
- package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +8 -8
- package/assets/docs/workflows/projects/execution/index.md +15 -0
- package/assets/docs/workflows/projects/execution/meta.json +9 -0
- package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
- package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
- package/assets/docs/workflows/projects/index.md +38 -49
- package/assets/docs/workflows/projects/lifecycle.md +47 -11
- package/assets/docs/workflows/projects/meta.json +2 -23
- package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
- package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
- package/assets/docs/workflows/projects/planning/index.md +16 -0
- package/assets/docs/workflows/projects/planning/meta.json +10 -0
- package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
- package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
- package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
- package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
- package/assets/docs/workflows/projects/reviews/meta.json +4 -0
- package/assets/docs/workflows/projects/reviews/review-flavors.md +643 -0
- package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
- package/assets/docs/workflows/waves/index.md +12 -0
- package/assets/docs/workflows/waves/meta.json +4 -0
- package/assets/docs/workflows/waves/wave-workflows.md +206 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-docs/SKILL.md +19 -19
- package/assets/skills/oat-docs-analyze/SKILL.md +27 -7
- package/assets/skills/oat-docs-analyze/references/quality-checklist.md +16 -3
- package/assets/skills/oat-docs-apply/SKILL.md +20 -3
- package/assets/skills/oat-docs-authoring/SKILL.md +11 -7
- package/assets/skills/oat-docs-authoring/references/docs-root-resolution.md +12 -5
- package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +7 -7
- package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +13 -3
- package/assets/skills/oat-docs-authoring/references/targeted-authoring-workflow.md +5 -4
- package/assets/skills/oat-docs-authoring/references/validation.md +11 -1
- package/assets/skills/oat-docs-bootstrap/SKILL.md +31 -8
- package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +2 -1
- package/assets/skills/oat-doctor/SKILL.md +25 -25
- package/assets/skills/oat-project-document/SKILL.md +21 -2
- package/assets/templates/docs-markdown/contributing.md +35 -0
- package/assets/templates/docs-markdown/index.md +18 -0
- package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
- package/dist/commands/docs/index-generate/index.js +41 -8
- package/dist/commands/docs/init/index.d.ts +17 -2
- package/dist/commands/docs/init/index.d.ts.map +1 -1
- package/dist/commands/docs/init/index.js +194 -14
- package/dist/commands/docs/init/markdown.d.ts +39 -0
- package/dist/commands/docs/init/markdown.d.ts.map +1 -0
- package/dist/commands/docs/init/markdown.js +317 -0
- package/dist/commands/docs/init/resolve-options.d.ts +3 -1
- package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
- package/dist/commands/docs/init/resolve-options.js +36 -0
- package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
- package/dist/commands/docs/init/scaffold.js +11 -0
- package/dist/commands/shared/agents-md.d.ts +7 -0
- package/dist/commands/shared/agents-md.d.ts.map +1 -1
- package/dist/commands/shared/agents-md.js +131 -91
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +1 -0
- package/dist/config/oat-config.d.ts +2 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +4 -2
- package/package.json +2 -2
- package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
- package/assets/docs/cli-utilities/index.md +0 -74
- package/assets/docs/cli-utilities/meta.json +0 -13
- package/assets/docs/cli-utilities/remote-project-management.md +0 -191
- package/assets/docs/guide/index.md +0 -31
- package/assets/docs/guide/meta.json +0 -4
- package/assets/docs/quickstart.md +0 -88
- package/assets/docs/workflows/projects/autonomy.md +0 -196
- package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
- package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
- package/assets/docs/workflows/projects/review-flavors.md +0 -138
- package/assets/docs/workflows/skills/index.md +0 -184
- package/assets/docs/workflows/skills/repo-improve.md +0 -89
- 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](../../
|
|
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.
|
|
40
|
-
|
|
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.
|
|
91
|
-
|
|
92
|
-
|
|
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.
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
459
|
-
|
|
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
|
|
589
|
-
|
|
590
|
-
|
|
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.
|
|
@@ -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](
|
|
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](
|
|
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](
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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](../
|
|
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](../
|
|
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.
|