@open-agent-toolkit/cli 0.1.46 → 0.1.50
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 +213 -113
- package/assets/docs/cli-utilities/workflow-gates.md +178 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +46 -8
- 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 +297 -197
- package/assets/docs/workflows/projects/implementation-execution.md +306 -249
- 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 +290 -149
- 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 +110 -22
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +28 -1
- package/dist/commands/config/index.d.ts +3 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +92 -125
- package/dist/commands/doctor/index.d.ts +3 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +57 -95
- 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 +615 -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 +567 -99
- 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/dispatch-matrix.d.ts +59 -0
- package/dist/config/dispatch-matrix.d.ts.map +1 -0
- package/dist/config/dispatch-matrix.js +264 -0
- package/dist/config/oat-config.d.ts +9 -18
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +99 -120
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -1
- 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/availability.d.ts +12 -0
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +72 -29
- package/dist/providers/identity/dispatch-report.d.ts +124 -0
- package/dist/providers/identity/dispatch-report.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-report.js +285 -0
- package/dist/providers/identity/dispatch-validation.d.ts +28 -0
- package/dist/providers/identity/dispatch-validation.d.ts.map +1 -0
- package/dist/providers/identity/dispatch-validation.js +149 -0
- package/dist/providers/identity/stamp.d.ts +2 -0
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +7 -1
- 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,189 @@ 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.
|
|
246
270
|
|
|
247
|
-
|
|
248
|
-
implementation
|
|
249
|
-
|
|
250
|
-
|
|
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.
|
|
251
275
|
|
|
252
|
-
###
|
|
276
|
+
### Record the project maximum
|
|
253
277
|
|
|
254
|
-
|
|
255
|
-
Providers without an adapter receive them as advisory/unsupported.
|
|
278
|
+
Project state stores the named maximum without compiled provider pins:
|
|
256
279
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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:
|
|
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
|
+
### Cursor validation pass and live evidence
|
|
385
|
+
|
|
386
|
+
Config adoption and doctor validate Cursor candidates with one command-scoped
|
|
387
|
+
pass context. Duplicate references to the same byte-for-byte candidate share
|
|
388
|
+
one Task/subagent probe. If a decisive probe is unavailable, the pass resolves
|
|
389
|
+
the broad catalog once, with at most one `--list-models` fallback. The cache
|
|
390
|
+
ends with that adopt or doctor command; it is not process-global and has no
|
|
391
|
+
TTL.
|
|
392
|
+
|
|
393
|
+
A correlated Task start/completion pair that preserves the exact model argument
|
|
394
|
+
and returns the sentinel establishes that the argument is eligible for that
|
|
395
|
+
account and client. A structured rejection or exact allow-list exclusion can
|
|
396
|
+
establish `unknown-value`. Neither result identifies the backend runtime model:
|
|
397
|
+
`runtimeIdentity` remains `not-reported` unless trusted Cursor telemetry or
|
|
398
|
+
Cursor support confirms it. Parent prose and broad catalog presence are
|
|
399
|
+
diagnostic-only, so OAT preserves `unvalidated` when launcher evidence is
|
|
400
|
+
absent instead of inferring capability from candidate spelling.
|
|
401
|
+
|
|
402
|
+
The [dated GPT-5.6 Cursor verification evidence](https://github.com/voxmedia/open-agent-toolkit/blob/main/.oat/repo/reference/project-summaries/20260711-cursor-gpt-5-6-subagent-verification.md)
|
|
403
|
+
preserves the original text-mode pass and a versioned stream-JSON second pass.
|
|
404
|
+
The second pass ran a dynamic positive control and deliberate invalid control
|
|
405
|
+
before candidates. Both parent runs completed without a Task event, making the
|
|
406
|
+
controls inconclusive; the stop rule therefore executed zero of the 13
|
|
407
|
+
recommended candidates and did not execute exploratory
|
|
408
|
+
`gpt-5.6-sol-high-fast`. The recommendation remains unchanged and candidate
|
|
409
|
+
eligibility remains unresolved.
|
|
410
|
+
|
|
411
|
+
The tracked artifact's structured second-pass block contains only allowlisted
|
|
412
|
+
event structure, derived outcomes, sanitized auth-presence context, and
|
|
413
|
+
non-reversible identifier hashes. Exact request/session/tool-call IDs and
|
|
414
|
+
credential-redacted unprojected streams from that pass stay under gitignored
|
|
415
|
+
`.oat/projects/local/` storage for possible Cursor support diagnosis.
|
|
416
|
+
|
|
417
|
+
The same public artifact intentionally retains the sanitized historical v1
|
|
418
|
+
text-mode record for provenance. That older section includes command arguments
|
|
419
|
+
and prompts, stdout and stderr, exit and duration data, and capture-environment
|
|
420
|
+
details such as user-specific binary paths; it is not limited to the structured
|
|
421
|
+
second-pass allowlist. Re-run after a Cursor client rollout exposes Task in
|
|
422
|
+
headless mode or Cursor support confirms the private requests; review the open
|
|
423
|
+
verification item by 2026-08-08.
|
|
424
|
+
|
|
425
|
+
### Legacy compatibility
|
|
426
|
+
|
|
427
|
+
The command and docs path retain `dispatch-ceiling` for compatibility. Legacy
|
|
428
|
+
bare provider values, `workflow.dispatchCeiling.preset`, project
|
|
429
|
+
`oat_dispatch_ceiling`, and `--preferred` remain readable during migration.
|
|
430
|
+
Absent policy state does not mean managed `Uncapped`.
|
|
334
431
|
|
|
335
|
-
For non-interactive preflight checks
|
|
432
|
+
For non-interactive preflight checks:
|
|
336
433
|
|
|
337
434
|
```bash
|
|
338
|
-
oat project dispatch-ceiling resolve
|
|
435
|
+
oat project dispatch-ceiling resolve \
|
|
436
|
+
--provider codex \
|
|
437
|
+
--preflight \
|
|
438
|
+
--non-interactive
|
|
339
439
|
```
|
|
340
440
|
|
|
341
|
-
|
|
342
|
-
|
|
441
|
+
An unresolved or incomplete managed ladder exits nonzero and blocks before
|
|
442
|
+
implementation work.
|
|
343
443
|
|
|
344
444
|
## Workflow preferences (`workflow.*`)
|
|
345
445
|
|