@open-agent-toolkit/cli 0.1.1 → 0.1.2

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-phase-implementer
3
- version: 1.0.0
3
+ version: 1.0.1
4
4
  description: Implements a single plan phase end-to-end — reads artifacts once, executes tasks sequentially, commits per task, self-reviews, and returns a structured summary. Dispatched by oat-project-implement.
5
5
  tools: Read, Write, Edit, Bash, Grep, Glob
6
6
  color: cyan
@@ -33,6 +33,11 @@ You will be given a "Phase Scope" block including:
33
33
  - **artifact_paths**: Paths to `plan.md`, `design.md`, `spec.md`, `implementation.md`, `discovery.md` (whichever exist for the project's mode)
34
34
  - **commit_convention**: Commit message format from plan.md (e.g., `feat({scope}): {description}`)
35
35
  - **workflow_mode**: `spec-driven` | `quick` | `import` (default `spec-driven`)
36
+ - **model_axis**: Optional model dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
37
+ - **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
38
+ - **dispatch_rationale**: Optional short rationale for the model/effort axis choices
39
+
40
+ The `model_axis` and `effort_axis` fields describe the dispatch state the orchestrator already chose; they are descriptive context for your report, not actions for you to take. Echo whatever values were provided in your summary under `Model axis` / `Effort axis`. If neither field is in your scope packet, report both as "not provided."
36
41
 
37
42
  If `mode: fix`, the block also includes:
38
43
 
@@ -77,6 +82,8 @@ For each task in the phase, in the order declared in plan.md:
77
82
  3. Run the task's verification commands. Record pass/fail.
78
83
  4. Commit using the plan's commit convention. Include only files the task declared.
79
84
 
85
+ Track your implementation confidence as `high`, `medium`, or `low` throughout the phase. If you are blocked because the work needs more reasoning or provider capability than the current dispatch appears to provide, say that explicitly in the report, include the current dispatch control when known, and do not keep retrying at the same capability as if the issue were missing context.
86
+
80
87
  **Do not:**
81
88
 
82
89
  - Skip tasks or reorder them.
@@ -116,6 +123,9 @@ Report format:
116
123
  **Phase:** {phase-id}
117
124
  **Tasks executed:** {N} of {N}
118
125
  **Commits:** {sha1}..{shaN}
126
+ **Confidence:** high | medium | low
127
+ **Model axis:** {model_axis if provided, otherwise "not provided"}
128
+ **Effort axis:** {effort_axis if provided, otherwise "not provided"}
119
129
 
120
130
  ### Task Outcomes
121
131
 
@@ -179,6 +189,9 @@ If a fix introduces a regression or doesn't address its finding, either re-fix w
179
189
  **Phase:** {phase-id}
180
190
  **Findings addressed:** {N} critical, {N} important
181
191
  **Commits:** {sha1}..{shaN}
192
+ **Confidence:** high | medium | low
193
+ **Model axis:** {model_axis if provided, otherwise "not provided"}
194
+ **Effort axis:** {effort_axis if provided, otherwise "not provided"}
182
195
 
183
196
  ### Fix Outcomes
184
197
 
@@ -44,6 +44,13 @@ You will be given a "Review Scope" block including:
44
44
  - **workflow_mode**: `spec-driven` | `quick` | `import` (default to `spec-driven` if absent)
45
45
  - **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
46
46
  - **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
47
+ - **model_axis**: Optional model dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
48
+ - **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
49
+ - **dispatch_rationale**: Optional short rationale for the model/effort axis choices
50
+
51
+ ## Dispatch Control
52
+
53
+ Reviews, re-reviews, and review-fix evaluation inherit the parent session's model and effort axes unless the user explicitly requested a review override. In Codex, the orchestrator should omit `model` and `reasoning_effort` overrides when spawning this reviewer; in Claude Code, it should not pass a per-review model override. The review scope should record `model_axis=inherited` and `effort_axis=inherited` on hosts that expose an effort axis (such as Codex), or `effort_axis=not-applicable` on hosts that do not (such as Claude Code). Do not read `plan.md` Dispatch Profile rows to self-select a tier; the orchestrator owns dispatch control.
47
54
 
48
55
  ## Mode Contract
49
56
 
@@ -59,6 +59,12 @@ For rules, adoption maps provider-native files back into `.agents/rules/*.md`:
59
59
 
60
60
  After adoption, `oat sync` regenerates the managed provider copies from the canonical rule file.
61
61
 
62
+ ### Generated provider roles
63
+
64
+ Some Codex roles are **generated-derived** — produced by the Codex sync extension rather than mapped 1:1 from a canonical `.agents/agents/*.md` file. The effort-specific implementer variants (`oat-phase-implementer-low`, `oat-phase-implementer-medium`, `oat-phase-implementer-high`) are the current example.
65
+
66
+ `oat status` and `oat init` treat any role listed in the Codex extension plan's `managedRoles` set as managed, so generated variants are **not** reported as `stray` and are **not** offered for adoption — even though they have no canonical `.agents` source. A genuinely orphaned Codex role (no canonical source and not in `managedRoles`) is still flagged.
67
+
62
68
  ## Reference artifacts
63
69
 
64
70
  - `.oat/projects/<scope>/<project>/spec.md` (FR2, FR3, FR6)
@@ -42,6 +42,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
42
42
  - `.codex/agents/<role>.toml`
43
43
  - `.codex/config.toml` (`[features] multi_agent = true`, `[agents.<role>]` upserts)
44
44
  - Codex role files include OAT managed provenance headers and are regenerated by `oat sync --scope project`
45
+ - The Codex sync extension also generates effort-specific implementer role variants — `oat-phase-implementer-low`, `oat-phase-implementer-medium`, `oat-phase-implementer-high`, each setting `model_reasoning_effort` — alongside the canonical-derived roles; the base `oat-phase-implementer` role represents inherited effort. These generated variants are managed by `oat sync` and are not treated as strays (see Manifest and Drift → Generated provider roles)
45
46
  - Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
46
47
  - User-scope Codex role generation (`~/.codex`) remains deferred
47
48
  - Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
@@ -46,7 +46,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
46
46
  - Project provider enablement is stored in `.oat/sync/config.json` (`providers.<name>.enabled`).
47
47
  - `oat init --scope project` (interactive) prompts for supported providers and persists explicit true/false values.
48
48
  - `oat sync --scope project` uses config-aware provider activation and can prompt to remediate detected mismatches.
49
- - Codex project-scope subagent sync is generated output (`.codex/agents/*.toml` + `.codex/config.toml`) computed at command layer after path-mapping sync.
49
+ - Codex project-scope subagent sync is generated output (`.codex/agents/*.toml` + `.codex/config.toml`) computed at command layer after path-mapping sync. Generated Codex roles — including the effort-specific implementer variants — are tracked as managed by `oat status` and `oat init`, not as strays.
50
50
  - Codex aggregate config drift is reported via sync/status extension metadata (`aggregateConfigHash`); it is not persisted as a separate manifest schema entry.
51
51
  - Codex user-scope role generation remains intentionally deferred in this release.
52
52
 
@@ -1,17 +1,18 @@
1
1
  ---
2
2
  title: Implementation Execution
3
- description: 'Phase-subagent dispatch, tier detection, bounded fix loop, plan-declared parallelism, and dry-run mode in oat-project-implement v2.0.'
3
+ description: 'Phase-subagent dispatch, tier detection, runtime dispatch selection, bounded fix loop, plan-declared parallelism, and dry-run mode in oat-project-implement v2.0.'
4
4
  ---
5
5
 
6
6
  # Implementation Execution
7
7
 
8
- This page covers how `oat-project-implement` actually runs a plan: tier selection, phase-level subagent dispatch, the review + fix loop, plan-declared parallelism with worktree fan-in, and dry-run.
8
+ This page covers how `oat-project-implement` actually runs a plan: tier selection, phase-level subagent dispatch, runtime dispatch selection, the review + fix loop, plan-declared parallelism with worktree fan-in, and dry-run.
9
9
 
10
10
  ## Quick Look
11
11
 
12
12
  - **When to use:** you have a plan ready and want to understand what happens during `oat-project-implement`.
13
13
  - **Unit of dispatch:** one phase at a time (not one task). A phase implementer executes all tasks in the phase, commits per task, and returns a single summary.
14
14
  - **Two tiers, one lock:** capability detection picks Tier 1 (native subagents) or Tier 2 (inline) at start. The tier is locked for the whole run — no mid-run downgrades.
15
+ - **Runtime dispatch:** each phase uses the lowest available model/effort/control that can confidently complete the work, unless `plan.md` includes an explicit Dispatch Profile override.
15
16
 
16
17
  ## Execution model
17
18
 
@@ -33,18 +34,80 @@ The selected tier is reported to the user and locked for the remainder of the ru
33
34
  → Selected: Tier 1 — Subagents
34
35
  ```
35
36
 
37
+ ### Runtime dispatch selection
38
+
39
+ Tier selection decides whether OAT uses native subagents or inline fallback. Runtime dispatch selection is separate: it decides which provider-specific model and effort controls to use for a specific phase when the host exposes those axes.
40
+
41
+ The default rule is conservative: use the lowest available model and/or effort that can confidently complete the phase. Escalate before dispatch when the phase is high-risk, broad, cross-cutting, or when retry evidence suggests the current control is underpowered.
42
+
43
+ The orchestrator considers, in order:
44
+
45
+ 1. A valid `## Dispatch Profile` override row in `plan.md`, if present and the host can honor it.
46
+ 2. The phase's files, risk, requirements, and recent review/fix-loop evidence.
47
+ 3. The host's actual control surface by axis.
48
+
49
+ Model and effort are separate axes. Each axis logs one of four states:
50
+
51
+ - `selected:<value>` — the host exposes the axis and the orchestrator chose a value.
52
+ - `inherited` — the host exposes the axis and the orchestrator deliberately defers to the parent session.
53
+ - `not-applicable` — this host/API has no meaningful per-dispatch concept for that axis.
54
+ - `host-auto` — exceptional; the host uses that axis internally but the orchestrator cannot read or pin it.
55
+
56
+ In Codex, the normal model choice is inherited unless the user requested a model override or the phase clearly requires one. Implementation dispatch maps selected `low`, `medium`, and `high` effort to configured Codex implementer roles (`oat-phase-implementer-low`, `oat-phase-implementer-medium`, and `oat-phase-implementer-high`) rather than relying on per-call effort overrides. The base `oat-phase-implementer` role represents inherited effort. `xhigh` is inherited-only: use it when the parent/orchestrator session is already xhigh, otherwise split/revise the phase or stop for user re-invocation instead of inventing an `xhigh` variant. In Claude Code, subagent model selection is a model axis when available; the separate effort axis is `not-applicable`.
57
+
58
+ Dispatch logs use a consistent structured block so provider behavior is comparable without flattening the model and effort axes:
59
+
60
+ ```text
61
+ OAT Dispatch: Phase p01 implementation
62
+ Host: Claude Code
63
+ Model axis: selected:sonnet
64
+ Effort axis: not-applicable
65
+ Dispatch target: oat-phase-implementer
66
+ Rationale: multi-file integration with mock wiring; sonnet is the lowest sufficient Claude model.
67
+
68
+ OAT Dispatch: Phase p02 implementation
69
+ Host: Codex
70
+ Model axis: inherited
71
+ Effort axis: selected:medium
72
+ Dispatch target: oat-phase-implementer-medium
73
+ Rationale: shared TypeScript/config substrate; medium is the lowest sufficient Codex effort.
74
+
75
+ OAT Dispatch: Phase p03 review
76
+ Host: Codex
77
+ Model axis: inherited
78
+ Effort axis: inherited
79
+ Dispatch target: oat-reviewer
80
+ Rationale: reviewer dispatches inherit parent controls by default.
81
+
82
+ OAT Dispatch: Phase p04 implementation
83
+ Host: Other
84
+ Model axis: host-auto
85
+ Effort axis: host-auto
86
+ Dispatch target: host default
87
+ Rationale: host does not expose readable or pinnable dispatch controls; rationale maps to standard effort.
88
+ ```
89
+
90
+ Phase scope packets include implementation `model_axis`, `effort_axis`, and `dispatch_rationale` when the orchestrator has resolved them. Review dispatches inherit the parent session controls unless the user explicitly requests a review override; their review scope should record `model_axis=inherited` and `effort_axis=inherited` on hosts that expose an effort axis (such as Codex), or `effort_axis=not-applicable` on hosts that do not (such as Claude Code).
91
+
92
+ ### Dispatch Profile overrides
93
+
94
+ `plan.md` should omit `## Dispatch Profile` by default. Missing dispatch rows are normal, because runtime selection has fresher phase context and host capability information at execution time.
95
+
96
+ Add Dispatch Profile rows only when the user has an explicit constraint or preference, such as "use high reasoning effort for the security implementation phase" or "keep documentation-only phases on the lowest tier." Override rows should include a rationale explaining why runtime selection should not decide on its own.
97
+
36
98
  ### Per-phase loop
37
99
 
38
100
  For each phase in the plan (whether sequential or inside a parallel group):
39
101
 
40
- 1. **Dispatch `oat-phase-implementer`** with a Phase Scope block (project path, phase id, artifact paths, commit convention, workflow mode).
41
- 2. **Receive the summary:** `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
102
+ 1. **Select runtime dispatch control** for the phase and log the chosen control plus rationale.
103
+ 2. **Dispatch the selected implementer role** with a Phase Scope block (project path, phase id, artifact paths, commit convention, workflow mode, and dispatch context when known). In Codex, `effort_axis=selected:low|medium|high` uses `oat-phase-implementer-low|medium|high`; inherited effort uses base `oat-phase-implementer`.
104
+ 3. **Receive the summary:** `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
42
105
  - `BLOCKED` stops the run and surfaces the blocker to the user.
43
- 3. **Dispatch `oat-reviewer`** with a Review Scope block (phase id, commit range, optional files-changed hint). The commit range is authoritative; the file list is only orientation metadata. In Codex, pass this as a self-contained packet and keep fresh context (`fork_context: false`) so the reviewer reads git/OAT artifacts directly instead of inheriting the orchestration thread. If the reviewer does not conclude on the first wait, poll once more, then send a concise "return now with current findings" nudge before falling back inline for that phase.
44
- 4. **Parse the verdict:** zero Critical + zero Important findings → `pass`; otherwise `fail`.
45
- 5. **On fail, run the bounded fix loop** (see below).
46
- 6. **Update artifacts** (`implementation.md`, `plan.md` review row, `state.md`) and make the mandatory bookkeeping commit.
47
- 7. **HiLL checkpoint** if the phase id is listed in `oat_plan_hill_phases`.
106
+ 4. **Dispatch `oat-reviewer`** with a Review Scope block (phase id, commit range, optional files-changed hint, and inherited review dispatch context). Review dispatches inherit the parent session's model and effort axes unless the user explicitly requested an override. The commit range is authoritative; the file list is only orientation metadata. In Codex, pass this as a self-contained packet with `fork_context: false`, use the base reviewer role without model or effort overrides, and record `model_axis=inherited, effort_axis=inherited` so the reviewer reads git/OAT artifacts directly instead of inheriting the orchestration thread. In Claude Code, do not pass a per-review model override and record `effort_axis=not-applicable` since Claude Code does not expose a per-dispatch effort axis. If the reviewer does not conclude on the first wait, poll once more, then send a concise "return now with current findings" nudge before falling back inline for that phase.
107
+ 5. **Parse the verdict:** zero Critical + zero Important findings → `pass`; otherwise `fail`.
108
+ 6. **On fail, run the bounded fix loop** (see below).
109
+ 7. **Update artifacts** (`implementation.md`, `plan.md` review row, `state.md`) and make the mandatory bookkeeping commit.
110
+ 8. **HiLL checkpoint** if the phase id is listed in `oat_plan_hill_phases`.
48
111
 
49
112
  ### Bounded fix loop
50
113
 
@@ -59,6 +122,15 @@ On a `fail` verdict:
59
122
 
60
123
  Tier is never silently downgraded. If a Tier 1 dispatch has a transient failure, the orchestrator retries exactly once; a second failure is treated the same as fix-loop exhaustion for that phase.
61
124
 
125
+ ### Escalation termini
126
+
127
+ When escalation re-dispatches at a stronger control, the ladder is provider-specific:
128
+
129
+ - **Codex:** `selected:low → selected:medium → selected:high`. `high` is the strongest selectable effort variant. Beyond `high`, dispatch uses `effort_axis=inherited` only when the parent session is already `xhigh`; otherwise escalation is exhausted — stop, split the phase, or have the user re-invoke at `xhigh`.
130
+ - **Claude Code:** `selected:haiku → selected:sonnet → selected:opus`. `opus` is directly selectable via the Task `model` parameter — there is no inherited-only restriction.
131
+
132
+ Escalation re-dispatches still count against the bounded retry budget; escalation changes the dispatch control, it does not grant extra retry attempts.
133
+
62
134
  ## Plan-declared parallelism
63
135
 
64
136
  Phases whose task file sets do not overlap may execute concurrently. Declare this in `plan.md` frontmatter:
@@ -149,7 +221,7 @@ First-ever invocations skip resumption detection.
149
221
 
150
222
  After each phase (or parallel group) completes, `oat-project-implement` updates:
151
223
 
152
- - `implementation.md` — appends a `### Run N` entry between the `<!-- orchestration-runs-start -->` markers with tier, policy, phase outcomes, parallel groups, and outstanding items.
224
+ - `implementation.md` — appends a `### Run N` entry between the `<!-- orchestration-runs-start -->` markers with tier, dispatch rationale, phase outcomes, parallel groups, and outstanding items.
153
225
  - `plan.md` — updates the reviews table lifecycle (`pending` → `passed` or `fixes_added` → `fixes_completed` → `passed`).
154
226
  - `state.md` — updates `oat_current_task`, `oat_last_commit`, `oat_project_state_updated`, and persists `oat_orchestration_retry_limit` if the user overrode the default.
155
227
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.1.1",
3
- "docs-config": "0.1.1",
4
- "docs-theme": "0.1.1",
5
- "docs-transforms": "0.1.1"
2
+ "cli": "0.1.2",
3
+ "docs-config": "0.1.2",
4
+ "docs-theme": "0.1.2",
5
+ "docs-transforms": "0.1.2"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-implement
3
- version: 2.0.7
3
+ version: 2.0.15
4
4
  description: Use when plan.md is ready for execution. Dispatches phase-level subagents with bounded fix loops; supports plan-declared parallel phase groups with worktree-isolated execution and ordered fan-in.
5
5
  argument-hint: '[--retry-limit <N>] [--dry-run]'
6
6
  disable-model-invocation: true
@@ -159,6 +159,129 @@ Forbidden: Selected: Tier 2 — Inline because the user did not separately menti
159
159
 
160
160
  **Legacy state migration:** If `state.md` contains `oat_execution_mode: subagent-driven`, silently ignore it. On the next bookkeeping write, remove that key. Do not redirect to `oat-project-subagent-implement` — that skill is deprecated.
161
161
 
162
+ ### Runtime dispatch selection
163
+
164
+ Before each phase implementation dispatch, choose and log the phase's runtime dispatch controls. This is separate from the Tier 1/Tier 2 execution mode above: Tier 1/Tier 2 decides whether OAT uses subagents or inline fallback; runtime dispatch selection decides the model and effort controls to use for the specific phase when the host exposes them.
165
+
166
+ Use these inputs:
167
+
168
+ - phase ID
169
+ - phase scope, including task count, file boundaries, verification commands, and integration risk
170
+ - optional `## Dispatch Profile` row in `plan.md`
171
+ - host-exposed provider controls, by axis
172
+ - prior outcomes for the phase, including review results and failed retries
173
+
174
+ Selection rule:
175
+
176
+ 1. If a valid Dispatch Profile override row applies and the host can honor it, use the requested provider control and log that the choice came from the override.
177
+ 2. If no override applies, choose the lowest available model and/or effort that can confidently complete the phase.
178
+ 3. Treat model and effort as separate axes. Each axis logs exactly one state:
179
+ - `selected:<value>` — host exposes the axis and the orchestrator chose a value.
180
+ - `inherited` — host exposes the axis and the orchestrator deliberately defers to the parent session.
181
+ - `not-applicable` — this host/API has no meaningful per-dispatch concept for that axis.
182
+ - `host-auto` — exceptional; the host uses that axis internally but the orchestrator cannot read or pin it.
183
+ 4. In Codex, the model axis normally logs `inherited`; choose `effort_axis=selected:low|medium|high` from phase complexity and dispatch the matching effort-specific implementer role. Use `effort_axis=inherited` for the base implementer role.
184
+ 5. In Claude Code, when subagent model selection is available, choose the lowest sufficient model on the model axis; the effort axis is `not-applicable` because Claude Code does not expose a separate `reasoning_effort` control for subagent dispatch.
185
+ 6. If a host uses model/effort internally but exposes neither axis to the orchestrator, log `model_axis=host-auto, effort_axis=host-auto` and include the rationale that would have informed selection.
186
+ 7. If confidence is low, choose a stronger available control before dispatch rather than knowingly underpowering the phase.
187
+
188
+ **Payload-first dispatch invariant.** Select dispatch controls, construct the actual host dispatch argument map, then print the dispatch log from that argument map. Do not emit an `OAT Dispatch:` block with a `Model axis: selected:<value>` or `Effort axis: selected:<value>` field until the corresponding host-tool selection is present in the argument map you are about to call. A selected axis that exists only in the Phase Scope text is invalid; if you cannot or will not pass the host-tool selection, log that axis as `inherited`, `not-applicable`, or `host-auto` instead of `selected:<value>`.
189
+
190
+ **Passing axis values to the host dispatch API.** The log shape and the actual dispatch call must agree: never log a `selected:<value>` axis without passing the corresponding parameter on the dispatch invocation, and never pass an explicit parameter that the log does not reflect.
191
+
192
+ - **Claude Code implementer/fix dispatch:** when `model_axis=selected:<value>`, pass `model: "<value>"` on the Task tool call. When `model_axis=inherited`, omit the `model` parameter so Claude Code uses its own default. `effort_axis=not-applicable` for both cases because the Task tool exposes no per-dispatch `reasoning_effort` control.
193
+ - **Codex implementer/fix dispatch:** when `effort_axis=selected:low|medium|high`, dispatch the matching configured role: `agent_type: "oat-phase-implementer-low"`, `agent_type: "oat-phase-implementer-medium"`, or `agent_type: "oat-phase-implementer-high"`. Those roles set `model_reasoning_effort` in `.codex/agents/*.toml`. Use the base `agent_type: "oat-phase-implementer"` only for `effort_axis=inherited`. Do not use top-level per-call `reasoning_effort` as the standard OAT selected-effort path; dogfooding showed that path can be inconsistent in some Codex runs.
194
+ - **Codex xhigh:** do not create or select an `xhigh` implementer variant. Use `xhigh` only when the parent/orchestrator session is already xhigh and therefore `effort_axis=inherited` on the base role is the correct representation. If a phase appears to require xhigh while the parent is not xhigh, choose `selected:high` only if high is sufficient; otherwise split/revise the phase or stop for user re-invocation at xhigh.
195
+ - **Claude Code `opus`:** unlike Codex `xhigh`, `opus` is directly selectable. Claude Code exposes `opus` through the Task tool's `model` parameter, so OAT may select it when available (`model_axis=selected:opus`) — including as a terminal escalation step. There is no `opus` inherited-only restriction; the `xhigh` rule above is specific to Codex's effort-variant mechanism, not a general "never select the maximum tier" rule.
196
+ - **Reviewer dispatch on either host:** use `model_axis=inherited` by default. For `effort_axis`: use `inherited` on hosts that expose an effort axis (such as Codex); use `not-applicable` on hosts that do not expose a meaningful effort axis (such as Claude Code). Omit `model` and, on Codex, `reasoning_effort` overrides entirely.
197
+
198
+ Codex selected-effort implementer/fix dispatch shape:
199
+
200
+ ```yaml
201
+ agent_type: oat-phase-implementer-low # or oat-phase-implementer-medium/high
202
+ message: |
203
+ Phase Scope:
204
+ model_axis: inherited
205
+ effort_axis: selected:low
206
+ ...
207
+ ```
208
+
209
+ Invalid Codex selected-effort dispatch shape:
210
+
211
+ ```yaml
212
+ agent_type: oat-phase-implementer
213
+ reasoning_effort: low
214
+ message: |
215
+ Phase Scope:
216
+ effort_axis: selected:low
217
+ ```
218
+
219
+ The invalid shape relies on per-call override behavior that has proven inconsistent during dogfooding. It also risks creating a log/dispatch mismatch if the override is ignored.
220
+
221
+ **Post-spawn verification gate.** After any Codex implementer/fix `spawn_agent` call with `effort_axis=selected:<value>`, immediately inspect the returned spawn status before waiting for work or updating the plan. If the status shows a different effort, such as `effort_axis=selected:low` followed by `(gpt-5.5 high)`, this is an orchestration deviation. Stop using that agent, record the mismatch in `implementation.md`, and redispatch with the correct effort-specific `agent_type`. Do not continue to `wait_agent`, phase bookkeeping, or the next phase with a mismatched selected-effort dispatch.
222
+
223
+ After the payload-first check, log the choice before dispatch in this structured shape:
224
+
225
+ ```text
226
+ OAT Dispatch: Phase {phase_id} {implementation | fix | review}
227
+ Host: {Claude Code | Codex | Cursor | other host}
228
+ Model axis: { selected:<value> | inherited | not-applicable | host-auto }
229
+ Effort axis: { selected:<value> | inherited | not-applicable | host-auto }
230
+ Dispatch target: {host-specific subagent/role/tool target}
231
+ Rationale: {short rationale grounded in phase scope}
232
+ ```
233
+
234
+ Examples:
235
+
236
+ ```text
237
+ OAT Dispatch: Phase p01 implementation
238
+ Host: Claude Code
239
+ Model axis: selected:haiku
240
+ Effort axis: not-applicable
241
+ Dispatch target: oat-phase-implementer
242
+ Rationale: mechanical template edits; haiku is the lowest sufficient Claude model.
243
+
244
+ OAT Dispatch: Phase p02 implementation
245
+ Host: Claude Code
246
+ Model axis: selected:sonnet
247
+ Effort axis: not-applicable
248
+ Dispatch target: oat-phase-implementer
249
+ Rationale: multi-file integration with mock wiring; sonnet is the lowest sufficient Claude model.
250
+
251
+ OAT Dispatch: Phase p03 implementation
252
+ Host: Codex
253
+ Model axis: inherited
254
+ Effort axis: selected:medium
255
+ Dispatch target: oat-phase-implementer-medium
256
+ Rationale: shared TypeScript/config substrate with cross-file contracts; medium is the lowest sufficient Codex effort.
257
+
258
+ OAT Dispatch: Phase p04 implementation
259
+ Host: Other
260
+ Model axis: host-auto
261
+ Effort axis: host-auto
262
+ Dispatch target: host default
263
+ Rationale: host does not expose readable or pinnable dispatch controls; rationale maps to standard effort.
264
+
265
+ OAT Dispatch: Phase p05 review
266
+ Host: Codex
267
+ Model axis: inherited
268
+ Effort axis: inherited
269
+ Dispatch target: oat-reviewer
270
+ Rationale: reviewer dispatches inherit parent controls by default.
271
+ ```
272
+
273
+ Use `low` for trivial docs-only, narrow single-file, or mechanical changes; `medium` for normal multi-file implementation and moderate integration risk; `high` for broad architecture, security/auth/redaction boundaries, subtle state behavior, or repeated substantive review failures. Use inherited `xhigh` only when the parent/orchestrator session is already xhigh.
274
+
275
+ Include the resolved implementation dispatch axes and rationale in the Phase Scope packet when known. Reserve `host-auto` for an axis the host uses internally but the orchestrator cannot read or pin; use `inherited` for deliberate inheritance and `not-applicable` when an axis is not meaningful for that host/API.
276
+
277
+ ```yaml
278
+ model_axis: { selected:<value> | inherited | not-applicable | host-auto }
279
+ effort_axis: { selected:<value> | inherited | not-applicable | host-auto }
280
+ dispatch_rationale: { short rationale }
281
+ ```
282
+
283
+ Review dispatch is intentionally different. A reviewer should inherit the parent session's model and effort axes unless the user explicitly requests a review override. In Codex, omit `model` and `reasoning_effort` overrides when spawning `oat-reviewer`; in Claude Code, do not pass a per-review model override. Log review scope as `model_axis=inherited` and `effort_axis=inherited` on hosts that expose an effort axis (such as Codex), or `effort_axis=not-applicable` on hosts that do not (such as Claude Code).
284
+
162
285
  ### Dry-Run Mode
163
286
 
164
287
  When the skill is invoked with `--dry-run`:
@@ -433,11 +556,24 @@ For each phase `pNN` in the plan (or each phase in the current parallel group),
433
556
  discovery: {PROJECT_PATH}/discovery.md
434
557
  commit_convention: {from plan.md header}
435
558
  workflow_mode: {from state.md or plan.md frontmatter}
559
+ model_axis: {selected:<value> | inherited | not-applicable | host-auto; omit if unknown}
560
+ effort_axis: {selected:<value> | inherited | not-applicable | host-auto; omit if unknown}
561
+ dispatch_rationale: {short rationale; omit if unknown}
436
562
  ```
437
563
 
438
- 2. Dispatch `oat-phase-implementer` (Tier 1 via provider-native subagent mechanism) with the Phase Scope block as input.
564
+ 2. Perform a pre-dispatch assertion against the host invocation parameters. The Phase Scope fields are audit/context fields; selected axes must also be represented in the actual host dispatch call.
565
+ - Codex implementer/fix dispatch:
566
+ - Build the `spawn_agent` argument map before logging the dispatch. If `effort_axis=selected:low|medium|high`, the argument map MUST use the matching `agent_type`: `"oat-phase-implementer-low"`, `"oat-phase-implementer-medium"`, or `"oat-phase-implementer-high"`. Then derive the `OAT Dispatch:` block `Effort axis:` field from that same argument map.
567
+ - Example selected low payload shape: `agent_type: "oat-phase-implementer-low"` and a Phase Scope message containing `effort_axis: selected:low`.
568
+ - Immediately after spawning, compare the returned Codex status line with the selected effort before waiting on the agent. If the spawned status reports a different effort than the selected value (for example, the log says `effort_axis=selected:medium` but the spawn result reports `gpt-5.5 high`), treat this as an orchestration deviation. Stop, record the deviation in `implementation.md`, and redispatch with corrected parameters before continuing. Do not use work from the mismatched dispatch.
569
+ - If `effort_axis=inherited`, use base `agent_type: "oat-phase-implementer"` and omit `reasoning_effort`.
570
+ - Claude Code implementer/fix dispatch:
571
+ - If `model_axis=selected:<value>`, the Task tool call MUST include `model: "<value>"`.
572
+ - If `model_axis=inherited`, omit `model`.
573
+
574
+ 3. Dispatch the selected implementer role (Tier 1 via provider-native subagent mechanism) — the role asserted in the pre-dispatch step above (e.g., `oat-phase-implementer-low`, `oat-phase-implementer-medium`, `oat-phase-implementer-high`, or base `oat-phase-implementer` for inherited effort) — with the Phase Scope block as input and with the asserted host invocation parameters.
439
575
 
440
- 3. Receive the structured summary (DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED).
576
+ 4. Receive the structured summary (DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED).
441
577
 
442
578
  **Tier 2 dispatch (inline fallback):**
443
579
 
@@ -458,6 +594,27 @@ If Tier 2 is selected, do not dispatch. Instead:
458
594
  - Recommended next step (plan fix, external resolution, user guidance)
459
595
  Do not proceed to subsequent phases while a phase is blocked.
460
596
 
597
+ #### Confidence-Based Dispatch Escalation
598
+
599
+ Escalate the runtime dispatch control when there is evidence that the current control is underpowered:
600
+
601
+ - implementer reports low confidence
602
+ - implementer reports a reasoning or capability blockage
603
+ - the same phase fails substantive review twice
604
+ - the fix loop repeats the same class of error
605
+
606
+ When escalation is needed:
607
+
608
+ 1. If a stronger available control exists, re-dispatch at the next stronger control and include the reason in the scope packet. The escalation ladder is provider-specific:
609
+ - **Codex:** `selected:low → selected:medium → selected:high → exhausted`. `high` is the strongest control OAT can select. Beyond `high`: if the parent/orchestrator session is already `xhigh`, dispatch uses `effort_axis=inherited`; otherwise escalation is exhausted — stop, split the phase, or ask the user to re-invoke at `xhigh` (see step 4).
610
+ - **Claude Code:** `selected:haiku → selected:sonnet → selected:opus`. `opus` is a selectable terminal step when available (and not capped by a future Claude-specific ceiling).
611
+ 2. Count the escalation redispatch against the existing bounded retry budget. Escalation changes the control; it does not create extra retry attempts.
612
+ 3. Record a compact note in `implementation.md` when practical:
613
+ - `Dispatch: p03 escalated to model_axis=selected:opus, effort_axis=not-applicable after repeated review failures.` (Claude Code)
614
+ - `Dispatch: p03 escalated to effort_axis=selected:high, model_axis=inherited after repeated review failures.` (Codex)
615
+ - `Dispatch: p02 remained model_axis=host-auto, effort_axis=host-auto; no explicit stronger control is exposed by this host.`
616
+ 4. If the phase is already at the strongest available control, do not invent a stronger tier. Provide more context, split the phase, revise the plan, or stop for user direction.
617
+
461
618
  #### Dispatch Retry (Transient Failures)
462
619
 
463
620
  If a Tier 1 dispatch fails (agent did not resolve, returned empty, etc.), retry exactly once. If the second attempt also fails, treat the phase as `failed` via the same mechanism as fix-loop retry exhaustion (see Step 7 below). Tier is never silently downgraded.
@@ -469,6 +626,7 @@ After the implementer returns DONE (or DONE_WITH_CONCERNS without correctness co
469
626
  **Dispatch:**
470
627
 
471
628
  - Use the same tier that was selected at start.
629
+ - Inherit the parent session's model/effort/control for review. Do not choose a separate reviewer model or reasoning effort unless the user explicitly requests an override.
472
630
  - Tier 1: dispatch `oat-reviewer` via provider-native subagent mechanism with Review Scope:
473
631
 
474
632
  ```
@@ -480,9 +638,13 @@ After the implementer returns DONE (or DONE_WITH_CONCERNS without correctness co
480
638
  workflow_mode: {from state.md}
481
639
  artifact_paths: {same as Phase Scope}
482
640
  tasks_in_scope: {list of pNN-tNN IDs in the phase}
641
+ model_axis: inherited
642
+ effort_axis: inherited # on Codex; use not-applicable on Claude Code
643
+ dispatch_rationale: review dispatch inherits parent session controls
483
644
  ```
484
645
 
485
646
  - For Codex Tier 1 dispatches, send the Review Scope block as a self-contained packet and keep fresh context (`fork_context: false`). The reviewer is expected to reconstruct context from git state and the OAT artifacts listed above.
647
+ - For Codex Tier 1 review dispatches, omit `model` and `reasoning_effort` overrides in the `spawn_agent` call. For Claude Code review dispatches, do not pass a per-review model override. `host-auto` is not the right label when the review is intentionally inheriting parent controls.
486
648
  - Treat the commit range as authoritative for review scope. `files_changed` is optional orientation metadata only.
487
649
  - If a Codex reviewer does not return a terminal result on the first wait, poll once more. If it still has not concluded, send one concise nudge to return immediately with current findings. If the reviewer still does not conclude, treat the Tier 1 review dispatch as failed for this phase and perform the review inline instead of waiting indefinitely.
488
650
 
@@ -503,13 +665,14 @@ On reviewer verdict `fail`, run a bounded fix loop.
503
665
 
504
666
  1. Read `oat_orchestration_retry_limit` from `state.md` frontmatter (default: `2`, range 0–5).
505
667
  2. For each retry (up to the limit):
506
- a. Dispatch `oat-phase-implementer` in `fix` mode (Tier 1) OR read the agent and apply fixes inline (Tier 2), with: - `review_artifact`: the path written by the reviewer - `findings`: the Critical + Important findings list - `prior_summary`: the last implementer summary
507
- b. Receive the fix summary.
508
- c. Re-dispatch the reviewer with the updated commit range.
509
- d. Parse the new verdict.
510
- e. If pass → exit the loop successfully.
511
- f. If fail and retries remain continue.
512
- g. If fail and retries exhaustedexit the loop with terminal verdict `failed`.
668
+ a. Select/log fix dispatch axes from the fix scope, then perform the same pre-dispatch assertion used for implementation dispatch. A Codex fix dispatch with `effort_axis=selected:low|medium|high` MUST use matching `agent_type: "oat-phase-implementer-low|medium|high"`; a Claude Code fix dispatch with `model_axis=selected:<value>` MUST pass `model: "<value>"` on the Task call.
669
+ b. Dispatch the selected phase implementer role in `fix` mode (Tier 1) OR read the agent and apply fixes inline (Tier 2), with: - `review_artifact`: the path written by the reviewer - `findings`: the Critical + Important findings list - `prior_summary`: the last implementer summary
670
+ c. Receive the fix summary.
671
+ d. Re-dispatch the reviewer with the updated commit range.
672
+ e. Parse the new verdict.
673
+ f. If pass exit the loop successfully.
674
+ g. If fail and retries remaincontinue.
675
+ h. If fail and retries exhausted → exit the loop with terminal verdict `failed`.
513
676
 
514
677
  **Terminal `failed` handling:**
515
678
 
@@ -619,6 +782,10 @@ Append a new entry to the `## Orchestration Runs` section between the `<!-- orch
619
782
  - Group {N} [{phase list}]: worktree-based, merged in order
620
783
  - {singleton phases}: sequential
621
784
 
785
+ #### Dispatch Notes
786
+
787
+ - Dispatch: {phase dispatch control and rationale, including escalation notes when applicable}
788
+
622
789
  #### Outstanding Items
623
790
 
624
791
  - {None | list of excluded phases with review paths and worktree paths}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-import-plan
3
- version: 1.3.0
3
+ version: 1.3.1
4
4
  description: Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format.
5
5
  argument-hint: '<path-to-plan.md> [--provider codex|cursor|claude] [--project <name>]'
6
6
  disable-model-invocation: true
@@ -168,6 +168,13 @@ Normalization rules:
168
168
  - Where source lacks test/verify details, add explicit TODO-style placeholders with clear expected output.
169
169
  - Keep tasks executable and atomic.
170
170
 
171
+ Dispatch Profile import handling:
172
+
173
+ - Preserve recognizable OAT-format `## Dispatch Profile` rows as user-authored constraints or preferences.
174
+ - Treat foreign model or effort hints as dispatch constraints only when the source clearly presents them as explicit requirements or preferences.
175
+ - Otherwise preserve model or effort hints as rationale/context in the relevant task or phase text and let runtime selection decide.
176
+ - Do not generate Dispatch Profile recommendation rows during import.
177
+
171
178
  ### Step 4: Update Plan Metadata
172
179
 
173
180
  Set frontmatter in `"$PROJECT_PATH/plan.md"`:
@@ -226,6 +233,7 @@ Report:
226
233
 
227
234
  - source imported path
228
235
  - normalized phases/tasks count
236
+ - Dispatch Profile handling: preserved/mapped/omitted; foreign hints kept as rationale when not explicit constraints
229
237
  - first task ID
230
238
  - active project pointer path
231
239
  - dashboard refresh status
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-plan-writing
3
- version: 1.2.1
3
+ version: 1.2.3
4
4
  description: Use when authoring or mutating plan.md in any OAT workflow. Defines canonical format invariants — stable task IDs, required sections, review table rules, and resume guardrails.
5
5
  disable-model-invocation: true
6
6
  user-invocable: false
@@ -51,6 +51,30 @@ Runtime routing note:
51
51
 
52
52
  Additional frontmatter keys (`oat_phase`, `oat_phase_status`, `oat_blockers`, `oat_last_updated`, `oat_generated`, `oat_template`, `oat_import_reference`, `oat_import_source_path`, `oat_import_provider`) are set by calling skills as needed.
53
53
 
54
+ ### Dispatch Profile Overrides
55
+
56
+ `## Dispatch Profile` is optional and should be omitted by default. Runtime selection chooses the lowest available tier/model/effort that can confidently complete each phase.
57
+
58
+ Only include the section when the user has explicit constraints or preferences. Routine hand-tuning can be worse than runtime selection because the orchestrator has fresher phase context and host capability information at dispatch time.
59
+
60
+ If a user-authored override is needed, use this table shape:
61
+
62
+ ```markdown
63
+ ## Dispatch Profile
64
+
65
+ | Phase | Claude model | Codex effort | Rationale |
66
+ | ----- | ------------------------- | ------------------------------ | ----------------------------- |
67
+ | pNN | haiku\|sonnet\|opus\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
68
+ ```
69
+
70
+ Validation rules for explicit rows:
71
+
72
+ - `Phase` must match a real `pNN` phase in the plan.
73
+ - `Claude model` must be `haiku`, `sonnet`, `opus`, `auto`, or blank.
74
+ - `Codex effort` must be `low`, `medium`, `high`, `xhigh`, `auto`, or blank. In Codex, `low`, `medium`, and `high` map to effort-specific implementer roles. Codex xhigh is inherited-only; `xhigh` can be honored only by inheriting an already-xhigh parent/orchestrator session, not by selecting an `xhigh` implementer variant.
75
+ - Blank or `auto` means no explicit constraint for that provider.
76
+ - `Rationale` is recommended and should explain why runtime selection should not decide on its own.
77
+
54
78
  ### Stable Task IDs
55
79
 
56
80
  - Format: `pNN-tNN` (e.g., `p01-t03`, `p02-t12`).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-review-provide
3
- version: 1.3.2
3
+ version: 1.3.3
4
4
  description: Use when completed work in an active OAT project needs a quality gate before merge. Performs a lifecycle-scoped review after a task, phase, or full implementation, unlike oat-review-provide.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -409,6 +409,24 @@ Files changed: {FILE_COUNT}
409
409
  Proceed with review?
410
410
  ```
411
411
 
412
+ ### Step 4.1: Dispatch Profile Override Advisory (Artifact Plan Only)
413
+
414
+ When reviewing `artifact plan`, apply this Dispatch Profile override advisory:
415
+
416
+ - A missing `## Dispatch Profile` section is normal and must not be flagged.
417
+ - Important findings:
418
+ - invalid phase ID that does not match a real plan phase
419
+ - unknown active-provider tier value
420
+ - low-tier override for multi-file integration, architecture, or review-heavy work
421
+ - low-tier override with missing or generic rationale
422
+ - Medium findings:
423
+ - malformed but recoverable Dispatch Profile table structure
424
+ - mid-tier override for architecture-heavy work without convincing rationale
425
+ - Minor findings:
426
+ - rationale is present but weakly tied to phase scope
427
+
428
+ Include this advisory in the Review Scope metadata for artifact plan reviews so the reviewer evaluates explicit override rows without treating omitted rows as a gap.
429
+
412
430
  ### Step 4.5: Gather Deferred Findings Ledger (Final Scope Only)
413
431
 
414
432
  If `review type == code` and `scope == final`, gather unresolved deferred findings from prior review cycles.
@@ -51,6 +51,20 @@ Default is `[]` (fully sequential, no worktrees). Only declare parallelism when
51
51
 
52
52
  ---
53
53
 
54
+ ## Dispatch Profile
55
+
56
+ _Optional override surface. Use only for explicit user-authored constraints or preferences. Omit this section when runtime selection should choose the lowest confident tier._
57
+
58
+ Blank or `auto` means there is no explicit constraint for that provider. Do not generate rows by default; a missing phase row uses runtime selection.
59
+
60
+ | Phase | Claude model | Codex effort | Rationale |
61
+ | ----- | ------------------------- | ------------------------------ | ----------------------------- |
62
+ | pNN | haiku\|sonnet\|opus\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
63
+
64
+ Codex `low`, `medium`, and `high` effort values map to effort-specific implementer roles. `xhigh` is inherited-only: it can be honored only when the parent/orchestrator session is already xhigh, not by selecting an `xhigh` implementer variant.
65
+
66
+ ---
67
+
54
68
  ## Phase 1: {Phase Name}
55
69
 
56
70
  ### Task p01-t01: {Task Name}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
@@ -71,7 +71,8 @@ async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries
71
71
  }
72
72
  if (scope === 'project' &&
73
73
  adaptersToScan.some((adapter) => adapter.name === 'codex')) {
74
- const codexStrays = await detectCodexRoleStrays(scopeRoot, canonicalEntries);
74
+ const codexExtensionPlan = await computeCodexProjectExtensionPlan(scopeRoot, canonicalEntries);
75
+ const codexStrays = await detectCodexRoleStrays(scopeRoot, canonicalEntries, new Set(codexExtensionPlan.managedRoles));
75
76
  for (const stray of codexStrays) {
76
77
  candidates.push({
77
78
  provider: 'codex',
@@ -11,6 +11,6 @@ export interface CodexRegenerationDependencies {
11
11
  computeExtensionPlan: (scopeRoot: string, canonicalEntries: CanonicalEntry[]) => Promise<CodexExtensionPlan>;
12
12
  applyExtensionPlan: (scopeRoot: string, plan: CodexExtensionPlan) => Promise<unknown>;
13
13
  }
14
- export declare function detectCodexRoleStrays(scopeRoot: string, canonicalEntries: CanonicalEntry[]): Promise<CodexRoleStray[]>;
14
+ export declare function detectCodexRoleStrays(scopeRoot: string, canonicalEntries: CanonicalEntry[], managedRoleNames?: Set<string>): Promise<CodexRoleStray[]>;
15
15
  export declare function regenerateCodexAfterAdoption({ scopeRoot, scanCanonical, computeExtensionPlan, applyExtensionPlan, }: CodexRegenerationDependencies): Promise<void>;
16
16
  //# sourceMappingURL=codex-strays.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-strays.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/codex-strays.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/C,oBAAoB,EAAE,CACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,kBAAkB,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AA+HD,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CAe3B;AAED,wBAAsB,4BAA4B,CAAC,EACjD,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,kBAAkB,GACnB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/C"}
1
+ {"version":3,"file":"codex-strays.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/codex-strays.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/C,oBAAoB,EAAE,CACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,kBAAkB,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAuID,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,gBAAgB,GAAE,GAAG,CAAC,MAAM,CAAa,GACxC,OAAO,CAAC,cAAc,EAAE,CAAC,CAuB3B;AAED,wBAAsB,4BAA4B,CAAC,EACjD,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,kBAAkB,GACnB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/C"}
@@ -21,7 +21,7 @@ async function fileExists(path) {
21
21
  return false;
22
22
  }
23
23
  }
24
- async function detectFromConfig(scopeRoot, existingCanonicalRoles) {
24
+ async function detectFromConfig(scopeRoot, existingCanonicalRoles, managedRoleNames) {
25
25
  const configPath = join(scopeRoot, '.codex', 'config.toml');
26
26
  if (!(await fileExists(configPath))) {
27
27
  return [];
@@ -39,7 +39,8 @@ async function detectFromConfig(scopeRoot, existingCanonicalRoles) {
39
39
  }
40
40
  const strays = [];
41
41
  for (const [roleName, value] of Object.entries(agents)) {
42
- if (existingCanonicalRoles.has(roleName)) {
42
+ if (existingCanonicalRoles.has(roleName) ||
43
+ managedRoleNames.has(roleName)) {
43
44
  continue;
44
45
  }
45
46
  if (!value || typeof value !== 'object' || Array.isArray(value)) {
@@ -69,7 +70,7 @@ async function detectFromConfig(scopeRoot, existingCanonicalRoles) {
69
70
  }
70
71
  return strays;
71
72
  }
72
- async function detectFromAgentsDirectory(scopeRoot, existingCanonicalRoles) {
73
+ async function detectFromAgentsDirectory(scopeRoot, existingCanonicalRoles, managedRoleNames) {
73
74
  const agentsDir = join(scopeRoot, '.codex', 'agents');
74
75
  let entries;
75
76
  try {
@@ -87,7 +88,8 @@ async function detectFromAgentsDirectory(scopeRoot, existingCanonicalRoles) {
87
88
  continue;
88
89
  }
89
90
  const roleName = entry.name.replace(/\.toml$/i, '');
90
- if (existingCanonicalRoles.has(roleName)) {
91
+ if (existingCanonicalRoles.has(roleName) ||
92
+ managedRoleNames.has(roleName)) {
91
93
  continue;
92
94
  }
93
95
  strays.push({
@@ -97,10 +99,10 @@ async function detectFromAgentsDirectory(scopeRoot, existingCanonicalRoles) {
97
99
  }
98
100
  return strays;
99
101
  }
100
- export async function detectCodexRoleStrays(scopeRoot, canonicalEntries) {
102
+ export async function detectCodexRoleStrays(scopeRoot, canonicalEntries, managedRoleNames = new Set()) {
101
103
  const roleNames = canonicalRoleNames(canonicalEntries);
102
- const configStrays = await detectFromConfig(scopeRoot, roleNames);
103
- const dirStrays = await detectFromAgentsDirectory(scopeRoot, roleNames);
104
+ const configStrays = await detectFromConfig(scopeRoot, roleNames, managedRoleNames);
105
+ const dirStrays = await detectFromAgentsDirectory(scopeRoot, roleNames, managedRoleNames);
104
106
  const merged = new Map();
105
107
  for (const stray of [...configStrays, ...dirStrays]) {
106
108
  if (!merged.has(stray.providerPath)) {
@@ -19,7 +19,7 @@ interface StatusDependencies {
19
19
  getSyncMappings: (adapter: ProviderAdapter, scope: Scope) => PathMapping[];
20
20
  detectDrift: (entry: Manifest['entries'][number], scopeRoot: string, copyTransform?: CopyTransform) => Promise<DriftReport>;
21
21
  detectStrays: (provider: string, providerDir: string, manifest: Manifest, canonicalEntries: CanonicalEntry[], mapping?: Pick<PathMapping, 'contentType' | 'providerExtension'>) => Promise<DriftReport[]>;
22
- detectCodexRoleStrays: (scopeRoot: string, canonicalEntries: CanonicalEntry[]) => Promise<CodexRoleStray[]>;
22
+ detectCodexRoleStrays: (scopeRoot: string, canonicalEntries: CanonicalEntry[], managedRoleNames?: Set<string>) => Promise<CodexRoleStray[]>;
23
23
  computeCodexProjectExtensionPlan: (scopeRoot: string, canonicalEntries: CanonicalEntry[]) => Promise<CodexExtensionPlan>;
24
24
  applyCodexProjectExtensionPlan: (scopeRoot: string, plan: CodexExtensionPlan) => Promise<unknown>;
25
25
  selectManyWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
@@ -207,7 +207,7 @@ async function collectScopeReports(scope, context, dependencies) {
207
207
  });
208
208
  }
209
209
  }
210
- const codexStrays = await dependencies.detectCodexRoleStrays(scopeRoot, canonicalEntries);
210
+ const codexStrays = await dependencies.detectCodexRoleStrays(scopeRoot, canonicalEntries, new Set(codexExtensionPlan.managedRoles));
211
211
  for (const codexStray of codexStrays) {
212
212
  const report = {
213
213
  canonical: null,
@@ -1 +1 @@
1
- {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/sync-extension.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQpD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAwJD,wBAAsB,gCAAgC,CACpD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,yBAAyB,CAAC,CA6BpC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,GACvB,uBAAuB,EAAE,CAQ3B"}
1
+ {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/sync-extension.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQpD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AA6MD,wBAAsB,gCAAgC,CACpD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,yBAAyB,CAAC,CA6BpC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,GACvB,uBAAuB,EAAE,CAQ3B"}
@@ -7,6 +7,7 @@ import TOML from '@iarna/toml';
7
7
  import { mergeCodexConfig } from './config-merge.js';
8
8
  import { exportCanonicalAgentToCodexRole } from './export-to-codex.js';
9
9
  import { isOatManagedCodexRoleFile } from './shared.js';
10
+ const PHASE_IMPLEMENTER_EFFORT_VARIANTS = ['low', 'medium', 'high'];
10
11
  function hashContent(content) {
11
12
  return createHash('sha256').update(content).digest('hex');
12
13
  }
@@ -37,6 +38,36 @@ function normalizeManagedRolesConfig(desiredRoles) {
37
38
  configFile: role.configFile,
38
39
  }));
39
40
  }
41
+ function codexEffortVariantContent(baseContent, baseRoleName, variantRoleName, effort) {
42
+ return baseContent
43
+ .replace(`# oat-role: ${baseRoleName}`, `# oat-role: ${variantRoleName}`)
44
+ .replace('developer_instructions =', `model_reasoning_effort = "${effort}"\ndeveloper_instructions =`);
45
+ }
46
+ function codexEffortVariantDescription(effort) {
47
+ if (effort === 'low') {
48
+ return 'OAT phase implementer pinned to low reasoning effort for narrow mechanical implementation or fix phases.';
49
+ }
50
+ if (effort === 'medium') {
51
+ return 'OAT phase implementer pinned to medium reasoning effort for normal multi-file implementation or fix phases.';
52
+ }
53
+ return 'OAT phase implementer pinned to high reasoning effort for broad, subtle, or higher-risk implementation or fix phases.';
54
+ }
55
+ function codexEffortVariantsFromBase(exported) {
56
+ if (exported.roleName !== 'oat-phase-implementer') {
57
+ return [];
58
+ }
59
+ return PHASE_IMPLEMENTER_EFFORT_VARIANTS.map((effort) => {
60
+ const variantRoleName = `${exported.roleName}-${effort}`;
61
+ const configFile = `agents/${variantRoleName}.toml`;
62
+ return {
63
+ roleName: variantRoleName,
64
+ description: codexEffortVariantDescription(effort),
65
+ configFile,
66
+ rolePath: join(dirname(exported.rolePath), `${variantRoleName}.toml`),
67
+ content: codexEffortVariantContent(exported.content, exported.roleName, variantRoleName, effort),
68
+ };
69
+ });
70
+ }
40
71
  async function desiredRolesFromCanonical(canonicalEntries, scopeRoot) {
41
72
  const roles = [];
42
73
  for (const entry of canonicalEntries) {
@@ -54,6 +85,7 @@ async function desiredRolesFromCanonical(canonicalEntries, scopeRoot) {
54
85
  rolePath: join(scopeRoot, '.codex', exported.configFile),
55
86
  content: exported.content,
56
87
  });
88
+ roles.push(...codexEffortVariantsFromBase(roles[roles.length - 1]));
57
89
  }
58
90
  return roles.sort((left, right) => left.roleName.localeCompare(right.roleName));
59
91
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
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",
@@ -33,7 +33,7 @@
33
33
  "ora": "^9.0.0",
34
34
  "yaml": "2.8.2",
35
35
  "zod": "^3.25.76",
36
- "@open-agent-toolkit/control-plane": "0.1.1"
36
+ "@open-agent-toolkit/control-plane": "0.1.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.10.0",