@open-agent-toolkit/cli 0.1.45 → 0.1.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/oat-reviewer.md +2 -2
- package/assets/docs/cli-utilities/config-and-local-state.md +7 -0
- package/assets/docs/cli-utilities/configuration.md +51 -11
- package/assets/docs/provider-sync/config.md +5 -1
- package/assets/docs/provider-sync/manifest-and-drift.md +6 -1
- package/assets/docs/provider-sync/providers.md +6 -3
- package/assets/docs/provider-sync/scope-and-surface.md +2 -1
- package/assets/docs/reference/oat-directory-structure.md +2 -2
- package/assets/docs/workflows/projects/dispatch-ceiling.md +41 -28
- package/assets/docs/workflows/projects/implementation-execution.md +20 -13
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +114 -59
- package/assets/skills/oat-project-quick-start/SKILL.md +32 -20
- package/dist/commands/config/index.d.ts +2 -2
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +71 -20
- package/dist/commands/doctor/index.d.ts +2 -2
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +83 -27
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +137 -10
- package/dist/commands/providers/codex/index.d.ts +4 -0
- package/dist/commands/providers/codex/index.d.ts.map +1 -0
- package/dist/commands/providers/codex/index.js +7 -0
- package/dist/commands/providers/codex/materialize.d.ts +5 -0
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -0
- package/dist/commands/providers/codex/materialize.js +152 -0
- package/dist/commands/providers/index.d.ts +2 -2
- package/dist/commands/providers/index.d.ts.map +1 -1
- package/dist/commands/providers/index.js +4 -2
- package/dist/commands/providers/providers.types.d.ts +23 -0
- package/dist/commands/providers/providers.types.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.js +11 -1
- package/dist/commands/status/index.d.ts +4 -1
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +1 -1
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +1 -1
- package/dist/commands/sync/sync.types.d.ts +4 -1
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.d.ts +4 -0
- package/dist/config/dispatch-ceiling-preset.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.js +3 -0
- package/dist/config/dispatch-policy-options.d.ts +20 -0
- package/dist/config/dispatch-policy-options.d.ts.map +1 -0
- package/dist/config/dispatch-policy-options.js +96 -0
- package/dist/config/oat-config.d.ts +6 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +15 -0
- package/dist/providers/ceiling/registry.d.ts +7 -5
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +16 -5
- package/dist/providers/codex/codec/config-merge.d.ts +6 -0
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +7 -0
- package/dist/providers/codex/codec/materialize.d.ts +16 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -0
- package/dist/providers/codex/codec/materialize.js +57 -0
- package/dist/providers/codex/codec/shared.d.ts +1 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +9 -1
- package/dist/providers/codex/codec/sync-extension.d.ts +7 -1
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +183 -46
- package/dist/providers/identity/availability.d.ts +24 -1
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +253 -19
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.1.
|
|
3
|
+
version: 1.1.5
|
|
4
4
|
description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, Write
|
|
6
6
|
color: yellow
|
|
@@ -68,7 +68,7 @@ You will be given a "Review Scope" block including:
|
|
|
68
68
|
|
|
69
69
|
The orchestrator owns dispatch control. Do not read `plan.md` Dispatch Profile rows to self-select a tier.
|
|
70
70
|
|
|
71
|
-
For Codex, deterministic review dispatch under a capped managed policy uses
|
|
71
|
+
For Codex, deterministic review dispatch under a capped managed policy uses the materialized Codex role name returned by `providers.codex.dispatchArgs.variant`; the orchestrator also supplies `providers.codex.selection.target` context when available and should derive `model_axis` and `effort_axis` from resolver output. Managed `Uncapped` and inherit/default policies have no reviewer target, so the base `oat-reviewer` role is used only when the resolver returns no `dispatchArgs.variant`, as a provider-default/unpinned fallback. If you are running as the base role, report any provided `provider_default_effort` as context but do not treat it as managed uncapped selection or an OAT cap. Use base `oat-reviewer` only when the resolver returns no `dispatchArgs.variant`.
|
|
72
72
|
|
|
73
73
|
For Claude Code, review dispatch is model-axis based and the effort axis is `not-applicable`.
|
|
74
74
|
|
|
@@ -113,6 +113,13 @@ Use `oat config` for repo runtime config inspection and supported key mutation.
|
|
|
113
113
|
|
|
114
114
|
Use `oat config dump --json` when you need the whole resolved config in one machine-readable response rather than a single key or a human-oriented list view.
|
|
115
115
|
|
|
116
|
+
Dispatch policy keys are part of this surface, but provider-specific generation
|
|
117
|
+
still belongs to provider commands. Use `oat config describe
|
|
118
|
+
workflow.dispatchPolicy.policy` to inspect capped managed, managed uncapped,
|
|
119
|
+
inherit/default, and unresolved behavior; use `oat providers codex materialize`
|
|
120
|
+
or `oat sync --scope project` to create materialized Codex roles from explicit
|
|
121
|
+
model+effort targets.
|
|
122
|
+
|
|
116
123
|
Archive lifecycle settings live here as shared repo config:
|
|
117
124
|
|
|
118
125
|
- `archive.s3Uri`
|
|
@@ -235,30 +235,70 @@ entries are either bare slugs or objects with `harness`, `model`, and optional
|
|
|
235
235
|
}
|
|
236
236
|
```
|
|
237
237
|
|
|
238
|
-
`Uncapped` is explicit managed state
|
|
239
|
-
|
|
238
|
+
`Uncapped` is explicit managed state: OAT still selects the preferred
|
|
239
|
+
provider-specific dispatch target, but does not apply a maximum cap. Do not
|
|
240
|
+
represent it by leaving policy state absent. To request no OAT model/effort
|
|
241
|
+
selection, set:
|
|
240
242
|
|
|
241
243
|
```bash
|
|
242
244
|
oat config set workflow.dispatchPolicy.mode inherit
|
|
243
245
|
```
|
|
244
246
|
|
|
247
|
+
If no managed policy, legacy cap, or inherit/default mode resolves during an
|
|
248
|
+
implementation preflight, the policy remains unresolved. Interactive
|
|
249
|
+
implementation may ask once and persist a choice; non-interactive
|
|
250
|
+
implementation blocks rather than silently falling back to host defaults.
|
|
251
|
+
|
|
245
252
|
### How enforcement works
|
|
246
253
|
|
|
247
254
|
OAT applies managed policies where the provider exposes a reliable mechanism.
|
|
248
255
|
Providers without an adapter receive them as advisory/unsupported.
|
|
249
256
|
|
|
250
|
-
| Provider | Mechanism
|
|
251
|
-
| -------- |
|
|
252
|
-
| Codex |
|
|
253
|
-
| Claude | Task `model` parameter
|
|
254
|
-
| Cursor | `--model` argument
|
|
255
|
-
| Others | None (informational only)
|
|
257
|
+
| Provider | Mechanism | Enforcement mode |
|
|
258
|
+
| -------- | ------------------------------------ | ------------------------------- |
|
|
259
|
+
| Codex | Materialized model+effort role names | `enforced` |
|
|
260
|
+
| Claude | Task `model` parameter | `enforced` |
|
|
261
|
+
| Cursor | `--model` argument / Task `model` | `enforced` when a cell resolves |
|
|
262
|
+
| Others | None (informational only) | `advisory` / `unsupported` |
|
|
263
|
+
|
|
264
|
+
Codex managed dispatch compiles an explicit `model` plus reasoning `effort`
|
|
265
|
+
target into a materialized OAT role name, for example
|
|
266
|
+
`oat-phase-implementer-gpt-5-6-terra-xhigh`. OAT-managed Codex roles are not
|
|
267
|
+
the old hard-coded effort-only pins; they come from resolver targets, dispatch
|
|
268
|
+
matrix cells, or an explicit materialization command. Base roles such as
|
|
269
|
+
`oat-phase-implementer` and `oat-reviewer` are fallback paths that follow the
|
|
270
|
+
provider default effort when inherit/default behavior is selected or no
|
|
271
|
+
materialized target resolves.
|
|
256
272
|
|
|
257
|
-
Codex uses effort (`low < medium < high < xhigh`) and pinned OAT role variants.
|
|
258
273
|
Claude uses Task `model` (`haiku < sonnet < opus < fable`) and keeps
|
|
259
274
|
`effort_axis=not-applicable`. Cursor and other model-arg providers use opaque
|
|
260
275
|
matrix slugs; OAT validates availability when a provider oracle is available,
|
|
261
|
-
but the configured matrix owns tier meaning.
|
|
276
|
+
but the configured matrix owns tier meaning. For Cursor subagents, validation
|
|
277
|
+
checks the model can actually be used by Task subagent dispatch, not just that
|
|
278
|
+
the broad `cursor-agent models` catalog lists the slug.
|
|
279
|
+
|
|
280
|
+
### Codex role materialization
|
|
281
|
+
|
|
282
|
+
Use `oat providers codex materialize` when you need to materialize one
|
|
283
|
+
canonical agent as a Codex role outside a full sync run:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
oat providers codex materialize oat-reviewer --model gpt-5.6-terra --effort xhigh --dry-run
|
|
287
|
+
oat providers codex materialize oat-phase-implementer --model gpt-5.6-terra --effort high
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Required inputs are the canonical agent name, `--model <model-id>`, and
|
|
291
|
+
`--effort <reasoning-effort>`. The command defaults to project scope, reads
|
|
292
|
+
`.agents/agents/<agent-name>.md`, writes `.codex/agents/<role>.toml`, and
|
|
293
|
+
upserts `.codex/config.toml` unless `--dry-run` is present. `--agent-path` can
|
|
294
|
+
point at a specific canonical agent markdown file, and `--role-name` can
|
|
295
|
+
override the generated role name.
|
|
296
|
+
|
|
297
|
+
Normal project sync also materializes Codex roles for configured matrix targets:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
oat sync --scope project
|
|
301
|
+
```
|
|
262
302
|
|
|
263
303
|
**Verify-on-upgrade:** when the requested tier exceeds the current orchestrator
|
|
264
304
|
tier (an upgrade request), the resolver sets `verifyOnDispatch: true`. The skill
|
|
@@ -320,7 +360,7 @@ Workflow preference keys live under the `workflow.*` namespace:
|
|
|
320
360
|
- `workflow.autoArtifactReview.plan` — boolean, default `true`. Automatically run the bounded artifact-review loop for generated `plan.md` files before implementation handoff. Set to `false` only when you intentionally want to skip the plan artifact review.
|
|
321
361
|
- `workflow.autoArtifactReview.analysis` — boolean, default `true`. Automatically run the bounded accuracy-review loop for generated docs and agent-instructions analysis artifacts before the matching apply workflow consumes them.
|
|
322
362
|
- `workflow.dispatchPolicy.mode` — `managed` or `inherit`. `managed` means OAT selects model/effort controls from `workflow.dispatchPolicy.policy`; `inherit` means OAT leaves controls to host/provider defaults.
|
|
323
|
-
- `workflow.dispatchPolicy.policy` — `economy`, `balanced`, `high`, `frontier`, or `uncapped`. `economy` through `frontier` are capped managed policies; `uncapped` keeps OAT-managed preferred selection without provider caps.
|
|
363
|
+
- `workflow.dispatchPolicy.policy` — `economy`, `balanced`, `high`, `frontier`, or `uncapped`. `economy` through `frontier` are capped managed policies; `uncapped` keeps OAT-managed preferred selection without provider caps. It is distinct from `workflow.dispatchPolicy.mode=inherit`, which leaves controls to the host/provider.
|
|
324
364
|
- `workflow.dispatchCeiling.preset` — legacy compatibility alias (`balanced`, `maximum`, or `cost-conscious`) for capped managed policy setup.
|
|
325
365
|
- `workflow.dispatchCeiling.providers.<provider>` — dispatch matrix provider column or legacy bare provider target.
|
|
326
366
|
- `workflow.dispatchCeiling.providers.<provider>.<tier>` — one matrix cell for `economy`, `balanced`, `high`, or `frontier`.
|
|
@@ -95,7 +95,11 @@ canonical `.agents/skills` inventory.
|
|
|
95
95
|
- unset: provider falls back to directory detection.
|
|
96
96
|
- `defaultStrategy` is used when no provider-specific `strategy` is set.
|
|
97
97
|
- At runtime, config is normalized so `providers` is always present in memory.
|
|
98
|
-
- Codex project sync also manages generated
|
|
98
|
+
- Codex project sync also manages generated materialized roles derived from
|
|
99
|
+
canonical agents and explicit model+effort targets. Dispatch-aware roles such
|
|
100
|
+
as `oat-phase-implementer-gpt-5-6-terra-xhigh` and
|
|
101
|
+
`oat-reviewer-gpt-5-6-terra-xhigh` are managed outputs and should not be
|
|
102
|
+
adopted as stray roles.
|
|
99
103
|
|
|
100
104
|
## Recommended management flow
|
|
101
105
|
|
|
@@ -69,7 +69,12 @@ After adoption, `oat sync` regenerates the managed provider copies from the cano
|
|
|
69
69
|
|
|
70
70
|
### Generated provider roles
|
|
71
71
|
|
|
72
|
-
Some Codex roles are **generated-derived**
|
|
72
|
+
Some Codex roles are **generated-derived** - produced by the Codex sync
|
|
73
|
+
extension rather than mapped 1:1 from a canonical `.agents/agents/*.md` file.
|
|
74
|
+
Materialized dispatch roles are the current example: a matrix target or
|
|
75
|
+
`oat providers codex materialize` command supplies a canonical agent, model, and
|
|
76
|
+
reasoning effort, and OAT writes a role such as
|
|
77
|
+
`oat-phase-implementer-gpt-5-6-terra-xhigh`.
|
|
73
78
|
|
|
74
79
|
`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.
|
|
75
80
|
|
|
@@ -18,6 +18,8 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
18
18
|
- Project: `.agents/skills` -> `.cursor/skills`, `.agents/agents` -> `.cursor/agents`, `.agents/rules` -> `.cursor/rules`
|
|
19
19
|
- User: `~/.agents/skills` -> `~/.cursor/skills`, `~/.agents/agents` -> `~/.cursor/agents`
|
|
20
20
|
- Subagent invocation in Cursor is prompt-driven (`/name` or natural mention), not `subagent_type`
|
|
21
|
+
- OAT-controlled Cursor dispatch uses the generic `.cursor/agents/<name>.md` file plus the Task-level `model` argument selected from the dispatch matrix. A `model` frontmatter value is only a default/fallback mechanism.
|
|
22
|
+
- Cursor model validation checks whether the selected model is eligible for subagent Task dispatch; the broad `cursor-agent models` catalog alone is not enough proof.
|
|
21
23
|
- Rule files render as `.cursor/rules/*.mdc`
|
|
22
24
|
|
|
23
25
|
=== "Copilot"
|
|
@@ -42,9 +44,10 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
42
44
|
- `.codex/agents/<role>.toml`
|
|
43
45
|
- `.codex/config.toml` (`[features] multi_agent = true`, `[agents.<role>]` upserts)
|
|
44
46
|
- Codex role files include OAT managed provenance headers and are regenerated by `oat sync --scope project`
|
|
45
|
-
- The Codex sync extension also generates effort
|
|
47
|
+
- The Codex sync extension also generates materialized roles from explicit model+effort targets, such as `oat-phase-implementer-gpt-5-6-terra-xhigh` or `oat-reviewer-gpt-5-6-terra-xhigh`, alongside canonical-derived base roles. These generated variants are managed by `oat sync` and are not treated as strays (see Manifest and Drift -> Generated provider roles)
|
|
48
|
+
- A single role can be materialized directly with `oat providers codex materialize <agent-name> --model <model-id> --effort <reasoning-effort>`; `--agent-path` selects a specific canonical markdown agent, `--role-name` overrides the generated role name, and `--scope user` writes a one-off user-scope role.
|
|
46
49
|
- Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
|
|
47
|
-
- User-scope Codex role generation (`~/.codex`) remains deferred
|
|
50
|
+
- User-scope Codex role generation via provider sync (`~/.codex`) remains deferred
|
|
48
51
|
- Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
|
|
49
52
|
- Codex subagent workflows require `[features] multi_agent = true` in active Codex config layers
|
|
50
53
|
|
|
@@ -53,7 +56,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
53
56
|
- Project scope: skills + agents + rules
|
|
54
57
|
- User scope: skills + agents (provider mappings vary by adapter)
|
|
55
58
|
- Rules are project-scoped only in this release
|
|
56
|
-
- Codex user-scope role generation under `~/.codex` remains deferred in this release
|
|
59
|
+
- Codex user-scope role generation under `~/.codex` via provider sync remains deferred in this release; direct one-off materialization can use `--scope user`
|
|
57
60
|
|
|
58
61
|
## Adoption model
|
|
59
62
|
|
|
@@ -34,6 +34,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
34
34
|
- `oat providers list`
|
|
35
35
|
- `oat providers inspect`
|
|
36
36
|
- `oat providers set`
|
|
37
|
+
- `oat providers codex materialize`
|
|
37
38
|
|
|
38
39
|
## Adjacent CLI commands (commonly used with provider interop)
|
|
39
40
|
|
|
@@ -46,7 +47,7 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
46
47
|
- Project provider enablement is stored in `.oat/sync/config.json` (`providers.<name>.enabled`).
|
|
47
48
|
- `oat init --scope project` (interactive) prompts for supported providers and persists explicit true/false values.
|
|
48
49
|
- `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. Generated Codex roles
|
|
50
|
+
- 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 materialized model+effort implementer and reviewer variants - are tracked as managed by `oat status` and `oat init`, not as strays.
|
|
50
51
|
- Codex aggregate config drift is reported via sync/status extension metadata (`aggregateConfigHash`); it is not persisted as a separate manifest schema entry.
|
|
51
52
|
- Codex user-scope role generation remains intentionally deferred in this release.
|
|
52
53
|
|
|
@@ -107,9 +107,9 @@ Current schema keys:
|
|
|
107
107
|
| `git.defaultBranch` | `string` | `"main"` | Default branch for PR creation. Auto-detected during `oat init` via `gh repo view` or `origin/HEAD`. Used by `oat-project-pr-final` and `oat-project-pr-progress`. |
|
|
108
108
|
| `workflow.autoReviewAtHillCheckpoints` | `boolean` | unset | When `true`, completing a HiLL checkpoint automatically runs the extra lifecycle review. Does not control Tier 1 per-phase `oat-reviewer` gates. Can be overridden per-project via `oat_auto_review_at_hill_checkpoints` in `plan.md` frontmatter. Legacy `autoReviewAtCheckpoints` remains a fallback. |
|
|
109
109
|
| `workflow.dispatchPolicy.mode` | `string` | unset | Dispatch policy mode: `managed` lets OAT select model/effort controls; `inherit` leaves controls to the host/provider defaults. |
|
|
110
|
-
| `workflow.dispatchPolicy.policy` | `string` | unset | Managed dispatch policy: `economy`, `balanced`, `high`, `frontier`, or `uncapped`. Capped policies compile to provider targets; `uncapped` keeps OAT-managed preferred selection without provider caps.
|
|
110
|
+
| `workflow.dispatchPolicy.policy` | `string` | unset | Managed dispatch policy: `economy`, `balanced`, `high`, `frontier`, or `uncapped`. Capped policies compile to provider targets; `uncapped` keeps OAT-managed preferred selection without provider caps. `inherit` mode is separate and leaves controls to the host/provider. |
|
|
111
111
|
| `workflow.dispatchCeiling.preset` | `string` | unset | Legacy compatibility preset for capped managed policy setup (`balanced`, `maximum`, `cost-conscious`). `maximum` maps to `high`; `cost-conscious` maps to `economy`. |
|
|
112
|
-
| `workflow.dispatchCeiling.providers.codex` | `string` | unset | Legacy concrete Codex capped target (`low`, `medium`, `high`, or `xhigh`). Codex provider default effort is informational only for explicit inherit/default behavior or base/unpinned fallback paths.
|
|
112
|
+
| `workflow.dispatchCeiling.providers.codex` | `string` | unset | Legacy concrete Codex capped target (`low`, `medium`, `high`, or `xhigh`). New managed Codex dispatch resolves explicit model+effort targets to materialized role names; provider default effort is informational only for explicit inherit/default behavior or base/unpinned fallback paths. |
|
|
113
113
|
| `workflow.dispatchCeiling.providers.claude` | `string` | unset | Legacy concrete Claude capped target (`haiku`, `sonnet`, `opus`, or `fable`). Claude has no separate per-dispatch effort axis. The flat keys `workflow.dispatchCeiling.codex` and `workflow.dispatchCeiling.claude` were removed (no migration). |
|
|
114
114
|
| `workflow.gates.skills` | `object` | unset | Per-skill final gate config keyed by skill name. Managed with `oat gate set/unset`; gate-aware skills declare `oat_gateable: true`. |
|
|
115
115
|
| `workflow.gates.execTargets` | `object` | built-ins | Cross-runtime exec target registry keyed by opaque target id. Managed with `oat gate target set/unset`; built-ins cover Codex, Claude, and Cursor defaults. |
|
|
@@ -28,18 +28,20 @@ per-tier value, or an ordered route for escalation.
|
|
|
28
28
|
|
|
29
29
|
## Policy Choices
|
|
30
30
|
|
|
31
|
-
| Policy | Mode | Codex
|
|
32
|
-
| ----------------------- | ------- |
|
|
33
|
-
| `Economy` | managed | `medium`
|
|
34
|
-
| `Balanced` | managed | `high`
|
|
35
|
-
| `High` | managed | `xhigh`
|
|
36
|
-
| `Frontier` | managed | `xhigh`
|
|
37
|
-
| `Uncapped` | managed | none
|
|
38
|
-
| `Inherit Host Defaults` | inherit | none
|
|
31
|
+
| Policy | Mode | Codex cap | Claude target | Meaning |
|
|
32
|
+
| ----------------------- | ------- | --------- | ------------- | -------------------------------------------- |
|
|
33
|
+
| `Economy` | managed | `medium` | `sonnet` | Lower-cost managed cap |
|
|
34
|
+
| `Balanced` | managed | `high` | `sonnet` | Default managed cap |
|
|
35
|
+
| `High` | managed | `xhigh` | `opus` | High-capability managed cap |
|
|
36
|
+
| `Frontier` | managed | `xhigh` | `fable` | Top managed tier currently exposed by OAT |
|
|
37
|
+
| `Uncapped` | managed | none | none | OAT selects preferred controls without a cap |
|
|
38
|
+
| `Inherit Host Defaults` | inherit | none | none | OAT does not select model/effort controls |
|
|
39
39
|
|
|
40
40
|
`Uncapped` is explicit managed state. It is not represented by omitting policy
|
|
41
41
|
state. Existing projects with absent legacy ceiling state remain unresolved or
|
|
42
|
-
legacy-compatible; they do not silently become managed `Uncapped`.
|
|
42
|
+
legacy-compatible; they do not silently become managed `Uncapped`. `Unresolved`
|
|
43
|
+
is a deferral state for planning/preflight only. Implementation preflight must
|
|
44
|
+
resolve a managed policy or inherit/default mode before work starts.
|
|
43
45
|
|
|
44
46
|
## Config Shapes
|
|
45
47
|
|
|
@@ -173,18 +175,25 @@ Selection modes:
|
|
|
173
175
|
|
|
174
176
|
## Provider Behavior
|
|
175
177
|
|
|
176
|
-
| | Codex
|
|
177
|
-
| ----------------- |
|
|
178
|
-
| Managed mechanism |
|
|
179
|
-
| Axis | effort (`low < medium < high < xhigh`)
|
|
180
|
-
| Capped policy |
|
|
181
|
-
| Uncapped | preferred
|
|
182
|
-
| Inherit/default | base/unpinned role follows provider default
|
|
183
|
-
|
|
184
|
-
Codex uses
|
|
185
|
-
dogfooding.
|
|
186
|
-
|
|
187
|
-
|
|
178
|
+
| | Codex | Claude Code | Cursor / model-arg providers | Unsupported provider |
|
|
179
|
+
| ----------------- | ----------------------------------------------------- | --------------------------------------- | ---------------------------- | -------------------- |
|
|
180
|
+
| Managed mechanism | Materialized roles with explicit `model` and `effort` | Task `model` argument | Task/CLI `model` argument | None |
|
|
181
|
+
| Axis | model plus effort (`low < medium < high < xhigh`) | model (`haiku < sonnet < opus < fable`) | opaque model slug | None |
|
|
182
|
+
| Capped policy | materialized target selected up to cap | selected Task model up to cap | selected matrix cell | advisory/unsupported |
|
|
183
|
+
| Uncapped | preferred materialized target, no cap | preferred Task model, no cap | preferred matrix cell | advisory/unsupported |
|
|
184
|
+
| Inherit/default | base/unpinned role follows provider default | omit `model` | omit model selection | normal behavior |
|
|
185
|
+
|
|
186
|
+
Codex uses materialized roles because per-call model/effort controls were
|
|
187
|
+
unreliable in dogfooding. The resolver compiles an explicit model+effort target
|
|
188
|
+
into a role name such as `oat-phase-implementer-gpt-5-6-terra-xhigh`, and the
|
|
189
|
+
Codex spawn payload uses that role as `agent_type`. For managed `Uncapped`, OAT
|
|
190
|
+
still selects the preferred materialized target. If the Codex preferred value is
|
|
191
|
+
an effort rather than a matrix tier, OAT looks up the highest managed tier that
|
|
192
|
+
compiles to that effort before resolving the matrix target; for example,
|
|
193
|
+
`--preferred xhigh` resolves through the `frontier` matrix cell. The dispatching
|
|
194
|
+
host should verify whether upward effort selection is actually honored in the
|
|
195
|
+
current session. The old effort-only Codex pins are not the managed dispatch
|
|
196
|
+
contract for new projects.
|
|
188
197
|
|
|
189
198
|
Claude Code uses the per-call Task `model` argument. It has no OAT-managed
|
|
190
199
|
per-dispatch effort axis, so dispatch logs use `effort_axis=not-applicable`.
|
|
@@ -192,7 +201,10 @@ per-dispatch effort axis, so dispatch logs use `effort_axis=not-applicable`.
|
|
|
192
201
|
|
|
193
202
|
Cursor and other model-arg providers use matrix values as opaque slugs. OAT
|
|
194
203
|
validates availability with provider oracles when possible, but tier semantics
|
|
195
|
-
come from the configured matrix, not from a built-in model catalog.
|
|
204
|
+
come from the configured matrix, not from a built-in model catalog. For Cursor,
|
|
205
|
+
that validation checks subagent Task eligibility, not just broad catalog
|
|
206
|
+
visibility, because a slug can appear in `cursor-agent models` and still be
|
|
207
|
+
rejected for subagent dispatch.
|
|
196
208
|
|
|
197
209
|
## Producer Provenance
|
|
198
210
|
|
|
@@ -205,9 +217,10 @@ Dispatch: scope=p06 action=implementation role=implementer producer=gpt-5.5-xhig
|
|
|
205
217
|
|
|
206
218
|
`producer` is the resolved model slug when OAT knows it, otherwise `unknown`.
|
|
207
219
|
`provenance` is one of `declared`, `observed`, `inferred`, or `unknown`.
|
|
208
|
-
Concrete same-harness model arguments can be declared. Codex
|
|
209
|
-
|
|
210
|
-
|
|
220
|
+
Concrete same-harness model arguments can be declared. Codex materialized
|
|
221
|
+
model+effort roles declare `model_axis=selected:<model>` and
|
|
222
|
+
`effort_axis=selected:<effort>` from resolver output, but producer identity
|
|
223
|
+
remains `unknown` unless an observed or inferred model identity is available.
|
|
211
224
|
|
|
212
225
|
## Implementer, Fix, and Reviewer Behavior
|
|
213
226
|
|
|
@@ -234,9 +247,9 @@ say `provider-default`.
|
|
|
234
247
|
Examples:
|
|
235
248
|
|
|
236
249
|
```text
|
|
237
|
-
Dispatch policy: balanced; selected=high; cap=high (codex, enforced — variant oat-phase-implementer-high)
|
|
238
|
-
Dispatch policy: high; selected=xhigh; cap=xhigh (codex, enforced — variant oat-reviewer-xhigh)
|
|
239
|
-
Dispatch policy: uncapped; selected=xhigh; cap=none (codex, enforced — variant oat-phase-implementer-xhigh)
|
|
250
|
+
Dispatch policy: balanced; selected=high; cap=high (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-high)
|
|
251
|
+
Dispatch policy: high; selected=xhigh; cap=xhigh (codex, enforced — variant oat-reviewer-gpt-5-6-terra-xhigh)
|
|
252
|
+
Dispatch policy: uncapped; selected=xhigh; cap=none (codex, enforced — variant oat-phase-implementer-gpt-5-6-sol-xhigh)
|
|
240
253
|
Dispatch policy: inherit host defaults; selected=none; cap=none (codex, advisory — base role follows provider default)
|
|
241
254
|
Dispatch policy: frontier; selected=fable; cap=fable (claude, enforced — Task model arg)
|
|
242
255
|
```
|
|
@@ -70,16 +70,16 @@ Runtime dispatch reads the resolved policy and provider-specific selection only.
|
|
|
70
70
|
For Codex, provider default effort is displayed when available but is not treated as managed `Uncapped` or as a cap. Provider defaults apply only to explicit inherit/default behavior or base/unpinned fallback paths.
|
|
71
71
|
|
|
72
72
|
```text
|
|
73
|
-
Dispatch policy: balanced (codex, managed capped —
|
|
73
|
+
Dispatch policy: balanced (codex, managed capped — materialized-role)
|
|
74
74
|
Resolved cap: high
|
|
75
75
|
Source: project state
|
|
76
76
|
Provider default effort: medium
|
|
77
|
-
Note: OAT will use
|
|
77
|
+
Note: OAT will use resolver-returned materialized Codex role names up to high. Base/unpinned roles resolve through the provider default only on fallback paths.
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
**Enforcement modes** (from resolver):
|
|
81
81
|
|
|
82
|
-
- `enforced` — the adapter compiled concrete dispatch args and the provider accepted them (Codex:
|
|
82
|
+
- `enforced` — the adapter compiled concrete dispatch args and the provider accepted them (Codex: materialized model+effort roles; Claude: Task `model` parameter).
|
|
83
83
|
- `advisory` — the provider is supported but no value resolved, or an upgrade request was not honored by the provider.
|
|
84
84
|
- `unsupported` — the provider has no registered adapter; the policy is informational only. Dispatch follows provider behavior.
|
|
85
85
|
|
|
@@ -112,7 +112,14 @@ Model and effort are separate axes. Each axis logs one of these states:
|
|
|
112
112
|
- `not-applicable` — this host/API has no meaningful per-dispatch concept for that axis.
|
|
113
113
|
- `host-auto` — exceptional; the host uses that axis internally but the orchestrator cannot read or pin it.
|
|
114
114
|
|
|
115
|
-
In Codex, implementation and fix dispatch classify a preferred effort (`low`, `medium`, `high`, or `xhigh`) and pass it to `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <effort>`. For capped managed policies, the resolver selects `min(preferred, resolved_cap)` and returns
|
|
115
|
+
In Codex, implementation and fix dispatch classify a preferred effort (`low`, `medium`, `high`, or `xhigh`) and pass it to `oat project dispatch-ceiling resolve --provider codex --role implementer --preferred <effort>`. For capped managed policies, the resolver selects `min(preferred, resolved_cap)` and returns a materialized role name compiled from an explicit model+effort target. For managed `Uncapped`, the resolver selects the preferred materialized role with no cap. For inherit/default mode, it returns no materialized role and OAT uses the base/unpinned role. Reviewer dispatch targets the configured cap only when a capped managed policy exists; managed `Uncapped` and inherit/default use base `oat-reviewer` fallback.
|
|
116
|
+
|
|
117
|
+
Because Codex preferred values are effort names while dispatch matrix cells are
|
|
118
|
+
keyed by OAT tiers, managed `Uncapped` maps preferred efforts through the
|
|
119
|
+
managed tier table before resolving matrix targets. For example, `xhigh` maps to
|
|
120
|
+
the highest matching tier, `frontier`, so `--preferred xhigh` can resolve a
|
|
121
|
+
`frontier` Codex matrix target such as
|
|
122
|
+
`oat-phase-implementer-gpt-5-6-sol-xhigh`.
|
|
116
123
|
|
|
117
124
|
In Claude Code, implementation and fix dispatch classify a preferred model tier (`haiku`, `sonnet`, `opus`, or `fable`) and pass it to `oat project dispatch-ceiling resolve --provider claude --role implementer --preferred <model> --orchestrator-tier <current-orchestrator-tier>`. Capped policies select `min(preferred, resolved_cap)`, managed `Uncapped` selects the preferred model, and inherit/default omits `model`. Reviewer dispatch passes a `model` only when the resolver returns one. The separate effort axis is `not-applicable`.
|
|
118
125
|
|
|
@@ -135,9 +142,9 @@ Selected effort: medium
|
|
|
135
142
|
Policy source: repo config
|
|
136
143
|
Provider default effort: high
|
|
137
144
|
Selection mode: capped
|
|
138
|
-
Model axis:
|
|
145
|
+
Model axis: selected:gpt-5.6-terra
|
|
139
146
|
Effort axis: selected:medium
|
|
140
|
-
Dispatch target: oat-phase-implementer-medium
|
|
147
|
+
Dispatch target: oat-phase-implementer-gpt-5-6-terra-medium
|
|
141
148
|
Rationale: shared TypeScript/config substrate; high preferred due to integration risk, capped by configured policy.
|
|
142
149
|
|
|
143
150
|
OAT Dispatch: Phase p03 review
|
|
@@ -148,9 +155,9 @@ Selected effort: xhigh
|
|
|
148
155
|
Policy source: project state
|
|
149
156
|
Provider default effort: medium
|
|
150
157
|
Selection mode: review-target
|
|
151
|
-
Model axis:
|
|
158
|
+
Model axis: selected:gpt-5.6-terra
|
|
152
159
|
Effort axis: selected:xhigh
|
|
153
|
-
Dispatch target: oat-reviewer-xhigh
|
|
160
|
+
Dispatch target: oat-reviewer-gpt-5-6-terra-xhigh
|
|
154
161
|
Rationale: reviewer runs at the configured policy cap for deterministic quality gate behavior.
|
|
155
162
|
|
|
156
163
|
OAT Dispatch: Phase p03 implementation
|
|
@@ -162,10 +169,10 @@ Selected effort: xhigh
|
|
|
162
169
|
Policy source: project state
|
|
163
170
|
Provider default effort: medium
|
|
164
171
|
Selection mode: uncapped
|
|
165
|
-
Model axis:
|
|
172
|
+
Model axis: selected:gpt-5.6-sol
|
|
166
173
|
Effort axis: selected:xhigh
|
|
167
|
-
Dispatch target: oat-phase-implementer-xhigh
|
|
168
|
-
Rationale: high-risk phase; managed uncapped policy allows the preferred
|
|
174
|
+
Dispatch target: oat-phase-implementer-gpt-5-6-sol-xhigh
|
|
175
|
+
Rationale: high-risk phase; managed uncapped policy allows the preferred materialized target.
|
|
169
176
|
|
|
170
177
|
OAT Dispatch: Phase p04 implementation
|
|
171
178
|
Host: Other
|
|
@@ -203,10 +210,10 @@ Add Dispatch Profile rows only when the user has an explicit constraint or prefe
|
|
|
203
210
|
For each phase in the plan (whether sequential or inside a parallel group):
|
|
204
211
|
|
|
205
212
|
1. **Select runtime dispatch control** for the phase and log the chosen control plus rationale.
|
|
206
|
-
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,
|
|
213
|
+
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, selected model+effort axes use the resolver-returned materialized role name, such as `oat-phase-implementer-gpt-5-6-terra-xhigh`. Base `oat-phase-implementer` means provider-default/unpinned fallback.
|
|
207
214
|
3. **Receive the summary:** `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
|
|
208
215
|
- `BLOCKED` stops the run and surfaces the blocker to the user.
|
|
209
|
-
4. **Dispatch the selected reviewer role** with a Review Scope block (phase id, commit range, optional files-changed hint, and dispatch context). 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
|
|
216
|
+
4. **Dispatch the selected reviewer role** with a Review Scope block (phase id, commit range, optional files-changed hint, and dispatch context). 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 resolver-returned materialized reviewer role only for capped managed policies, and use base `oat-reviewer` for managed `Uncapped` or inherit/default. In Claude Code, pass a review `model` only when the resolver returns one and always record `effort_axis=not-applicable`. 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.
|
|
210
217
|
5. **Parse the verdict:** zero Critical + zero Important findings → `pass`; otherwise `fail`.
|
|
211
218
|
6. **On fail, run the bounded fix loop** (see below).
|
|
212
219
|
7. **Update artifacts** (`implementation.md`, `plan.md` review row, `state.md`) and make the mandatory bookkeeping commit.
|