@open-agent-toolkit/cli 0.3.8 → 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 (121) hide show
  1. package/README.md +3 -3
  2. package/assets/agents/oat-codebase-mapper.md +3 -2
  3. package/assets/agents/oat-reviewer.md +5 -13
  4. package/assets/agents/skeptical-evaluator.md +6 -2
  5. package/assets/bundle-metadata.json +1 -1
  6. package/assets/config/dispatch-matrix-recommendation.json +6 -6
  7. package/assets/docs/cli-utilities/backlog-lifecycle.md +3 -2
  8. package/assets/docs/cli-utilities/bootstrap.md +5 -2
  9. package/assets/docs/cli-utilities/config-and-local-state.md +13 -6
  10. package/assets/docs/cli-utilities/configuration.md +22 -17
  11. package/assets/docs/cli-utilities/tool-packs.md +60 -10
  12. package/assets/docs/cli-utilities/workflow-gates.md +1 -1
  13. package/assets/docs/contributing/code.md +9 -5
  14. package/assets/docs/contributing/updating-model-guidance.md +34 -6
  15. package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
  16. package/assets/docs/provider-sync/commands.md +11 -8
  17. package/assets/docs/provider-sync/instruction-sync.md +241 -39
  18. package/assets/docs/provider-sync/providers.md +4 -4
  19. package/assets/docs/provider-sync/scope-and-surface.md +1 -1
  20. package/assets/docs/reference/cli-reference.md +2 -0
  21. package/assets/docs/reference/oat-directory-structure.md +12 -11
  22. package/assets/docs/reference/troubleshooting.md +19 -4
  23. package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
  24. package/assets/docs/workflows/projects/implementation-execution.md +26 -9
  25. package/assets/docs/workflows/projects/lifecycle.md +4 -6
  26. package/assets/public-package-versions.json +4 -4
  27. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +4 -4
  28. package/assets/skills/oat-agent-instructions-analyze/references/analysis-artifact-template.md +5 -5
  29. package/assets/skills/oat-agent-instructions-analyze/references/docs/rules-files.md +14 -11
  30. package/assets/skills/oat-agent-instructions-analyze/references/quality-checklist.md +2 -2
  31. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +4 -3
  32. package/assets/skills/oat-agent-instructions-apply/SKILL.md +3 -3
  33. package/assets/skills/oat-agent-instructions-apply/references/docs/rules-files.md +14 -11
  34. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  35. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
  36. package/assets/skills/oat-doctor/SKILL.md +17 -13
  37. package/assets/skills/oat-project-implement/SKILL.md +2 -2
  38. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +33 -11
  39. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +1 -1
  40. package/assets/skills/oat-project-implement/references/phase-execution.md +109 -8
  41. package/assets/skills/oat-project-lite/SKILL.md +23 -1
  42. package/assets/skills/oat-project-next/SKILL.md +3 -3
  43. package/assets/skills/oat-project-plan-writing/SKILL.md +3 -3
  44. package/assets/skills/oat-project-progress/SKILL.md +2 -2
  45. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  46. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
  47. package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
  48. package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
  49. package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
  50. package/assets/templates/docs-app-mkdocs/docs/contributing.md +1 -3
  51. package/assets/templates/pjm-agents.md +7 -3
  52. package/assets/templates/state.md +2 -2
  53. package/dist/commands/backlog/archive.d.ts +10 -2
  54. package/dist/commands/backlog/archive.d.ts.map +1 -1
  55. package/dist/commands/backlog/archive.js +22 -6
  56. package/dist/commands/backlog/index.d.ts.map +1 -1
  57. package/dist/commands/backlog/index.js +5 -1
  58. package/dist/commands/backlog/rewrite-references.d.ts +41 -0
  59. package/dist/commands/backlog/rewrite-references.d.ts.map +1 -0
  60. package/dist/commands/backlog/rewrite-references.js +516 -0
  61. package/dist/commands/config/index.d.ts +1 -0
  62. package/dist/commands/config/index.d.ts.map +1 -1
  63. package/dist/commands/config/index.js +69 -34
  64. package/dist/commands/init/index.d.ts +6 -0
  65. package/dist/commands/init/index.d.ts.map +1 -1
  66. package/dist/commands/init/index.js +27 -4
  67. package/dist/commands/init/tools/index.d.ts +18 -1
  68. package/dist/commands/init/tools/index.d.ts.map +1 -1
  69. package/dist/commands/init/tools/index.js +84 -17
  70. package/dist/commands/init/tools/project-guidance.d.ts +19 -4
  71. package/dist/commands/init/tools/project-guidance.d.ts.map +1 -1
  72. package/dist/commands/init/tools/project-guidance.js +58 -15
  73. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  74. package/dist/commands/init/tools/workflows/index.js +5 -1
  75. package/dist/commands/instructions/instructions.types.d.ts +105 -4
  76. package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
  77. package/dist/commands/instructions/instructions.types.js +4 -5
  78. package/dist/commands/instructions/instructions.utils.d.ts +161 -6
  79. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  80. package/dist/commands/instructions/instructions.utils.js +650 -12
  81. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  82. package/dist/commands/instructions/sync/sync.js +256 -18
  83. package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
  84. package/dist/commands/instructions/validate/validate.js +36 -8
  85. package/dist/commands/pjm/index.d.ts.map +1 -1
  86. package/dist/commands/pjm/index.js +19 -4
  87. package/dist/commands/pjm/init.d.ts +3 -0
  88. package/dist/commands/pjm/init.d.ts.map +1 -1
  89. package/dist/commands/pjm/init.js +23 -5
  90. package/dist/commands/shared/agents-md.d.ts +26 -5
  91. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  92. package/dist/commands/shared/agents-md.js +182 -3
  93. package/dist/commands/tools/guidance/index.d.ts +15 -0
  94. package/dist/commands/tools/guidance/index.d.ts.map +1 -0
  95. package/dist/commands/tools/guidance/index.js +81 -0
  96. package/dist/commands/tools/index.d.ts.map +1 -1
  97. package/dist/commands/tools/index.js +2 -0
  98. package/dist/config/oat-config.d.ts +49 -3
  99. package/dist/config/oat-config.d.ts.map +1 -1
  100. package/dist/config/oat-config.js +107 -14
  101. package/dist/config/resolve.d.ts.map +1 -1
  102. package/dist/config/resolve.js +12 -2
  103. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  104. package/dist/providers/claude/dispatch-envelope.js +1 -0
  105. package/dist/providers/claude/targets.d.ts +1 -0
  106. package/dist/providers/claude/targets.d.ts.map +1 -1
  107. package/dist/providers/claude/targets.js +3 -1
  108. package/dist/providers/codex/codec/shared.d.ts +3 -0
  109. package/dist/providers/codex/codec/shared.d.ts.map +1 -1
  110. package/dist/providers/codex/codec/shared.js +4 -0
  111. package/dist/providers/cursor/codec/catalog.d.ts +2 -2
  112. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
  113. package/dist/providers/cursor/codec/catalog.js +45 -0
  114. package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
  115. package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
  116. package/dist/providers/cursor/codec/mapping-validation.js +25 -0
  117. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  118. package/dist/providers/cursor/codec/materialize.js +2 -11
  119. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  120. package/dist/providers/cursor/codec/sync-extension.js +2 -11
  121. package/package.json +2 -2
