@open-agent-toolkit/cli 0.1.73 → 0.1.74

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 (90) hide show
  1. package/assets/config/dispatch-matrix-recommendation.json +13 -17
  2. package/assets/docs/cli-utilities/configuration.md +35 -60
  3. package/assets/docs/cli-utilities/workflow-gates.md +38 -2
  4. package/assets/docs/provider-sync/providers.md +15 -17
  5. package/assets/docs/workflows/projects/artifacts.md +1 -1
  6. package/assets/docs/workflows/projects/dispatch-ceiling.md +29 -33
  7. package/assets/docs/workflows/projects/implementation-execution.md +7 -4
  8. package/assets/docs/workflows/projects/lifecycle.md +4 -3
  9. package/assets/public-package-versions.json +4 -4
  10. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  11. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +27 -15
  12. package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
  13. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  14. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  15. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +17 -15
  16. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +15 -9
  17. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  18. package/assets/skills/oat-project-implement/references/phase-execution.md +11 -5
  19. package/assets/skills/oat-project-import-plan/SKILL.md +30 -8
  20. package/assets/skills/oat-project-plan/SKILL.md +30 -8
  21. package/assets/skills/oat-project-plan-writing/SKILL.md +12 -9
  22. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  23. package/assets/skills/oat-project-quick-start/SKILL.md +30 -8
  24. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  25. package/assets/skills/oat-project-review-provide/SKILL.md +19 -11
  26. package/assets/skills/oat-project-review-provide-remote/SKILL.md +27 -4
  27. package/dist/commands/doctor/index.d.ts +2 -1
  28. package/dist/commands/doctor/index.d.ts.map +1 -1
  29. package/dist/commands/doctor/index.js +37 -1
  30. package/dist/commands/gate/index.d.ts +1 -1
  31. package/dist/commands/gate/index.d.ts.map +1 -1
  32. package/dist/commands/gate/index.js +35 -3
  33. package/dist/commands/init/index.d.ts +1 -1
  34. package/dist/commands/init/index.d.ts.map +1 -1
  35. package/dist/commands/init/index.js +40 -8
  36. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  37. package/dist/commands/project/dispatch-ceiling/index.js +17 -9
  38. package/dist/commands/shared/codex-strays.d.ts +9 -0
  39. package/dist/commands/shared/codex-strays.d.ts.map +1 -1
  40. package/dist/commands/shared/codex-strays.js +4 -0
  41. package/dist/commands/status/index.d.ts +7 -1
  42. package/dist/commands/status/index.d.ts.map +1 -1
  43. package/dist/commands/status/index.js +53 -17
  44. package/dist/commands/sync/apply.d.ts.map +1 -1
  45. package/dist/commands/sync/apply.js +50 -24
  46. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  47. package/dist/commands/sync/dry-run.js +31 -18
  48. package/dist/commands/sync/index.d.ts.map +1 -1
  49. package/dist/commands/sync/index.js +34 -25
  50. package/dist/commands/sync/sync.types.d.ts +26 -11
  51. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  52. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  53. package/dist/commands/sync/sync.utils.js +3 -2
  54. package/dist/engine/index.d.ts +1 -1
  55. package/dist/engine/index.d.ts.map +1 -1
  56. package/dist/engine/index.js +1 -1
  57. package/dist/engine/scanner.d.ts +3 -1
  58. package/dist/engine/scanner.d.ts.map +1 -1
  59. package/dist/engine/scanner.js +4 -2
  60. package/dist/providers/ceiling/registry.d.ts +2 -0
  61. package/dist/providers/ceiling/registry.d.ts.map +1 -1
  62. package/dist/providers/ceiling/registry.js +20 -4
  63. package/dist/providers/codex/codec/sync-extension.d.ts +11 -10
  64. package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
  65. package/dist/providers/codex/codec/sync-extension.js +42 -14
  66. package/dist/providers/cursor/codec/catalog.d.ts +18 -0
  67. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -0
  68. package/dist/providers/cursor/codec/catalog.js +39 -0
  69. package/dist/providers/cursor/codec/materialize.d.ts +24 -0
  70. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -0
  71. package/dist/providers/cursor/codec/materialize.js +166 -0
  72. package/dist/providers/cursor/codec/shared.d.ts +14 -0
  73. package/dist/providers/cursor/codec/shared.d.ts.map +1 -0
  74. package/dist/providers/cursor/codec/shared.js +76 -0
  75. package/dist/providers/cursor/codec/sync-extension.d.ts +37 -0
  76. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -0
  77. package/dist/providers/cursor/codec/sync-extension.js +393 -0
  78. package/dist/providers/cursor/index.d.ts +3 -0
  79. package/dist/providers/cursor/index.d.ts.map +1 -1
  80. package/dist/providers/cursor/index.js +3 -0
  81. package/dist/providers/identity/availability.d.ts +7 -0
  82. package/dist/providers/identity/availability.d.ts.map +1 -1
  83. package/dist/providers/identity/availability.js +23 -0
  84. package/dist/providers/shared/index.d.ts +2 -0
  85. package/dist/providers/shared/index.d.ts.map +1 -1
  86. package/dist/providers/shared/index.js +1 -0
  87. package/dist/providers/shared/materialization-extension.d.ts +44 -0
  88. package/dist/providers/shared/materialization-extension.d.ts.map +1 -0
  89. package/dist/providers/shared/materialization-extension.js +26 -0
  90. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026-07-10.2",
