@open-agent-toolkit/cli 0.3.0 → 0.3.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.
- package/assets/agents/oat-reviewer.md +10 -3
- package/assets/bundle-metadata.json +1 -1
- package/assets/config/dispatch-matrix-recommendation.json +63 -43
- package/assets/docs/cli-utilities/configuration.md +20 -8
- package/assets/docs/cli-utilities/workflow-gates.md +1 -1
- package/assets/docs/contributing/index.md +1 -0
- package/assets/docs/contributing/updating-model-guidance.md +106 -0
- package/assets/docs/contributing/verifying-cursor-pins.md +30 -18
- package/assets/docs/provider-sync/providers.md +5 -2
- package/assets/docs/reference/cli-reference.md +1 -1
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/docs/workflows/projects/artifacts.md +1 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +67 -50
- package/assets/docs/workflows/projects/evidence-layers.md +6 -2
- package/assets/docs/workflows/projects/implementation-execution.md +9 -4
- package/assets/docs/workflows/projects/lifecycle.md +8 -6
- package/assets/docs/workflows/projects/programmatic-execution.md +4 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-claude.md +20 -7
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +2 -0
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +82 -25
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/references/phase-execution.md +16 -8
- package/assets/skills/oat-project-import-plan/SKILL.md +7 -4
- package/assets/skills/oat-project-lite/SKILL.md +5 -3
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-plan/SKILL.md +7 -4
- package/assets/skills/oat-project-plan-writing/SKILL.md +28 -16
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-quick-start/SKILL.md +7 -4
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-review-provide/SKILL.md +7 -4
- package/assets/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +30 -29
- package/assets/skills/subagent-orchestration/references/provider-claude.md +41 -36
- package/assets/skills/subagent-orchestration/references/provider-codex.md +30 -35
- package/assets/skills/subagent-orchestration/references/provider-cursor.md +46 -38
- package/assets/templates/plan.md +5 -5
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +23 -1
- package/dist/commands/project/dispatch/record.d.ts.map +1 -1
- package/dist/commands/project/dispatch/record.js +27 -5
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +112 -35
- package/dist/config/dispatch-matrix.d.ts.map +1 -1
- package/dist/config/dispatch-matrix.js +13 -0
- package/dist/providers/ceiling/registry.d.ts +7 -2
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +35 -11
- package/dist/providers/claude/codec/materialize.d.ts +33 -0
- package/dist/providers/claude/codec/materialize.d.ts.map +1 -0
- package/dist/providers/claude/codec/materialize.js +149 -0
- package/dist/providers/claude/codec/sync-extension.d.ts +24 -0
- package/dist/providers/claude/codec/sync-extension.d.ts.map +1 -0
- package/dist/providers/claude/codec/sync-extension.js +312 -0
- package/dist/providers/claude/dispatch-envelope.d.ts +34 -0
- package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -0
- package/dist/providers/claude/dispatch-envelope.js +233 -0
- package/dist/providers/claude/targets.d.ts +48 -0
- package/dist/providers/claude/targets.d.ts.map +1 -0
- package/dist/providers/claude/targets.js +228 -0
- package/dist/providers/codex/codec/shared.d.ts +6 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +8 -0
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
- package/dist/providers/cursor/codec/catalog.js +47 -45
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts +35 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts.map +1 -1
- package/dist/providers/identity/claude-runtime-observation.fixtures.js +225 -12
- package/dist/providers/shared/registry.d.ts.map +1 -1
- package/dist/providers/shared/registry.js +5 -2
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.9
|
|
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, Task
|
|
6
6
|
color: yellow
|
|
@@ -72,7 +72,12 @@ The orchestrator owns dispatch control. Do not read `plan.md` Dispatch Profile r
|
|
|
72
72
|
|
|
73
73
|
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`.
|
|
74
74
|
|
|
75
|
-
For Claude Code,
|
|
75
|
+
For Claude Code, an effort-pinned managed review launches the exact generated
|
|
76
|
+
variant returned by `providers.claude.dispatchArgs.variant`; the variant's
|
|
77
|
+
frontmatter applies both model and effort because the Agent call has no effort
|
|
78
|
+
field. Any per-call model must match the definition. Derive both selected axes
|
|
79
|
+
from resolver output and the launcher payload. Legacy model-only and inherited
|
|
80
|
+
routes retain their existing provider-default or inherited effort behavior.
|
|
76
81
|
|
|
77
82
|
## Bounded Reviewer Reconnaissance
|
|
78
83
|
|
|
@@ -430,6 +435,8 @@ worker claims, and root-inline coverage}
|
|
|
430
435
|
|
|
431
436
|
## Findings
|
|
432
437
|
|
|
438
|
+
{Every finding MUST be written as a markdown list item — a line starting with `- `, `* `, `+ `, or `1. `. The gate counts list items only; a finding written as a bold paragraph, a heading, or any other prose shape counts as zero and makes the gate refuse the whole artifact.}
|
|
439
|
+
|
|
433
440
|
### Critical
|
|
434
441
|
|
|
435
442
|
{If none: "None"}
|
|
@@ -494,7 +501,7 @@ Run the `oat-project-review-receive` skill to convert findings into plan tasks.
|
|
|
494
501
|
|
|
495
502
|
```
|
|
496
503
|
|
|
497
|
-
Gate parsing contract: artifact-mode reviews, including reviews spawned by `oat gate review`, MUST include either the complete `Findings by severity: {N} critical, {N} high, {N} medium, {N} low` count line or the standard `## Findings` sections shown above with every severity subsection present. When more than one count source is present — the frontmatter count fields, the count line, and the sections — the counts must agree; the gate refuses an artifact whose sources contradict each other rather than picking one.
|
|
504
|
+
Gate parsing contract: artifact-mode reviews, including reviews spawned by `oat gate review`, MUST include either the complete `Findings by severity: {N} critical, {N} high, {N} medium, {N} low` count line or the standard `## Findings` sections shown above with every severity subsection present. When more than one count source is present — the frontmatter count fields, the count line, and the sections — the counts must agree; the gate refuses an artifact whose sources contradict each other rather than picking one. How a section is counted is load-bearing: the gate counts only markdown list items (`- `, `* `, `+ `, or `1. `) as findings. A finding written as a bold paragraph, a heading, or any other prose shape counts as zero, so a section of prose findings under a non-zero count line is a contradiction and the gate refuses the artifact — the entire review is rejected, not just the miscounted section.
|
|
498
505
|
|
|
499
506
|
For every artifact-mode code review, `oat_review_head_sha` is required and must be the full 40-character commit SHA at the head of the authoritative review range. Resolve it with `git rev-parse <authoritative-range-head>^{commit}`. An abbreviated SHA, symbolic ref, or range string is invalid. When the review narrowed, `oat_review_range`, `oat_prior_review_artifact`, and `oat_prior_review_head_sha` are also required; the prior head must likewise be a full 40-character SHA. These code-review fields are independent of the gate-only block and do not apply to artifact, analysis, or structured-output reviews.
|
|
500
507
|
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-
|
|
2
|
+
"version": "2026-09-23.2",
|
|
3
3
|
"providers": {
|
|
4
4
|
"codex": {
|
|
5
5
|
"economy": {
|
|
6
6
|
"candidates": [
|
|
7
7
|
{
|
|
8
8
|
"harness": "codex",
|
|
9
|
-
"model": "gpt-
|
|
9
|
+
"model": "gpt-6-luna",
|
|
10
10
|
"effort": "low"
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"harness": "codex",
|
|
14
|
-
"model": "gpt-
|
|
14
|
+
"model": "gpt-6-luna",
|
|
15
15
|
"effort": "medium"
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"harness": "codex",
|
|
19
|
-
"model": "gpt-
|
|
19
|
+
"model": "gpt-6-luna",
|
|
20
20
|
"effort": "high"
|
|
21
21
|
}
|
|
22
22
|
]
|
|
@@ -25,28 +25,13 @@
|
|
|
25
25
|
"candidates": [
|
|
26
26
|
{
|
|
27
27
|
"harness": "codex",
|
|
28
|
-
"model": "gpt-
|
|
28
|
+
"model": "gpt-6-luna",
|
|
29
29
|
"effort": "xhigh"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"harness": "codex",
|
|
33
|
-
"model": "gpt-
|
|
34
|
-
"effort": "
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"harness": "codex",
|
|
38
|
-
"model": "gpt-5.6-terra",
|
|
39
|
-
"effort": "medium"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"harness": "codex",
|
|
43
|
-
"model": "gpt-5.6-terra",
|
|
44
|
-
"effort": "high"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"harness": "codex",
|
|
48
|
-
"model": "gpt-5.6-terra",
|
|
49
|
-
"effort": "xhigh"
|
|
33
|
+
"model": "gpt-6-luna",
|
|
34
|
+
"effort": "max"
|
|
50
35
|
}
|
|
51
36
|
]
|
|
52
37
|
},
|
|
@@ -54,17 +39,17 @@
|
|
|
54
39
|
"candidates": [
|
|
55
40
|
{
|
|
56
41
|
"harness": "codex",
|
|
57
|
-
"model": "gpt-
|
|
42
|
+
"model": "gpt-6-sol",
|
|
58
43
|
"effort": "low"
|
|
59
44
|
},
|
|
60
45
|
{
|
|
61
46
|
"harness": "codex",
|
|
62
|
-
"model": "gpt-
|
|
47
|
+
"model": "gpt-6-sol",
|
|
63
48
|
"effort": "medium"
|
|
64
49
|
},
|
|
65
50
|
{
|
|
66
51
|
"harness": "codex",
|
|
67
|
-
"model": "gpt-
|
|
52
|
+
"model": "gpt-6-sol",
|
|
68
53
|
"effort": "high"
|
|
69
54
|
}
|
|
70
55
|
]
|
|
@@ -73,12 +58,12 @@
|
|
|
73
58
|
"candidates": [
|
|
74
59
|
{
|
|
75
60
|
"harness": "codex",
|
|
76
|
-
"model": "gpt-
|
|
61
|
+
"model": "gpt-6-sol",
|
|
77
62
|
"effort": "xhigh"
|
|
78
63
|
},
|
|
79
64
|
{
|
|
80
65
|
"harness": "codex",
|
|
81
|
-
"model": "gpt-
|
|
66
|
+
"model": "gpt-6-sol",
|
|
82
67
|
"effort": "max"
|
|
83
68
|
}
|
|
84
69
|
]
|
|
@@ -86,16 +71,61 @@
|
|
|
86
71
|
},
|
|
87
72
|
"claude": {
|
|
88
73
|
"economy": {
|
|
89
|
-
"candidates": [
|
|
74
|
+
"candidates": [
|
|
75
|
+
"haiku",
|
|
76
|
+
{
|
|
77
|
+
"harness": "claude",
|
|
78
|
+
"model": "claude-sonnet-5",
|
|
79
|
+
"effort": "medium"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
90
82
|
},
|
|
91
83
|
"balanced": {
|
|
92
|
-
"candidates": [
|
|
84
|
+
"candidates": [
|
|
85
|
+
{
|
|
86
|
+
"harness": "claude",
|
|
87
|
+
"model": "claude-opus-5-5",
|
|
88
|
+
"effort": "low"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
93
91
|
},
|
|
94
92
|
"high": {
|
|
95
|
-
"candidates": [
|
|
93
|
+
"candidates": [
|
|
94
|
+
{
|
|
95
|
+
"harness": "claude",
|
|
96
|
+
"model": "claude-opus-5-5",
|
|
97
|
+
"effort": "low"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"harness": "claude",
|
|
101
|
+
"model": "claude-opus-5-5",
|
|
102
|
+
"effort": "medium"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"harness": "claude",
|
|
106
|
+
"model": "claude-opus-5-5",
|
|
107
|
+
"effort": "high"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
96
110
|
},
|
|
97
111
|
"frontier": {
|
|
98
|
-
"candidates": [
|
|
112
|
+
"candidates": [
|
|
113
|
+
{
|
|
114
|
+
"harness": "claude",
|
|
115
|
+
"model": "claude-opus-5-5",
|
|
116
|
+
"effort": "xhigh"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"harness": "claude",
|
|
120
|
+
"model": "claude-opus-5-5",
|
|
121
|
+
"effort": "max"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"harness": "claude",
|
|
125
|
+
"model": "claude-fable-5-1",
|
|
126
|
+
"effort": "high"
|
|
127
|
+
}
|
|
128
|
+
]
|
|
99
129
|
}
|
|
100
130
|
},
|
|
101
131
|
"cursor": {
|
|
@@ -107,24 +137,14 @@
|
|
|
107
137
|
]
|
|
108
138
|
},
|
|
109
139
|
"balanced": {
|
|
110
|
-
"candidates": [
|
|
111
|
-
"cursor-grok-4.5-high",
|
|
112
|
-
"gpt-5.6-terra-high",
|
|
113
|
-
"claude-opus-5-thinking-low"
|
|
114
|
-
]
|
|
140
|
+
"candidates": ["cursor-grok-4.5-high", "gpt-5.6-terra-high"]
|
|
115
141
|
},
|
|
116
142
|
"high": {
|
|
117
|
-
"candidates": [
|
|
118
|
-
"claude-opus-5-thinking-medium",
|
|
119
|
-
"gpt-5.6-sol-medium",
|
|
120
|
-
"claude-opus-5-thinking-high",
|
|
121
|
-
"gpt-5.6-sol-high"
|
|
122
|
-
]
|
|
143
|
+
"candidates": ["gpt-5.6-sol-medium", "gpt-5.6-sol-high"]
|
|
123
144
|
},
|
|
124
145
|
"frontier": {
|
|
125
146
|
"candidates": [
|
|
126
147
|
"gpt-5.6-sol-xhigh",
|
|
127
|
-
"claude-opus-5-thinking-xhigh",
|
|
128
148
|
"gpt-5.6-sol-max",
|
|
129
149
|
"claude-fable-5-thinking-high"
|
|
130
150
|
]
|
|
@@ -475,12 +475,24 @@ even when the reusable ladder is user-owned.
|
|
|
475
475
|
The example above is illustrative rather than a copy of the bundled ladder; its
|
|
476
476
|
tiers are trimmed for readability.
|
|
477
477
|
|
|
478
|
-
The bundled recommendation covers
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
478
|
+
The bundled recommendation covers 10 Codex model/effort combinations: GPT-6
|
|
479
|
+
Luna at `low` through `max`, and GPT-6 Sol at the same efforts.
|
|
480
|
+
Claude covers `haiku`, plus explicit Sonnet, Opus, and Fable
|
|
481
|
+
model/effort pairs. Effort-pinned Claude cells require a recognized versioned
|
|
482
|
+
model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5`,
|
|
483
|
+
`opus-4-7`, `opus-4-6`, or `sonnet-4-6`) or a matching
|
|
484
|
+
`ANTHROPIC_DEFAULT_<FAMILY>_MODEL` pin. A custom provider pin must declare
|
|
485
|
+
matching capability through `<PIN>_SUPPORTED_CAPABILITIES`: `effort` enables
|
|
486
|
+
`low`, `medium`, and `high`, while `xhigh_effort` and `max_effort` add those
|
|
487
|
+
rungs. A present declaration is authoritative. Host-managed routing through
|
|
488
|
+
`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` takes precedence over family pins, and a
|
|
489
|
+
bare effort-pinned alias fails closed when its generation cannot be proven.
|
|
490
|
+
Model-only Claude aliases remain compatible through the per-call model argument
|
|
491
|
+
and report `effortAxis: not-applicable` because the Agent API exposes no
|
|
492
|
+
per-call effort argument. The recommendation carries 10 Cursor candidates
|
|
493
|
+
across four tiers, drawn from a materialization
|
|
494
|
+
catalogue with 17 catalogued multi-family flat IDs spanning Composer, Claude
|
|
495
|
+
(Sonnet, Opus 5.5, and Fable), GPT, and Grok; the two figures differ because some
|
|
484
496
|
approved mappings stay materializable without being recommended. An explicit
|
|
485
497
|
mapping connects each flat ladder ID to a separate bracket-form frontmatter
|
|
486
498
|
model; configuration and skills never derive or normalize either form.
|
|
@@ -598,7 +610,7 @@ not the exact managed phase-agent path.
|
|
|
598
610
|
| Provider | Exact phase-agent or optional-child mechanism |
|
|
599
611
|
| -------- | ---------------------------------------------------------------------------------------------------- |
|
|
600
612
|
| Codex | `providers.codex.dispatchArgs.variant` as `agent_type`, or a fresh child pinned to model plus effort |
|
|
601
|
-
| Claude | `providers.claude.dispatchArgs.
|
|
613
|
+
| Claude | `providers.claude.dispatchArgs.variant` for effort-pinned targets; exact `model` for legacy targets |
|
|
602
614
|
| Cursor | `providers.cursor.dispatchArgs.variant` as the exact native agent type first |
|
|
603
615
|
|
|
604
616
|
Project sync materializes the supported Codex and Cursor catalogues and every
|
|
@@ -617,7 +629,7 @@ ownership. Cleanup reconciles only the current owner. Cursor's mapping registry
|
|
|
617
629
|
rejects unknown flat IDs instead of writing unverified frontmatter.
|
|
618
630
|
|
|
619
631
|
Reviewer resolution uses the final candidate at the configured review ceiling.
|
|
620
|
-
Codex and
|
|
632
|
+
Codex, Cursor, and effort-pinned Claude targets select exact native reviewer variants; legacy Claude passes the
|
|
621
633
|
resolver's exact model argument. Timeout retries preserve the same complete
|
|
622
634
|
payload. A lower reviewer candidate requires a separate reviewed contract.
|
|
623
635
|
|
|
@@ -605,7 +605,7 @@ that candidate's model and is not double-pinned.
|
|
|
605
605
|
"model": "composer-2.5",
|
|
606
606
|
"reasoningEffort": "provider-default"
|
|
607
607
|
},
|
|
608
|
-
"models": ["composer-2.5", "gpt-5.5-xhigh", "claude-opus-
|
|
608
|
+
"models": ["composer-2.5", "gpt-5.5-xhigh", "claude-opus-5-5"],
|
|
609
609
|
"availabilityCommand": [
|
|
610
610
|
"sh",
|
|
611
611
|
"-c",
|
|
@@ -17,4 +17,5 @@ Use this section when you are changing OAT itself rather than consuming it as a
|
|
|
17
17
|
- [Commit Conventions](commit-conventions.md) - Traceable commit patterns for project and docs work.
|
|
18
18
|
- [Hooks and Safety](hooks-and-safety.md) - Safety and mutation contracts for provider-sync behavior.
|
|
19
19
|
- [Smoke Testing](smoke-testing.md) - Runbook for the live workflow smoke runner: prerequisites, scenarios, evidence reports, and recovery.
|
|
20
|
+
- [Updating Model Guidance](updating-model-guidance.md) - Source map and verification checklist for provider model refreshes.
|
|
20
21
|
- [Verifying Cursor Pins](verifying-cursor-pins.md) - Runbook for probe-verifying a Cursor model pin before shipping it.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Updating Model Guidance
|
|
3
|
+
description: How to verify provider model IDs, update supported dispatch targets and preferred ladders, sync agent views, and validate a model refresh.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Updating Model Guidance
|
|
7
|
+
|
|
8
|
+
A model refresh crosses several independently owned surfaces. First establish the
|
|
9
|
+
provider's exact model ID and effort controls; then update the runtime's supported
|
|
10
|
+
targets, the optional preferred dispatch ladder, and the human selection guidance.
|
|
11
|
+
A model appearing in a provider's catalog does not by itself establish that a
|
|
12
|
+
subagent pin resolves to it. Keep an explicit user's dispatch cells intact unless
|
|
13
|
+
they choose to adopt a newer recommendation.
|
|
14
|
+
|
|
15
|
+
## Source Ownership
|
|
16
|
+
|
|
17
|
+
| Concern | Canonical source | Effect |
|
|
18
|
+
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| Codex model and effort support | `packages/cli/src/providers/codex/codec/shared.ts`, `packages/cli/src/commands/project/dispatch-ceiling/index.ts`, and `packages/cli/src/providers/ceiling/registry.ts` | The catalogue materializes role variants; candidate validation accepts supported efforts through `max`, while the scalar ceiling in `packages/cli/src/config/oat-config.ts` stops at `max`. |
|
|
20
|
+
| Claude generation and effort support | `packages/cli/src/providers/claude/targets.ts` and `packages/cli/src/providers/claude/dispatch-envelope.ts` | Resolver validates the versioned model and permitted efforts, including the schema for a dispatch envelope. |
|
|
21
|
+
| Cursor flat ID to frontmatter selector | `packages/cli/src/providers/cursor/codec/catalog.ts` | Approved, evidence-backed mappings can be materialized; flat IDs are not derived from selector syntax. |
|
|
22
|
+
| Bundled preferred ladder | `packages/cli/config/dispatch-matrix-recommendation.json` | Ordered candidates per provider and tier; it is a preference, not the entire support catalog. |
|
|
23
|
+
| Dispatch advice | `.agents/skills/subagent-orchestration/SKILL.md` and `references/provider-{codex,claude,cursor}.md` | Agents learn the task-class routes and evidence limits. Increment `metadata.version` when bundled skill content changes. |
|
|
24
|
+
| Published CLI asset | `packages/cli/assets/config/dispatch-matrix-recommendation.json` | Generated copy of the canonical recommendation; regenerate via the CLI asset build. |
|
|
25
|
+
| Generated project agent views | `.codex/agents`, `.codex/config.toml`, `.claude/agents`, `.cursor/agents` | Outputs of `oat sync`; never use them as catalog sources. |
|
|
26
|
+
|
|
27
|
+
A model can remain supported for a user's explicit configuration without being
|
|
28
|
+
recommended by the new ladder. For example, this refresh keeps GPT-5.6 Codex
|
|
29
|
+
and Cursor targets available while preferring GPT-6 in Codex. Claude Opus 4.8
|
|
30
|
+
and 5.0 have left current supported generations and recommendations; historical
|
|
31
|
+
probe records can still describe past behavior, clearly labeled as historical.
|
|
32
|
+
|
|
33
|
+
## Establish Provider Evidence
|
|
34
|
+
|
|
35
|
+
Check the provider's official model documentation and the local runtime before
|
|
36
|
+
editing an ID or effort range. The [OpenAI model catalog](https://developers.openai.com/api/docs/models)
|
|
37
|
+
lists GPT-6 Sol and Luna; compare it with the installed Codex runtime model
|
|
38
|
+
cache for the exact names and local effort set. The
|
|
39
|
+
[Anthropic Opus 5.5 documentation](https://www.anthropic.com/claude-opus-5-5)
|
|
40
|
+
names `claude-opus-5-5`; confirm a Claude Code invocation reports that exact
|
|
41
|
+
assistant model before admitting it to the Claude catalog. Claude subagent
|
|
42
|
+
`model` and `effort` frontmatter select a per-agent route; see the
|
|
43
|
+
[Claude Code subagent fields](https://code.claude.com/docs/en/sub-agents).
|
|
44
|
+
An API model announcement alone does not prove a third-party harness supports
|
|
45
|
+
or resolves that model.
|
|
46
|
+
|
|
47
|
+
Cursor requires an additional mapping-specific native desktop probe. Follow
|
|
48
|
+
[Verifying Cursor Pins](verifying-cursor-pins.md): launch a temporary subagent
|
|
49
|
+
in Cursor Agent Chat and compare the `subagentStart.subagent_model` hook value
|
|
50
|
+
with the proposed flat ID, using positive and unknown-family/effort controls.
|
|
51
|
+
Record the submitted selector, resolved model, time, and evidence path in the
|
|
52
|
+
mapping. `agent models` proves catalog visibility only; CLI `agent -p` and
|
|
53
|
+
remote runs do not emit the required native subagent hook.
|
|
54
|
+
|
|
55
|
+
During this refresh, `agent models` listed `claude-opus-5-5-*` flat IDs.
|
|
56
|
+
The CLI `agent -p` bracket selector returned `Cannot use this model`, but a
|
|
57
|
+
later Cursor desktop 3.20.14 native hook probe (provenance at
|
|
58
|
+
`packages/cli/src/providers/cursor/codec/__fixtures__/README.md`, observations
|
|
59
|
+
in adjacent JSONL records) resolved each of the five Opus 5.5 effort
|
|
60
|
+
selectors to its matching flat ID.
|
|
61
|
+
The positive Sonnet control resolved, while invalid family and effort controls
|
|
62
|
+
fell back to defaults. Five Opus 5.5 mappings are now approved for desktop
|
|
63
|
+
subagents; the CLI result alone does not establish that the same bracket syntax
|
|
64
|
+
works as a CLI top-level `--model` argument. Likewise, do not add GPT-6
|
|
65
|
+
Cursor targets until that runtime lists and verifies them. See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
|
|
66
|
+
for the distinction between catalog, configured mapping, and runtime identity.
|
|
67
|
+
|
|
68
|
+
## Change and Validate
|
|
69
|
+
|
|
70
|
+
1. Update the supported catalog for each verified runtime and its tests. Preserve
|
|
71
|
+
old model targets that are intentionally still supported; remove retired
|
|
72
|
+
generations from active support and recommendations, while retaining
|
|
73
|
+
historically sourced fixtures when they are explicitly testing history.
|
|
74
|
+
2. Update the bundled recommendation's ordered candidate cells and version.
|
|
75
|
+
Check the _last_ candidate in each tier: it determines that tier's pinned
|
|
76
|
+
self-review target. Keep the ladder within its provider's supported catalog.
|
|
77
|
+
3. Update the provider selection references and bump the canonical skill
|
|
78
|
+
version once for the PR. Search the repository for the old and new IDs,
|
|
79
|
+
including schemas, fixtures, examples, and generated projections. Replace
|
|
80
|
+
current guidance; do not rewrite clearly marked historical evidence.
|
|
81
|
+
4. Build the CLI to regenerate its bundled asset, run project sync, and inspect
|
|
82
|
+
the generated role definitions and configuration diff. Use `oat sync --scope project --dry-run` afterward to verify source/output parity.
|
|
83
|
+
5. Run the focused catalog, recommendation, sync, and asset tests, followed by
|
|
84
|
+
the repository gates in `AGENTS.md`: `pnpm check`, `pnpm type-check`,
|
|
85
|
+
`pnpm test`, `pnpm build`, `pnpm run check:skill-bumps`,
|
|
86
|
+
`pnpm release:check-versions`, `pnpm release:validate`, and
|
|
87
|
+
`pnpm build:docs`. Fetch `origin/main` before the version check. For
|
|
88
|
+
`.agents/skills` changes also run `pnpm lint` and `pnpm format`.
|
|
89
|
+
Inspect cache replay in Turborepo output; force fresh tests when the
|
|
90
|
+
evidence matters. Record exact failures and distinguish an unavailable
|
|
91
|
+
native provider probe from a successful one.
|
|
92
|
+
|
|
93
|
+
Changes to shipped skills, generated agents, CLI assets, or docs require the
|
|
94
|
+
public packages' lockstep version bump under the repository release policy.
|
|
95
|
+
Follow [Contributing Code](code.md) for the current validation and PR workflow.
|
|
96
|
+
|
|
97
|
+
## Adoption Is Separate
|
|
98
|
+
|
|
99
|
+
The bundled ladder is a default for missing provider/tier cells. `oat config
|
|
100
|
+
adopt dispatch-matrix --shared`, `--local`, or `--user` fills missing cells but
|
|
101
|
+
does not replace populated explicit cells, even when its recommendation version
|
|
102
|
+
changes. A user who wants the new model ordering must edit those cells or
|
|
103
|
+
clear and re-adopt them deliberately. The active project's named ceiling is a
|
|
104
|
+
separate policy in its `state.md`; a model update must not silently change it.
|
|
105
|
+
See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#ownership-and-adoption)
|
|
106
|
+
for config precedence and examples.
|
|
@@ -6,8 +6,8 @@ description: 'Runbook for probe-verifying a Cursor model pin before shipping it:
|
|
|
6
6
|
# Verifying Cursor Pins
|
|
7
7
|
|
|
8
8
|
A Cursor model pin maps an OAT ladder model ID to the frontmatter selector that
|
|
9
|
-
materialized role files carry, for example `
|
|
10
|
-
`
|
|
9
|
+
materialized role files carry, for example `gpt-5.6-sol-medium` to
|
|
10
|
+
`gpt-5.6-sol[reasoning=medium]`. Adding one to
|
|
11
11
|
`packages/cli/src/providers/cursor/codec/catalog.ts` requires evidence that
|
|
12
12
|
Cursor actually resolves that selector to the intended model.
|
|
13
13
|
|
|
@@ -26,7 +26,7 @@ that look like evidence are not:
|
|
|
26
26
|
ask.
|
|
27
27
|
|
|
28
28
|
The catalog alone is also insufficient wherever a family carries both a
|
|
29
|
-
thinking and a non-thinking flat ID at the same rung. Opus 5
|
|
29
|
+
thinking and a non-thinking flat ID at the same rung. Historically, Opus 5 carried both at
|
|
30
30
|
low, medium, and high, so the bracket selector is genuinely ambiguous there and
|
|
31
31
|
only a probe can resolve it. At rungs where only one variant exists, the
|
|
32
32
|
catalog settles the question without a probe — but you still need the probe to
|
|
@@ -57,6 +57,15 @@ flag) is empty and `model_id` is absent. Thinking is therefore established by
|
|
|
57
57
|
the resolved slug itself, which is sound because the non-thinking IDs are
|
|
58
58
|
distinct.
|
|
59
59
|
|
|
60
|
+
The 2026-09-23 Opus 5.5 desktop probe is an example: all five
|
|
61
|
+
`claude-opus-5-5[effort=...]` selectors resolved to matching flat IDs in
|
|
62
|
+
Cursor 3.20.14, while `effort=ultra` fell back to medium. The Sonnet 5 high control
|
|
63
|
+
resolved to `claude-sonnet-5-thinking-high`, correcting an older flat ID. The provenance summary at
|
|
64
|
+
`packages/cli/src/providers/cursor/codec/__fixtures__/README.md` identifies
|
|
65
|
+
the adjacent redacted summary and 32-event native JSONL records in the OAT
|
|
66
|
+
repository. Re-run this procedure for a new family or changed
|
|
67
|
+
provider behavior.
|
|
68
|
+
|
|
60
69
|
## Prerequisites
|
|
61
70
|
|
|
62
71
|
- Cursor desktop app, with the repository open as a workspace.
|
|
@@ -133,10 +142,10 @@ the probe is the hook payload, not anything the agent produces.
|
|
|
133
142
|
````markdown
|
|
134
143
|
---
|
|
135
144
|
# TEMPORARY pin probe - not oat-managed. Delete after probing.
|
|
136
|
-
# Class: subject - expect
|
|
137
|
-
name: zz-pin-probe-
|
|
138
|
-
description: Temporary pin probe (subject) for
|
|
139
|
-
model:
|
|
145
|
+
# Class: subject - expect gpt-5.6-sol-medium
|
|
146
|
+
name: zz-pin-probe-sol56-medium
|
|
147
|
+
description: Temporary pin probe (subject) for gpt-5.6-sol[reasoning=medium]. Delete after use.
|
|
148
|
+
model: gpt-5.6-sol[reasoning=medium]
|
|
140
149
|
---
|
|
141
150
|
|
|
142
151
|
## Role
|
|
@@ -144,7 +153,7 @@ model: claude-opus-5[effort=medium]
|
|
|
144
153
|
You are a throwaway pin probe. Run exactly one command and then stop:
|
|
145
154
|
|
|
146
155
|
```bash
|
|
147
|
-
echo PIN-PROBE zz-pin-probe-
|
|
156
|
+
echo PIN-PROBE zz-pin-probe-sol56-medium
|
|
148
157
|
```
|
|
149
158
|
|
|
150
159
|
Then reply with the single word `done`. Do not read files or use any
|
|
@@ -162,12 +171,12 @@ corroborating `preToolUse` event.
|
|
|
162
171
|
Probe every rung you intend to pin. Then add controls, which are what make the
|
|
163
172
|
subject results interpretable:
|
|
164
173
|
|
|
165
|
-
| Class | Example selector
|
|
166
|
-
| ---------------- |
|
|
167
|
-
| Subject | `
|
|
168
|
-
| Positive control | `claude-sonnet-5[effort=high]`
|
|
169
|
-
| Negative control | `claude-opus-9[effort=high]`
|
|
170
|
-
| Negative control | `
|
|
174
|
+
| Class | Example selector | Proves |
|
|
175
|
+
| ---------------- | -------------------------------- | ---------------------------------------------------------------- |
|
|
176
|
+
| Subject | `gpt-5.6-sol[reasoning=medium]` | The mapping resolves as intended |
|
|
177
|
+
| Positive control | `claude-sonnet-5[effort=high]` | Reproduces an already-verified mapping |
|
|
178
|
+
| Negative control | `claude-opus-9[effort=high]` | Unknown family — the channel reports resolution, not the request |
|
|
179
|
+
| Negative control | `gpt-5.6-sol[reasoning=unknown]` | Unknown effort — exposes rung-level fallback |
|
|
171
180
|
|
|
172
181
|
The negative controls carry most of the interpretive weight. Without them you
|
|
173
182
|
cannot distinguish a hook that reports what Cursor actually resolved from one
|
|
@@ -194,6 +203,9 @@ PY
|
|
|
194
203
|
|
|
195
204
|
## Interpreting results
|
|
196
205
|
|
|
206
|
+
The following Opus 5 observations document earlier probes; Opus 5 is retired
|
|
207
|
+
from current mappings. Use the current live catalogue for new selectors.
|
|
208
|
+
|
|
197
209
|
### Unresolvable components fall back silently
|
|
198
210
|
|
|
199
211
|
Cursor does not reject a malformed pin. It substitutes a default for whichever
|
|
@@ -240,10 +252,10 @@ approved it:
|
|
|
240
252
|
|
|
241
253
|
```ts
|
|
242
254
|
approvedMapping(
|
|
243
|
-
'
|
|
244
|
-
'
|
|
245
|
-
'
|
|
246
|
-
{ probeName: 'zz-pin-probe-
|
|
255
|
+
'gpt-5.6-sol-medium',
|
|
256
|
+
'gpt-5.6-sol[reasoning=medium]',
|
|
257
|
+
'gpt-reasoning',
|
|
258
|
+
{ probeName: 'zz-pin-probe-sol56-medium', verifiedAt: '2026-07-25', evidencePath: '...' },
|
|
247
259
|
),
|
|
248
260
|
```
|
|
249
261
|
|
|
@@ -12,7 +12,9 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
12
12
|
- Project: `.agents/skills` -> `.claude/skills`, `.agents/agents` -> `.claude/agents`, `.agents/rules` -> `.claude/rules`
|
|
13
13
|
- User: `~/.agents/skills` -> `~/.claude/skills`, `~/.agents/agents` -> `~/.claude/agents`
|
|
14
14
|
- Rule files stay `.md` and are rendered with Claude-compatible frontmatter when needed
|
|
15
|
-
- Managed phase implementers and
|
|
15
|
+
- Managed effort-pinned phase implementers and reviewers use the exact generated candidate returned as `providers.claude.dispatchArgs.variant`; its frontmatter carries model and effort because Agent has no per-call effort field. Legacy model-only candidates retain `providers.claude.dispatchArgs.model`, and any model supplied alongside a variant must match its definition.
|
|
16
|
+
- Generated names preserve the full normalized configured model ID after the provider token. A versioned ID such as `claude-opus-5-5` therefore produces the deterministic slug `oat-reviewer-claude-claude-opus-5-5-high`. This doubled `claude-` is the current managed-role contract, not a request to rename existing roles.
|
|
17
|
+
- Project variants live under `.claude/agents/`; user variants live under `~/.claude/agents/`. Sync removes stale managed variants for the reconciled owner while preserving base roles and unmanaged agents.
|
|
16
18
|
- Claude's official subagent contract says existing agent directories are watched and changes load within seconds. It describes a conditional restart for the first agent added to a directory that was absent when the session started, for agents added through `--add-dir`, and when Claude starts with `--disable-slash-commands`. OAT cannot observe those session-start and launch-mode facts. After a successful provider-visible file change, the generic OAT repository policy therefore conservatively advises starting a new provider session; it does not claim that Claude hot-reloaded the file or that the application process must restart. The provider semantics were verified against [Claude Code subagent documentation](https://code.claude.com/docs/en/sub-agents) on 2026-08-31.
|
|
17
19
|
|
|
18
20
|
=== "Cursor"
|
|
@@ -100,7 +102,8 @@ provenance and cannot replace those values.
|
|
|
100
102
|
Only an explicit pre-start native role-selection rejection permits another
|
|
101
103
|
target-preserving route. An accepted child, including one that later returns
|
|
102
104
|
`BLOCKED` or lacks telemetry, is a task outcome rather than a fallback signal.
|
|
103
|
-
Claude binds the exact
|
|
105
|
+
Claude binds the exact generated variant for effort-pinned targets or the exact
|
|
106
|
+
model argument for legacy targets. Cursor launches the
|
|
104
107
|
exact native variant. A missing or unselectable managed target blocks rather
|
|
105
108
|
than falling back to the root target or a base role.
|
|
106
109
|
|
|
@@ -153,7 +153,7 @@ Notable commands introduced in the current CLI surface:
|
|
|
153
153
|
- `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
|
|
154
154
|
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete inventory coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
155
155
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
156
|
-
- `oat project dispatch record --event-file <json-file-or-dash> [--project <project-path>]` - validate one generic dispatch record plus its namespaced OAT evidence event, and persist it into the project's append-only `dispatch/` journal (optional; no lifecycle skill requires
|
|
156
|
+
- `oat project dispatch record --event-file <json-file-or-dash> [--project <project-path>]` - validate one generic dispatch record plus its namespaced OAT evidence event, and persist it into the project's append-only `dispatch/` journal (optional; no lifecycle skill requires persistence). Omit `--project` to validate without persisting. Managed, effort-pinned Claude launches use the validation-only form before launch: the input carries `claudeLaunch` with the real resolver result, generated definition, and proposed payload, plus `recordBase` and `event`. The command validates their agreement and derives the configured invocation fields; callers cannot copy those fields into `recordBase`. Revision 1 is `dispatch/<request-id>.json` and every later revision is `dispatch/<request-id>@<NNNN>.json`; superseded revisions are never replaced or removed. The command validates and records evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never persisted, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/projects/evidence-layers.md).
|
|
157
157
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
|
|
158
158
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../cli-utilities/project-log.md).
|
|
159
159
|
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|
|
@@ -133,7 +133,7 @@ Current schema keys:
|
|
|
133
133
|
| `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. |
|
|
134
134
|
| `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`. |
|
|
135
135
|
| `workflow.dispatchCeiling.providers.<provider>` | `object` or legacy scalar | unset | Reusable provider candidate ladder. The canonical shape maps `economy`, `balanced`, `high`, and `frontier` to ordered candidate cells; project and phase state record only a named maximum over that ladder. |
|
|
136
|
-
| `workflow.dispatchCeiling.providers.<provider>.<tier>` | `{ candidates: [...] }` | unset | One ordered candidate cell. Codex entries carry exact `model` plus `effort` and resolve to materialized roles; Claude entries
|
|
136
|
+
| `workflow.dispatchCeiling.providers.<provider>.<tier>` | `{ candidates: [...] }` | unset | One ordered candidate cell. Codex and effort-pinned Claude entries carry exact `model` plus `effort` and resolve to materialized roles; legacy Claude model-only entries remain supported; Cursor strings remain opaque and pass to Cursor byte-for-byte. The final candidate defines that tier's reviewer ceiling. |
|
|
137
137
|
| `workflow.dispatchCeiling.providers.{codex,claude,cursor}` | `string`, route, or target | unset | Legacy compatibility input normalized to a one-candidate ladder. New configuration should use tiered candidate cells. The flat keys `workflow.dispatchCeiling.codex` and `workflow.dispatchCeiling.claude` were removed without migration. |
|
|
138
138
|
| `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`. |
|
|
139
139
|
| `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. |
|
|
@@ -223,7 +223,7 @@ Each inner array is a group of phases that execute concurrently in their own wor
|
|
|
223
223
|
- Each group must contain **2 or more** phases — singleton groups are rejected.
|
|
224
224
|
- Every phase ID must exist in the plan body.
|
|
225
225
|
- No phase may appear in more than one group.
|
|
226
|
-
- Parallelism is only honored at Tier 1 (native subagents). Tier 2 degrades parallel groups to sequential target-preserving execution, not unconditional inline review. Concrete managed Claude reviewers
|
|
226
|
+
- Parallelism is only honored at Tier 1 (native subagents). Tier 2 degrades parallel groups to sequential target-preserving execution, not unconditional inline review. Concrete managed Claude reviewers use the exact generated `providers.claude.dispatchArgs.variant` for effort-pinned targets and retain `providers.claude.dispatchArgs.model` only for legacy model-only targets; Cursor reviewers retain the exact `providers.cursor.dispatchArgs.variant` native agent type; Codex retains its exact role or pinned child. Every retry preserves the complete target. Inline review requires verified equivalent host controls or an explicit inherit/default or managed-uncapped base-role exception, and otherwise blocks.
|
|
227
227
|
|
|
228
228
|
**Authoring responsibility:**
|
|
229
229
|
|