@@ -134,6 +134,7 @@ Notable commands introduced in the current CLI surface:
134
134
  `refs/oat/completed/<project>` result counts as absence. Transport,
135
135
  authentication, and other lookup failures fail the command closed; they are
136
136
  never converted into a `recorded-absent` row or pull guidance.
137
+ - `oat tools guidance` - print the managed `OAT tools` `AGENTS.md` block for the currently installed packs without installing, upgrading, or writing anything; `--json` returns `status`, `sectionKey`, `target`, `packs`, `otherProjectSkills`, and `managedBlock`. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-guidance).
137
138
  - `oat tools migrate --pack <pack> --from <scope> --to <scope>` - move one installed pack between project and user scope. Always previews first, installs and re-inventories the destination before touching the source, and offers source removal only after the destination is verified complete. Declining or running non-interactively leaves the pack installed at both scopes rather than failing. `--dry-run` stops after the preview; there is no force flag. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-migrate).
138
139
  - `oat pjm doctor --json` - read-only repository PJM diagnostics whose result carries an additive `adoption` object (`state` of `declared` | `inferred-legacy` | `partial-initialization` | `none`, `repoRoot`, and `recovery`). This, not `oat tools has project-management`, is the check that answers whether _this repository_ adopted PJM.
139
140
  - `oat pjm remote ... --json` - operate one explicit provider-neutral binding.
@@ -165,6 +166,7 @@ Notable commands introduced in the current CLI surface:
165
166
  - `oat gate target set <id> --timeout-ms <milliseconds>` - persist a validated per-target gate budget.
166
167
  - `oat gate target list --json` - inspect resolved gate targets without selecting or executing a reviewer. Each entry reports its config origin, whether it is explicitly configured and enabled, current availability, and normalized configured invocation values (`unknown` when omitted).
167
168
  - `oat gate cross-provider-exec <prompt...>` - choose an available exec target while avoiding the current runtime by default, then run the prompt with the chosen target's configured base command and exit with the child status.
169
+ - `oat instructions sync [--dry-run] [--strategy none|pointer|symlink|copy]` - apply the effective `CLAUDE.md` strategy (`--strategy`, else `instructions.claude.shims`, else `none`). Under the default `none` it removes the `CLAUDE.md` shims OAT created — none at all while any `CLAUDE.md` has content of its own — keeps and reports every other `CLAUDE.md`, and warns about any `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` that would make Claude Code ignore `AGENTS.md`. `oat instructions validate` checks the same strategy read-only. See [Instruction Sync](../provider-sync/instruction-sync.md).
168
170
 
169
171
  ## `oat config` surface flags
170
172
 
@@ -48,16 +48,16 @@ Project scope is used for project workflows and repo-local sync state. User scop
48
48
 
49
49
  ## Top-level entries
50
50
 
51
- | Path | Purpose | Notes |
52
- | ------------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
53
- | `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, `documentation.*`, and `pjm.remote.*` |
54
- | `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
55
- | `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
56
- | `.oat/projects/` | OAT project artifacts | `shared`, `synced`, `local`, and lifecycle `archived` locations |
57
- | `.oat/ideas/` | Project-level ideas store | Often gitignored |
58
- | `.oat/sync/` | Interop sync state/config | See details below |
59
- | `.oat/templates/` | Artifact templates used by OAT skills | Source for scaffolding. Includes `docs-app-fuma/` (Fumadocs) and `docs-app-mkdocs/` (MkDocs) templates. |
60
- | `.oat/repo/` | Repo-level PJM/knowledge/reference/review artifacts | Active PJM state under `pjm/`; durable references (including decisions) under `reference/` |
51
+ | Path | Purpose | Notes |
52
+ | ------------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
53
+ | `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, `documentation.*`, `instructions.*`, and `pjm.remote.*` |
54
+ | `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
55
+ | `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
56
+ | `.oat/projects/` | OAT project artifacts | `shared`, `synced`, `local`, and lifecycle `archived` locations |
57
+ | `.oat/ideas/` | Project-level ideas store | Often gitignored |
58
+ | `.oat/sync/` | Interop sync state/config | See details below |
59
+ | `.oat/templates/` | Artifact templates used by OAT skills | Source for scaffolding. Includes `docs-app-fuma/` (Fumadocs) and `docs-app-mkdocs/` (MkDocs) templates. |
60
+ | `.oat/repo/` | Repo-level PJM/knowledge/reference/review artifacts | Active PJM state under `pjm/`; durable references (including decisions) under `reference/` |
61
61
 