2
+ "version": "2026-07-11.1",
3
3
  "providers": {
4
4
  "codex": {
5
5
  "economy": {
@@ -101,29 +101,25 @@
101
101
  "cursor": {
102
102
  "economy": {
103
103
  "candidates": [
104
- "gpt-5.6-luna-low",
105
- "gpt-5.6-luna-medium",
106
- "gpt-5.6-luna-high"
104
+ "composer-2.5",
105
+ "claude-sonnet-5-high",
106
+ "gpt-5.6-luna-high",
107
+ "gpt-5.6-luna-xhigh"
107
108
  ]
108
109
  },
109
110
  "balanced": {
110
- "candidates": [
111
- "gpt-5.6-luna-xhigh",
112
- "gpt-5.6-terra-low",
113
- "gpt-5.6-terra-medium",
114
- "gpt-5.6-terra-high",
115
- "gpt-5.6-terra-xhigh"
116
- ]
111
+ "candidates": ["cursor-grok-4.5-high", "gpt-5.6-terra-high"]
117
112
  },
118
113
  "high": {
119
- "candidates": [
120
- "gpt-5.6-sol-low",
121
- "gpt-5.6-sol-medium",
122
- "gpt-5.6-sol-high"
123
- ]
114
+ "candidates": ["gpt-5.6-sol-medium", "gpt-5.6-sol-high"]
124
115
  },
125
116
  "frontier": {
126
- "candidates": ["gpt-5.6-sol-xhigh", "gpt-5.6-sol-max"]
117
+ "candidates": [
118
+ "claude-fable-5-thinking-high",
119
+ "claude-fable-5-thinking-xhigh",
120
+ "gpt-5.6-sol-xhigh",
121
+ "gpt-5.6-sol-max"
122
+ ]
127
123
  }
128
124
  }
129
125
  }
@@ -232,14 +232,15 @@ values. Planning shows the complete bundled recommendation before asking for
232
232
  this scope, then rechecks the effective ladder. If explicit cells still leave
233
233
  the ladder incomplete, readiness blocks; OAT does not overwrite them.
234
234
 
235
- Scope determines ownership and Codex materialization:
235
+ Scope determines ownership and Codex/Cursor materialization:
236
236
 
237
237
  - `--shared` and `--local` are project configuration sources. Their configured
238
- Codex candidates materialize into the tracked project `.codex` view.
238
+ Codex and Cursor candidates materialize into the tracked project `.codex`
239
+ and `.cursor` views.
239
240
  - `--user` writes reusable personal defaults to `~/.oat/config.json`; those
240
- Codex candidates materialize under `~/.codex`.
241
- - Active-project sparse candidates also materialize into the tracked project
242
- view.
241
+ candidates materialize under `~/.codex` and `~/.cursor`.
242
+ - Active-project sparse candidates also materialize into the applicable tracked
243
+ project view.
243
244
 
244
245
  Project-generated provider views remain visible to version control. OAT does
245
246
  not auto-ignore them. A project-specific active policy or ceiling must not be
@@ -274,7 +275,7 @@ even when the reusable ladder is user-owned.
274
275
  },
275
276
  "cursor": {
276
277
  "balanced": {
277
- "candidates": ["opaque:model/lower [v1]", "opaque:model/high [v2]"]
278
+ "candidates": ["cursor-grok-4.5-high", "gpt-5.6-terra-high"]
278
279
  }
279
280
  }
280
281
  }
@@ -285,9 +286,11 @@ even when the reusable ladder is user-owned.
285
286
 
286
287
  The bundled recommendation covers 13 Codex model/effort combinations: Luna and
287
288
  Terra at `low`, `medium`, `high`, and `xhigh`, plus Sol at those efforts and
288
- `max`. Claude covers `haiku`, `sonnet`, `opus`, and `fable`. Cursor covers 13
289
- opaque configured strings. Cursor spelling never supplies capability metadata;
290
- the configured candidate position owns the tier meaning.
289
+ `max`. Claude covers `haiku`, `sonnet`, `opus`, and `fable`. Cursor covers 12
290
+ verified multi-family flat IDs across Composer, Claude, GPT, and Grok. An
291
+ explicit mapping connects each flat ladder ID to a separate bracket-form
292
+ frontmatter model; configuration and skills never derive or normalize either
293
+ form.
291
294
 
