@open-agent-toolkit/cli 0.1.46 → 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 +11 -1
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/configuration.md +172 -113
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +41 -7
- package/assets/docs/provider-sync/scope-and-surface.md +2 -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 -187
- package/assets/docs/workflows/projects/implementation-execution.md +283 -260
- 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 +247 -133
- 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 +157 -107
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +64 -39
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +21 -6
- 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 +452 -16
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -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 +1 -0
- 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 +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +19 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +139 -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 +1 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +12 -5
- 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/materialize.d.ts.map +1 -1
- package/dist/providers/codex/codec/materialize.js +6 -5
- package/dist/providers/codex/codec/shared.d.ts +19 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +98 -5
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +142 -32
- 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
|
}
|
|
@@ -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,111 +257,148 @@ entries are either bare slugs or objects with `harness`, `model`, and optional
|
|
|
235
257
|
}
|
|
236
258
|
```
|
|
237
259
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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.
|
|
242
265
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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.
|
|
246
275
|
|
|
247
|
-
|
|
248
|
-
implementation preflight, the policy remains unresolved. Interactive
|
|
249
|
-
implementation may ask once and persist a choice; non-interactive
|
|
250
|
-
implementation blocks rather than silently falling back to host defaults.
|
|
276
|
+
### Record the project maximum
|
|
251
277
|
|
|
252
|
-
|
|
278
|
+
Project state stores the named maximum without compiled provider pins:
|
|
253
279
|
|
|
254
|
-
|
|
255
|
-
|
|
280
|
+
```yaml
|
|
281
|
+
oat_dispatch_policy:
|
|
282
|
+
mode: managed
|
|
283
|
+
policy: high
|
|
284
|
+
source: project-state
|
|
285
|
+
```
|
|
256
286
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
| Claude | Task `model` parameter | `enforced` |
|
|
261
|
-
| Cursor | `--model` argument / Task `model` | `enforced` when a cell resolves |
|
|
262
|
-
| Others | None (informational only) | `advisory` / `unsupported` |
|
|
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:
|
|
263
290
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
provider default effort when inherit/default behavior is selected or no
|
|
271
|
-
materialized target resolves.
|
|
291
|
+
```yaml
|
|
292
|
+
oat_dispatch_policy:
|
|
293
|
+
mode: managed
|
|
294
|
+
policy: uncapped
|
|
295
|
+
source: project-state
|
|
296
|
+
```
|
|
272
297
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
the broad `cursor-agent models` catalog lists the slug.
|
|
298
|
+
```yaml
|
|
299
|
+
oat_dispatch_policy:
|
|
300
|
+
mode: inherit
|
|
301
|
+
source: project-state
|
|
302
|
+
```
|
|
279
303
|
|
|
280
|
-
###
|
|
304
|
+
### Exact task resolution
|
|
281
305
|
|
|
282
|
-
|
|
283
|
-
|
|
306
|
+
The project-aware resolver remains the source of truth. Preflight reads layered
|
|
307
|
+
config and project state without mutating either:
|
|
284
308
|
|
|
285
309
|
```bash
|
|
286
|
-
oat
|
|
287
|
-
oat providers codex materialize oat-phase-implementer --model gpt-5.6-terra --effort high
|
|
310
|
+
oat project dispatch-ceiling resolve --provider codex --preflight --json
|
|
288
311
|
```
|
|
289
312
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
`.agents/agents/<agent-name>.md`, writes `.codex/agents/<role>.toml`, and
|
|
293
|
-
upserts `.codex/config.toml` unless `--dry-run` is present. `--agent-path` can
|
|
294
|
-
point at a specific canonical agent markdown file, and `--role-name` can
|
|
295
|
-
override the generated role name.
|
|
296
|
-
|
|
297
|
-
Normal project sync also materializes Codex roles for configured matrix targets:
|
|
313
|
+
For each managed capped task, the phase coordinator supplies the recorded
|
|
314
|
+
project or narrower phase maximum plus one exact configured candidate:
|
|
298
315
|
|
|
299
316
|
```bash
|
|
300
|
-
oat
|
|
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
|
|
301
338
|
```
|
|
302
339
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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.
|
|
308
345
|
|
|
309
|
-
|
|
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.
|
|
310
350
|
|
|
311
|
-
|
|
312
|
-
Legacy `workflow.dispatchCeiling.*` config and project `oat_dispatch_ceiling`
|
|
313
|
-
frontmatter remain readable as capped managed policy input. Absent legacy state
|
|
314
|
-
does not mean managed `Uncapped`.
|
|
351
|
+
### Provider enforcement and materialization
|
|
315
352
|
|
|
316
|
-
|
|
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 |
|
|
317
358
|
|
|
318
|
-
|
|
319
|
-
|
|
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`:
|
|
320
362
|
|
|
321
363
|
```bash
|
|
322
|
-
oat
|
|
323
|
-
oat
|
|
324
|
-
oat
|
|
325
|
-
oat project dispatch-ceiling resolve --provider claude --orchestrator-tier sonnet --json
|
|
326
|
-
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
|
|
327
367
|
```
|
|
328
368
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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`.
|
|
334
390
|
|
|
335
|
-
For non-interactive preflight checks
|
|
391
|
+
For non-interactive preflight checks:
|
|
336
392
|
|
|
337
393
|
```bash
|
|
338
|
-
oat project dispatch-ceiling resolve
|
|
394
|
+
oat project dispatch-ceiling resolve \
|
|
395
|
+
--provider codex \
|
|
396
|
+
--preflight \
|
|
397
|
+
--non-interactive
|
|
339
398
|
```
|
|
340
399
|
|
|
341
|
-
|
|
342
|
-
|
|
400
|
+
An unresolved or incomplete managed ladder exits nonzero and blocks before
|
|
401
|
+
implementation work.
|
|
343
402
|
|
|
344
403
|
## Workflow preferences (`workflow.*`)
|
|
345
404
|
|