62
62
  ## `.oat/sync/` details
63
63
 
@@ -125,9 +125,10 @@ Current schema keys:
125
125
  | `documentation.config` | `string` | - | Path to the documentation framework config file (e.g., `mkdocs.yml`, `next.config.js`) |
126
126
  | `documentation.index` | `string` | - | Path to the docs surface entry point: the generated app-root manifest `<root>/index.md` for Fumadocs, `mkdocs.yml` for MkDocs. Set by `oat docs init`. `oat docs generate-index` writes it only for the Fumadocs manifest transition and never for MkDocs. |
127
127
  | `documentation.excludes` | `string[]` | - | Globs, relative to the docs directory, that `oat docs generate-index` leaves out of the generated index. See [Excluding pages from the generated index](#excluding-pages-from-the-generated-index). |
128
- | `documentation.instructionPointerExcludes` | `string[]` | - | Repo-relative directories `oat instructions sync`/`validate` must not treat as pointer sites, additive to the documentation content root they skip by default. Normalized and de-duplicated; a malformed value (non-array, or an empty or non-string entry) is rejected with exit code `2`. Set as one comma-separated value with `oat config set`; absolute paths and paths escaping the repository are refused. See [Instruction Sync](../provider-sync/instruction-sync.md#documentation-trees). |
129
128
  | `documentation.requireForProjectCompletion` | `boolean` | `false` | When `true`, OAT project completion gates require documentation to be updated |
130
129
  | `git.defaultBranch` | `string` | `"main"` | Default branch for PR creation. Auto-detected during `oat init` via `gh repo view` or `origin/HEAD`. Used by `oat-project-pr-final` and `oat-project-pr-progress`. |
130
+ | `instructions.claude.shims` | `string` | `"none"` | CLAUDE.md shim strategy for `oat instructions sync`/`validate`: `none` (no shims; sync removes OAT-managed ones, all or nothing: none while any `CLAUDE.md` has content; see [All or nothing](../provider-sync/instruction-sync.md#all-or-nothing)), `pointer`, `symlink`, or `copy`. `--strategy` overrides it for one run; any other value is rejected with exit code `2`. See [Instruction Sync](../provider-sync/instruction-sync.md#choosing-a-strategy). |
131
+ | `instructions.claude.excludes` | `string[]` | - | Repo-relative directories `oat instructions sync`/`validate` must not treat as pointer sites, additive to the documentation content root they skip by default. Normalized and de-duplicated; a malformed value (non-array, or an empty or non-string entry) is rejected with exit code `2`. Set as one comma-separated value with `oat config set`; absolute paths and paths escaping the repository are refused. See [Instruction Sync](../provider-sync/instruction-sync.md#documentation-trees). |
131
132
  | `workflow.autoReviewAtHillCheckpoints` | `boolean` | unset | When `true`, completing a HiLL checkpoint automatically runs the extra lifecycle review. Does not control Tier 1 per-phase `oat-reviewer` gates. Can be overridden per-project via `oat_auto_review_at_hill_checkpoints` in `plan.md` frontmatter. Legacy `autoReviewAtCheckpoints` remains a fallback. |
132
133
  | `workflow.dispatchPolicy.mode` | `string` | unset | Dispatch policy mode: `managed` lets OAT select model/effort controls; `inherit` leaves controls to the host/provider defaults. |
133
134
  | `workflow.dispatchPolicy.policy` | `string` | unset | Managed dispatch policy: `economy`, `balanced`, `high`, `frontier`, or `uncapped`. Capped policies compile to provider targets; `uncapped` keeps OAT-managed preferred selection without provider caps. `inherit` mode is separate and leaves controls to the host/provider. |
@@ -56,12 +56,27 @@ when a same-name canonical skill exists; rename one package before retrying.
56
56
  - `oat providers set --scope project --enabled <providers> --disabled <providers>`
57
57
  - Re-run `oat sync --scope project` after updating config.
58
58
 
59
- ## `instructions validate` reports `missing`, `content_mismatch`, or `stray`
59
+ ## `instructions validate` reports `missing`, `content_mismatch`, `stray`, or `managed_shim`
60
60
 
61
+ - Check the effective strategy (`strategy:` in the output). The default is `none`, which expects no `CLAUDE.md`; `missing` is only reported under a configured shim strategy.
61
62
  - Run `oat instructions sync --dry-run` to preview changes.
62
- - Run `oat instructions sync --strategy pointer|symlink|copy` to apply the expected `CLAUDE.md` shape.
63
- - If mismatched `CLAUDE.md` files should be overwritten, run `oat instructions sync --force` (or combine it with `--strategy` if needed).
64
- - If `stray` is reported, `oat instructions sync` will adopt the Claude-only file into `AGENTS.md` and then regenerate `CLAUDE.md`.
63
+ - Under `none`, `managed_shim` entries are `CLAUDE.md` files OAT created; `oat instructions sync` removes them, unless a `CLAUDE.md` with its own content blocks removal (see below).
64
+ - To keep shims instead, run `oat config set instructions.claude.shims pointer` (or `symlink` / `copy`) and then `oat instructions sync`.
65
+ - Under a shim strategy, if mismatched `CLAUDE.md` files should be overwritten, run `oat instructions sync --force`.
66
+ - If `stray` is reported, `oat instructions sync` will adopt the Claude-only file into `AGENTS.md`, then regenerate `CLAUDE.md` under a shim strategy or remove it under `none`.
67
+
68
+ ## `instructions sync` removed no shims because a `CLAUDE.md` has content
69
+
70
+ - Under `none`, removal is all or nothing: while any `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` has content of its own, sync removes no `CLAUDE.md` at all, reports each held-back removal as skipped, and exits `1`. The finding (`claude_md_blocks_shim_removal` under `--json`) names the files with content (`paths`) and the `CLAUDE.md` files kept (`wouldRemove`); `linkedBy` names any `AGENTS.md` link to a file with content, which you replace with that file's content before removing it. `oat instructions validate` reports the same finding.
71
+ - Either remove each named file or move its content into an `AGENTS.md`, then rerun `oat instructions sync`; or set `instructions.claude.shims` to `pointer`, `symlink`, or `copy` to keep `CLAUDE.md` files.
72
+ - See [Instruction Sync](../provider-sync/instruction-sync.md#all-or-nothing).
73
+
74
+ ## `instructions sync` warns that a `CLAUDE.md` makes Claude Code ignore every `AGENTS.md`
75
+
76
+ - Under the default `none` strategy, a remaining `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` makes Claude Code's `agents-md` plugin stand down: for every session when the file is at the repository root, and for sessions started in its directory or below when it is in a subdirectory.
77
+ - Either remove the named file, or set `instructions.claude.shims` to a shim strategy and rerun `oat instructions sync` to add shims everywhere.
78
+ - If the warning names an `AGENTS.md` that links to the file (`linkedBy` under `--json`), that file holds the only copy of those instructions: replace each linking `AGENTS.md` with the file's content first, then remove the file.
79
+ - Sync never deletes a hand-written or modified `CLAUDE.md` itself; see [Instruction Sync](../provider-sync/instruction-sync.md#leftover-claudemd-warnings).
65
80
  - If a broken or unreadable instruction path is reported, fix the underlying file or symlink target first; sync will intentionally skip manual-repair cases instead of forcing recovery.
66
81
  - If a directory you expected to see is missing from the scan, confirm it is not under `.git`, `.oat`, `.worktrees`, or `node_modules`.
67
82
  - Re-run `oat instructions validate` and confirm status is `ok`.
@@ -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
@@ -47,8 +47,9 @@ flowchart LR
47
47
 
48
48
  P --> Report["Phase report\nverification + commits"]
49
49
  Report --> Root
50
- Root --> R["Independent phase reviewer"]
51
- R -->|pass| Book["Bookkeeping + next phase"]
50
+ Root --> Ledger["Commit task ledger\npre-review bookkeeping"]
51
+ Ledger --> R["Independent phase reviewer"]
52
+ R -->|pass| Book["Review-outcome bookkeeping\n+ next phase"]
52
53
  R -->|blocking findings| Fix["Resume phase implementer\nbounded fix scope"]
53
54
  Fix --> R2["Fresh root-owned review round"]
54
55
  ```
@@ -241,7 +242,14 @@ already part of the next phase's base.
241
242
 
242
243
  The root sends the reviewer a fresh scope containing the authoritative phase
243
244
  commit range, task IDs and boundaries, project artifacts, and verification
244
- evidence. The review passes with zero Critical and zero High findings.
245
+ evidence. The root commits the phase's task ledger — task rows, the resume
246
+ pointer, and any settled recovery marker — before it dispatches the reviewer,
247
+ so the reviewed head is never stale by construction. Review-outcome
248
+ bookkeeping — the Reviews row and its disposition, the Orchestration Run, and
249
+ the deferred project-log entries — is out of scope at the reviewed head: the
250
+ root writes it after the review returns. In a parallel group the phase worktree
251
+ does not carry the root ledger, so the reviewer brief names the task ledger out
252
+ of scope as well. The review passes with zero Critical and zero High findings.
245
253
  Medium and Low findings are recorded without blocking the phase.
246
254
 
247
255
  ## Final Exit-Gate Boundary
@@ -278,14 +286,20 @@ contradictory, or ambiguous correlation fails closed. A valid accepted run or
278
286
  completed receive is never duplicated.
279
287
 
280
288
  Freshness is bound to the reviewed HEAD and a versioned implementation
281
- fingerprint. New generations use an `effective-delta-v1` fingerprint over
289
+ fingerprint. New generations use an `effective-delta-v2` fingerprint over
282
290
  Git's canonical NUL-delimited raw tree delta. The generation persists the
283
291
  logical PR/default-branch base ref, requires one merge base, and hashes full
284
292
  base and final modes and object IDs with rename detection disabled. This makes
285
293
  same-file base changes visible while excluding commit history and human diff
286
294
  context. Every effective-delta path is included except the exact project
287
- `state.md` file that carries the digest and would otherwise be self-referential;
288
- that structured state is validated independently.
295
+ `state.md` file that carries the digest and would otherwise be self-referential
296
+ (that structured state is validated independently) and everything under
297
+ `.oat/projects/` and `.oat/repo/`: project artifacts and repository records
298
+ such as reviews, summaries, backlog items, and decisions never make the exit
299
+ gate stale. `.oat/templates/`, `.oat/scripts/`, `.oat/config*.json`, and
300
+ `.oat/sync/` stay fingerprinted. A stored `effective-delta-v1` value keeps its
301
+ original meaning (only the `state.md` carrier excluded) and is never
302
+ reinterpreted; the next generation after it goes stale uses v2.
289
303
 
290
304
  Recognized closeout-only descendants preserve a valid result: gate artifacts
291
305
  and receipts, project tracking and project-log appends,
@@ -301,8 +315,8 @@ A merge, rebase, or base update preserves the result only when its full
301
315
  effective delta matches that rolling checkpoint. Conflict resolution or
302
316
  branch-owned implementation, test, skill, template, or workflow changes that
303
317
  alter the delta make the result stale, require a current final lifecycle review,
304
- and start a new gate generation. No implementation or closeout output path is
305
- excluded from the comparison. Legacy unqualified fingerprints retain the older
318
+ and start a new gate generation. Beyond the version's own exclusion set, no
319
+ implementation or closeout output path is excluded from the comparison. Legacy unqualified fingerprints retain the older
306
320
  fail-closed descendant-path behavior and are not migrated in place.
307
321
 
308
322
  This narrow merge-only exemption relies on fresh repository CI, automated
@@ -375,8 +389,11 @@ Provider controls remain exact: Codex uses
375
389
  `providers.claude.dispatchArgs.variant` for an effort-pinned target and
376
390
  `providers.claude.dispatchArgs.model` only for a legacy model-only target; and
377
391
  Cursor uses `providers.cursor.dispatchArgs.variant`. Cursor launches that exact
378
- 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
379
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.
380
397
  The launcher records this selection as `configured`, while runtime identity
381
398
  remains `not-reported` without independent observation. Only a pre-start native
382
399
  role-selection rejection permits another target-preserving route.
@@ -158,13 +158,11 @@ filesystem operation. Deleting or archiving the old scaffold does not make the
158
158
  roadmap stop promising its work, so completion checks the claim against the
159
159
  prose that still makes it.
160
160
 
161
- When a quick project consolidates earlier scaffolds, quick-start records
161
+ When a quick or lite project consolidates earlier scaffolds, the workflow that
162
+ scaffolds it (`oat-project-quick-start` or `oat-project-lite`) records
162
163
  `absorbed_projects` and `absorbed_backlog_ids` in that project's `state.md`
163
- frontmatter. Those two fields are the only inputs the sweep takes.
164
-
165
- Recording them is a quick-mode step today. A lite project that consolidates
166
- earlier scaffolds records nothing, so the sweep finds no inputs and degrades to
167
- its recorded note rather than checking that project's surfaces.
164
+ frontmatter, with the same field shapes in both modes. Those two fields are the
165
+ only inputs the sweep takes.
168
166
 
169
167
  Inside the project-log completion gate — after the log status probe and before
170
168
  the roll-up and seal — completion searches the active planning surfaces for each
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.3.8",
3
- "docs-config": "0.3.8",
4
- "docs-theme": "0.3.8",
5
- "docs-transforms": "0.3.8"
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: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion, Task
7
7
  metadata:
8
- version: 1.12.3
8
+ version: 1.12.4
9
9
  ---
10
10
 
11
11
  # Agent Instructions Analysis
@@ -259,7 +259,7 @@ documentation inventory from Step 2 to:
259
259
  **Provider-specific validation:**
260
260
 
261
261
  - **AGENTS.md**: Check section structure, command accuracy, size budget.
262
- - **CLAUDE.md**: Verify `@AGENTS.md` import if present, check for content duplication with AGENTS.md.
262
+ - **CLAUDE.md**: Read the shim strategy with `oat config get instructions.claude.shims`. Under a shim strategy (`pointer`, `symlink`, or `copy`), verify the `@AGENTS.md` import if present and check for content duplication with AGENTS.md. Under `none` (the default), Claude Code reads AGENTS.md itself through its built-in `agents-md` plugin, which stands down while a `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` exists on the session's path: a root file affects the whole project, a nested file affects sessions started in its directory or below; record each such file as a High finding whose fix is to remove it or to configure a shim strategy and run `oat instructions sync`. Take the authoritative list from `oat instructions validate --json` `.warnings[]` (code `claude_md_hides_agents_md`), which covers the whole repository including `CLAUDE.local.md` (exact-case names only); the discovery script also lists `CLAUDE.local.md` under the claude provider. When a warning's `linkedBy` is non-empty, that file holds the only copy of the instructions behind those AGENTS.md links: the fix is to replace each linking AGENTS.md with the file's content first and only then remove the file; never recommend plain removal for it. When `.warnings[]` also holds a `claude_md_blocks_shim_removal` item, removal under `none` is all or nothing and is blocked: report its `paths` (the files with content of their own) as the High finding, whose fix is to move each file's content into an AGENTS.md or remove it (for a file its `linkedBy` maps to AGENTS.md links, replace each linking AGENTS.md with the file's content first) and then rerun `oat instructions sync`; list its `wouldRemove` as the CLAUDE.md files that sync then removes. Those files get no `claude_md_hides_agents_md` warning of their own while the block holds, so read them from the block item rather than reporting them as missing.
263
263
  - **Claude rules** (`.claude/rules/*.md`): Validate `paths` frontmatter if conditional.
264
264
  - **Cursor rules** (`.cursor/rules/*.mdc`): Validate frontmatter fields (`alwaysApply`, `globs`, `description`).
265
265
  - **Copilot instructions** (`.github/instructions/*.instructions.md`): Validate `applyTo` frontmatter.
@@ -306,7 +306,7 @@ These checks are mandatory even when the missing file does not appear in the dis
306
306
 
307
307
  Provider baseline examples:
308
308
 
309
- - **Claude**: if a directory has `AGENTS.md` and the claude provider is active but the matching `CLAUDE.md` shim is missing, record an explicit recommendation to create `CLAUDE.md` with the canonical `@AGENTS.md` import. This applies to **every** directory with an `AGENTS.md` — root and nested alike (e.g., `packages/cli/AGENTS.md` → `packages/cli/CLAUDE.md`).
309
+ - **Claude**: only when a shim strategy is configured (`instructions.claude.shims` is `pointer`, `symlink`, or `copy`): if a directory has `AGENTS.md` and the claude provider is active but the matching `CLAUDE.md` shim is missing, record an explicit recommendation to create `CLAUDE.md` with the canonical `@AGENTS.md` import. This applies to **every** directory with an `AGENTS.md` — root and nested alike (e.g., `packages/cli/AGENTS.md` → `packages/cli/CLAUDE.md`). Under `none`, the default, recommend no `CLAUDE.md`: Claude Code loads AGENTS.md natively, and a shim in some directories but not others makes it ignore the AGENTS.md files that lack one.
310
310
  - **Copilot**: if the copilot provider is active but `.github/copilot-instructions.md` is missing, record an explicit recommendation to create the minimal Copilot shim.
311
311
  - **agents_md / codex**: no extra always-on shim beyond `AGENTS.md`.
312
312
 
@@ -314,7 +314,7 @@ Do not leave these as implied apply-time behavior. They must appear in the analy
314
314
 
315
315
  **Chained recommendations for new AGENTS.md files:**
316
316
 
317
- When a coverage-gap recommendation proposes creating a **new** `AGENTS.md` in a subdirectory, also emit the corresponding provider-baseline recommendations for that directory in the same artifact. For example, if the analysis recommends creating `packages/cli/AGENTS.md` and the claude provider is active, it must also recommend creating `packages/cli/CLAUDE.md` with `@AGENTS.md`. Do not defer these to a follow-up analysis — they belong in the same artifact so `oat-agent-instructions-apply` can generate both files in one pass.
317
+ When a coverage-gap recommendation proposes creating a **new** `AGENTS.md` in a subdirectory, also emit the corresponding provider-baseline recommendations for that directory in the same artifact. For example, if the analysis recommends creating `packages/cli/AGENTS.md`, the claude provider is active, and a shim strategy is configured, it must also recommend creating `packages/cli/CLAUDE.md` with `@AGENTS.md`. Do not defer these to a follow-up analysis — they belong in the same artifact so `oat-agent-instructions-apply` can generate both files in one pass.
318
318
 
319
319
  **In delta mode:** Only assess directories that contain files changed since the last tracked commit. Skip unchanged directories.
320
320
 
@@ -119,11 +119,11 @@ None | {numbered list}
119
119
 
120
120
  Missing always-on provider compatibility files that should exist even when no corresponding file was discovered during inventory.
121
121
 
122
- | # | Provider | Required Path | Format | Reason | Evidence | Severity |
123
- | --- | --------- | --------------------------------- | ------------------ | -------------------------------------------------- | ------------ | ------------- |
124
- | 1 | `claude` | `CLAUDE.md` | Claude import shim | {claude active + AGENTS.md present + shim missing} | {exact refs} | {High/Medium} |
125
- | 2 | `copilot` | `.github/copilot-instructions.md` | Copilot shim | {copilot active + shim missing} | {exact refs} | {High/Medium} |
126
- | ... | | | | | | |
122
+ | # | Provider | Required Path | Format | Reason | Evidence | Severity |
123
+ | --- | --------- | --------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------- |
124
+ | 1 | `claude` | `CLAUDE.md` | Claude import shim | {claude active + shim strategy configured (`instructions.claude.shims` is not `none`) + AGENTS.md present + shim missing} | {exact refs} | {High/Medium} |
125
+ | 2 | `copilot` | `.github/copilot-instructions.md` | Copilot shim | {copilot active + shim missing} | {exact refs} | {High/Medium} |
126
+ | ... | | | | | | |
127
127
 
128
128
  {Or: "No provider baseline gaps identified."}
129
129
 
@@ -125,13 +125,16 @@ User-level rules go in `~/.claude/rules/` and apply to all projects (lower prior
125
125
 
126
126
  ### 2.6 AGENTS.md Support
127
127
 
128
- **AGENTS.md is NOT natively supported by Claude Code** (GitHub issue #6235 has 2,700+ upvotes, still open). The recommended workaround is a one-line `CLAUDE.md`:
128
+ Source: `anthropics/claude-code` `mods/agents-md` README, as of v2.1.278.
129
129
 
130
- ```markdown
131
- @AGENTS.md
132
- ```
130
+ **Claude Code reads AGENTS.md natively** through its built-in `agents-md` plugin. Its `instructionFiles` option defaults to `claude-md-or-agents-md`; the other values are `claude-md`, `claude-md-and-agents-md`, and `managed-only`.
131
+
132
+ - **Default mode stands down on any CLAUDE.md.** In `claude-md-or-agents-md`, the plugin loads no AGENTS.md for the session when any `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` exists in the working directory or any directory above it up to the project root; the engine then loads only CLAUDE.md files. A root `CLAUDE.md` or a personal `CLAUDE.local.md` therefore hides every AGENTS.md, and shims in some directories but not others hide every AGENTS.md without one.
133
+ - **`claude-md-and-agents-md`** loads both; an AGENTS.md that a CLAUDE.md already imports or links is not loaded twice.
134
+ - **Only user or managed settings can set the option** (`~/.claude/settings.json`, `--settings`, or managed settings); a project's `.claude/settings.json` cannot.
135
+ - **Nested gaps:** nested AGENTS.md files attach on a text `Read` only (not on `@`-mentions, IDE selections, or notebook, image, or PDF reads), and `--add-dir` directories contribute no AGENTS.md.
133
136
 
134
- This leverages @-import. Alternative: symlink `ln -s AGENTS.md CLAUDE.md`.
137
+ The one-line `CLAUDE.md` shim (`@AGENTS.md`, or `ln -s AGENTS.md CLAUDE.md`) is now **opt-in**: use it for Claude Code releases before the plugin, for users who set `instructionFiles` to `claude-md`, or when the nested gaps above matter, and then keep a shim beside every AGENTS.md. In OAT this is `instructions.claude.shims` (`none` by default; `pointer`, `symlink`, or `copy` to opt in), applied by `oat instructions sync`; see the OAT docs page `provider-sync/instruction-sync.md` (§ Claude Code and AGENTS.md).
135
138
 
136
139
  ### 2.7 Skills vs CLAUDE.md vs Rules
137
140
 
@@ -411,12 +414,12 @@ All three providers support file-pattern-based activation — this is the unifyi
411
414
 
412
415
  ### 5.4 AGENTS.md Support
413
416
 
414
- | Provider | Native support | Nested | Import mechanism |
415
- | ----------- | -------------------------------- | ---------------------- | -------------------- |
416
- | Claude Code | **No** (use `@AGENTS.md` import) | N/A | `@path` in CLAUDE.md |
417
- | Cursor | **Yes** (first-class) | Yes (hierarchical) | N/A — read directly |
418
- | Copilot | **Yes** (`**/AGENTS.md`) | Yes (nearest wins) | N/A — read directly |
419
- | Codex | **Yes** (primary format) | Yes (override pattern) | N/A — native |
417
+ | Provider | Native support | Nested | Import mechanism |
418
+ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------- |
419
+ | Claude Code | **Yes** (built-in `agents-md` plugin; stands down while any CLAUDE.md, `.claude/CLAUDE.md`, or `CLAUDE.local.md` is on the path to the working directory) | Yes (attached on a text `Read`) | Opt-in `@AGENTS.md` shim in CLAUDE.md |
420
+ | Cursor | **Yes** (first-class) | Yes (hierarchical) | N/A — read directly |
421
+ | Copilot | **Yes** (`**/AGENTS.md`) | Yes (nearest wins) | N/A — read directly |
422
+ | Codex | **Yes** (primary format) | Yes (override pattern) | N/A — native |
420
423
 
421
424
  ---
422
425
 
@@ -27,7 +27,7 @@ Per-file evaluation criteria for agent instruction files. Use this checklist to
27
27
 
28
28
  ### 4. Size Within Budget
29
29
 
30
- - [ ] Root files (AGENTS.md, CLAUDE.md): <300 lines (hard max 500)
30
+ - [ ] Root files (AGENTS.md, and CLAUDE.md when a shim strategy is configured): <300 lines (hard max 500)
31
31
  - [ ] Scoped/package files: 40–150 lines
32
32
  - [ ] Individual rules files: <80 lines
33
33
  - [ ] Always-on baseline load is estimated and kept comfortably below the task budget
@@ -44,7 +44,7 @@ Per-file evaluation criteria for agent instruction files. Use this checklist to
44
44
 
45
45
  ### 6. Precedence Clear
46
46
 
47
- - [ ] Override semantics are explicit (nearest-wins for AGENTS.md, import directives for CLAUDE.md)
47
+ - [ ] Override semantics are explicit (nearest-wins for AGENTS.md, import directives for CLAUDE.md when a shim strategy is configured)
48
48
  - [ ] No ambiguous or conflicting instructions across scope levels
49
49
  - **Severity if failing:** Medium
50
50
 
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # File patterns per provider:
12
12
  # agents_md → **/AGENTS.md
13
- # claude → **/CLAUDE.md, .claude/rules/*.md
13
+ # claude → **/CLAUDE.md, **/CLAUDE.local.md, .claude/rules/*.md
14
14
  # cursor → .cursor/rules/*.mdc, .cursor/rules/*.md
15
15
  # copilot → .github/copilot-instructions.md, .github/instructions/*.instructions.md
16
16
  # cline → .cline/rules/*
@@ -58,8 +58,9 @@ discover_agents_md() {
58
58
  }
59
59
 
60
60
  discover_claude() {
61
- # CLAUDE.md files
62
- find_exclude -name 'CLAUDE.md' | while read -r f; do
61
+ # CLAUDE.md and personal CLAUDE.local.md files (either one makes Claude
62
+ # Code's default agents-md mode ignore AGENTS.md)
63
+ find_exclude -name 'CLAUDE.md' -o -name 'CLAUDE.local.md' | while read -r f; do
63
64
  local rel="${f#"$REPO_ROOT"/}"
64
65
  printf 'claude\t%s\n' "$rel"
65
66
  done
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.7.2
8
+ version: 1.7.3
9
9
  ---
10
10
 
11
11
  # Agent Instructions Apply
@@ -204,7 +204,7 @@ recommendation so plan review and generation stay aligned to the same pack file.
204
204
  **For provider baseline gaps (always-on provider files):**
205
205
 
206
206
  - Treat them as first-class recommendations from the artifact, not as implied apply-time behavior
207
- - Examples include missing Claude `CLAUDE.md` import shims and missing `.github/copilot-instructions.md` shims
207
+ - Examples include missing Claude `CLAUDE.md` import shims (recommended only when `instructions.claude.shims` is a shim strategy: `pointer`, `symlink`, or `copy`) and missing `.github/copilot-instructions.md` shims
208
208
  - Carry forward the artifact's evidence refs, confidence, and disclosure mode into the plan
209
209
  - If the artifact marks a provider-baseline recommendation `omit`, do not include it in the apply plan
210
210
  - If the artifact marks a provider-baseline recommendation `ask_user`, include it with the evidence and require explicit user approval
@@ -240,7 +240,7 @@ recommendation so plan review and generation stay aligned to the same pack file.
240
240
  **Multi-format composition order:**
241
241
 
242
242
  1. **AGENTS.md first** — the canonical, provider-agnostic file
243
- 2. **CLAUDE.md** — if claude provider is active, ensure `@AGENTS.md` import exists
243
+ 2. **CLAUDE.md** — only if the claude provider is active and a shim strategy is configured (`oat config get instructions.claude.shims` returns `pointer`, `symlink`, or `copy`), ensure the `@AGENTS.md` import exists. Under `none`, the default, create no `CLAUDE.md`: Claude Code reads AGENTS.md itself, and a CLAUDE.md makes it ignore AGENTS.md for sessions started in that file's directory or below (project-wide for a root file)
244
244
  3. **Glob-scoped rules** — author once in canonical format at `.agents/rules/{name}.md` with YAML frontmatter (`description`, `globs`, `activation`)
245
245
  - `activation` MUST be one of `always`, `glob`, `agent-requested`, `manual` — any other value (e.g. `auto`) is rejected by `oat sync`. Use `glob` (with `globs`) for file-targeted rules; see `frontmatter/canonical-rule.md` for the full activation matrix.
246
246
  - Provider-specific rule files are generated by `oat sync --scope project`
@@ -125,13 +125,16 @@ User-level rules go in `~/.claude/rules/` and apply to all projects (lower prior
125
125
 
126
126
  ### 2.6 AGENTS.md Support
127
127
 
128
- **AGENTS.md is NOT natively supported by Claude Code** (GitHub issue #6235 has 2,700+ upvotes, still open). The recommended workaround is a one-line `CLAUDE.md`:
128
+ Source: `anthropics/claude-code` `mods/agents-md` README, as of v2.1.278.
129
129
 
130
- ```markdown
131
- @AGENTS.md
132
- ```
130
+ **Claude Code reads AGENTS.md natively** through its built-in `agents-md` plugin. Its `instructionFiles` option defaults to `claude-md-or-agents-md`; the other values are `claude-md`, `claude-md-and-agents-md`, and `managed-only`.
131
+
132
+ - **Default mode stands down on any CLAUDE.md.** In `claude-md-or-agents-md`, the plugin loads no AGENTS.md for the session when any `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` exists in the working directory or any directory above it up to the project root; the engine then loads only CLAUDE.md files. A root `CLAUDE.md` or a personal `CLAUDE.local.md` therefore hides every AGENTS.md, and shims in some directories but not others hide every AGENTS.md without one.
133
+ - **`claude-md-and-agents-md`** loads both; an AGENTS.md that a CLAUDE.md already imports or links is not loaded twice.
134
+ - **Only user or managed settings can set the option** (`~/.claude/settings.json`, `--settings`, or managed settings); a project's `.claude/settings.json` cannot.
135
+ - **Nested gaps:** nested AGENTS.md files attach on a text `Read` only (not on `@`-mentions, IDE selections, or notebook, image, or PDF reads), and `--add-dir` directories contribute no AGENTS.md.
133
136
 
134
- This leverages @-import. Alternative: symlink `ln -s AGENTS.md CLAUDE.md`.
137
+ The one-line `CLAUDE.md` shim (`@AGENTS.md`, or `ln -s AGENTS.md CLAUDE.md`) is now **opt-in**: use it for Claude Code releases before the plugin, for users who set `instructionFiles` to `claude-md`, or when the nested gaps above matter, and then keep a shim beside every AGENTS.md. In OAT this is `instructions.claude.shims` (`none` by default; `pointer`, `symlink`, or `copy` to opt in), applied by `oat instructions sync`; see the OAT docs page `provider-sync/instruction-sync.md` (§ Claude Code and AGENTS.md).
135
138
 
136
139
  ### 2.7 Skills vs CLAUDE.md vs Rules
137
140
 
@@ -411,12 +414,12 @@ All three providers support file-pattern-based activation — this is the unifyi
411
414
 
412
415
  ### 5.4 AGENTS.md Support
413
416
 
414
- | Provider | Native support | Nested | Import mechanism |
415
- | ----------- | -------------------------------- | ---------------------- | -------------------- |
416
- | Claude Code | **No** (use `@AGENTS.md` import) | N/A | `@path` in CLAUDE.md |
417
- | Cursor | **Yes** (first-class) | Yes (hierarchical) | N/A — read directly |
418
- | Copilot | **Yes** (`**/AGENTS.md`) | Yes (nearest wins) | N/A — read directly |
419
- | Codex | **Yes** (primary format) | Yes (override pattern) | N/A — native |
417
+ | Provider | Native support | Nested | Import mechanism |
418
+ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------- |
419
+ | Claude Code | **Yes** (built-in `agents-md` plugin; stands down while any CLAUDE.md, `.claude/CLAUDE.md`, or `CLAUDE.local.md` is on the path to the working directory) | Yes (attached on a text `Read`) | Opt-in `@AGENTS.md` shim in CLAUDE.md |
420
+ | Cursor | **Yes** (first-class) | Yes (hierarchical) | N/A — read directly |
421
+ | Copilot | **Yes** (`**/AGENTS.md`) | Yes (nearest wins) | N/A — read directly |
422
+ | Codex | **Yes** (primary format) | Yes (override pattern) | N/A — native |
420
423
 
421
424
  ---
422
425
 
@@ -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.