@open-agent-toolkit/cli 0.3.9 → 0.3.10

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.
Files changed (39) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/config/dispatch-matrix-recommendation.json +6 -6
  3. package/assets/docs/cli-utilities/configuration.md +12 -8
  4. package/assets/docs/cli-utilities/workflow-gates.md +1 -1
  5. package/assets/docs/contributing/updating-model-guidance.md +34 -6
  6. package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
  7. package/assets/docs/provider-sync/providers.md +4 -4
  8. package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
  9. package/assets/docs/workflows/projects/implementation-execution.md +4 -1
  10. package/assets/public-package-versions.json +4 -4
  11. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  12. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
  13. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  14. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +1 -1
  15. package/assets/skills/oat-project-plan-writing/SKILL.md +3 -3
  16. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  17. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
  18. package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
  19. package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
  20. package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
  21. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  22. package/dist/providers/claude/dispatch-envelope.js +1 -0
  23. package/dist/providers/claude/targets.d.ts +1 -0
  24. package/dist/providers/claude/targets.d.ts.map +1 -1
  25. package/dist/providers/claude/targets.js +3 -1
  26. package/dist/providers/codex/codec/shared.d.ts +3 -0
  27. package/dist/providers/codex/codec/shared.d.ts.map +1 -1
  28. package/dist/providers/codex/codec/shared.js +4 -0
  29. package/dist/providers/cursor/codec/catalog.d.ts +2 -2
  30. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
  31. package/dist/providers/cursor/codec/catalog.js +45 -0
  32. package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
  33. package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
  34. package/dist/providers/cursor/codec/mapping-validation.js +25 -0
  35. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  36. package/dist/providers/cursor/codec/materialize.js +2 -11
  37. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  38. package/dist/providers/cursor/codec/sync-extension.js +2 -11
  39. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.3.9"
