@open-agent-toolkit/cli 0.1.45 → 0.1.48
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/assets/agents/oat-phase-implementer.md +202 -191
- package/assets/agents/oat-reviewer.md +12 -2
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/config-and-local-state.md +7 -0
- package/assets/docs/cli-utilities/configuration.md +183 -84
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/config.md +5 -1
- package/assets/docs/provider-sync/manifest-and-drift.md +6 -1
- package/assets/docs/provider-sync/providers.md +42 -5
- package/assets/docs/provider-sync/scope-and-surface.md +3 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +235 -174
- package/assets/docs/workflows/projects/implementation-execution.md +283 -253
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +347 -178
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +156 -94
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts +2 -2
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +129 -53
- package/dist/commands/doctor/index.d.ts +2 -2
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +102 -31
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +544 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +586 -23
- package/dist/commands/providers/codex/index.d.ts +4 -0
- package/dist/commands/providers/codex/index.d.ts.map +1 -0
- package/dist/commands/providers/codex/index.js +7 -0
- package/dist/commands/providers/codex/materialize.d.ts +5 -0
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -0
- package/dist/commands/providers/codex/materialize.js +157 -0
- package/dist/commands/providers/index.d.ts +2 -2
- package/dist/commands/providers/index.d.ts.map +1 -1
- package/dist/commands/providers/index.js +4 -2
- package/dist/commands/providers/providers.types.d.ts +23 -0
- package/dist/commands/providers/providers.types.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.js +11 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +5 -1
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +5 -1
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.d.ts +4 -0
- package/dist/config/dispatch-ceiling-preset.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.js +3 -0
- package/dist/config/dispatch-policy-options.d.ts +20 -0
- package/dist/config/dispatch-policy-options.d.ts.map +1 -0
- package/dist/config/dispatch-policy-options.js +96 -0
- package/dist/config/oat-config.d.ts +25 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +154 -24
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -2
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +8 -5
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +25 -7
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/config-merge.d.ts +6 -0
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +7 -0
- package/dist/providers/codex/codec/materialize.d.ts +16 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -0
- package/dist/providers/codex/codec/materialize.js +58 -0
- package/dist/providers/codex/codec/shared.d.ts +20 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +107 -6
- package/dist/providers/codex/codec/sync-extension.d.ts +7 -1
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +299 -52
- package/dist/providers/identity/availability.d.ts +24 -1
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +253 -19
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +4 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,23 +1,130 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-07-
|
|
2
|
+
"version": "2026-07-10.2",
|
|
3
3
|
"providers": {
|
|
4
4
|
"codex": {
|
|
5
|
-
"economy":
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
"economy": {
|
|
6
|
+
"candidates": [
|
|
7
|
+
{
|
|
8
|
+
"harness": "codex",
|
|
9
|
+
"model": "gpt-5.6-luna",
|
|
10
|
+
"effort": "low"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"harness": "codex",
|
|
14
|
+
"model": "gpt-5.6-luna",
|
|
15
|
+
"effort": "medium"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"harness": "codex",
|
|
19
|
+
"model": "gpt-5.6-luna",
|
|
20
|
+
"effort": "high"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"balanced": {
|
|
25
|
+
"candidates": [
|
|
26
|
+
{
|
|
27
|
+
"harness": "codex",
|
|
28
|
+
"model": "gpt-5.6-luna",
|
|
29
|
+
"effort": "xhigh"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"harness": "codex",
|
|
33
|
+
"model": "gpt-5.6-terra",
|
|
34
|
+
"effort": "low"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"harness": "codex",
|
|
38
|
+
"model": "gpt-5.6-terra",
|
|
39
|
+
"effort": "medium"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"harness": "codex",
|
|
43
|
+
"model": "gpt-5.6-terra",
|
|
44
|
+
"effort": "high"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"harness": "codex",
|
|
48
|
+
"model": "gpt-5.6-terra",
|
|
49
|
+
"effort": "xhigh"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"high": {
|
|
54
|
+
"candidates": [
|
|
55
|
+
{
|
|
56
|
+
"harness": "codex",
|
|
57
|
+
"model": "gpt-5.6-sol",
|
|
58
|
+
"effort": "low"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"harness": "codex",
|
|
62
|
+
"model": "gpt-5.6-sol",
|
|
63
|
+
"effort": "medium"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"harness": "codex",
|
|
67
|
+
"model": "gpt-5.6-sol",
|
|
68
|
+
"effort": "high"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"frontier": {
|
|
73
|
+
"candidates": [
|
|
74
|
+
{
|
|
75
|
+
"harness": "codex",
|
|
76
|
+
"model": "gpt-5.6-sol",
|
|
77
|
+
"effort": "xhigh"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"harness": "codex",
|
|
81
|
+
"model": "gpt-5.6-sol",
|
|
82
|
+
"effort": "max"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
9
86
|
},
|
|
10
87
|
"claude": {
|
|
11
|
-
"economy":
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
88
|
+
"economy": {
|
|
89
|
+
"candidates": ["haiku", "sonnet"]
|
|
90
|
+
},
|
|
91
|
+
"balanced": {
|
|
92
|
+
"candidates": ["sonnet"]
|
|
93
|
+
},
|
|
94
|
+
"high": {
|
|
95
|
+
"candidates": ["opus"]
|
|
96
|
+
},
|
|
97
|
+
"frontier": {
|
|
98
|
+
"candidates": ["fable"]
|
|
99
|
+
}
|
|
15
100
|
},
|
|
16
101
|
"cursor": {
|
|
17
|
-
"economy":
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
102
|
+
"economy": {
|
|
103
|
+
"candidates": [
|
|
104
|
+
"gpt-5.6-luna-low",
|
|
105
|
+
"gpt-5.6-luna-medium",
|
|
106
|
+
"gpt-5.6-luna-high"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"balanced": {
|
|
110
|
+
"candidates": [
|
|
111
|
+
"gpt-5.6-luna-xhigh",
|
|
112
|
+
"gpt-5.6-terra-low",
|
|
113
|
+
"gpt-5.6-terra-medium",
|
|
114
|
+
"gpt-5.6-terra-high",
|
|
115
|
+
"gpt-5.6-terra-xhigh"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"high": {
|
|
119
|
+
"candidates": [
|
|
120
|
+
"gpt-5.6-sol-low",
|
|
121
|
+
"gpt-5.6-sol-medium",
|
|
122
|
+
"gpt-5.6-sol-high"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"frontier": {
|
|
126
|
+
"candidates": ["gpt-5.6-sol-xhigh", "gpt-5.6-sol-max"]
|
|
127
|
+
}
|
|
21
128
|
}
|
|
22
129
|
}
|
|
23
130
|
}
|
|
@@ -113,6 +113,13 @@ Use `oat config` for repo runtime config inspection and supported key mutation.
|
|
|
113
113
|
|
|
114
114
|
Use `oat config dump --json` when you need the whole resolved config in one machine-readable response rather than a single key or a human-oriented list view.
|
|
115
115
|
|
|
116
|
+
Dispatch policy keys are part of this surface, but provider-specific generation
|
|
117
|
+
still belongs to provider commands. Use `oat config describe
|
|
118
|
+
workflow.dispatchPolicy.policy` to inspect capped managed, managed uncapped,
|
|
119
|
+
inherit/default, and unresolved behavior; use `oat providers codex materialize`
|
|
120
|
+
or `oat sync --scope project` to create materialized Codex roles from explicit
|
|
121
|
+
model+effort targets.
|
|
122
|
+
|
|
116
123
|
Archive lifecycle settings live here as shared repo config:
|
|
117
124
|
|
|
118
125
|
- `archive.s3Uri`
|
|
@@ -170,64 +170,86 @@ oat config describe activeIdea
|
|
|
170
170
|
|
|
171
171
|
## Dispatch policy resolution
|
|
172
172
|
|
|
173
|
-
Dispatch
|
|
174
|
-
subagent model/effort selection and, if so, which managed policy to use.
|
|
173
|
+
Dispatch configuration has two layers:
|
|
175
174
|
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
1. A reusable ordered candidate ladder owned by user, shared, or repo-local
|
|
176
|
+
config.
|
|
177
|
+
2. A project or phase named ceiling that acts as a maximum over that ladder.
|
|
178
|
+
|
|
179
|
+
A named ceiling is a maximum constraint, not an exact model-family or effort
|
|
180
|
+
preference. For the full model, see
|
|
178
181
|
[Dispatch Policy](../workflows/projects/dispatch-ceiling.md).
|
|
179
182
|
|
|
180
183
|
### Config keys
|
|
181
184
|
|
|
182
|
-
|
|
185
|
+
| Key | Values | Purpose |
|
|
186
|
+
| ------------------------------------------------------ | ----------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
187
|
+
| `workflow.dispatchPolicy.mode` | `managed`, `inherit` | `managed` lets OAT select exact candidates; `inherit` leaves controls to the host |
|
|
188
|
+
| `workflow.dispatchPolicy.policy` | `economy`, `balanced`, `high`, `frontier`, `uncapped` | Default named maximum or explicit managed uncapped state |
|
|
189
|
+
| `workflow.dispatchCeiling.providers.<provider>` | tier map or legacy bare value | Reusable provider candidate column |
|
|
190
|
+
| `workflow.dispatchCeiling.providers.<provider>.<tier>` | `candidates` cell, route, or legacy bare value | One named tier in the provider ladder |
|
|
191
|
+
| `workflow.dispatchCeiling.recommendationVersion` | string | Version written by `oat config adopt dispatch-matrix` for recommendation drift tracking |
|
|
192
|
+
| `workflow.dispatchCeiling.preset` | `balanced`, `maximum`, `cost-conscious` | Legacy policy setup alias |
|
|
183
193
|
|
|
184
|
-
|
|
185
|
-
| -------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
186
|
-
| `workflow.dispatchPolicy.mode` | `managed`, `inherit` | `managed` lets OAT select controls; `inherit` leaves controls to the host/provider |
|
|
187
|
-
| `workflow.dispatchPolicy.policy` | `economy`, `balanced`, `high`, `frontier`, `uncapped` | Managed policy. Setting this key writes `mode=managed` |
|
|
194
|
+
### Adopt a complete ladder
|
|
188
195
|
|
|
189
|
-
|
|
196
|
+
Choose the owning scope explicitly:
|
|
190
197
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
| `frontier` | `xhigh` | `fable` |
|
|
197
|
-
| `uncapped` | none | none |
|
|
198
|
+
```bash
|
|
199
|
+
oat config adopt dispatch-matrix --shared
|
|
200
|
+
oat config adopt dispatch-matrix --local
|
|
201
|
+
oat config adopt dispatch-matrix --user
|
|
202
|
+
```
|
|
198
203
|
|
|
199
|
-
|
|
204
|
+
Adoption fills missing provider/tier cells and preserves explicit existing
|
|
205
|
+
values. Planning shows the complete bundled recommendation before asking for
|
|
206
|
+
this scope, then rechecks the effective ladder. If explicit cells still leave
|
|
207
|
+
the ladder incomplete, readiness blocks; OAT does not overwrite them.
|
|
200
208
|
|
|
201
|
-
|
|
202
|
-
| ------------------------------------------------------ | --------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
203
|
-
| `workflow.dispatchCeiling.preset` | `balanced`, `maximum`, `cost-conscious` | Legacy preset alias; `maximum` maps to `high`, `cost-conscious` to `economy` |
|
|
204
|
-
| `workflow.dispatchCeiling.providers.<provider>` | bare value or tier map | Provider column; bare Codex/Claude values remain legacy capped targets |
|
|
205
|
-
| `workflow.dispatchCeiling.providers.<provider>.<tier>` | bare value or ordered route | One matrix cell for `economy`, `balanced`, `high`, or `frontier` |
|
|
206
|
-
| `workflow.dispatchCeiling.recommendationVersion` | string | Version stamp written by `oat config adopt dispatch-matrix`; used for drift visibility |
|
|
209
|
+
Scope determines ownership and Codex materialization:
|
|
207
210
|
|
|
208
|
-
|
|
211
|
+
- `--shared` and `--local` are project configuration sources. Their configured
|
|
212
|
+
Codex candidates materialize into the tracked project `.codex` view.
|
|
213
|
+
- `--user` writes reusable personal defaults to `~/.oat/config.json`; those
|
|
214
|
+
Codex candidates materialize under `~/.codex`.
|
|
215
|
+
- Active-project sparse candidates also materialize into the tracked project
|
|
216
|
+
view.
|
|
209
217
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
oat config set workflow.dispatchCeiling.providers.claude opus --shared
|
|
215
|
-
```
|
|
218
|
+
Project-generated provider views remain visible to version control. OAT does
|
|
219
|
+
not auto-ignore them. A project-specific active policy or ceiling must not be
|
|
220
|
+
written into user `~/.oat/config.json`; store it in that project's `state.md`
|
|
221
|
+
even when the reusable ladder is user-owned.
|
|
216
222
|
|
|
217
|
-
|
|
218
|
-
entries are either bare slugs or objects with `harness`, `model`, and optional
|
|
219
|
-
`effort`:
|
|
223
|
+
### Ordered candidate cells
|
|
220
224
|
|
|
221
225
|
```json
|
|
222
226
|
{
|
|
223
227
|
"workflow": {
|
|
224
228
|
"dispatchCeiling": {
|
|
225
229
|
"providers": {
|
|
230
|
+
"codex": {
|
|
231
|
+
"balanced": {
|
|
232
|
+
"candidates": [
|
|
233
|
+
{
|
|
234
|
+
"harness": "codex",
|
|
235
|
+
"model": "gpt-5.6-terra",
|
|
236
|
+
"effort": "low"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"harness": "codex",
|
|
240
|
+
"model": "gpt-5.6-terra",
|
|
241
|
+
"effort": "medium"
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"claude": {
|
|
247
|
+
"balanced": { "candidates": ["sonnet"] }
|
|
248
|
+
},
|
|
226
249
|
"cursor": {
|
|
227
|
-
"
|
|
228
|
-
"
|
|
229
|
-
|
|
230
|
-
]
|
|
250
|
+
"balanced": {
|
|
251
|
+
"candidates": ["opaque:model/lower [v1]", "opaque:model/high [v2]"]
|
|
252
|
+
}
|
|
231
253
|
}
|
|
232
254
|
}
|
|
233
255
|
}
|
|
@@ -235,71 +257,148 @@ entries are either bare slugs or objects with `harness`, `model`, and optional
|
|
|
235
257
|
}
|
|
236
258
|
```
|
|
237
259
|
|
|
238
|
-
|
|
239
|
-
|
|
260
|
+
The bundled recommendation covers 13 Codex model/effort combinations: Luna and
|
|
261
|
+
Terra at `low`, `medium`, `high`, and `xhigh`, plus Sol at those efforts and
|
|
262
|
+
`max`. Claude covers `haiku`, `sonnet`, `opus`, and `fable`. Cursor covers 13
|
|
263
|
+
opaque configured strings. Cursor spelling never supplies capability metadata;
|
|
264
|
+
the configured candidate position owns the tier meaning.
|
|
240
265
|
|
|
241
|
-
|
|
242
|
-
|
|
266
|
+
The corresponding pinned Codex variant catalogue includes
|
|
267
|
+
`gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
|
|
268
|
+
`gpt-5.6-sol-max`. Configuration selects from that materialized catalogue; it
|
|
269
|
+
does not construct an unregistered role during dispatch.
|
|
270
|
+
|
|
271
|
+
The final candidate in a named tier defines that tier's reviewer ceiling. For
|
|
272
|
+
implementation and fix tasks, all candidates from the lowest tier through the
|
|
273
|
+
named maximum remain eligible. Under High, that includes Economy, Balanced, and
|
|
274
|
+
High candidates.
|
|
275
|
+
|
|
276
|
+
### Record the project maximum
|
|
277
|
+
|
|
278
|
+
Project state stores the named maximum without compiled provider pins:
|
|
279
|
+
|
|
280
|
+
```yaml
|
|
281
|
+
oat_dispatch_policy:
|
|
282
|
+
mode: managed
|
|
283
|
+
policy: high
|
|
284
|
+
source: project-state
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
An optional phase `Dispatch Profile` row may narrow the maximum. Blank or
|
|
288
|
+
`auto` uses the project value. `Uncapped` and inherit/default remain explicit
|
|
289
|
+
modes:
|
|
290
|
+
|
|
291
|
+
```yaml
|
|
292
|
+
oat_dispatch_policy:
|
|
293
|
+
mode: managed
|
|
294
|
+
policy: uncapped
|
|
295
|
+
source: project-state
|
|
243
296
|
```
|
|
244
297
|
|
|
245
|
-
|
|
298
|
+
```yaml
|
|
299
|
+
oat_dispatch_policy:
|
|
300
|
+
mode: inherit
|
|
301
|
+
source: project-state
|
|
302
|
+
```
|
|
246
303
|
|
|
247
|
-
|
|
248
|
-
Providers without an adapter receive them as advisory/unsupported.
|
|
304
|
+
### Exact task resolution
|
|
249
305
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
| Codex | Pinned role variants | `enforced` |
|
|
253
|
-
| Claude | Task `model` parameter | `enforced` |
|
|
254
|
-
| Cursor | `--model` argument | `enforced` when a cell resolves |
|
|
255
|
-
| Others | None (informational only) | `advisory` / `unsupported` |
|
|
306
|
+
The project-aware resolver remains the source of truth. Preflight reads layered
|
|
307
|
+
config and project state without mutating either:
|
|
256
308
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
matrix slugs; OAT validates availability when a provider oracle is available,
|
|
261
|
-
but the configured matrix owns tier meaning.
|
|
309
|
+
```bash
|
|
310
|
+
oat project dispatch-ceiling resolve --provider codex --preflight --json
|
|
311
|
+
```
|
|
262
312
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
confirms the actual model used after dispatch. If the provider did not honor the
|
|
266
|
-
upgrade, the enforcement log reads `advisory — provider did not honor upgrade;
|
|
267
|
-
ran <tier>` instead of `enforced`.
|
|
313
|
+
For each managed capped task, the phase coordinator supplies the recorded
|
|
314
|
+
project or narrower phase maximum plus one exact configured candidate:
|
|
268
315
|
|
|
269
|
-
|
|
316
|
+
```bash
|
|
317
|
+
oat project dispatch-ceiling resolve \
|
|
318
|
+
--provider codex \
|
|
319
|
+
--role implementer \
|
|
320
|
+
--ceiling-tier high \
|
|
321
|
+
--candidate-model gpt-5.6-terra \
|
|
322
|
+
--candidate-effort medium \
|
|
323
|
+
--json
|
|
324
|
+
|
|
325
|
+
oat project dispatch-ceiling resolve \
|
|
326
|
+
--provider claude \
|
|
327
|
+
--role implementer \
|
|
328
|
+
--ceiling-tier high \
|
|
329
|
+
--candidate-model sonnet \
|
|
330
|
+
--json
|
|
331
|
+
|
|
332
|
+
oat project dispatch-ceiling resolve \
|
|
333
|
+
--provider cursor \
|
|
334
|
+
--role implementer \
|
|
335
|
+
--ceiling-tier high \
|
|
336
|
+
--candidate-model 'opaque:model/lower [v1]' \
|
|
337
|
+
--json
|
|
338
|
+
```
|
|
270
339
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
340
|
+
`--ceiling-tier` is invocation-only. It accepts `economy`, `balanced`, `high`,
|
|
341
|
+
or `frontier`, overrides layered active-policy ceilings for that call, and never
|
|
342
|
+
writes user, shared, local, or project configuration. JSON reports top-level
|
|
343
|
+
`source: invocation`; `providers.<provider>.cellSource` still identifies the
|
|
344
|
+
config layer that owns the selected candidate.
|
|
275
345
|
|
|
276
|
-
|
|
346
|
+
The resolver fails closed when a candidate is missing, above the maximum,
|
|
347
|
+
ambiguous, malformed, or cannot compile exact provider controls. `--preferred`
|
|
348
|
+
remains compatibility behavior for legacy scalar ceilings and managed
|
|
349
|
+
`Uncapped`; it is not the exact managed task-worker path.
|
|
277
350
|
|
|
278
|
-
|
|
279
|
-
|
|
351
|
+
### Provider enforcement and materialization
|
|
352
|
+
|
|
353
|
+
| Provider | Exact task mechanism |
|
|
354
|
+
| -------- | ---------------------------------------------------------------------------------------------------- |
|
|
355
|
+
| Codex | `providers.codex.dispatchArgs.variant` as `agent_type`, or a fresh child pinned to model plus effort |
|
|
356
|
+
| Claude | `providers.claude.dispatchArgs.model` as the actual Task `model` |
|
|
357
|
+
| Cursor | `providers.cursor.dispatchArgs.model` byte-for-byte as the actual opaque invocation model |
|
|
358
|
+
|
|
359
|
+
Project sync materializes the supported Codex catalogue and every configured
|
|
360
|
+
project-owned candidate for both `oat-phase-implementer` and `oat-reviewer`.
|
|
361
|
+
User sync materializes user-owned candidates under `~/.codex`:
|
|
280
362
|
|
|
281
363
|
```bash
|
|
282
|
-
oat
|
|
283
|
-
oat
|
|
284
|
-
oat
|
|
285
|
-
oat project dispatch-ceiling resolve --provider claude --orchestrator-tier sonnet --json
|
|
286
|
-
oat project dispatch-ceiling resolve --provider cursor --role implementer --preferred high --escalation-level 0 --json
|
|
364
|
+
oat sync --scope project
|
|
365
|
+
oat sync --scope user
|
|
366
|
+
oat sync --scope all
|
|
287
367
|
```
|
|
288
368
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
369
|
+
Generated roles carry `supported-catalogue`, `project-config`, or `user-config`
|
|
370
|
+
ownership. Cleanup reconciles only the current owner. Materialization is best
|
|
371
|
+
effort at sync boundaries; the exact fresh-child route means workflow
|
|
372
|
+
correctness does not require provider restart or hot reload.
|
|
373
|
+
|
|
374
|
+
Reviewer resolution uses the final candidate at the configured review ceiling.
|
|
375
|
+
Codex selects the exact reviewer variant; Claude and Cursor pass the resolver's
|
|
376
|
+
exact model argument. Timeout retries preserve the same complete payload. A
|
|
377
|
+
lower reviewer candidate requires a separate reviewed contract.
|
|
378
|
+
|
|
379
|
+
Tier 2 remains target-preserving. Inline review is permitted only when the host
|
|
380
|
+
has verified equivalent current-host controls for explicit inherit,
|
|
381
|
+
managed-uncapped, or base-role behavior. Capped managed reviews still require
|
|
382
|
+
the exact registered role, pinned child, or resolver-returned model argument.
|
|
383
|
+
|
|
384
|
+
### Legacy compatibility
|
|
385
|
+
|
|
386
|
+
The command and docs path retain `dispatch-ceiling` for compatibility. Legacy
|
|
387
|
+
bare provider values, `workflow.dispatchCeiling.preset`, project
|
|
388
|
+
`oat_dispatch_ceiling`, and `--preferred` remain readable during migration.
|
|
389
|
+
Absent policy state does not mean managed `Uncapped`.
|
|
294
390
|
|
|
295
|
-
For non-interactive preflight checks
|
|
391
|
+
For non-interactive preflight checks:
|
|
296
392
|
|
|
297
393
|
```bash
|
|
298
|
-
oat project dispatch-ceiling resolve
|
|
394
|
+
oat project dispatch-ceiling resolve \
|
|
395
|
+
--provider codex \
|
|
396
|
+
--preflight \
|
|
397
|
+
--non-interactive
|
|
299
398
|
```
|
|
300
399
|
|
|
301
|
-
|
|
302
|
-
|
|
400
|
+
An unresolved or incomplete managed ladder exits nonzero and blocks before
|
|
401
|
+
implementation work.
|
|
303
402
|
|
|
304
403
|
## Workflow preferences (`workflow.*`)
|
|
305
404
|
|
|
@@ -320,7 +419,7 @@ Workflow preference keys live under the `workflow.*` namespace:
|
|
|
320
419
|
- `workflow.autoArtifactReview.plan` — boolean, default `true`. Automatically run the bounded artifact-review loop for generated `plan.md` files before implementation handoff. Set to `false` only when you intentionally want to skip the plan artifact review.
|
|
321
420
|
- `workflow.autoArtifactReview.analysis` — boolean, default `true`. Automatically run the bounded accuracy-review loop for generated docs and agent-instructions analysis artifacts before the matching apply workflow consumes them.
|
|
322
421
|
- `workflow.dispatchPolicy.mode` — `managed` or `inherit`. `managed` means OAT selects model/effort controls from `workflow.dispatchPolicy.policy`; `inherit` means OAT leaves controls to host/provider defaults.
|
|
323
|
-
- `workflow.dispatchPolicy.policy` — `economy`, `balanced`, `high`, `frontier`, or `uncapped`. `economy` through `frontier` are capped managed policies; `uncapped` keeps OAT-managed preferred selection without provider caps.
|
|
422
|
+
- `workflow.dispatchPolicy.policy` — `economy`, `balanced`, `high`, `frontier`, or `uncapped`. `economy` through `frontier` are capped managed policies; `uncapped` keeps OAT-managed preferred selection without provider caps. It is distinct from `workflow.dispatchPolicy.mode=inherit`, which leaves controls to the host/provider.
|
|
324
423
|
- `workflow.dispatchCeiling.preset` — legacy compatibility alias (`balanced`, `maximum`, or `cost-conscious`) for capped managed policy setup.
|
|
325
424
|
- `workflow.dispatchCeiling.providers.<provider>` — dispatch matrix provider column or legacy bare provider target.
|
|
326
425
|
- `workflow.dispatchCeiling.providers.<provider>.<tier>` — one matrix cell for `economy`, `balanced`, `high`, or `frontier`.
|