292
295
  The corresponding pinned Codex variant catalogue includes
293
296
  `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
@@ -360,7 +363,7 @@ oat project dispatch-ceiling resolve \
360
363
  --provider cursor \
361
364
  --role implementer \
362
365
  --ceiling-tier high \
363
- --candidate-model 'opaque:model/lower [v1]' \
366
+ --candidate-model gpt-5.6-sol-high \
364
367
  --json
365
368
  ```
366
369
 
@@ -381,11 +384,12 @@ remains compatibility behavior for legacy scalar ceilings and managed
381
384
  | -------- | ---------------------------------------------------------------------------------------------------- |
382
385
  | Codex | `providers.codex.dispatchArgs.variant` as `agent_type`, or a fresh child pinned to model plus effort |
383
386
  | Claude | `providers.claude.dispatchArgs.model` as the actual Agent `model` |
384
- | Cursor | `providers.cursor.dispatchArgs.model` byte-for-byte as the actual opaque invocation model |
387
+ | Cursor | `providers.cursor.dispatchArgs.variant` as the exact native agent type first |
385
388
 
386
- Project sync materializes the supported Codex catalogue and every configured
387
- project-owned candidate for both `oat-phase-implementer` and `oat-reviewer`.
388
- User sync materializes user-owned candidates under `~/.codex`:
389
+ Project sync materializes the supported Codex and Cursor catalogues and every
390
+ configured project-owned candidate for both `oat-phase-implementer` and
391
+ `oat-reviewer`. User sync materializes user-owned candidates under `~/.codex`
392
+ and `~/.cursor/agents`:
389
393
 
390
394
  ```bash
391
395
  oat sync --scope project
@@ -394,60 +398,31 @@ oat sync --scope all
394
398
  ```
395
399
 
396
400
  Generated roles carry `supported-catalogue`, `project-config`, or `user-config`
397
- ownership. Cleanup reconciles only the current owner. Materialization is best
398
- effort at sync boundaries; the exact fresh-child route means workflow
399
- correctness does not require provider restart or hot reload.
401
+ ownership. Cleanup reconciles only the current owner. Cursor's mapping registry
402
+ rejects unknown flat IDs instead of writing unverified frontmatter.
400
403
 
401
404
  Reviewer resolution uses the final candidate at the configured review ceiling.
402
- Codex selects the exact reviewer variant; Claude and Cursor pass the resolver's
403
- exact model argument. Timeout retries preserve the same complete payload. A
404
- lower reviewer candidate requires a separate reviewed contract.
405
+ Codex and Cursor select exact native reviewer variants; Claude passes the
406
+ resolver's exact model argument. Timeout retries preserve the same complete
407
+ payload. A lower reviewer candidate requires a separate reviewed contract.
405
408
 
406
409
  Tier 2 remains target-preserving. Inline review is permitted only when the host
407
410
  has verified equivalent current-host controls for explicit inherit,
408
411
  managed-uncapped, or base-role behavior. Capped managed reviews still require
409
412
  the exact registered role, pinned child, or resolver-returned model argument.
410
413
 