3
+ "oatVersion": "0.3.10"
4
4
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026-09-25.1",
2
+ "version": "2026-10-01.1",
3
3
  "providers": {
4
4
  "codex": {
5
5
  "economy": {
@@ -39,17 +39,17 @@
39
39
  "candidates": [
40
40
  {
41
41
  "harness": "codex",
42
- "model": "gpt-6-sol",
42
+ "model": "gpt-6.1-sol",
43
43
  "effort": "low"
44
44
  },
45
45
  {
46
46
  "harness": "codex",
47
- "model": "gpt-6-sol",
47
+ "model": "gpt-6.1-sol",
48
48
  "effort": "medium"
49
49
  },
50
50
  {
51
51
  "harness": "codex",
52
- "model": "gpt-6-sol",
52
+ "model": "gpt-6.1-sol",
53
53
  "effort": "high"
54
54
  }
55
55
  ]
@@ -58,7 +58,7 @@
58
58
  "candidates": [
59
59
  {
60
60
  "harness": "codex",
61
- "model": "gpt-6-sol",
61
+ "model": "gpt-6.1-sol",
62
62
  "effort": "xhigh"
63
63
  },
64
64
  {
@@ -80,7 +80,7 @@
80
80
  "haiku",
81
81
  {
82
82
  "harness": "claude",
83
- "model": "claude-sonnet-5",
83
+ "model": "claude-sonnet-5-5",
84
84
  "effort": "medium"
85
85
  }
86
86
  ]
@@ -497,11 +497,11 @@ The example above is illustrative rather than a copy of the bundled ladder; its
497
497
  tiers are trimmed for readability.
498
498
 
499
499
  The bundled recommendation covers 11 Codex model/effort combinations: GPT-6
500
- Luna at `low` through `max`, GPT-6 Sol at `low` through `high` plus `xhigh`,
500
+ Luna at `low` through `max`, GPT-6.1 Sol at `low` through `high` plus `xhigh`,
501
501
  and GPT-6 Astra at `high` and `xhigh`.
502
502
  Claude covers `haiku`, plus explicit Sonnet, Opus, and Fable
503
503
  model/effort pairs. Effort-pinned Claude cells require a recognized versioned
504
- model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5`,
504
+ model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5-5`, `sonnet-5`,
505
505
  `opus-4-7`, `opus-4-6`, or `sonnet-4-6`) or a matching
506
506
  `ANTHROPIC_DEFAULT_<FAMILY>_MODEL` pin. A custom provider pin must declare
507
507
  matching capability through `<PIN>_SUPPORTED_CAPABILITIES`: `effort` enables
@@ -513,14 +513,17 @@ Model-only Claude aliases remain compatible through the per-call model argument
513
513
  and report `effortAxis: not-applicable` because the Agent API exposes no
514
514
  per-call effort argument. The recommendation carries 16 Cursor candidates
515
515
  across four tiers, drawn from a materialization
516
- catalogue with 26 catalogued multi-family flat IDs spanning Composer, Claude
517
- (Sonnet, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
516
+ catalogue with 31 catalogued multi-family flat IDs spanning Composer, Claude
517
+ (Sonnet 5, Sonnet 5.5, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
518
518
  approved mappings stay materializable without being recommended. An explicit
519
- mapping connects each flat ladder ID to a separate bracket-form frontmatter
520
- model; configuration and skills never derive or normalize either form.
519
+ mapping connects each flat ladder ID to its verified frontmatter model.
520
+ Existing mappings keep their bracket selectors; Sonnet 5.5 uses per-pin
521
+ verified exact IDs. The 31 mappings produce 62 pinned role variants.
522
+ Configuration and skills never derive selectors or admit arbitrary flat IDs.
521
523
 
522
524
  The corresponding pinned Codex variant catalogue includes
523
- `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
525
+ `gpt-6-1-sol-high` and `gpt-6-1-sol-max`, alongside compatible older targets
526
+ such as `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
524
527
  `gpt-5.6-sol-max`. Configuration selects from that materialized catalogue; it
525
528
  does not construct an unregistered role during dispatch.
526
529
 
@@ -664,7 +667,8 @@ the exact registered role, pinned child, or resolver-returned model argument.
664
667
 
665
668
  `oat doctor` compares configured Cursor flat IDs with the current Cursor
666
669
  catalogue and reports availability drift. This check is diagnostic: catalogue
667
- presence does not prove that a bracket-form definition pin was honored.
670
+ presence does not prove that a definition pin was honored, whether its
671
+ selector is bracket-form or an approved exact ID.
668
672
 
669
673
  Each shipped mapping has mapping-specific native-launch evidence, but Cursor
670
674
  can silently fallback when account, plan, or administration constraints prevent
@@ -241,7 +241,7 @@ line. The reviewer's resolver stamp describes the project reviewer policy, so
241
241
  gate-originated artifacts label it as the policy view:
242
242
 
243
243
  ```markdown
244
- **Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-sol-high`
244
+ **Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-1-sol-high`
245
245
  ```
246
246
 
247
247
  The gate reads reviewer stamps (`action=review role=reviewer`) from audit lines
@@ -26,7 +26,9 @@ they choose to adopt a newer recommendation.
26
26
 
27
27
  A model can remain supported for a user's explicit configuration without being
28
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
29
+ and Cursor targets available while preferring GPT-6.1 Sol and GPT-6 Luna in
30
+ Codex. GPT-6 Sol remains supported for explicit compatibility configurations.
31
+ Claude Opus 4.8
30
32
  and 5.0 have left current supported generations and recommendations; historical
31
33
  probe records can still describe past behavior, clearly labeled as historical.
32
34
 
@@ -34,7 +36,11 @@ probe records can still describe past behavior, clearly labeled as historical.
34
36
 
35
37
  Check the provider's official model documentation and the local runtime before
36
38
  editing an ID or effort range. The [OpenAI model catalog](https://developers.openai.com/api/docs/models)
37
- lists GPT-6 Astra, Sol, and Luna. The
39
+ lists GPT-6.1 Sol and GPT-6 Astra, Sol, and Luna. The
40
+ [GPT-6.1 Sol model page](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
41
+ identifies `gpt-6.1-sol` and supports `low`, `medium`, `high`, `xhigh`, and
42
+ `max`; `none` and `minimal` are not supported efforts for this family. Direct
43
+ API tool calls require the Responses API. The
38
44
  [Astra model page](https://developers.openai.com/api/docs/models/gpt-6-astra)
39
45
  names `gpt-6-astra` and documents `low`, `medium`, `high`, `xhigh`, and `max`;
40
46
  compare it with the installed Codex runtime model cache for the exact names and
@@ -42,7 +48,11 @@ local effort set. Catalog presence establishes support, not relative task
42
48
  quality. The
43
49
  [Anthropic Opus 5.5 documentation](https://www.anthropic.com/claude-opus-5-5)
44
50
  names `claude-opus-5-5`; confirm a Claude Code invocation reports that exact
45
- assistant model before admitting it to the Claude catalog. Claude subagent
51
+ assistant model before admitting it to the Claude catalog. The
52
+ [Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
53
+ and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort)
54
+ identify `claude-sonnet-5-5` and its five low-through-max efforts. Verify
55
+ Claude Code identity separately. Claude subagent
46
56
  `model` and `effort` frontmatter select a per-agent route; see the
47
57
  [Claude Code subagent fields](https://code.claude.com/docs/en/sub-agents).
48
58
  An API model announcement alone does not prove a third-party harness supports
@@ -66,14 +76,32 @@ The positive Sonnet control resolved, while invalid family and effort controls
66
76
  fell back to defaults. Five Opus 5.5 mappings are now approved for desktop
67
77
  subagents; the CLI result alone does not establish that the same bracket syntax
68
78
  works as a CLI top-level `--model` argument. Likewise, do not add GPT-6
69
- Cursor targets until that runtime lists and verifies them.
79
+ or GPT-6.1 Cursor targets until that runtime lists and verifies them.
70
80
 
71
81
  A 2026-09-25 desktop 3.21.18 probe added Grok 4.6 and Fable 5.1 mappings
72
82
  and moved the bundled Cursor ladder to them. The same probe showed Grok 4.7
73
- resolves only bare flat IDs, never bracket selectors, so it stays out of the
74
- catalogue; see [Verifying Cursor Pins](verifying-cursor-pins.md). See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
83
+ resolves only bare flat IDs, never bracket selectors. It still needs its own
84
+ approved registry entry and complete per-pin evidence before admission; see [Verifying Cursor Pins](verifying-cursor-pins.md). See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
75
85
  for the distinction between catalog, configured mapping, and runtime identity.
76
86
 
87
+ The October 1 refresh migrates Codex Sol defaults and examples to
88
+ `gpt-6.1-sol` while preserving existing effort choices, including medium for
89
+ intelligent recon. Claude Economy moves to `claude-sonnet-5-5` medium by user
90
+ direction. GPT-6 Sol and Sonnet 5 remain explicitly supported. Cursor lists
91
+ Sonnet 5.5 flat IDs at low through max. Cursor 3.22.12 native probes matched
92
+ those exact IDs at start, Shell execution, and stop while every Sonnet 5.5
93
+ bracket pin fell back to the account default. The existing Opus low control
94
+ matched; unknown-family and Sonnet `ultra` exact-ID controls fell back. The
95
+ fixture summary and event records at
96
+ `packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01{,-events}.jsonl`
97
+ retain both rounds. Ship explicit, evidence-backed exact-ID mappings for that family;
98
+ keep existing bracket mappings. An exact-ID mapping requires the same per-pin
99
+ native evidence and controls as a bracket mapping. Do not enable generic
100
+ pass-through of CLI IDs. Cursor does not list GPT-6 Sol or
101
+ GPT-6.1 Sol in the observed catalog. Do not carry Codex model IDs into Cursor
102
+ configurations. These selector changes do not import a separate vault policy
103
+ refresh or claim newly measured task-performance gains.
104
+
77
105
  ## Change and Validate
78
106
 
79
107
  1. Update the supported catalog for each verified runtime and its tests. Preserve
@@ -7,7 +7,8 @@ description: 'Runbook for probe-verifying a Cursor model pin before shipping it:
7
7
 
8
8
  A Cursor model pin maps an OAT ladder model ID to the frontmatter selector that
9
9
  materialized role files carry, for example `gpt-5.6-sol-medium` to
10
- `gpt-5.6-sol[reasoning=medium]`. Adding one to
10
+ `gpt-5.6-sol[reasoning=medium]`, or the verified exact ID
11
+ `claude-sonnet-5-5-medium`. Adding one to
11
12
  `packages/cli/src/providers/cursor/codec/catalog.ts` requires evidence that
12
13
  Cursor actually resolves that selector to the intended model.
13
14
 
@@ -81,10 +82,22 @@ flat IDs such as `grok-4.7-medium` resolved exactly. Two lessons follow:
81
82
  control and probe non-default rungs. Here even `effort=low,fast=false`
82
83
  landed on the high-fast default.
83
84
 
84
- Approved mappings are bracket-form only
85
- (`DR-260718-explicit-cursor-pin-mapping`), so Grok 4.7 has no mapping until
86
- that decision is revisited. The redacted evidence is in the same fixtures
87
- directory.
85
+ The 2026-10-01 revision of `DR-260718-explicit-cursor-pin-mapping` permits
86
+ verified exact-ID entries as well as bracket selectors. Grok 4.7 remains
87
+ outside the shipped catalog until its own entry is added and approved. The
88
+ redacted evidence is in the same fixtures directory.
89
+
90
+ The 2026-10-01 Sonnet 5.5 probe on Cursor 3.22.12 confirmed the same syntax
91
+ distinction: every `claude-sonnet-5-5[effort=...]` selector fell back to
92
+ `grok-4.7-high-fast`, but all five exact IDs
93
+ `claude-sonnet-5-5-low|medium|high|xhigh|max` resolved correctly. Both rounds
94
+ included a working Opus 5.5 low control and unknown-family and unsupported-effort
95
+ controls that fell back. The summary and 64 correlated native events are
96
+ retained beside the earlier fixtures.
97
+
98
+ [Cursor documents specific model IDs and bracket parameters](https://cursor.com/docs/subagents#model-configuration).
99
+ Choose a candidate from the live catalog, then probe its exact frontmatter
100
+ spelling. Documentation and catalog presence do not replace native evidence.
88
101
 
89
102
  ## Prerequisites
90
103
 
@@ -272,10 +285,19 @@ approved it:
272
285
 
273
286
  ```ts
274
287
  approvedMapping(
275
- 'gpt-5.6-sol-medium',
276
- 'gpt-5.6-sol[reasoning=medium]',
277
- 'gpt-reasoning',
278
- { probeName: 'zz-pin-probe-sol56-medium', verifiedAt: '2026-07-25', evidencePath: '...' },
288
+ 'claude-sonnet-5-5-medium',
289
+ 'claude-sonnet-5-5-medium',
290
+ 'explicit-model-id',
291
+ {
292
+ probeName: 'zz-pin-probe-sonnet55-flat-medium',
293
+ probeRecord: {
294
+ submittedSelector: 'claude-sonnet-5-5-medium',
295
+ resolvedModel: 'claude-sonnet-5-5-medium',
296
+ verifiedAt: '2026-10-01',
297
+ evidencePath:
298
+ 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
299
+ },
300
+ },
279
301
  ),
280
302
  ```
281
303
 
@@ -287,6 +309,13 @@ than inheriting an approval that never covered the new selector.
287
309
  Retain the raw payloads alongside the summary. They are the primary evidence;
288
310
  the summary is an interpretation of them.
289
311
 
312
+ For an exact-ID mapping, use the `explicit-model-id` syntax family and a
313
+ mapping-specific probe record. The frontmatter selector must equal the ladder
314
+ ID, and the independently captured submitted selector and resolved model must
315
+ agree with both. Missing or mismatched evidence must fail materialization;
316
+ there is no generic model-ID pass-through. Preserve rejected selector results
317
+ and control observations alongside the successful rungs.
318
+
290
319
  ## Cleanup
291
320
 
292
321
  Delete every temporary artifact:
@@ -26,11 +26,11 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
26
26
  - Interactive `oat init` and `oat status` ask for an individual disposition for each unresolved Cursor-local skill: adopt it into `.agents/skills` or keep it Cursor-only and remember the exact path in sync config
27
27
  - Keep-local is blocked when a canonical skill has the same name because Cursor does not document a safe duplicate-resolution order
28
28
  - During upgrades, OAT removes only verified clean legacy managed skill views. Changed or replaced views are preserved, detached from manifest ownership, and offered for migration.
29
- - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes the separate bracket-form frontmatter model. OAT never derives one form from the other.
29
+ - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes its frontmatter model: a bracket-form selector for existing families or an exact ID for Sonnet 5.5. The supported catalogue contains 31 pins and 62 pinned role variants. OAT never derives a selector from the ladder ID or passes through an unregistered ID.
30
30
  - Generated definitions carry `supported-catalogue`, `project-config`, or `user-config` ownership. Project and supported output lives in the tracked `.cursor/agents` view; user-owned output lives under `~/.cursor/agents`. Cleanup reconciles only the applicable owner.
31
31
  - Managed dispatch requires `providers.cursor.dispatchArgs.variant` and launches that exact resolver-selected native agent type first. Skills do not pass a Task-level model argument or normalize Cursor model strings.
32
32
  - Cursor may silently fallback when a definition pin cannot be honored. Variant acceptance therefore establishes launcher-owned `configured` provenance only; runtime identity remains `not-reported` unless independently observed.
33
- - `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level bracket pin ran as configured.
33
+ - `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level pin ran as configured.
34
34
  - Rule files render as `.cursor/rules/*.mdc`
35
35
 
36
36
  === "Copilot"
@@ -59,7 +59,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
59
59
  - `.codex/agents/<role>.toml`
60
60
  - `.codex/config.toml` (`[features] multi_agent = true`, `[agents.<role>]` upserts)
61
61
  - Codex role files include OAT managed provenance headers and are regenerated by `oat sync --scope project|user|all`
62
- - Project sync writes and maintains the version-controlled supported catalogue: GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (56 pinned variants). Sync writes files; it does not create a Git commit.
62
+ - Project sync writes and maintains the version-controlled supported catalogue: GPT-6.1 Sol and GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (66 pinned variants). Sync writes files; it does not create a Git commit.
63
63
  - Custom targets follow configuration provenance: user-config targets write only under `~/.codex`; shared, repo-local, and active-project targets write under the project's tracked `.codex` view.
64
64
  - User sync loads only the bundled canonical `oat-phase-implementer` and `oat-reviewer` definitions needed to expand user-config targets. It does not enable general user-agent mirroring, and it refuses stale user-role cleanup if either managed definition is unavailable.
65
65
  - Generated variants carry `supported-catalogue`, `user-config`, or `project-config` ownership. Cleanup removes stale entries only for the owner being reconciled and preserves other scopes plus unrelated Codex entries.
@@ -67,7 +67,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
67
67
  - 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 user-config-owned role.
68
68
  - Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
69
69
  - Sync-time materialization is best effort; managed workflow correctness uses exact registered roles or a fresh child pinned to the resolved model plus reasoning effort with canonical role instructions. After a successful provider-visible file change, OAT conservatively advises starting a new Codex session so it has an opportunity to load the role. This repository policy is not a Codex hot-reload contract, an application-process restart requirement, or proof that the new session exposed the role.
70
- - Codex `max` is a first-class dispatch effort. It is supported for GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
70
+ - Codex `max` is a first-class dispatch effort. It is supported for GPT-6.1 Sol, GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
71
71
  - Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
72
72
  - Codex subagent workflows require `[features] multi_agent = true` in active Codex config layers
73
73
  - Default managed Codex execution requires root (depth 0) → phase implementer (depth 1). `agents.max_depth >= 2` enables optional nested phase-agent work; sync and direct materialization still merge that capability floor without lowering a higher target value.
@@ -85,13 +85,15 @@ Run the same command without `--dry-run` to replace bundled cells. Use
85
85
  `--shared` or `--local` instead when that scope owns the ladder. Add
86
86
  `--keep-existing` to fill only missing cells and preserve existing choices.
87
87
 
88
- Version `2026-09-25.1` is the current bundled recommendation. It prefers
89
- GPT-6 Luna and Sol in Codex, then Sol xhigh, Astra high, and Astra xhigh in
88
+ Version `2026-10-01.1` is the current bundled recommendation. It prefers
89
+ GPT-6 Luna and GPT-6.1 Sol in Codex, then Sol 6.1 xhigh, Astra high, and Astra xhigh in
90
90
  Codex Frontier. Astra's task advantage has not been measured locally; this is
91
91
  an explicit user-directed preference, not acceptance by the separately
92
- maintained model-selection policy. Opus 5.5 low/medium/high remains in Claude High.
92
+ maintained model-selection policy. Sonnet 5.5 medium replaces Sonnet 5 medium
93
+ in Claude Economy; the older generation stays supported for explicit cells.
94
+ Opus 5.5 low/medium/high remains in Claude High.
93
95
  The Claude low option suits bounded intelligent recon in Balanced or High;
94
- medium remains the implementation starting point under High. GPT-5.6 targets remain
96
+ medium remains the implementation starting point under High. GPT-6 Sol and GPT-5.6 targets remain
95
97
  supported for explicit Codex and Cursor configurations. Cursor's preferred
96
98
  ladder interleaves verified GPT-5.6 and Opus 5.5 mappings: Balanced adds
97
99
  Opus 5.5 low above Terra high, High orders Sol medium, Opus low, Sol high,
@@ -249,19 +251,23 @@ oat_dispatch_policy:
249
251
  The bundled ladder is a curated subset of the supported targets:
250
252
 
251
253
  - **Codex:** GPT-6 Luna at `low` through `max` across Economy and Balanced;
252
- GPT-6 Sol at `low` through `high` in High and `xhigh` in Frontier; then
254
+ GPT-6.1 Sol at `low` through `high` in High and `xhigh` in Frontier; then
253
255
  GPT-6 Astra at `high` and `xhigh` in Frontier. Astra and Sol remain supported
254
- at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-5.6 variants remain
256
+ at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-6 Sol and GPT-5.6 variants remain
255
257
  available outside this preferred ladder.
256
- - **Claude:** `haiku` and Sonnet 5 at Economy/Balanced, Opus 5.5 at High and
257
- Frontier, and Fable 5.1 at Frontier.
258
+ - **Claude:** `haiku` and Sonnet 5.5 medium at Economy; Opus 5.5 low at
259
+ Balanced, low/medium/high at High, and xhigh/max at Frontier; Fable 5.1
260
+ high ends Frontier. Sonnet 5 remains supported for explicit configurations.
258
261
  - **Cursor:** the preferred ladder uses approved Composer 2.5, GPT-5.6, Grok
259
262
  4.6, Opus 5.5, and Fable 5.1 targets. The catalogue maps each flat ladder ID
260
- to its separately verified bracket-form frontmatter model. Grok 4.6 (`low`
263
+ to its separately verified frontmatter model. Sonnet 5.5 exact-ID pins
264
+ remain supported outside the ladder; existing families keep their bracket
265
+ selectors. Grok 4.6 (`low`
261
266
  through `xhigh`) and Fable 5.1 (`low` through `max`, thinking variants) were
262
267
  approved from a 2026-09-25 [native desktop probe](../../contributing/verifying-cursor-pins.md);
263
268
  targets outside the ladder remain available for explicit selection. Grok
264
- 4.7 has no approved mapping because it ignores bracket selectors.
269
+ 4.7 stays outside the shipped catalogue pending its own approved mapping
270
+ and per-pin evidence; exact-ID support does not admit arbitrary CLI IDs.
265
271
 
266
272
  The final candidate in a named tier defines that tier's reviewer ceiling. Lower
267
273
  reviewer selection requires a separate reviewed contract; a normal reviewer
@@ -363,9 +369,9 @@ branch replaces, rather than supplements, preferred selection.
363
369
 
364
370
  An effort-pinned Claude candidate must establish the exact generation and that
365
371
  generation's supported effort. Current directly recognized generations include
366
- `claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5`,
372
+ `claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5-5`, `claude-sonnet-5`,
367
373
  `claude-opus-4-7`, `claude-opus-4-6`, and `claude-sonnet-4-6`.
368
- Opus 5.5 supports `low`, `medium`, `high`, `xhigh`, and `max`; consult the
374
+ Opus 5.5 and Sonnet 5.5 support `low`, `medium`, `high`, `xhigh`, and `max`; consult the
369
375
  [updating guide](../../contributing/updating-model-guidance.md) before adding
370
376
  further generations or rungs. Retired Opus 5.0 and 4.8 are no longer directly
371
377
  recognized for effort-pinned dispatch.
@@ -413,8 +419,9 @@ Cursor selection, pin mapping, catalogue availability, and runtime identity are
413
419
  separate evidence layers:
414
420
 
415
421
  - The candidate ladder and resolver use an opaque flat ID.
416
- - The materialized definition uses the mapping's explicit bracket-form
417
- frontmatter model.
422
+ - The materialized definition uses the mapping's explicit frontmatter model,
423
+ either a verified bracket selector or a separately verified exact ID.
424
+ Sonnet 5.5 uses exact IDs; existing families keep their bracket mappings.
418
425
  - Mapping-specific native-launch evidence authorizes the shipped mapping data.
419
426
  An approved mapping may carry a probe record whose `submittedSelector` must
420
427
  equal the mapping's `frontmatterModel` and whose `resolvedModel` must equal
@@ -389,8 +389,11 @@ Provider controls remain exact: Codex uses
389
389
  `providers.claude.dispatchArgs.variant` for an effort-pinned target and
390
390
  `providers.claude.dispatchArgs.model` only for a legacy model-only target; and
391
391
  Cursor uses `providers.cursor.dispatchArgs.variant`. Cursor launches that exact
392
- resolver-selected native agent type first; the flat ID and bracket-form pin
392
+ resolver-selected native agent type first; the flat ID and frontmatter pin
393
393
  remain inside the explicit mapping and are never normalized by workflow prose.
394
+ A mapping may retain a verified bracket-form selector or use a separately
395
+ verified exact ID, as Sonnet 5.5 does. Exact IDs require an approved mapping
396
+ and native probe evidence; catalog presence alone never enables pass-through.
394
397
  The launcher records this selection as `configured`, while runtime identity
395
398
  remains `not-reported` without independent observation. Only a pre-start native
396
399
  role-selection rejection permits another target-preserving route.
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.3.9",
3
- "docs-config": "0.3.9",
4
- "docs-theme": "0.3.9",
5
- "docs-transforms": "0.3.9"
2
+ "cli": "0.3.10",
3
+ "docs-config": "0.3.10",
4
+ "docs-theme": "0.3.10",
5
+ "docs-transforms": "0.3.10"
6
6
  }
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: false
6
6
  allowed-tools: Read
7
7
  metadata:
8
- version: 1.2.10
8
+ version: 1.2.11
9
9
  ---
10
10
 
11
11
  # Dispatching OAT Subagents
@@ -46,8 +46,11 @@ prohibited.
46
46
 
47
47
  Outer lifecycle implementer and reviewer dispatch uses the exact
48
48
  `providers.cursor.dispatchArgs.variant` returned by the lifecycle resolver.
49
- The resolver maps an opaque flat model ID and owns the bracket-form model pin
50
- inside the materialized definition; skills never parse, normalize, or
49
+ The resolver maps an opaque flat model ID to the mapping's explicit frontmatter
50
+ pin inside the materialized definition. Existing families keep their verified
51
+ bracket-form pins; Sonnet 5.5 uses verified exact-ID pins. Each exact ID needs
52
+ its own native evidence and approved registry entry: this is not generic
53
+ pass-through of any CLI catalog ID. Skills never parse, normalize, or
51
54
  reconstruct either model string.
52
55
 
53
56
  1. Require a non-empty resolver-returned variant for managed dispatch.
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash(git:*), Bash(oat:*), Bash(oat project log:*), Glob, Grep, AskUserQuestion, Task
9
9
  metadata:
10
- version: 2.3.14
10
+ version: 2.3.15
11
11
  ---
12
12
 
13
13
  # Implementation Phase
@@ -727,7 +727,7 @@ Dispatch policy: {policy}; selected={selected value | none}; cap={value | none}
727
727
  ```text
728
728
  Dispatch policy: balanced; selected=xhigh; cap=xhigh (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-xhigh)
729
729
  Dispatch policy: inherit host defaults; selected=none; cap=none (codex, advisory — base role follows provider default)
730
- Dispatch policy: balanced; selected=claude-sonnet-5/high; cap=claude-sonnet-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-high)
730
+ Dispatch policy: balanced; selected=claude-sonnet-5-5/high; cap=claude-sonnet-5-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-5-high)
731
731
  Cursor materialized-variant example: Dispatch policy: frontier; selected=gpt-5.6-sol-max; cap=gpt-5.6-sol-max (cursor, enforced — native variant oat-phase-implementer-gpt-5-6-sol-max)
732
732
  Dispatch policy: unresolved; selected=none; cap=none (codex, advisory — policy set but no value resolved)
733
733
  ```
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Glob, Grep
7
7
  metadata:
8
- version: 1.2.33
8
+ version: 1.2.34
9
9
  ---
10
10
 
11
11
  # Plan Writing Contract
@@ -121,8 +121,8 @@ asking to write anything:
121
121
 
122
122
  | Provider | Economy | Balanced | High | Frontier |
123
123
  | --------------- | --------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
124
- | Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6-sol/low, gpt-6-sol/medium, gpt-6-sol/high | gpt-6-sol/xhigh, gpt-6-astra/high, gpt-6-astra/xhigh |
125
- | Claude | haiku, claude-sonnet-5/medium | claude-opus-5-5/low | claude-opus-5-5/low, claude-opus-5-5/medium, claude-opus-5-5/high | claude-opus-5-5/xhigh, claude-opus-5-5/max, claude-fable-5-1/high |
124
+ | Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6.1-sol/low, gpt-6.1-sol/medium, gpt-6.1-sol/high | gpt-6.1-sol/xhigh, gpt-6-astra/high, gpt-6-astra/xhigh |
125
+ | Claude | haiku, claude-sonnet-5-5/medium | claude-opus-5-5/low | claude-opus-5-5/low, claude-opus-5-5/medium, claude-opus-5-5/high | claude-opus-5-5/xhigh, claude-opus-5-5/max, claude-fable-5-1/high |
126
126
  | Cursor (opaque) | `composer-2.5`, `gpt-5.6-luna-high`, `gpt-5.6-luna-xhigh` | `cursor-grok-4.6-medium`, `gpt-5.6-terra-high`, `claude-opus-5-5-low` | `gpt-5.6-sol-medium`, `claude-opus-5-5-low`, `gpt-5.6-sol-high`, `claude-opus-5-5-medium`, `claude-opus-5-5-high` | `gpt-5.6-sol-xhigh`, `gpt-5.6-sol-max`, `claude-opus-5-5-high`, `claude-opus-5-5-xhigh`, `claude-fable-5-1-thinking-high` |
127
127
 
128
128
  In an interactive run, ask the user to select the owning scope explicitly
@@ -4,7 +4,7 @@ description: Use when delegating work to subagents or choosing a model for a tas
4
4
  compatibility: Self-contained; no OAT installation required.
5
5
  user-invocable: true
6
6
  metadata:
7
- version: 1.0.10
7
+ version: 1.0.11
8
8
  ---
9
9
 
10
10
  # Subagent Orchestration
@@ -1,10 +1,10 @@
1
1
  # Evidence and Refresh Policy
2
2
 
3
3
  ```yaml
4
- guidance_version: 2026-09-24
5
- last_verified: 2026-09-24
6
- review_after: 2026-10-08
7
- stale_after: 2026-10-23
4
+ guidance_version: 2026-10-01
5
+ last_verified: 2026-10-01
6
+ review_after: 2026-10-15
7
+ stale_after: 2026-10-30
8
8
  ```
9
9
 
10
10
  This file governs dated provider examples. It does not override a live catalog,
@@ -17,7 +17,9 @@ authorization boundary.
17
17
  - `review-required`: older than 45 days, a newer family is observed, or a material control, price, tool, context, alias, or harness change is detected.
18
18
  - `stale`: older than 90 days, named models are unavailable or deprecated, or the launching surface can no longer express the recorded controls.
19
19
 
20
- The named routes were refreshed against provider catalogues on 2026-09-23.
20
+ The October 1 availability refresh adds GPT-6.1 Sol and Sonnet 5.5 support;
21
+ it migrates active Codex Sol selectors by user direction while preserving
22
+ efforts. Earlier provider observations retain their own dates.
21
23
  The benchmark observations below remain dated to 2026-07-25 and require
22
24
  review before making a new cross-provider performance claim. Each provider
23
25
  reference carries its own verification date; availability refresh does not
@@ -83,8 +85,9 @@ publish a provider-independent effort conversion.
83
85
  explicit user direction. No local task evaluation establishes an Astra
84
86
  advantage, and this preference is not acceptance by the separately
85
87
  maintained model-selection policy.
86
- - GPT-6 Sol and Luna are selectable in the current Codex catalogue and are
87
- the default new-work routes in `provider-codex.md`. GPT-5.6 Sol/Luna/Terra
88
+ - GPT-6.1 Sol and GPT-6 Luna are the default new-work selectors in
89
+ `provider-codex.md`. The Sol migration preserves existing effort choices,
90
+ including medium for intelligent recon. GPT-6 Sol and GPT-5.6 Sol/Luna/Terra
88
91
  remain supported for explicit configurations. The July independent coding
89
92
  data on GPT-5.6 Luna/Terra supported a mechanical floor of Luna high; this
90
93
  is historical evidence, not a measured GPT-6 performance comparison.
@@ -93,7 +96,12 @@ publish a provider-independent effort conversion.
93
96
  evidence. Earlier Opus 5 effort observations are historical and do not
94
97
  establish an Opus 5.5 benchmark result. Consequence adds independent review
95
98
  rather than automatically raising effort.
96
- - Sonnet 5 is a conditional route when measured latency, throughput, access,
99
+ - Sonnet 5.5 is a supported Claude conditional route and the user-selected
100
+ Economy medium candidate. Cursor 3.22.12 native probes matched Sonnet 5.5
101
+ exact-ID pins; its bracket-form pins fell back. Every pin requires its own
102
+ approved evidence and registry entry. Sonnet 5 remains
103
+ supported for compatibility and established workflows. Sonnet is a
104
+ conditional route when measured latency, throughput, access,
97
105
  rate limits, or end-to-end workload economics win. Fable 5 is an
98
106
  eligibility-gated specialist; its missing-domain-concept or long-horizon
99
107
  reviewer instantiation remains provisional, and zero-data-retention
@@ -195,6 +203,10 @@ component it cannot resolve. Probe a non-default rung as well, or a result that
195
203
  merely matches the family default cannot distinguish an honored parameter from
196
204
  an ignored one.
197
205
 
206
+ An exact-ID Cursor pin meets the same evidence gate as a bracket-form pin;
207
+ CLI catalog presence alone never permits generic pass-through. The Sonnet 5.5
208
+ refresh uses explicit exact-ID mappings because its bracket-form pins fell back.
209
+
198
210
  The six Cursor `claude-opus-5` and `claude-opus-4-8` mappings shipped on
199
211
  2026-07-25 met this gate; their resolved identities are listed in
200
212
  `provider-cursor.md`.
@@ -1,7 +1,7 @@
1
1
  ---
2
- guidance_version: 2026-09-23
3
- last_verified: 2026-09-23
4
- review_after: 2026-12-22
2
+ guidance_version: 2026-10-01
3
+ last_verified: 2026-10-01
4
+ review_after: 2026-12-30
5
5
  ---
6
6
 
7
7
  # Claude Model Selection
@@ -17,7 +17,12 @@ the dated model examples below. Launch mechanics for OAT dispatch live in
17
17
  high-volume, mechanically verified work.
18
18
  - `claude-opus-5-5`: normal substantive route and the default for
19
19
  interpretation-heavy implementation, hard reasoning, and consequential work.
20
- - `claude-sonnet-5`: conditional route when measured latency, throughput,
20
+ - `claude-sonnet-5-5`: supported conditional route at `low`, `medium`,
21
+ `high`, `xhigh`, and `max`; qualify it against the relevant Opus route on
22
+ representative work. The bundled Economy tier selects medium by explicit
23
+ user direction; this is separate from task-performance qualification.
24
+ - `claude-sonnet-5`: supported compatibility and established-workflow route
25
+ when measured latency, throughput,
21
26
  access, rate limits, or established-workflow economics beat the relevant
22
27
  Opus route.
23
28
  - `claude-fable-5-1`: eligibility-gated specialist for a directly relevant
@@ -45,6 +50,12 @@ host.
45
50
  is the bottleneck or an evaluated long-horizon workload benefits. Max is
46
51
  exceptional and requires a workload-specific effort sweep or an explicit
47
52
  quality-first exception.
53
+ - Sonnet 5.5: availability and its five efforts are documented in the
54
+ [Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
55
+ and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort).
56
+ The existing conditional-route posture applies; availability is not an
57
+ evaluated workload ranking. Check the installed Claude Code version and
58
+ returned assistant model before launch.
48
59
  - Sonnet 5: use medium or high only when measured latency, throughput, access,
49
60
  or workload economics justify the conditional route. Do not preserve xhigh
50
61
  or max as generic workhorse settings.
@@ -65,13 +76,13 @@ These routes are dated guidance and benchmark-derived routing hypotheses.
65
76
  Evaluate them on representative local work before treating fine boundaries as
66
77
  stable.
67
78
 
68
- | Task class | Default | Economy | Escalation | Floor notes |
69
- | ------------------------ | ------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
70
- | `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification | Opus 5.5 medium | Haiku is below floor for semantic audits and silent-miss-prone exploration. |
71
- | `intelligent-recon` | Opus 5.5 low | Sonnet 5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
72
- | `default-implementation` | Opus 5.5 medium | Sonnet 5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
73
- | `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation | Opus 5.5 xhigh for a reasoning-depth bottleneck | Use max only after a workload-specific effort sweep. |
74
- | `consequential` | Opus 5.5 high plus independent review | No routine economy route | Opus 5.5 xhigh when deeper reasoning is also required | Consequence adds review and root authorization; it does not automatically require xhigh or max. |
79
+ | Task class | Default | Economy | Escalation | Floor notes |
80
+ | ------------------------ | ------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
81
+ | `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification | Opus 5.5 medium | Haiku is below floor for semantic audits and silent-miss-prone exploration. |
82
+ | `intelligent-recon` | Opus 5.5 low | Sonnet 5.5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
83
+ | `default-implementation` | Opus 5.5 medium | Sonnet 5.5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
84
+ | `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation | Opus 5.5 xhigh for a reasoning-depth bottleneck | Use max only after a workload-specific effort sweep. |
85
+ | `consequential` | Opus 5.5 high plus independent review | No routine economy route | Opus 5.5 xhigh when deeper reasoning is also required | Consequence adds review and root authorization; it does not automatically require xhigh or max. |
75
86
 
76
87
  ## Root and Subagent Cost Posture
77
88
 
@@ -108,7 +119,9 @@ verified before selection.
108
119
 
109
120
  Eligibility filters the candidate set before capability or economy is compared.
110
121
  A route that fails one of these gates is unavailable regardless of benchmark
111
- standing. The non-Opus constraints are dated observations; reverify against the live
122
+ standing. The table below records existing generations; it does not establish Sonnet 5.5
123
+ retention, service tiers, or context limits. Verify those separately.
124
+ The non-Opus constraints are dated observations; reverify against the live
112
125
  schema and the organization's actual plan before launch. Do not transfer Opus 5
113
126
  service-tier or retention claims to Opus 5.5 without fresh evidence.
114
127
 
@@ -1,7 +1,7 @@
1
1
  ---
2
- guidance_version: 2026-09-24
3
- last_verified: 2026-09-24
4
- review_after: 2026-12-22
2
+ guidance_version: 2026-10-01
3
+ last_verified: 2026-10-01
4
+ review_after: 2026-12-30
5
5
  ---
6
6
 
7
7
  # Codex and OpenAI Model Selection
@@ -13,16 +13,19 @@ model examples below. Launch mechanics for OAT dispatch live in
13
13
 
14
14
  ## Current Families
15
15
 
16
- Use verified GPT-6 Sol/Luna model IDs for routine new Codex work. GPT-6 Astra
16
+ Use `gpt-6.1-sol` for new Sol routes and `gpt-6-luna` for bounded Luna work.
17
+ This Sol selector migration preserves the existing task-class effort guidance;
18
+ it does not claim a newly measured workload advantage. GPT-6 Astra
17
19
  is a supported Frontier candidate:
18
20
 
19
21
  - `gpt-6-astra`: Frontier candidate for especially demanding work; the bundled
20
22
  recommendation uses high and xhigh, while the supported catalogue also
21
23
  permits low, medium, and max;
22
- - `gpt-6-sol`: high-capability implementation and reasoning route;
24
+ - `gpt-6.1-sol`: high-capability implementation and reasoning route;
23
25
  - `gpt-6-luna`: cost-sensitive, bounded work.
24
26
 
25
- Public engineering benchmarks show task-dependent Astra gains over Sol, with
27
+ The earlier public engineering benchmarks show task-dependent Astra gains
28
+ over GPT-6 Sol, with
26
29
  cost and runtime tradeoffs; they do not establish a universal replacement. The
27
30
  September frontier-release comparison remains review-pending in the separate
28
31
  model-selection vault, and no matched OAT workload evaluation has qualified a
@@ -30,8 +33,8 @@ routine default change. Astra's Frontier inclusion is a user-directed
30
33
  preference. Keep the Sol task-class defaults below while that evidence is
31
34
  reconciled and local task fit is evaluated.
32
35
 
33
- The GPT-5.6 Sol/Luna/Terra targets remain supported for explicit configurations
34
- and established workloads. Re-evaluate economics and qualitative routing on
36
+ GPT-6 Sol (`gpt-6-sol`) and the GPT-5.6 Sol/Luna/Terra targets remain supported
37
+ for explicit configurations and established workloads. Re-evaluate economics and qualitative routing on
35
38
  representative work before carrying over GPT-5.6-specific comparisons.
36
39
 
37
40
  Direct API specialist routes:
@@ -48,18 +51,24 @@ name includes `codex`.
48
51
  ## Dated Task-Class Matrix
49
52
 
50
53
  These are current task-class starting points, not an evaluated ordering across
51
- providers or a promise about relative GPT-6 latency and price. All shown
54
+ providers or a promise about relative GPT-6 or GPT-6.1 latency and price. All shown
52
55
  model/effort pairs are in the local Codex catalogue.
53
56
 
54
- | Task class | Default | Escalation | Floor notes |
55
- | ------------------------ | ------------------------------------------ | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
56
- | `mechanical-recon` | `gpt-6-luna`, high | `gpt-6-sol`, medium | Lower effort is suitable only when a miss is cheap and mechanically detected. |
57
- | `intelligent-recon` | `gpt-6-sol`, medium | Sol high | Preserve verification for silent-miss-prone reconnaissance. |
58
- | `default-implementation` | `gpt-6-sol`, medium | Sol high | Luna is for independently bounded, strongly verified work. |
59
- | `hard-reasoning` | `gpt-6-sol`, high | Sol xhigh | Narrow the problem before raising effort. |
60
- | `consequential` | `gpt-6-sol`, high, plus independent review | Sol xhigh for a reasoning-depth bottleneck; max only after evaluation | The root retains consequential authorization. |
61
-
62
- The bundled Frontier ladder ends with Astra xhigh after Sol xhigh and Astra
57
+ | Task class | Default | Escalation | Floor notes |
58
+ | ------------------------ | -------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
59
+ | `mechanical-recon` | `gpt-6-luna`, high | `gpt-6.1-sol`, medium | Lower effort is suitable only when a miss is cheap and mechanically detected. |
60
+ | `intelligent-recon` | `gpt-6.1-sol`, medium | Sol high | Preserve verification for silent-miss-prone reconnaissance. |
61
+ | `default-implementation` | `gpt-6.1-sol`, medium | Sol high | Luna is for independently bounded, strongly verified work. |
62
+ | `hard-reasoning` | `gpt-6.1-sol`, high | Sol xhigh | Narrow the problem before raising effort. |
63
+ | `consequential` | `gpt-6.1-sol`, high, plus independent review | Sol xhigh for a reasoning-depth bottleneck; max only after evaluation | The root retains consequential authorization. |
64
+
65
+ [OpenAI's GPT-6.1 Sol model reference](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
66
+ identifies `gpt-6.1-sol` and the supported efforts `low`, `medium`, `high`,
67
+ `xhigh`, and `max`. Do not emit `none` or `minimal` for this family. For direct
68
+ API tool calls, use the Responses API. Verify the launching Codex runtime
69
+ independently of API availability.
70
+
71
+ The bundled Frontier ladder ends with Astra xhigh after Sol 6.1 xhigh and Astra
63
72
  high. The supported Astra and Sol effort sets both end at max, so Sol max
64
73
  remains available for explicit configuration even though it is no longer in
65
74
  the bundled Frontier recommendation.
@@ -1,12 +1,14 @@
1
1
  ---
2
- guidance_version: 2026-09-25
3
- last_verified: 2026-09-25
4
- review_after: 2026-12-24
2
+ guidance_version: 2026-10-01
3
+ last_verified: 2026-10-01
4
+ review_after: 2026-12-30
5
5
  catalog_basis:
6
6
  Cursor desktop 3.21.18 resolved Grok 4.6 and Fable 5.1 effort selectors in
7
7
  native subagent hooks, and Grok 4.7 only as bare flat IDs; Cursor desktop
8
8
  3.20.14 resolved all five Opus 5.5 effort selectors; GPT-6 Sol/Luna were
9
- absent from the observed Cursor catalog
9
+ absent from the observed Cursor catalog; the 2026-10-01 CLI catalog lists
10
+ Sonnet 5.5 flat IDs; Cursor desktop 3.22.12 matched five exact-ID Sonnet
11
+ 5.5 pins while every bracket-form Sonnet 5.5 probe fell back
10
12
  ---
11
13
 
12
14
  # Cursor Model Selection
@@ -51,8 +53,8 @@ Cursor desktop 3.20.14 resolved all five `claude-opus-5-5[effort=...]`
51
53
  selectors to corresponding flat IDs in native hooks; on 2026-09-25, Cursor
52
54
  desktop 3.21.18 did the same for Grok 4.6 and Fable 5.1. See the
53
55
  probe records at `packages/cli/src/providers/cursor/codec/__fixtures__/README.md`.
54
- GPT-6 Sol/Luna were absent from the observed Cursor catalogue, so their Codex
55
- availability does not authorize Cursor routes.
56
+ GPT-6 Sol/Luna and GPT-6.1 Sol were absent from the 2026-10-01 Cursor CLI
57
+ catalogue, so their Codex availability does not authorize Cursor routes.
56
58
 
57
59
  | Task class | Default | Economy | Escalation | Floor notes |
58
60
  | ------------------------ | ------------------------------------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
@@ -90,8 +92,34 @@ Grok 4.7 has no approved mapping. Every bracket spelling tried
90
92
  (`grok-4.7[effort=...]` with and without `fast`, `reasoning=`, and
91
93
  `grok-4-7[...]`) fell back to that same account default, which is easy to
92
94
  mistake for success because it is itself a Grok 4.7 model. Only bare flat IDs
93
- such as `grok-4.7-medium` resolved as requested, and the approved catalogue
94
- does not emit bare IDs. Do not pin Grok 4.7 until a mapping is approved.
95
+ such as `grok-4.7-medium` resolved as requested, but Grok 4.7 still lacks
96
+ its own approved registry entry and complete per-pin evidence. It stays outside
97
+ the shipped catalogue. This is a family-specific admission gap, not a blanket
98
+ prohibition of exact-ID pins.
99
+
100
+ ## Sonnet 5.5 Exact-ID Pin Evidence
101
+
102
+ The 2026-10-01 Cursor CLI catalogue lists
103
+ `claude-sonnet-5-5-low|medium|high|xhigh|max`. In Cursor desktop 3.22.12,
104
+ every `claude-sonnet-5-5[effort=...]` probe fell back to the account default,
105
+ `grok-4.7-high-fast`. Exact-ID pins
106
+ `claude-sonnet-5-5-low|medium|high|xhigh|max` instead matched their requested
107
+ rungs in `subagentStart`, Shell `preToolUse`, and `subagentStop`. The Opus 5.5
108
+ low positive control matched its established mapping; unknown-family and
109
+ Sonnet 5.5 `ultra` exact-ID controls both fell back to `grok-4.7-high-fast`.
110
+ Catalog visibility or a subagent self-report does not establish those results.
111
+ The 16 correlated summary rows and 64 native events from both rounds live in
112
+ `packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl`
113
+ and `cursor-pin-probe-2026-10-01-events.jsonl`; the adjacent `README.md` records
114
+ provenance and excludes unrelated discovery calls.
115
+
116
+ Sonnet 5.5 mappings write the verified exact ID as frontmatter `model`.
117
+ Existing Sonnet 5, Opus, Fable, GPT, and Grok mappings retain their independently
118
+ verified selectors. Neither selector form is universally valid: every exact-ID
119
+ mapping requires native hook evidence, non-default-rung and invalid-selector
120
+ controls, and an explicit approved registry entry. There is no generic
121
+ pass-through of flat CLI IDs. See the
122
+ [probe runbook](../../../../apps/oat-docs/docs/contributing/verifying-cursor-pins.md).
95
123
 
96
124
  ## Historical Opus Cursor Probe Evidence (Retired)
97
125
 
@@ -177,8 +205,10 @@ and non-thinking variants.
177
205
  - `claude-fable-5-1-thinking-high`: eligible specialist for hard reasoning and
178
206
  the bundled Frontier terminal target; xhigh only for evaluated long-horizon
179
207
  work. Cursor lists Fable as "NO ZDR"; confirm retention eligibility.
180
- - `claude-sonnet-5-thinking-high`: strong provider-diversity alternative for
181
- normal implementation and agentic work when available.
208
+ - `claude-sonnet-5-5-high`: exact-ID provider-diversity option for normal
209
+ implementation and agentic work; qualify task performance separately.
210
+ - `claude-sonnet-5-thinking-high`: supported compatibility option for
211
+ established workflows.
182
212
  - `gpt-5.4-mini-medium`: economical general tool and coding worker.
183
213
  - `gpt-5.4-nano-medium`: strict extraction, classification, ranking, and simple
184
214
  read-only tool calls. Not a semantic repository worker.
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-envelope.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/dispatch-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,qBAAqB,EAC3B,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;AA4FnB,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,GAAG,UAAU,CAAC;IACzC,QAAQ,EAAE,uBAAuB,GAAG,cAAc,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,wBAAwB,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAgBD,KAAK,YAAY,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,qEAAqE;AACrE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,CAAC,CAAC,QAAQ,GAChB,sBAAsB,EAAE,CAM1B;AAsID;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,4BAA4B,CAgC/B;AASD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,OAAO,GAAG;IACpE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAqDA;AAuDD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GAAG,IAAI,GAChC;IAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkE7D;AAMD;;;;GAIG;AACH,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,YACE,UAAU,EAAE,SAAS,sBAAsB,EAAE,EAC7C,OAAO,GAAE,SAAS,MAAM,EAAO,EAyBhC;CACF;AAmBD,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,qBAAqB,CA2CxB"}
1
+ {"version":3,"file":"dispatch-envelope.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/dispatch-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,qBAAqB,EAC3B,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;AA6FnB,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,GAAG,UAAU,CAAC;IACzC,QAAQ,EAAE,uBAAuB,GAAG,cAAc,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,wBAAwB,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAgBD,KAAK,YAAY,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,qEAAqE;AACrE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,CAAC,CAAC,QAAQ,GAChB,sBAAsB,EAAE,CAM1B;AAsID;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,4BAA4B,CAgC/B;AASD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,OAAO,GAAG;IACpE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAqDA;AAuDD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GAAG,IAAI,GAChC;IAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkE7D;AAMD;;;;GAIG;AACH,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,YACE,UAAU,EAAE,SAAS,sBAAsB,EAAE,EAC7C,OAAO,GAAE,SAAS,MAAM,EAAO,EAyBhC;CACF;AAmBD,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,qBAAqB,CA2CxB"}
@@ -8,6 +8,7 @@ const generationSchema = z.enum([
8
8
  'fable-5-1',
9
9
  'fable-5',
10
10
  'opus-5-5',
11
+ 'sonnet-5-5',
11
12
  'sonnet-5',
12
13
  'opus-4-7',
13
14
  'opus-4-6',
@@ -4,6 +4,7 @@ declare const CLAUDE_GENERATION_EFFORTS: {
4
4
  readonly 'fable-5-1': readonly ["low", "medium", "high", "xhigh", "max"];
5
5
  readonly 'fable-5': readonly ["low", "medium", "high", "xhigh", "max"];
6
6
  readonly 'opus-5-5': readonly ["low", "medium", "high", "xhigh", "max"];
7
+ readonly 'sonnet-5-5': readonly ["low", "medium", "high", "xhigh", "max"];
7
8
  readonly 'sonnet-5': readonly ["low", "medium", "high", "xhigh", "max"];
8
9
  readonly 'opus-4-7': readonly ["low", "medium", "high", "xhigh", "max"];
9
10
  readonly 'opus-4-6': readonly ["low", "medium", "high", "max"];
@@ -1 +1 @@
1
- {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/targets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEhF,eAAO,MAAM,mBAAmB,YAC9B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,CACG,CAAC;AAEX,QAAA,MAAM,yBAAyB;;;;;;;;CAQuB,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AASD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAkBD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CAc9B;AA4ID,8EAA8E;AAC9E,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,oBAAoB,CAAC,EAClE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAgBxB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAoBxB;AAED,6EAA6E;AAC7E,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,oBAAoB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAexB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAeT;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlB"}
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/targets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEhF,eAAO,MAAM,mBAAmB,YAC9B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,CACG,CAAC;AAEX,QAAA,MAAM,yBAAyB;;;;;;;;;CASuB,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AASD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAkBD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CAe9B;AA4ID,8EAA8E;AAC9E,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,oBAAoB,CAAC,EAClE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAgBxB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAoBxB;AAED,6EAA6E;AAC7E,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,oBAAoB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAexB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAeT;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlB"}
@@ -10,6 +10,7 @@ const CLAUDE_GENERATION_EFFORTS = {
10
10
  'fable-5-1': CLAUDE_EFFORT_ORDER,
11
11
  'fable-5': CLAUDE_EFFORT_ORDER,
12
12
  'opus-5-5': CLAUDE_EFFORT_ORDER,
13
+ 'sonnet-5-5': CLAUDE_EFFORT_ORDER,
13
14
  'sonnet-5': CLAUDE_EFFORT_ORDER,
14
15
  'opus-4-7': CLAUDE_EFFORT_ORDER,
15
16
  'opus-4-6': ['low', 'medium', 'high', 'max'],
@@ -35,7 +36,8 @@ function modelFamily(model) {
35
36
  /** Extract a documented effort-capability generation from a provider model ID. */
36
37
  export function claudeModelGeneration(model) {
37
38
  const normalized = model.toLowerCase().replace(/\[1m\]$/u, '');
38
- for (const generation of Object.keys(CLAUDE_GENERATION_EFFORTS)) {
39
+ const generations = Object.keys(CLAUDE_GENERATION_EFFORTS).sort((left, right) => right.length - left.length);
40
+ for (const generation of generations) {
39
41
  const [family, ...versionParts] = generation.split('-');
40
42
  const version = versionParts.join('[-.]');
41
43
  const pattern = new RegExp(`(?:^|[./:_-])(?:claude-)?${family}-${version}(?=$|[-@.:/[])`, 'u');
@@ -11,6 +11,9 @@ export declare const SUPPORTED_CODEX_ROLE_TARGETS: readonly ({
11
11
  } | {
12
12
  model: string;
13
13
  effort: string;
14
+ } | {
15
+ model: string;
16
+ effort: string;
14
17
  } | {
15
18
  model: string;
16
19
  effort: "high" | "low" | "medium" | "xhigh";
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/shared.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,aAAa,GACb,gBAAgB,CAAC;AAoBrB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;IAyB/B,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO5D;AAQD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAiBT;AAgDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAOT;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAEvB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,MAAM,CAkBR;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/shared.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,aAAa,GACb,gBAAgB,CAAC;AAoBrB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;IA6B/B,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO5D;AAQD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAiBT;AAgDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAOT;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAEvB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,MAAM,CAkBR;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE"}
@@ -12,6 +12,10 @@ const STANDARD_SUPPORTED_CODEX_EFFORTS = [
12
12
  'xhigh',
13
13
  ];
14
14
  export const SUPPORTED_CODEX_ROLE_TARGETS = [
15
+ ...[...STANDARD_SUPPORTED_CODEX_EFFORTS, 'max'].map((effort) => ({
16
+ model: 'gpt-6.1-sol',
17
+ effort,
18
+ })),
15
19
  ...[...STANDARD_SUPPORTED_CODEX_EFFORTS, 'max'].map((effort) => ({
16
20
  model: 'gpt-6-astra',
17
21
  effort,
@@ -1,4 +1,4 @@
1
- export type CursorPinSyntaxFamily = 'gpt-reasoning' | 'claude-effort' | 'composer-fast' | 'grok-effort-fast';
1
+ export type CursorPinSyntaxFamily = 'explicit-model-id' | 'gpt-reasoning' | 'claude-effort' | 'composer-fast' | 'grok-effort-fast';
2
2
  /**
3
3
  * What a probe submitted and what the harness resolved it to, transcribed from
4
4
  * the probe evidence.
@@ -29,7 +29,7 @@ export interface CursorModelPinMapping {
29
29
  gateEvidence: CursorPinGateEvidence;
30
30
  catalogue: boolean;
31
31
  }
32
- export declare const CURSOR_MODEL_PIN_MAPPINGS: readonly [CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping];
32
+ export declare const CURSOR_MODEL_PIN_MAPPINGS: readonly [CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping];
33
33
  export declare const SUPPORTED_CURSOR_ROLE_TARGETS: CursorModelPinMapping[];
34
34
  export declare const SUPPORTED_CURSOR_BASE_ROLES: readonly ['oat-phase-implementer', 'oat-reviewer'];
35
35
  export declare function findCursorModelPinMapping(ladderModelId: string): CursorModelPinMapping | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/catalog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,eAAe,GACf,kBAAkB,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD,eAAO,MAAM,yBAAyB,6rBA6Se,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yBAEzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,YACtC,uBAAuB,EACvB,cAAc,CACN,CAAC;AAEX,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,qBAAqB,GAAG,SAAS,CAInC"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/catalog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,eAAe,GACf,kBAAkB,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD,eAAO,MAAM,yBAAyB,gzBAwXe,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yBAEzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,YACtC,uBAAuB,EACvB,cAAc,CACN,CAAC;AAEX,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,qBAAqB,GAAG,SAAS,CAInC"}
@@ -27,6 +27,51 @@ export const CURSOR_MODEL_PIN_MAPPINGS = [
27
27
  },
28
28
  }),
29
29
  approvedMapping('claude-sonnet-5-high', 'claude-sonnet-5[effort=high]', 'claude-effort', { catalogue: false }),
30
+ approvedMapping('claude-sonnet-5-5-low', 'claude-sonnet-5-5-low', 'explicit-model-id', {
31
+ probeName: 'zz-pin-probe-sonnet55-flat-low',
32
+ probeRecord: {
33
+ submittedSelector: 'claude-sonnet-5-5-low',
34
+ resolvedModel: 'claude-sonnet-5-5-low',
35
+ verifiedAt: '2026-10-01',
36
+ evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
37
+ },
38
+ }),
39
+ approvedMapping('claude-sonnet-5-5-medium', 'claude-sonnet-5-5-medium', 'explicit-model-id', {
40
+ probeName: 'zz-pin-probe-sonnet55-flat-medium',
41
+ probeRecord: {
42
+ submittedSelector: 'claude-sonnet-5-5-medium',
43
+ resolvedModel: 'claude-sonnet-5-5-medium',
44
+ verifiedAt: '2026-10-01',
45
+ evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
46
+ },
47
+ }),
48
+ approvedMapping('claude-sonnet-5-5-high', 'claude-sonnet-5-5-high', 'explicit-model-id', {
49
+ probeName: 'zz-pin-probe-sonnet55-flat-high',
50
+ probeRecord: {
51
+ submittedSelector: 'claude-sonnet-5-5-high',
52
+ resolvedModel: 'claude-sonnet-5-5-high',
53
+ verifiedAt: '2026-10-01',
54
+ evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
55
+ },
56
+ }),
57
+ approvedMapping('claude-sonnet-5-5-xhigh', 'claude-sonnet-5-5-xhigh', 'explicit-model-id', {
58
+ probeName: 'zz-pin-probe-sonnet55-flat-xhigh',
59
+ probeRecord: {
60
+ submittedSelector: 'claude-sonnet-5-5-xhigh',
61
+ resolvedModel: 'claude-sonnet-5-5-xhigh',
62
+ verifiedAt: '2026-10-01',
63
+ evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
64
+ },
65
+ }),
66
+ approvedMapping('claude-sonnet-5-5-max', 'claude-sonnet-5-5-max', 'explicit-model-id', {
67
+ probeName: 'zz-pin-probe-sonnet55-flat-max',
68
+ probeRecord: {
69
+ submittedSelector: 'claude-sonnet-5-5-max',
70
+ resolvedModel: 'claude-sonnet-5-5-max',
71
+ verifiedAt: '2026-10-01',
72
+ evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
73
+ },
74
+ }),
30
75
  approvedMapping('claude-opus-5-5-low', 'claude-opus-5-5[effort=low]', 'claude-effort', {
31
76
  probeName: 'zz-pin-probe-opus55-low',
32
77
  probeRecord: {
@@ -0,0 +1,4 @@
1
+ import type { CursorModelPinMapping } from './catalog.js';
2
+ /** Validate at both target collection and rendering, before any role writes. */
3
+ export declare function assertApprovedCursorModelPinMapping(mapping: CursorModelPinMapping): void;
4
+ //# sourceMappingURL=mapping-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping-validation.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/mapping-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,gFAAgF;AAChF,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAkCN"}
@@ -0,0 +1,25 @@
1
+ import { CliError } from '../../../errors/index.js';
2
+ /** Validate at both target collection and rendering, before any role writes. */
3
+ export function assertApprovedCursorModelPinMapping(mapping) {
4
+ if (mapping.gateEvidence.gate !== 'g01' ||
5
+ mapping.gateEvidence.disposition !== 'approved' ||
6
+ !mapping.gateEvidence.probeName.trim()) {
7
+ throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
8
+ }
9
+ if (mapping.syntaxFamily === 'explicit-model-id') {
10
+ const record = mapping.gateEvidence.probeRecord;
11
+ if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(mapping.frontmatterModel) ||
12
+ mapping.frontmatterModel !== mapping.ladderModelId ||
13
+ !record ||
14
+ record.submittedSelector !== mapping.frontmatterModel ||
15
+ record.resolvedModel !== mapping.ladderModelId ||
16
+ !/^\d{4}-\d{2}-\d{2}$/.test(record.verifiedAt) ||
17
+ !record.evidencePath.trim()) {
18
+ throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: explicit model ID requires matching mapping-specific native probe evidence.`);
19
+ }
20
+ return;
21
+ }
22
+ if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
23
+ throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: frontmatter model must include a non-empty bracket segment.`);
24
+ }
25
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/materialize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;CACxB;AA4BD,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE,6BAA6B,GAAG,uBAAuB,CA8BzD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,KAAK,EAAE,eAAe,CAAC;CACxB,GAAG,uBAAuB,EAAE,CAwB5B;AAqCD,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
1
+ {"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/materialize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;CACxB;AAWD,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE,6BAA6B,GAAG,uBAAuB,CA8BzD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,KAAK,EAAE,eAAe,CAAC;CACxB,GAAG,uBAAuB,EAAE,CAwB5B;AAqCD,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
@@ -3,28 +3,19 @@ import { join } from 'node:path';
3
3
  import { CliError } from '../../../errors/index.js';
4
4
  import { validateRealPathWithinScope } from '../../../fs/paths.js';
5
5
  import YAML from 'yaml';
6
+ import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
6
7
  import { buildCursorMaterializedRoleName, isOatManagedCursorRoleFile, normalizeCursorRoleName, renderCursorManagedComments, } from './shared.js';
7
8
  const CURSOR_AGENT_DISCOVERY_DIRECTORIES = [
8
9
  '.cursor/agents',
9
10
  '.claude/agents',
10
11
  '.codex/agents',
11
12
  ];
12
- function assertApprovedMapping(mapping) {
13
- if (mapping.gateEvidence.gate !== 'g01' ||
14
- mapping.gateEvidence.disposition !== 'approved' ||
15
- !mapping.gateEvidence.probeName.trim()) {
16
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
17
- }
18
- if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
19
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: frontmatter model must include a non-empty bracket segment.`);
20
- }
21
- }
22
13
  function optionalCursorBoolean(agent, field) {
23
14
  const value = field === 'readonly' ? agent.readonly : agent.frontmatter[field];
24
15
  return typeof value === 'boolean' ? value : undefined;
25
16
  }
26
17
  export function materializeCursorAgent({ agent, mapping, owner, }) {
27
- assertApprovedMapping(mapping);
18
+ assertApprovedCursorModelPinMapping(mapping);
28
19
  const roleName = buildCursorMaterializedRoleName({
29
20
  agentName: agent.name,
30
21
  ladderModelId: mapping.ladderModelId,
@@ -1 +1 @@
1
- {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAMnB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB,CACxE,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B,CAClF,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB,CAC9D,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAQpE,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,gBAAgB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAiWD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AA6DD,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CA4DrC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,GACxB,wBAAwB,EAAE,CAM5B;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAAwB,CACnE,mBAAmB,EACnB,sBAAsB,CAAC,kCAAkC,CAAC,CAY3D,CAAC"}
1
+ {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAOnB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB,CACxE,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B,CAClF,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB,CAC9D,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAQpE,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,gBAAgB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAgVD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AA6DD,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CA4DrC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,GACxB,wBAAwB,EAAE,CAM5B;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAAwB,CACnE,mBAAmB,EACnB,sBAAsB,CAAC,kCAAkC,CAAC,CAY3D,CAAC"}
@@ -12,6 +12,7 @@ import { validateRealPathWithinScope } from '../../../fs/paths.js';
12
12
  import { hasMaterializationChanges, summarizeMaterializationPlan, toMaterializationOperations, } from '../../shared/index.js';
13
13
  import YAML from 'yaml';
14
14
  import { CURSOR_MODEL_PIN_MAPPINGS, SUPPORTED_CURSOR_BASE_ROLES, SUPPORTED_CURSOR_ROLE_TARGETS, } from './catalog.js';
15
+ import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
15
16
  import { assertNoUnmanagedCursorAgentCollisions, materializeCursorAgent, } from './materialize.js';
16
17
  import { isOatManagedCursorRoleFile, readOatManagedCursorRoleOwner, readOatManagedCursorRoleName, } from './shared.js';
17
18
  const OWNER_PRECEDENCE = {
@@ -29,22 +30,12 @@ function isUserCursorScope(scopeRoot, options) {
29
30
  return Boolean(options.userConfigDir &&
30
31
  resolve(scopeRoot) === resolve(options.userConfigDir, '..'));
31
32
  }
32
- function assertApprovedMapping(mapping) {
33
- if (mapping.gateEvidence.gate !== 'g01' ||
34
- mapping.gateEvidence.disposition !== 'approved' ||
35
- !mapping.gateEvidence.probeName.trim()) {
36
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
37
- }
38
- if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
39
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: approved mapping must include a non-empty bracket segment.`);
40
- }
41
- }
42
33
  function addCursorTarget(ladderModelId, owner, source, targets, mappings) {
43
34
  const mapping = mappings.find((candidate) => candidate.ladderModelId === ladderModelId);
44
35
  if (!mapping) {
45
36
  throw new CliError(`Cannot materialize unknown Cursor model mapping "${ladderModelId}" from ${source}. Add mapping-specific gate g01 evidence before using this target.`);
46
37
  }
47
- assertApprovedMapping(mapping);
38
+ assertApprovedCursorModelPinMapping(mapping);
48
39
  const existing = targets.get(ladderModelId);
49
40
  if (!existing ||
50
41
  OWNER_PRECEDENCE[owner] >= OWNER_PRECEDENCE[existing.owner]) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.3.9",
3
+ "version": "0.3.10",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -34,7 +34,7 @@
34
34
  "ora": "^9.0.0",
35
35
  "yaml": "2.8.2",
36
36
  "zod": "^3.25.76",
37
- "@open-agent-toolkit/control-plane": "0.3.9"
37
+ "@open-agent-toolkit/control-plane": "0.3.10"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",