@open-agent-toolkit/cli 0.1.59 → 0.1.60
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.41
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -2,40 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
This reference preserves the route-specific implementation contract. Load it only when the entry skill routes execution here.
|
|
4
4
|
|
|
5
|
+
The shared dispatch engine (`oat-dispatch-subagents`) and the project adapter
|
|
6
|
+
(`oat-project-dispatch-subagents`) own capability probing, catalog
|
|
7
|
+
observation, route selection, accepted-launch terminality, continuation,
|
|
8
|
+
recovery, and the structured dispatch record. This reference adds only the
|
|
9
|
+
implement-workflow specifics: tier selection, dispatch-policy preflight,
|
|
10
|
+
resolver invocation shapes, and the logs this workflow must emit. Where this
|
|
11
|
+
reference and the shared skills appear to overlap, the shared skills are
|
|
12
|
+
canonical.
|
|
13
|
+
|
|
5
14
|
### Step 0.5: Capability Detection and Tier Selection
|
|
6
15
|
|
|
7
|
-
**Mandatory target-first order:** Complete Dispatch Policy Preflight and
|
|
8
|
-
the concrete managed
|
|
9
|
-
locking Tier 1/Tier 2. A concrete target takes precedence over tier
|
|
10
|
-
first send the exact registered role through native dispatch.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
the coordinator or base role.
|
|
16
|
+
**Mandatory target-first order:** Complete Dispatch Policy Preflight and
|
|
17
|
+
resolve the concrete managed target before probing generic agent availability
|
|
18
|
+
or locking Tier 1/Tier 2. A concrete target takes precedence over tier
|
|
19
|
+
selection: first send the exact registered role through native dispatch. For
|
|
20
|
+
Codex, the resolver-returned Codex variant must first be sent through the
|
|
21
|
+
native spawn API as native `agent_type`; spawn acceptance plus the constructed
|
|
22
|
+
launcher payload is configured invocation evidence, and independent runtime
|
|
23
|
+
telemetry or agent self-report is not required. Launch a fresh Codex child
|
|
24
|
+
pinned to the resolver target's explicit model, reasoning effort, and
|
|
25
|
+
canonical role instructions from `.agents/agents/oat-phase-implementer.md` or
|
|
26
|
+
`.agents/agents/oat-reviewer.md` only after a native role-selection rejection
|
|
27
|
+
as defined below.
|
|
28
|
+
If that fresh child cannot be launched, fail closed and block; never
|
|
29
|
+
substitute a base or coordinator role for a managed phase target. Inline
|
|
30
|
+
execution is allowed only with verified equivalent current-host model and
|
|
31
|
+
effort controls. Explicit inherit/default behavior and the documented
|
|
32
|
+
managed-uncapped reviewer fallback remain the only base-role exceptions.
|
|
25
33
|
|
|
26
34
|
Use base `oat-phase-implementer` only for the allowed exceptions above:
|
|
27
|
-
explicit inherit/default behavior. It is never a managed phase-target
|
|
28
|
-
|
|
29
|
-
Detect whether native subagent dispatch is available. The detection logic follows the same pattern used by `oat-project-review-provide` but produces a two-tier outcome (no fresh-session tier — this skill runs autonomously and cannot block on user-initiated fresh sessions mid-run).
|
|
30
|
-
|
|
31
|
-
Detection logic:
|
|
35
|
+
explicit inherit/default behavior. It is never a managed phase-target
|
|
36
|
+
fallback.
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
Detection logic (two-tier outcome — this skill runs autonomously and cannot
|
|
39
|
+
block on user-initiated fresh sessions mid-run):
|
|
40
|
+
|
|
41
|
+
- Claude Code: check Task-tool availability with
|
|
42
|
+
`subagent_type: "oat-phase-implementer"` and
|
|
43
|
+
`subagent_type: "oat-reviewer"`. Available → Tier 1.
|
|
44
|
+
- Cursor: use Cursor-native invocation. Available → Tier 1.
|
|
45
|
+
- Codex multi-agent: verify `[features] multi_agent = true` and whether
|
|
46
|
+
`spawn_agent` requires explicit authorization. Root→phase dispatch requires
|
|
47
|
+
depth 1 only; nested depth matters only when an optional child is actually
|
|
48
|
+
launched. Tier 1 dispatches must use self-contained scope packets and fresh
|
|
49
|
+
context; do not rely on forked full-thread context when pinning a
|
|
50
|
+
specialized OAT role.
|
|
37
51
|
- Available without auth → Tier 1.
|
|
38
|
-
- Available with auth required → fail closed.
|
|
52
|
+
- Available with auth required → fail closed. Ask the user once at skill
|
|
53
|
+
start before selecting Tier 2 or starting implementation work:
|
|
39
54
|
|
|
40
55
|
```
|
|
41
56
|
This OAT implementation skill normally delegates phase implementation and review to subagents. Authorize subagent delegation for this run?
|
|
@@ -43,23 +58,33 @@ Detection logic:
|
|
|
43
58
|
Yes authorizes both oat-phase-implementer and oat-reviewer across every phase in this run.
|
|
44
59
|
```
|
|
45
60
|
|
|
46
|
-
|
|
47
|
-
- Declined → Tier 2.
|
|
61
|
+
Approved → Tier 1. Declined → Tier 2.
|
|
48
62
|
|
|
49
63
|
- If the host does not resolve either generic agent, first attempt the exact
|
|
50
64
|
registered role natively for any concrete managed target. Use the explicitly
|
|
51
|
-
pinned fresh-child route only after a native role-selection rejection.
|
|
52
|
-
Tier 2 only when inline execution is allowed by the target-first rule
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
pinned fresh-child route only after a native role-selection rejection.
|
|
66
|
+
Select Tier 2 only when inline execution is allowed by the target-first rule
|
|
67
|
+
above.
|
|
68
|
+
|
|
69
|
+
**Approval scope rule:** this Tier selection applies to both phase
|
|
70
|
+
implementation and checkpoint review. Do not infer a mixed mode from
|
|
71
|
+
conversational emphasis on review checkpoints. If the user has not explicitly
|
|
72
|
+
approved Tier 1 for the run, stay Tier 2 throughout. Mixed mode is only valid
|
|
73
|
+
when the user explicitly requests it.
|
|
74
|
+
|
|
75
|
+
**Codex fail-closed rule:** after this skill is invoked, "user did not
|
|
76
|
+
separately ask for subagents" is not a valid Tier 2 reason. If Codex can spawn
|
|
77
|
+
agents but requires explicit user authorization, the implementation MUST NOT
|
|
78
|
+
continue until the delegation question above is answered. Tier 2 is allowed
|
|
79
|
+
only when:
|
|
57
80
|
|
|
58
81
|
- `user declined delegation`
|
|
59
82
|
- `spawn_agent unavailable`
|
|
60
83
|
- `required agent role unresolved`
|
|
61
84
|
|
|
62
|
-
|
|
85
|
+
**Hard pre-work guard:** report the selected tier before any code edit, test
|
|
86
|
+
run, or implementation commit. If Tier 2 is selected, the reason must be one
|
|
87
|
+
of the three allowed Tier 2 reasons above:
|
|
63
88
|
|
|
64
89
|
```
|
|
65
90
|
[preflight] Checking subagent availability…
|
|
@@ -68,44 +93,41 @@ Report the selected tier to the user:
|
|
|
68
93
|
→ Reason: {authorized | available without auth | user declined delegation | spawn_agent unavailable | required agent role unresolved}
|
|
69
94
|
```
|
|
70
95
|
|
|
71
|
-
Do not print `[0/N]` for this preflight step. The implementation denominator
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
**Tier is locked for the remainder of the run only after the
|
|
76
|
-
resolved
|
|
77
|
-
and review dispatches use the same tier. Tier controls
|
|
78
|
-
managed phase implementer resolves one exact target
|
|
79
|
-
project or phase named maximum. No mid-run downgrade is
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
Do not print `[0/N]` for this preflight step. The implementation denominator
|
|
97
|
+
is not established by capability detection; use the literal `[preflight]`
|
|
98
|
+
label above.
|
|
99
|
+
|
|
100
|
+
**Tier lock:** tier is locked for the remainder of the run only after the
|
|
101
|
+
dispatch target is resolved. Subsequent phase-implementer, optional nested,
|
|
102
|
+
fix-continuation, and review dispatches use the same tier. Tier controls
|
|
103
|
+
mechanics only: every managed phase implementer resolves one exact target
|
|
104
|
+
beneath the recorded project or phase named maximum. No mid-run downgrade is
|
|
105
|
+
allowed.
|
|
106
|
+
|
|
107
|
+
**Recovery if Step 0.5 was skipped:** if implementation work has already
|
|
108
|
+
started inline before completing Step 0.5, STOP immediately. Preserve any work
|
|
109
|
+
in progress, complete or revert to a clean task boundary, and re-run Step 0.5
|
|
110
|
+
before continuing. Do not silently continue in Tier 2.
|
|
111
|
+
|
|
112
|
+
**Native role-selection rejection:** the native host explicitly reports that
|
|
113
|
+
the requested `agent_type` is unsupported, unknown, unregistered, or rejected
|
|
114
|
+
before the child or agent starts. Missing runtime telemetry, missing agent
|
|
115
|
+
self-report, a timeout after spawn acceptance, or any terminal result from an
|
|
116
|
+
accepted child — including `BLOCKED` — is not role unavailability and is not a
|
|
117
|
+
native role-selection rejection. If an accepted native reviewer remains
|
|
118
|
+
active, poll, nudge, or continue only through its existing handle; a
|
|
119
|
+
terminal timeout records review failure and stops or escalates
|
|
120
|
+
without another launch.
|
|
121
|
+
Accepted-launch terminality and recovery semantics are owned by the shared
|
|
122
|
+
dispatch engine. A new launch is eligible only when the original attempt
|
|
123
|
+
received explicit pre-start rejection before any child started. Self-report is
|
|
99
124
|
optional diagnostic data and cannot populate or overwrite launcher-owned
|
|
100
|
-
`target`, `model_axis`, or `effort_axis` fields.
|
|
101
|
-
trigger a fresh pinned-child, CLI fallback, or second launch on the same route.
|
|
102
|
-
If an accepted native reviewer remains active, poll, nudge, or continue only
|
|
103
|
-
through its existing handle. A terminal timeout records review failure and
|
|
104
|
-
stops or escalates without another launch. A new launch is eligible only when
|
|
105
|
-
the original attempt received explicit pre-start rejection before any child
|
|
106
|
-
started.
|
|
125
|
+
`target`, `model_axis`, or `effort_axis` fields.
|
|
107
126
|
|
|
108
|
-
**Legacy state migration:**
|
|
127
|
+
**Legacy state migration:** if `state.md` contains
|
|
128
|
+
`oat_execution_mode: subagent-driven`, silently ignore it and remove the key
|
|
129
|
+
on the next bookkeeping write. Do not redirect to
|
|
130
|
+
`oat-project-subagent-implement` — that skill is deprecated.
|
|
109
131
|
|
|
110
132
|
### Dispatch Policy Preflight
|
|
111
133
|
|
|
@@ -120,11 +142,8 @@ policy:
|
|
|
120
142
|
oat project dispatch-ceiling resolve --provider <active-provider> --preflight --report-scope implementation-preflight --report-action implementation --json
|
|
121
143
|
```
|
|
122
144
|
|
|
123
|
-
If `oat` is not in PATH,
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
pnpm run cli -- project dispatch-ceiling resolve --provider <active-provider> --preflight --report-scope implementation-preflight --report-action implementation --json
|
|
127
|
-
```
|
|
145
|
+
If `oat` is not in PATH, run the same command through
|
|
146
|
+
`pnpm run cli -- project dispatch-ceiling resolve …` with identical flags.
|
|
128
147
|
|
|
129
148
|
Resolution order:
|
|
130
149
|
|
|
@@ -135,48 +154,15 @@ Resolution order:
|
|
|
135
154
|
5. Interactive implementation preflight prompt (below)
|
|
136
155
|
6. Non-interactive unresolved: block before work starts
|
|
137
156
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
"value": "high",
|
|
145
|
-
"policyMode": "managed",
|
|
146
|
-
"policy": "balanced",
|
|
147
|
-
"source": "project-state",
|
|
148
|
-
"preset": "balanced",
|
|
149
|
-
"unresolved": false,
|
|
150
|
-
"providerDefaultEffort": "medium",
|
|
151
|
-
"providers": {
|
|
152
|
-
"codex": {
|
|
153
|
-
"value": "high",
|
|
154
|
-
"mode": "enforced",
|
|
155
|
-
"mechanism": "pinned-variant",
|
|
156
|
-
"dispatchArgs": {
|
|
157
|
-
"variant": "oat-phase-implementer-gpt-5-6-terra-high"
|
|
158
|
-
},
|
|
159
|
-
"verifyOnDispatch": false,
|
|
160
|
-
"selection": {
|
|
161
|
-
"role": "implementer",
|
|
162
|
-
"preferredValue": null,
|
|
163
|
-
"selectedValue": "high",
|
|
164
|
-
"capped": false,
|
|
165
|
-
"selectionMode": "capped",
|
|
166
|
-
"policyMode": "managed",
|
|
167
|
-
"policy": "balanced"
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Read `providers.<active-provider>` for the concrete dispatch controls. The
|
|
175
|
-
`dispatchArgs` field carries the provider-specific argument to pass through
|
|
176
|
-
(Codex: `variant` name; Claude: `model` string). For implementer/fix dispatch,
|
|
157
|
+
Read `providers.<active-provider>` from the `--json` response for the concrete
|
|
158
|
+
dispatch controls. `dispatchArgs` carries the provider-specific argument to
|
|
159
|
+
pass through (Codex: `variant` name; Claude: `model` string; Cursor: opaque
|
|
160
|
+
`model` string). `selection` carries `role`, `selectedValue`, `capped`,
|
|
161
|
+
`selectionMode`, and policy fields; `selection.target` and an optional
|
|
162
|
+
`providers.<provider>.target` carry route data. For implementer/fix dispatch,
|
|
177
163
|
pass `--preferred <preferred-effort>` and use `selection.selectedValue` as the
|
|
178
164
|
selected axis value when it is present. Never re-derive these from the policy
|
|
179
|
-
label or a ceiling-only variant
|
|
165
|
+
label or a ceiling-only variant — the resolver is the single compilation/join
|
|
180
166
|
point.
|
|
181
167
|
|
|
182
168
|
Print before phase work:
|
|
@@ -190,20 +176,19 @@ Note: OAT will use resolver-returned materialized Codex role names up to high. B
|
|
|
190
176
|
```
|
|
191
177
|
|
|
192
178
|
If no policy resolves and the session is interactive, present the dispatch
|
|
193
|
-
policy prompt once before starting work
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
canonical CLI metadata immediately before presenting it:
|
|
179
|
+
policy prompt once before starting work. Print the unresolved-policy heading,
|
|
180
|
+
then generate the choice text from canonical CLI metadata immediately before
|
|
181
|
+
presenting it:
|
|
197
182
|
|
|
198
183
|
```bash
|
|
199
184
|
oat project dispatch-ceiling choices --format markdown
|
|
200
185
|
```
|
|
201
186
|
|
|
202
|
-
Do not hand-type the dispatch policy menu or omit canonical choices. If the
|
|
203
|
-
is unavailable in this environment, derive the same labels and
|
|
204
|
-
`packages/cli/src/config/dispatch-policy-options.ts`;
|
|
205
|
-
policy returned by `VALID_MANAGED_DISPATCH_POLICIES`
|
|
206
|
-
Host Defaults`, and `Leave Unresolved`.
|
|
187
|
+
Do not hand-type the dispatch policy menu or omit canonical choices. If the
|
|
188
|
+
CLI is unavailable in this environment, derive the same labels and
|
|
189
|
+
descriptions from `packages/cli/src/config/dispatch-policy-options.ts`;
|
|
190
|
+
include every managed policy returned by `VALID_MANAGED_DISPATCH_POLICIES`
|
|
191
|
+
plus `Uncapped`, `Inherit Host Defaults`, and `Leave Unresolved`.
|
|
207
192
|
|
|
208
193
|
At minimum, preserve these semantics in any fallback text:
|
|
209
194
|
|
|
@@ -213,8 +198,8 @@ At minimum, preserve these semantics in any fallback text:
|
|
|
213
198
|
- `Inherit Host Defaults`: OAT does not choose model or effort controls; the
|
|
214
199
|
executing host/provider owns implementation, fix, and review defaults.
|
|
215
200
|
- `Leave Unresolved`: planning/preflight deferral only. It records no runtime
|
|
216
|
-
policy and is not a runnable implementation setting.
|
|
217
|
-
must block until a policy resolves.
|
|
201
|
+
policy and is not a runnable implementation setting.
|
|
202
|
+
Implementation preflight must block until a policy resolves.
|
|
218
203
|
|
|
219
204
|
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
220
205
|
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
@@ -225,19 +210,6 @@ maximum `policy`, and `source`. The named maximum leaves lower configured
|
|
|
225
210
|
candidates eligible; do not copy compiled provider/model targets into project
|
|
226
211
|
state. On selection, print the named maximum before proceeding.
|
|
227
212
|
|
|
228
|
-
**Uncapped** persists explicit managed uncapped state. OAT still manages
|
|
229
|
-
dispatch selection. It does not write provider caps, and it must not be
|
|
230
|
-
represented by leaving dispatch policy state absent.
|
|
231
|
-
|
|
232
|
-
**Inherit Host Defaults** persists explicit inherit/default state. Use this only
|
|
233
|
-
when the user wants OAT to leave implementation, fix, and review model/effort
|
|
234
|
-
controls to the executing host/provider. OAT does not choose model or effort in
|
|
235
|
-
this mode.
|
|
236
|
-
|
|
237
|
-
**Leave Unresolved** records no runtime policy for implementation. Stop before
|
|
238
|
-
phase work and report the unresolved state; Implementation preflight must block
|
|
239
|
-
until a policy resolves.
|
|
240
|
-
|
|
241
213
|
Persist in project `state.md` frontmatter using the normalized shape:
|
|
242
214
|
|
|
243
215
|
```yaml
|
|
@@ -247,31 +219,17 @@ oat_dispatch_policy:
|
|
|
247
219
|
source: project-state
|
|
248
220
|
```
|
|
249
221
|
|
|
250
|
-
For `Uncapped
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
source: project-state
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
For `Inherit Host Defaults`:
|
|
260
|
-
|
|
261
|
-
```yaml
|
|
262
|
-
oat_dispatch_policy:
|
|
263
|
-
mode: inherit
|
|
264
|
-
source: project-state
|
|
265
|
-
```
|
|
222
|
+
For `Uncapped`, persist `policy: uncapped` in the same shape — OAT still
|
|
223
|
+
manages dispatch selection with no stored cap; never represent uncapped by
|
|
224
|
+
leaving policy state absent. For `Inherit Host Defaults`, persist
|
|
225
|
+
`mode: inherit` with `source` and no `policy` key — OAT does not choose model
|
|
226
|
+
or effort in this mode. `Leave Unresolved` records no runtime policy: stop
|
|
227
|
+
before phase work and report the unresolved state.
|
|
266
228
|
|
|
267
229
|
If no policy resolves and `OAT_NON_INTERACTIVE=1` or no user-response channel
|
|
268
|
-
exists, rerun the resolver with non-interactive
|
|
230
|
+
exists, rerun the resolver with `--non-interactive` and stop before work
|
|
269
231
|
starts if it blocks:
|
|
270
232
|
|
|
271
|
-
```bash
|
|
272
|
-
oat project dispatch-ceiling resolve --provider <active-provider> --preflight --non-interactive --report-scope implementation-preflight --report-action implementation
|
|
273
|
-
```
|
|
274
|
-
|
|
275
233
|
```text
|
|
276
234
|
BLOCKED: Codex dispatch policy is unresolved in non-interactive mode.
|
|
277
235
|
Set workflow.dispatchPolicy.mode/workflow.dispatchPolicy.policy, workflow.dispatchCeiling.providers.codex, oat_dispatch_policy, or legacy oat_dispatch_ceiling.
|
|
@@ -286,16 +244,13 @@ Before each phase-implementer, optional nested, fix-continuation, or review
|
|
|
286
244
|
dispatch, choose and log runtime controls. Resolve these controls before
|
|
287
245
|
applying Tier 1/Tier 2 mechanics. A phase target applies to the phase
|
|
288
246
|
implementer, which directly owns its planned tasks. Optional children resolve
|
|
289
|
-
their own exact bounded target beneath the phase ceiling. Inline execution
|
|
290
|
-
preserve equivalent controls or use a documented exception.
|
|
291
|
-
|
|
292
|
-
Use these inputs:
|
|
247
|
+
their own exact bounded target beneath the phase ceiling. Inline execution
|
|
248
|
+
must preserve equivalent controls or use a documented exception.
|
|
293
249
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
- prior outcomes for the phase, including review results and failed retries
|
|
250
|
+
Inputs: the resolved dispatch policy, source, and provider-specific
|
|
251
|
+
selection; the phase ID and current bounded phase or optional-child scope; any
|
|
252
|
+
`## Dispatch Profile` row in `plan.md`; host-exposed provider controls by
|
|
253
|
+
axis; and prior phase outcomes, including review results and failed retries.
|
|
299
254
|
|
|
300
255
|
Route selection is part of runtime dispatch selection when the resolver returns
|
|
301
256
|
an ordered matrix route:
|
|
@@ -351,22 +306,18 @@ Axis states:
|
|
|
351
306
|
|
|
352
307
|
Codex rules:
|
|
353
308
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
`
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
launch a fresh Codex child with the resolver target's explicit
|
|
361
|
-
effort, and canonical role instructions
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
or hot reload. A managed base role is forbidden when a concrete target was
|
|
367
|
-
requested; never silently downgrade to it. Base roles remain valid only for
|
|
368
|
-
explicit inherit/default behavior and the documented managed-uncapped reviewer
|
|
369
|
-
fallback.
|
|
309
|
+
The Step 0.5 target-first order is the managed Codex execution invariant:
|
|
310
|
+
send the resolver-returned variant first through the native spawn API as
|
|
311
|
+
native `agent_type` — spawn acceptance plus the constructed launcher payload
|
|
312
|
+
is configured invocation evidence with launcher-selected/config-declared
|
|
313
|
+
provenance, without independent runtime telemetry or agent self-report.
|
|
314
|
+
If and only if the host returns a native role-selection rejection,
|
|
315
|
+
launch a fresh Codex child with the resolver target's explicit
|
|
316
|
+
model, reasoning effort, and canonical role instructions; otherwise fail
|
|
317
|
+
closed and block. Missing runtime telemetry or agent self-report is not role
|
|
318
|
+
unavailability, and an accepted child result such as `BLOCKED` cannot trigger
|
|
319
|
+
fallback. A managed base role is forbidden when a concrete target was
|
|
320
|
+
requested; never silently downgrade to it.
|
|
370
321
|
|
|
371
322
|
1. Codex effort order is `low < medium < high < xhigh < max`.
|
|
372
323
|
2. Classify preferred effort from scope:
|
|
@@ -390,7 +341,15 @@ fallback.
|
|
|
390
341
|
- Capped managed policy: reviewer targets the configured cap for deterministic quality gate behavior.
|
|
391
342
|
- Managed `Uncapped`: no reviewer target exists; use base/unpinned reviewer fallback and log `selectionMode=no-review-target`, `selectedValue=null`, and `effort_axis=provider-default`.
|
|
392
343
|
- Inherit/default: no reviewer target exists; use base/unpinned reviewer fallback and log `selectionMode=inherit-default`, `selectedValue=null`, and `effort_axis=provider-default`.
|
|
393
|
-
8.
|
|
344
|
+
8. When `providers.codex.dispatchArgs.variant` is present, the actual
|
|
345
|
+
`spawn_agent` payload MUST first use it as native `agent_type`; when that
|
|
346
|
+
variant came from a Codex model+effort target, log
|
|
347
|
+
`model_axis=selected:<model>` and `effort_axis=selected:<effort>` from
|
|
348
|
+
resolver output and the constructed launcher payload. Materialized
|
|
349
|
+
model+effort variants retain selected controls while keeping runtime
|
|
350
|
+
identity not-reported unless independent evidence exists. Always
|
|
351
|
+
derive `model_axis` and `effort_axis` from resolver output, not from
|
|
352
|
+
legacy role-name parsing or agent self-report.
|
|
394
353
|
9. Do not use top-level per-call `reasoning_effort` as the standard OAT selected-effort path; dogfooding showed that path can be inconsistent.
|
|
395
354
|
|
|
396
355
|
Claude rules:
|
|
@@ -447,9 +406,7 @@ Payload-first invariant:
|
|
|
447
406
|
`Dispatch: scope=<phase-or-task> action=<implementation|fix|review> role=<implementer|fix|reviewer> producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>`.
|
|
448
407
|
Populate the report from the completed resolver and actual host arguments.
|
|
449
408
|
Only independently observed or otherwise supported runtime evidence may
|
|
450
|
-
populate runtime producer identity.
|
|
451
|
-
retain selected model/effort controls while keeping runtime identity
|
|
452
|
-
not-reported unless evidence exists. Do not write prose-only, hand-built, or
|
|
409
|
+
populate runtime producer identity. Do not write prose-only, hand-built, or
|
|
453
410
|
legacy comma-separated stamp forms.
|
|
454
411
|
|
|
455
412
|
Human-facing dispatch display rules:
|
|
@@ -459,14 +416,11 @@ Human-facing dispatch display rules:
|
|
|
459
416
|
audit fields for the formal stamp, not the primary status. Put unknown
|
|
460
417
|
producer/provenance only in `Dispatch stamp:` or in a low-priority note after
|
|
461
418
|
the route and runtime confirmation.
|
|
462
|
-
- Separate requested controls from configured defaults
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
can declare a target before the host has confirmed it; an observed mismatch
|
|
468
|
-
must be called out as `Runtime confirmation: mismatch:<detail>` and handled as
|
|
469
|
-
an orchestration deviation.
|
|
419
|
+
- Separate requested controls from configured defaults, and configured
|
|
420
|
+
policy/cap from runtime confirmation. A resolver payload can declare a
|
|
421
|
+
target before the host has confirmed it; an observed mismatch must be called
|
|
422
|
+
out as `Runtime confirmation: mismatch:<detail>` and handled as an
|
|
423
|
+
orchestration deviation.
|
|
470
424
|
- Keep the `Dispatch stamp: Dispatch: ...` line parseable and grammar-stable.
|
|
471
425
|
Do not move display-only prose into the formal stamp.
|
|
472
426
|
|
|
@@ -494,121 +448,18 @@ Dispatch stamp: Dispatch: scope=<phase-or-task> action=<implementation|fix|revie
|
|
|
494
448
|
Rationale: {short rationale grounded in phase scope and any policy cap/uncapped/default behavior}
|
|
495
449
|
```
|
|
496
450
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
Route: codex/implementer/gpt-5.6-sol/medium; level=0
|
|
503
|
-
Requested controls: model=gpt-5.6-sol, effort=medium, target=oat-phase-implementer-gpt-5-6-sol-medium
|
|
504
|
-
Configured defaults: provider default effort=high
|
|
505
|
-
Runtime confirmation: declared:gpt-5.6-sol/medium
|
|
506
|
-
Preferred effort: high
|
|
507
|
-
OAT Dispatch Tier: economy
|
|
508
|
-
Resolved cap: medium
|
|
509
|
-
Selected effort: medium
|
|
510
|
-
Policy source: repo config
|
|
511
|
-
Provider default effort: high
|
|
512
|
-
Selection mode: capped
|
|
513
|
-
Model axis: selected:gpt-5.6-sol
|
|
514
|
-
Effort axis: selected:medium
|
|
515
|
-
Dispatch target: oat-phase-implementer-gpt-5-6-sol-medium
|
|
516
|
-
Rationale: normal multi-file implementation; high preferred due to integration risk, capped by configured policy.
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
Codex uncapped implementer example:
|
|
520
|
-
|
|
521
|
-
```text
|
|
522
|
-
OAT Dispatch: Phase p02 implementation
|
|
523
|
-
Host: Codex
|
|
524
|
-
Route: codex/implementer/gpt-5.6-terra/xhigh; level=0
|
|
525
|
-
Requested controls: model=gpt-5.6-terra, effort=xhigh, target=oat-phase-implementer-gpt-5-6-terra-xhigh
|
|
526
|
-
Configured defaults: provider default effort=medium
|
|
527
|
-
Runtime confirmation: declared:gpt-5.6-terra/xhigh
|
|
528
|
-
Preferred effort: xhigh
|
|
529
|
-
OAT Dispatch Tier: uncapped
|
|
530
|
-
Resolved cap: none
|
|
531
|
-
Selected effort: xhigh
|
|
532
|
-
Policy source: project state
|
|
533
|
-
Provider default effort: medium
|
|
534
|
-
Selection mode: uncapped
|
|
535
|
-
Model axis: selected:gpt-5.6-terra
|
|
536
|
-
Effort axis: selected:xhigh
|
|
537
|
-
Dispatch target: oat-phase-implementer-gpt-5-6-terra-xhigh
|
|
538
|
-
Rationale: high-risk phase; managed uncapped policy allows the preferred pinned variant. Actual host support for upward effort selection must be verified by the dispatching host.
|
|
539
|
-
```
|
|
540
|
-
|
|
541
|
-
Codex capped reviewer example:
|
|
542
|
-
|
|
543
|
-
```text
|
|
544
|
-
OAT Dispatch: Phase p02 review
|
|
545
|
-
Host: Codex
|
|
546
|
-
Route: codex/reviewer/gpt-5.6-terra/xhigh; level=0
|
|
547
|
-
Requested controls: model=gpt-5.6-terra, effort=xhigh, target=oat-reviewer-gpt-5-6-terra-xhigh
|
|
548
|
-
Configured defaults: provider default effort=medium
|
|
549
|
-
Runtime confirmation: declared:gpt-5.6-terra/xhigh
|
|
550
|
-
Preferred effort: high
|
|
551
|
-
OAT Dispatch Tier: high
|
|
552
|
-
Resolved cap: xhigh
|
|
553
|
-
Selected effort: xhigh
|
|
554
|
-
Policy source: project state
|
|
555
|
-
Provider default effort: medium
|
|
556
|
-
Selection mode: review-target
|
|
557
|
-
Model axis: selected:gpt-5.6-terra
|
|
558
|
-
Effort axis: selected:xhigh
|
|
559
|
-
Dispatch target: oat-reviewer-gpt-5-6-terra-xhigh
|
|
560
|
-
Rationale: reviewer runs at the configured policy cap for deterministic quality gate behavior.
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
Codex inherit/default fallback example:
|
|
564
|
-
|
|
565
|
-
```text
|
|
566
|
-
OAT Dispatch: Phase p02 review
|
|
567
|
-
Host: Codex
|
|
568
|
-
Route: none; level=none
|
|
569
|
-
Requested controls: model=none, effort=provider-default, target=oat-reviewer
|
|
570
|
-
Configured defaults: provider default effort=medium
|
|
571
|
-
Runtime confirmation: not-observable
|
|
572
|
-
Preferred effort: provider-default
|
|
573
|
-
OAT Dispatch Tier: inherit host defaults
|
|
574
|
-
Resolved cap: none
|
|
575
|
-
Selected effort: provider-default
|
|
576
|
-
Policy source: project state
|
|
577
|
-
Provider default effort: medium
|
|
578
|
-
Selection mode: inherit-default
|
|
579
|
-
Model axis: inherited
|
|
580
|
-
Effort axis: provider-default
|
|
581
|
-
Dispatch target: oat-reviewer
|
|
582
|
-
Rationale: explicit inherit/default policy; base unpinned role follows Codex provider default.
|
|
583
|
-
```
|
|
584
|
-
|
|
585
|
-
Generic sidecar/explorer dispatch:
|
|
451
|
+
For an explicit inherit/default fallback (for example a base `oat-reviewer`
|
|
452
|
+
under inherit policy), the log reads `Route: none; level=none`,
|
|
453
|
+
`Runtime confirmation: not-observable`, `Selection mode: inherit-default`,
|
|
454
|
+
`Model axis: inherited`, and `Effort axis: provider-default`, with requested
|
|
455
|
+
controls empty and the provider default effort shown as a separate fact.
|
|
586
456
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
```text
|
|
595
|
-
OAT Dispatch: p02-t10 sidecar exploration
|
|
596
|
-
Host: Codex
|
|
597
|
-
Route: sidecar/explorer; level=none
|
|
598
|
-
Requested controls: model=none, effort=provider-default, target=explorer
|
|
599
|
-
Configured defaults: provider default effort=xhigh
|
|
600
|
-
Runtime confirmation: not-observable
|
|
601
|
-
Preferred effort: provider-default
|
|
602
|
-
OAT Dispatch Tier: high
|
|
603
|
-
Resolved cap: xhigh
|
|
604
|
-
Selected effort: provider-default
|
|
605
|
-
Policy source: project state
|
|
606
|
-
Provider default effort: xhigh
|
|
607
|
-
Model axis: inherited
|
|
608
|
-
Effort axis: provider-default
|
|
609
|
-
Dispatch target: explorer
|
|
610
|
-
Rationale: read-only sidecar exploration; generic explorer payload does not pin an OAT-managed effort variant.
|
|
611
|
-
```
|
|
457
|
+
Generic sidecar/explorer dispatch: built-in sidecars such as `explorer` are
|
|
458
|
+
not OAT-managed implementer, reviewer, or fix roles, and their outputs are
|
|
459
|
+
advisory context only. Unless the actual spawn payload pins a reliable
|
|
460
|
+
effort/model control, log `Preferred effort: provider-default`,
|
|
461
|
+
`Selected effort: provider-default`, and `Effort axis: provider-default` —
|
|
462
|
+
never a classified effort level the host invocation does not contain.
|
|
612
463
|
|
|
613
464
|
Include resolved dispatch context in scope packets when known:
|
|
614
465
|
|
|
@@ -650,12 +501,8 @@ Dispatch policy: {policy}; selected={selected value | none}; cap={value | none}
|
|
|
650
501
|
|
|
651
502
|
```text
|
|
652
503
|
Dispatch policy: balanced; selected=xhigh; cap=xhigh (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-xhigh)
|
|
653
|
-
Dispatch policy: high; selected=high; cap=high (codex, enforced — variant oat-reviewer-gpt-5-6-sol-high)
|
|
654
|
-
Dispatch policy: frontier; selected=max; cap=max (codex, enforced — variant oat-reviewer-gpt-5-6-sol-max)
|
|
655
|
-
Dispatch policy: uncapped; selected=xhigh; cap=none (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-xhigh)
|
|
656
504
|
Dispatch policy: inherit host defaults; selected=none; cap=none (codex, advisory — base role follows provider default)
|
|
657
505
|
Dispatch policy: balanced; selected=sonnet; cap=sonnet (claude, enforced — Task model arg)
|
|
658
|
-
Dispatch policy: frontier; selected=fable; cap=fable (claude, enforced — Task model arg)
|
|
659
506
|
Cursor opaque model-string example: Dispatch policy: frontier; selected=gpt-5.6-sol-max; cap=gpt-5.6-sol-max (cursor, enforced — model arg gpt-5.6-sol-max)
|
|
660
507
|
Dispatch policy: unresolved; selected=none; cap=none (codex, advisory — policy set but no value resolved)
|
|
661
508
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.60",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.1.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.1.60"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|