411
- ### Cursor validation pass and live evidence
412
-
413
- Config adoption and doctor validate Cursor candidates with one command-scoped
414
- pass context. Duplicate references to the same byte-for-byte candidate share
415
- one Task/subagent probe. If a decisive probe is unavailable, the pass resolves
416
- the broad catalog once, with at most one `--list-models` fallback. The cache
417
- ends with that adopt or doctor command; it is not process-global and has no
418
- TTL.
419
-
420
- A correlated Task start/completion pair that preserves the exact model argument
421
- and returns the sentinel establishes that the argument is eligible for that
422
- account and client. A structured rejection or exact allow-list exclusion can
423
- establish `unknown-value`. Neither result identifies the backend runtime model:
424
- `runtimeIdentity` remains `not-reported` unless trusted Cursor telemetry or
425
- Cursor support confirms it. Parent prose and broad catalog presence are
426
- diagnostic-only, so OAT preserves `unvalidated` when launcher evidence is
427
- absent instead of inferring capability from candidate spelling.
428
-
429
- The [dated GPT-5.6 Cursor verification evidence](https://github.com/voxmedia/open-agent-toolkit/blob/main/.oat/repo/reference/project-summaries/20260711-cursor-gpt-5-6-subagent-verification.md)
430
- preserves the original text-mode pass and a versioned stream-JSON second pass.
431
- The second pass ran a dynamic positive control and deliberate invalid control
432
- before candidates. Both parent runs completed without a Task event, making the
433
- controls inconclusive; the stop rule therefore executed zero of the 13
434
- recommended candidates and did not execute exploratory
435
- `gpt-5.6-sol-high-fast`. The recommendation remains unchanged and candidate
436
- eligibility remains unresolved.
437
-
438
- The tracked artifact's structured second-pass block contains only allowlisted
439
- event structure, derived outcomes, sanitized auth-presence context, and
440
- non-reversible identifier hashes. Exact request/session/tool-call IDs and
441
- credential-redacted unprojected streams from that pass stay under gitignored
442
- `.oat/projects/local/` storage for possible Cursor support diagnosis.
443
-
444
- The same public artifact intentionally retains the sanitized historical v1
445
- text-mode record for provenance. That older section includes command arguments
446
- and prompts, stdout and stderr, exit and duration data, and capture-environment
447
- details such as user-specific binary paths; it is not limited to the structured
448
- second-pass allowlist. Re-run after a Cursor client rollout exposes Task in
449
- headless mode or Cursor support confirms the private requests; review the open
450
- verification item by 2026-08-08.
414
+ ### Cursor availability and evidence
415
+
416
+ `oat doctor` compares configured Cursor flat IDs with the current Cursor
417
+ catalogue and reports availability drift. This check is diagnostic: catalogue
418
+ presence does not prove that a bracket-form definition pin was honored.
419
+
420
+ Each shipped mapping has mapping-specific native-launch evidence, but Cursor
421
+ can silently fallback when account, plan, or administration constraints prevent
422
+ the requested pin. OAT therefore records the selected variant and mapped model
423
+ with launcher-owned `configured` provenance. Runtime identity remains
424
+ `not-reported` unless independently observed; self-report and catalogue
425
+ availability do not upgrade that evidence.
451
426
 
452
427
  ### Legacy compatibility
453
428
 
@@ -94,6 +94,37 @@ model that ran, and the reviewer must not replace them with self-identification.
94
94
  The CLI compares the copied values with its gate-owned record before it applies
95
95
  the severity threshold.
96
96
 
97
+ ### Review producer identity
98
+
99
+ Dynamic planning workflows can declare their current parent model to a review
100
+ gate without writing a provider or model into shared/user config:
101
+
102
+ ```bash
103
+ OAT_GATE_PRODUCER_IDENTITY='<model>:declared' oat gate review ...
104
+ ```
105
+
106
+ This is a review-command-only bridge. `oat gate review` accepts it only when
107
+ the value is non-empty and its provenance suffix is exactly `declared`. The
108
+ gate removes the variable from the child reviewer's environment, and non-review
109
+ commands such as `oat gate cross-provider-exec` ignore it.
110
+
111
+ Producer evidence precedence is explicit `--producer-identity`, then a
112
+ qualifying implementation dispatch stamp, then the review-only environment
113
+ declaration, and finally unknown producer behavior. The environment bridge does
114
+ not replace stronger explicit or stamped evidence and does not establish
115
+ observed runtime identity.
116
+
117
+ For final and contiguous-range reviews, each in-scope implementer/fix stamp
118
+ contributes its claimable producer family. If that producer is not claimable or
119
+ has an unknown family, the gate may infer only a family exclusion from the
120
+ stamp's launcher-owned configured target. The target does not become producer
121
+ runtime identity, and generic or unclassifiable targets contribute no family.
122
+
123
+ Keep reusable gate commands producer-neutral in shared and user config.
124
+ Planning skills attach the ephemeral declaration only while executing a
125
+ resolved configured command that invokes `oat gate review`; they leave it
126
+ absent for every other gate command.
127
+
97
128
  ### Headless completion safety
98
129
 
99
130
  Every `oat gate review` child receives the same headless contract through two
@@ -492,7 +523,9 @@ By default the dispatcher:
492
523
  4. Resolves producer identity from `--producer-identity` or dispatch stamps when
493
524
  available. Exact phase/task scopes use the matching stamp. `final` and
494
525
  contiguous ranges such as `p02-p03` aggregate every in-range implementer/fix
495
- stamp.
526
+ stamp. A stamp whose producer is not claimable or has an unknown family may
527
+ contribute its classifiable configured target family to aggregate avoidance
528
+ at lower confidence.
496
529
  5. Applies `--avoid same-family`.
497
530
  6. Checks candidate availability in descending priority order, with target id as
498
531
  the tie-breaker.
@@ -537,7 +570,10 @@ single stamp or when no stamp has a claimable family. Their producer record uses
537
570
  an unknown representative instead of presenting the latest stamp as aggregate
538
571
  truth:
539
572
 
540
- - `avoidFamilies` is the stable deduplicated union of claimable known families.
573
+ - `avoidFamilies` is the stable deduplicated union of claimable known producer
574
+ families plus classifiable configured target families from stamps whose
575
+ producer is not claimable or has an unknown family. A known, claimable
576
+ producer remains authoritative over a conflicting target.
541
577
  - `contributingScopes` is the stable document-order list of distinct scopes from
542
578
  every relevant stamp.
543
579
  - `contributingStampCount` counts every relevant stamp, including unknown or
@@ -18,14 +18,11 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
18
18
 
19
19
  - Project: `.agents/skills` -> `.cursor/skills`, `.agents/agents` -> `.cursor/agents`, `.agents/rules` -> `.cursor/rules`
20
20
  - User: `~/.agents/skills` -> `~/.cursor/skills`, `~/.agents/agents` -> `~/.cursor/agents`
21
- - Subagent invocation in Cursor is prompt-driven (`/name` or natural mention), not `subagent_type`
22
- - OAT-controlled Cursor dispatch uses the generic `.cursor/agents/<name>.md` file plus the exact `providers.cursor.dispatchArgs.model` value selected from the candidate ladder. OAT passes it byte-for-byte as the actual Task-level `model`; a `model` frontmatter value is only a default/fallback mechanism.
23
- - Cursor model strings are opaque. OAT does not infer family, effort, cost, or capability from their spelling; the configured candidate position owns the named tier meaning.
24
- - Cursor model validation checks whether the selected model is eligible for subagent Task dispatch. Each adopt/doctor command probes each distinct exact candidate once and shares one lazy broad-catalog lookup across that pass; the cache ends with the command.
25
- - A correlated accepted Task carrying the exact model argument plus the child sentinel proves argument eligibility for that account/client. It does not prove backend runtime identity; that remains `not-reported` without trusted Cursor telemetry or support confirmation. Structured rejection can establish `unknown-value`, while parent prose and broad `cursor-agent models` catalog presence remain diagnostic-only.
26
- - The [dated GPT-5.6 verification artifact](https://github.com/voxmedia/open-agent-toolkit/blob/main/.oat/repo/reference/project-summaries/20260711-cursor-gpt-5-6-subagent-verification.md) preserves the original probe and a stream-JSON control pass. The controls observed no Task events, so the stop rule ran zero recommendation or exploratory candidates and retained the recommendation unchanged.
27
- - The artifact's structured second-pass block contains only allowlisted event fields, derived outcomes, sanitized auth presence, and identifier hashes. Exact request/session/tool-call IDs and credential-redacted unprojected streams from that pass remain in gitignored local project storage for support escalation.
28
- - The same public artifact retains the sanitized historical v1 text-mode record for provenance. That older section includes command arguments and prompts, stdout and stderr, exit and duration data, and capture-environment details such as user-specific binary paths; it is not limited to the structured second-pass allowlist.
21
+ - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer`. 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.
22
+ - 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.
23
+ - 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.
24
+ - 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.
25
+ - `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.
29
26
  - Rule files render as `.cursor/rules/*.mdc`
30
27
 
31
28
  === "Copilot"
@@ -81,9 +78,9 @@ oat config adopt dispatch-matrix --user
81
78
  ```
82
79
 
83
80
  Project-config candidates materialize into the tracked, version-controlled
84
- project `.codex` view. User-config candidates materialize under `~/.codex`.
85
- OAT does not auto-ignore project output or create its Git commit; the team owns
86
- that repository change.
81
+ project `.codex` and `.cursor` views. User-config candidates materialize under
82
+ `~/.codex` and `~/.cursor`. OAT does not auto-ignore project output or create
83
+ its Git commit; the team owns that repository change.
87
84
 
88
85
  At implementation time, the root passes the recorded named maximum through
89
86
  invocation-only `--ceiling-tier`, resolves one exact candidate per phase, and
@@ -91,19 +88,20 @@ dispatches one phase implementer. Codex first attempts the resolver-returned
91
88
  materialized role as the native `agent_type`. The launcher records the target,
92
89
  model axis, and effort axis from that resolved payload; child self-report is not
93
90
  provenance and cannot replace those values.
94
- Only an explicit pre-start native role-selection rejection permits a fresh
95
- pinned-child fallback. An accepted child, including one that later returns
91
+ Only an explicit pre-start native role-selection rejection permits another
92
+ target-preserving route. An accepted child, including one that later returns
96
93
  `BLOCKED` or lacks telemetry, is a task outcome rather than a fallback signal.
97
- Claude and Cursor bind the exact model arguments described above. A missing or
98
- unselectable managed target blocks rather than falling back to the root target
99
- or a base role.
94
+ Claude binds the exact model argument described above. Cursor launches the
95
+ exact native variant. A missing or unselectable managed target blocks rather
96
+ than falling back to the root target or a base role.
100
97
 
101
98
  ## Scope rules
102
99
 
103
100
  - Project scope: skills + agents + rules
104
- - User scope: skills, plus the two bundled managed Codex role definitions used only for user-owned target expansion (provider mappings vary by adapter)
101
+ - User scope: skills, plus the two bundled managed Codex and Cursor role definitions used only for user-owned target expansion (provider mappings vary by adapter)
105
102
  - Rules are project-scoped only in this release
106
103
  - Codex user-scope sync materializes user-config custom roles under `~/.codex`; project-config and supported-catalogue output remains project-scoped and version controlled
104
+ - Cursor user-scope sync materializes user-config variants under `~/.cursor/agents`; project-config and supported-catalogue output remains project-scoped and version controlled
107
105
 
108
106
  ## Adoption model
109
107
 
@@ -127,7 +127,7 @@ Each inner array is a group of phases that execute concurrently in their own wor
127
127
  - Each group must contain **2 or more** phases — singleton groups are rejected.
128
128
  - Every phase ID must exist in the plan body.
129
129
  - No phase may appear in more than one group.
130
- - 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 and Cursor reviewers retain the exact resolver-returned `dispatchArgs.model` in the actual invocation and every retry; Codex retains its exact role or pinned child. Inline review requires verified equivalent host controls or an explicit inherit/default or managed-uncapped base-role exception, and otherwise blocks.
130
+ - 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 retain the exact resolver-returned `dispatchArgs.model`; 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.
131
131
 
132
132
  **Authoring responsibility:**
133
133
 
@@ -194,8 +194,10 @@ candidate in each tier:
194
194
  `max`.
195
195
  - **Claude:** `haiku`, `sonnet`, `opus`, and `fable` across the ordered named
196
196
  tiers.
197
- - **Cursor:** opaque strings corresponding to the same 13 configured positions.
198
- OAT does not parse those strings to infer family, effort, cost, or capability.
197
+ - **Cursor:** 12 verified multi-family flat IDs across Composer, Claude, GPT,
198
+ and Grok. The explicit materialization catalogue maps each flat ladder ID to
199
+ a separate bracket-form frontmatter model; OAT does not derive or normalize
200
+ either value.
199
201
 
200
202
  The final candidate in a named tier defines that tier's reviewer ceiling. Lower
201
203
  reviewer selection requires a separate reviewed contract; a normal reviewer
@@ -240,7 +242,7 @@ oat project dispatch-ceiling resolve \
240
242
  --provider cursor \
241
243
  --role implementer \
242
244
  --ceiling-tier high \
243
- --candidate-model 'opaque:model/balanced [v2]' \
245
+ --candidate-model gpt-5.6-sol-high \
244
246
  --json
245
247
  ```
246
248
 
@@ -280,45 +282,39 @@ branch replaces, rather than supplements, preferred selection.
280
282
  | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
281
283
  | Codex | Use `providers.codex.dispatchArgs.variant` as `agent_type`; otherwise launch a fresh child pinned to the returned model and effort | Block if neither exact route is usable |
282
284
  | Claude | Pass `providers.claude.dispatchArgs.model` as the actual Task `model` | Block if the model cannot be applied |
283
- | Cursor | Pass `providers.cursor.dispatchArgs.model` byte-for-byte as the actual invocation model; treat it as opaque | Block rather than normalize or substitute |
285
+ | Cursor | Launch `providers.cursor.dispatchArgs.variant` as the exact native agent type first | Block rather than normalize or substitute |
284
286
  | Other | Use a registered provider adapter when it can compile exact controls | Unsupported providers remain advisory |
285
287
 
286
- Materialized Codex roles exist before phase dispatch after project/user sync.
287
- The supported catalogue is committed project output; custom Codex candidates
288
- materialize according to config ownership. Workflow correctness still keeps a
289
- fresh pinned-child fallback and does not require provider restart or hot reload.
288
+ Materialized Codex and Cursor roles exist before phase dispatch after
289
+ project/user sync. Cursor definitions carry `supported-catalogue`,
290
+ `project-config`, or `user-config` ownership. Project and supported variants
291
+ are tracked under `.cursor/agents`; user variants live under
292
+ `~/.cursor/agents`. Cleanup stays within the current owner boundary.
290
293
 
291
294
  Reviewers use the final candidate at the configured review ceiling. Managed
292
295
  `Uncapped` and explicit inherit/default behavior retain their documented base
293
296
  reviewer behavior. A timeout retry preserves the same exact role or complete
294
- Claude/Cursor model payload.
297
+ Claude model payload or Cursor native variant.
295
298
 
296
299
  ### Cursor evidence authority
297
300
 
298
- Cursor resolution and runtime evidence answer different questions. Resolution
299
- proves which opaque candidate OAT requested. A stream-JSON Task start and
300
- correlated completion prove launcher behavior only when the model argument is
301
- preserved byte-for-byte. An accepted Task plus the child sentinel establishes
302
- argument eligibility for that account and client; a structured rejection can
303
- establish `unknown-value`. Runtime producer identity remains `not-reported`
304
- unless trusted Cursor telemetry or Cursor support independently confirms it.
305
-
306
- The [2026-07-11 GPT-5.6 evidence record](https://github.com/voxmedia/open-agent-toolkit/blob/main/.oat/repo/reference/project-summaries/20260711-cursor-gpt-5-6-subagent-verification.md)
307
- ran positive and negative controls before candidate probes. Neither control
308
- emitted a Task event, so the harness stopped without probing the 13 recommended
309
- arguments or exploratory `gpt-5.6-sol-high-fast`. This is a harness/account
310
- boundary, not model rejection, and it supports no recommendation change.
311
-
312
- The tracked artifact's structured second-pass block exposes only an allowlisted
313
- event projection and non-reversible identifier hashes. Exact
314
- request/session/tool-call IDs and credential-redacted unprojected streams from
315
- that pass stay in gitignored local project storage for support diagnosis.
316
-
317
- The same public artifact intentionally preserves the sanitized historical v1
318
- text-mode record for provenance. That older section includes command arguments
319
- and prompts, stdout and stderr, exit and duration data, and capture-environment
320
- details such as user-specific binary paths; it is not limited to the structured
321
- second-pass projection.
301
+ Cursor selection, pin mapping, catalogue availability, and runtime identity are
302
+ separate evidence layers:
303
+
304
+ - The candidate ladder and resolver use an opaque flat ID.
305
+ - The materialized definition uses the mapping's explicit bracket-form
306
+ frontmatter model.
307
+ - Mapping-specific native-launch evidence authorizes the shipped mapping data.
308
+ - `oat doctor` checks current flat-ID catalogue availability, which can detect
309
+ drift but cannot prove a definition pin.
310
+ - The launcher records the selected variant and mapped model with `configured`
311
+ provenance. Runtime identity remains `not-reported` without an independent
312
+ observation.
313
+
314
+ Cursor can silently fallback when account, plan, or administration constraints
315
+ prevent a requested definition pin. Native variant acceptance is therefore not
316
+ runtime-model verification, and skills must not promote self-report or
317
+ catalogue presence into observed identity.
322
318
 
323
319
  ## Phase and Optional-Worker Layers
324
320
 
@@ -126,10 +126,13 @@ needed, OAT does not probe or require third-tier capacity.
126
126
 
127
127
  Provider controls remain exact: Codex uses
128
128
  `providers.codex.dispatchArgs.variant`, Claude uses
129
- `providers.claude.dispatchArgs.model`, and Cursor treats
130
- `providers.cursor.dispatchArgs.model` as an opaque, byte-for-byte enforced model
131
- argument.
132
- For Cursor, opaque selection is enforced as a byte-for-byte model arg.
129
+ `providers.claude.dispatchArgs.model`, and Cursor uses
130
+ `providers.cursor.dispatchArgs.variant`. Cursor launches that exact
131
+ resolver-selected native agent type first; the flat ID and bracket-form pin
132
+ remain inside the explicit mapping and are never normalized by workflow prose.
133
+ The launcher records this selection as `configured`, while runtime identity
134
+ remains `not-reported` without independent observation. Only a pre-start native
135
+ role-selection rejection permits another target-preserving route.
133
136
 
134
137
  See [Dispatch Policy](dispatch-ceiling.md) for configuration and
135
138
  [Orchestration Model](orchestration-model.md) for the complete role map.
@@ -115,9 +115,10 @@ through the import-plan lane.
115
115
 
116
116
  A concrete managed reviewer remains bound across both tiers. Codex uses the
117
117
  exact registered role or a child pinned to the resolved model and effort;
118
- Claude and Cursor pass the exact resolver-returned `dispatchArgs.model` in the
119
- actual provider invocation, including retries. Tier 2 does not authorize a
120
- target downgrade. Inline review is allowed only with verified equivalent host
118
+ Claude passes the exact resolver-returned `dispatchArgs.model`; Cursor launches
119
+ the exact `providers.cursor.dispatchArgs.variant` native reviewer variant.
120
+ Retries preserve that complete target. Tier 2 does not authorize a target
121
+ downgrade. Inline review is allowed only with verified equivalent host
121
122
  controls, or for explicit inherit/default behavior or the documented
122
123
  managed-uncapped reviewer base-role exception; otherwise the review blocks.
123
124
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.1.73",
3
- "docs-config": "0.1.73",
4
- "docs-theme": "0.1.73",
5
- "docs-transforms": "0.1.73"
2
+ "cli": "0.1.74",
3
+ "docs-config": "0.1.74",
4
+ "docs-theme": "0.1.74",
5
+ "docs-transforms": "0.1.74"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-dispatch-subagents
3
- version: 1.1.3
3
+ version: 1.1.4
4
4
  description: Use when an OAT skill or workflow needs provider-neutral selection, launch, recovery, or evidence for bounded subagent work without project lifecycle policy.
5
5
  disable-model-invocation: true
6
6
  user-invocable: false
@@ -6,24 +6,35 @@ volatile snapshot, never a durable inventory.
6
6
 
7
7
  ## Control Surfaces
8
8
 
9
- | Source | Establishes | Does not establish |
10
- | ---------------------------- | --------------------------------------------------------- | -------------------------------------------------------------- |
11
- | Native Task/Subagent schema | Roles and opaque selectors for that dispatcher invocation | CLI account eligibility or another dispatcher's native catalog |
12
- | `cursor-agent --list-models` | Opaque selectors accepted by the account CLI | Native Task eligibility |
13
- | Cursor UI role configuration | User-selected defaults and role settings | Live root or nested schema without a new observation |
9
+ | Source | Establishes | Does not establish |
10
+ | ---------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
11
+ | Native Task/Subagent schema | Agent types available for that dispatcher invocation | CLI account eligibility or another dispatcher's native catalog |
12
+ | `cursor-agent --list-models` | Opaque flat model IDs accepted by the account CLI and resolver | Native Task eligibility or definition-pin acceptance |
13
+ | Cursor UI role configuration | User-selected defaults and role settings | Live root or nested schema without a new observation |
14
14
 
15
15
  Root and nested catalogs are independent, volatile observations. Equality in
16
16
  one run does not establish equality in another run or nesting boundary.
17
17
 
18
18
  ## Native Selection
19
19
 
20
- 1. Read the native model enum from the dispatcher that will launch the child.
21
- 2. Intersect configured candidates with that exact snapshot.
22
- 3. Pass the selected opaque string byte-for-byte.
23
- 4. Treat an omitted model as deliberate parent inheritance, not generic
24
- defaulting or evidence that a target was unavailable.
25
- 5. Record requested selector, acceptance, outcome, and runtime identity
26
- separately.
20
+ Managed Cursor dispatch resolves an opaque flat model ID through OAT's explicit
21
+ mapping and returns `providers.cursor.dispatchArgs.variant`. The mapping owns
22
+ the bracket-form model pin inside the materialized definition; skills must
23
+ never parse, normalize, or reconstruct either model string.
24
+
25
+ 1. Require a non-empty `providers.cursor.dispatchArgs.variant`.
26
+ 2. Launch that exact resolver-selected native agent type first.
27
+ 3. Treat native launch acceptance plus the complete launcher payload as
28
+ configured-invocation evidence, not observed runtime model identity.
29
+ 4. Permit a replacement route only after a recorded pre-start native
30
+ role-selection rejection of that exact variant, before any child starts.
31
+ 5. After acceptance, continue only through the existing handle. Timeout,
32
+ interruption, `BLOCKED`, missing telemetry, or self-report never authorizes
33
+ fallback or replacement.
34
+ 6. Treat an omitted variant as deliberate parent inheritance only when the
35
+ resolver selected no managed target.
36
+ 7. Record selected variant, mapped target, acceptance, outcome, and runtime
37
+ identity separately.
27
38
 
28
39
  Do not infer Cursor IDE behavior from a headless CLI surface. Keep bounded
29
40
  recon on economical explicit targets and reserve stronger targets for
@@ -52,12 +63,13 @@ verdict.
52
63
 
53
64
  ## Pre-Start CLI Routes
54
65
 
55
- When the current native intersection is absent or unsatisfactory, a caller may
56
- use a deliberate pre-start CLI route only when:
66
+ When exact native role selection rejects the resolver-selected variant before
67
+ launch, a caller may use a deliberate pre-start CLI route only when:
57
68
 
58
69
  - the caller's fallback policy allows it;
59
70
  - the exact CLI selector exists in the account catalog;
60
- - native mismatch, route, reason, and candidates are recorded before launch;
71
+ - the native mismatch, rejected variant, route, reason, and candidates are
72
+ recorded before launch;
61
73
  - the prompt is self-contained and authority-bounded.
62
74
 
63
75
  Verify current CLI help before use. A typical shape is:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-autonomous
3
- version: 1.0.3
3
+ version: 1.0.4
4
4
  description: Use when a user explicitly asks to run an OAT project autonomously end-to-end. Activates session-only autonomy, resumes the correct lifecycle phase, and drives the existing OAT skills through final PR or a reported boundary.
5
5
  argument-hint: '<goal | project-slug | ticket-ref>'
6
6
  disable-model-invocation: true