@open-agent-toolkit/cli 0.2.13 → 0.2.15

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 (79) hide show
  1. package/assets/agents/oat-phase-implementer.md +5 -2
  2. package/assets/agents/oat-reviewer.md +2 -2
  3. package/assets/docs/cli-utilities/config-and-local-state.md +14 -1
  4. package/assets/docs/cli-utilities/configuration.md +23 -2
  5. package/assets/docs/cli-utilities/tool-packs.md +68 -24
  6. package/assets/docs/contributing/skills.md +17 -10
  7. package/assets/docs/provider-sync/providers.md +26 -0
  8. package/assets/docs/reference/cli-reference.md +1 -1
  9. package/assets/docs/reference/troubleshooting.md +42 -0
  10. package/assets/docs/workflows/projects/lifecycle.md +2 -2
  11. package/assets/docs/workflows/projects/orchestration-model.md +14 -7
  12. package/assets/docs/workflows/projects/programmatic-execution.md +1 -1
  13. package/assets/docs/workflows/projects/reviews.md +18 -11
  14. package/assets/docs/workflows/skills/index.md +2 -0
  15. package/assets/docs/workflows/skills/repo-improve.md +13 -1
  16. package/assets/public-package-versions.json +4 -4
  17. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +2 -2
  18. package/assets/skills/oat-brainstorm/SKILL.md +8 -8
  19. package/assets/skills/oat-brainstorm/references/destinations.md +3 -3
  20. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +12 -5
  21. package/assets/skills/oat-dispatch-subagents/SKILL.md +81 -24
  22. package/assets/skills/oat-dispatch-subagents/references/provider-claude.md +10 -7
  23. package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +18 -13
  24. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +30 -23
  25. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +86 -2
  26. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
  27. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +8 -3
  28. package/assets/skills/oat-project-document/SKILL.md +4 -4
  29. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
  30. package/assets/skills/oat-project-implement/SKILL.md +9 -5
  31. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
  32. package/assets/skills/oat-project-plan-writing/SKILL.md +9 -5
  33. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
  34. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
  35. package/assets/skills/oat-project-summary/SKILL.md +9 -9
  36. package/assets/skills/oat-repo-improve/SKILL.md +9 -2
  37. package/assets/skills/subagent-orchestration/SKILL.md +109 -0
  38. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +103 -0
  39. package/assets/skills/subagent-orchestration/references/model-selection-principles.md +105 -0
  40. package/assets/skills/subagent-orchestration/references/provider-claude.md +81 -0
  41. package/assets/skills/subagent-orchestration/references/provider-codex.md +63 -0
  42. package/assets/skills/subagent-orchestration/references/provider-cursor.md +78 -0
  43. package/dist/commands/init/tools/brainstorm/index.d.ts +0 -3
  44. package/dist/commands/init/tools/brainstorm/index.d.ts.map +1 -1
  45. package/dist/commands/init/tools/brainstorm/index.js +0 -12
  46. package/dist/commands/init/tools/index.d.ts.map +1 -1
  47. package/dist/commands/init/tools/index.js +46 -25
  48. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  49. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  50. package/dist/commands/init/tools/shared/skill-manifest.js +1 -0
  51. package/dist/commands/init/tools/utility/index.d.ts.map +1 -1
  52. package/dist/commands/init/tools/utility/index.js +16 -2
  53. package/dist/commands/tools/has/has-pack.d.ts +18 -0
  54. package/dist/commands/tools/has/has-pack.d.ts.map +1 -0
  55. package/dist/commands/tools/has/has-pack.js +33 -0
  56. package/dist/commands/tools/has/index.d.ts +4 -0
  57. package/dist/commands/tools/has/index.d.ts.map +1 -0
  58. package/dist/commands/tools/has/index.js +57 -0
  59. package/dist/commands/tools/index.d.ts.map +1 -1
  60. package/dist/commands/tools/index.js +2 -0
  61. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  62. package/dist/commands/tools/remove/index.js +10 -20
  63. package/dist/commands/tools/shared/project-tools-config.d.ts +16 -0
  64. package/dist/commands/tools/shared/project-tools-config.d.ts.map +1 -0
  65. package/dist/commands/tools/shared/project-tools-config.js +59 -0
  66. package/dist/commands/tools/update/index.d.ts.map +1 -1
  67. package/dist/commands/tools/update/index.js +11 -22
  68. package/dist/engine/compute-plan.d.ts.map +1 -1
  69. package/dist/engine/compute-plan.js +8 -2
  70. package/dist/engine/execute-plan.d.ts +5 -1
  71. package/dist/engine/execute-plan.d.ts.map +1 -1
  72. package/dist/engine/execute-plan.js +23 -1
  73. package/dist/engine/index.d.ts +1 -0
  74. package/dist/engine/index.d.ts.map +1 -1
  75. package/dist/engine/index.js +1 -0
  76. package/dist/engine/provider-path-safety.d.ts +2 -0
  77. package/dist/engine/provider-path-safety.d.ts.map +1 -0
  78. package/dist/engine/provider-path-safety.js +54 -0
  79. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-phase-implementer
3
- version: 1.0.8
3
+ version: 1.0.9
4
4
  description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
5
5
  tools: Read, Write, Edit, Bash, Grep, Glob, Task
6
6
  color: cyan
@@ -60,7 +60,10 @@ read and follow:
60
60
 
61
61
  1. `.agents/skills/oat-project-dispatch-subagents/SKILL.md`;
62
62
  2. `.agents/skills/oat-dispatch-subagents/SKILL.md`; and
63
- 3. read exactly one active-provider reference from
63
+ 3. `.agents/skills/subagent-orchestration/references/model-selection-principles.md`;
64
+ 4. read exactly one active-provider selection reference from
65
+ `.agents/skills/subagent-orchestration/references/`; and
66
+ 5. read the matching mechanics reference from
64
67
  `.agents/skills/oat-dispatch-subagents/references/`.
65
68
 
66
69
  Every optional launch must have a bounded objective, explicit read/write
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-reviewer
3
- version: 1.1.8
3
+ version: 1.1.9
4
4
  description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
5
5
  tools: Read, Bash, Grep, Glob, Write, Task
6
6
  color: yellow
@@ -80,7 +80,7 @@ The primary reviewer must establish the authoritative scope before considering d
80
80
  When delegation is eligible:
81
81
 
82
82
  1. Use one bounded, read-only, non-recursive reconnaissance round with disjoint lane scopes. This is a one-level fan-out limit: lane workers must not spawn additional workers.
83
- 2. Before launching any lane, read `.agents/skills/oat-dispatch-subagents/SKILL.md`, resolve the active provider, and read exactly one matching active-provider reference under `.agents/skills/oat-dispatch-subagents/references/`. Reviewer-local reconnaissance must not read or load `.agents/skills/oat-project-dispatch-subagents/SKILL.md`; that adapter is reserved for project lifecycle phase/task policy.
83
+ 2. Before launching any lane, read `.agents/skills/oat-dispatch-subagents/SKILL.md` and `.agents/skills/subagent-orchestration/references/model-selection-principles.md`. Resolve the active provider, then read exactly one matching selection reference under `.agents/skills/subagent-orchestration/references/` and one matching mechanics reference under `.agents/skills/oat-dispatch-subagents/references/`. Reviewer-local reconnaissance must not read or load `.agents/skills/oat-project-dispatch-subagents/SKILL.md`; that adapter is reserved for project lifecycle phase/task policy.
84
84
  3. Map every lane worker to the shared `recon` role class (`role.class: recon`); role authority stays read-only and advisory. Assign the independent `task_class`, `classification_source: caller`, and non-empty `classification_reason` fields after understanding the artifacts and diff. These task-class fields are required for reviewer-local reconnaissance even though the generic dispatch contract keeps them optional for other callers.
85
85
  4. Classify each lane as `mechanical-recon`, `intelligent-recon`, `default-implementation`, `hard-reasoning`, or `consequential`. Use the stronger floor when uncertain. Classification proceeds from deterministic verification to silent-miss risk, then dispersed context, ambiguity, and consequence; file count alone never justifies escalation.
86
86
  - `mechanical-recon`: deterministic inventories, parity checks, and test/lint/format/build execution whose misses are visible and cheaply checked.
@@ -166,6 +166,7 @@ Archive lifecycle settings live here as shared repo config:
166
166
  Tool-pack installation state also lives here as shared repo config:
167
167
 
168
168
  - `tools.core`
169
+ - `tools.brainstorm`
169
170
  - `tools.docs`
170
171
  - `tools.ideas`
171
172
  - `tools.project-management`
@@ -173,7 +174,19 @@ Tool-pack installation state also lives here as shared repo config:
173
174
  - `tools.utility`
174
175
  - `tools.workflows`
175
176
 
176
- Use `oat config get tools.<pack>` when you need an explicit installed-capability signal for workflows or troubleshooting. PJM diagnostics use `tools.project-management`; disabled or unset repos report PJM as skipped instead of treating absent `.oat/repo/pjm/` files as drift.
177
+ This complete eight-pack map is the shared project installation snapshot.
178
+ Lifecycle reconciliation derives it only from project-scoped canonical assets;
179
+ user-only packs do not set these keys. Use `oat config get tools.<pack>` to
180
+ inspect repository installation state.
181
+
182
+ For workflow routing or troubleshooting that needs current effective
183
+ availability, run `oat tools has <pack>`. It checks project plus user scope by
184
+ default; use `--scope project` or `--scope user` to isolate one scope. The
185
+ global `--json` flag returns the matching scopes with the boolean result.
186
+
187
+ PJM diagnostics intentionally use project configuration where repository setup
188
+ is the question. Disabled or unset repos report PJM as skipped instead of
189
+ treating absent `.oat/repo/pjm/` files as drift.
177
190
 
178
191
  Workflow automation preferences are also visible through `oat config` and can be set at local, shared, or user scope. Notable review-loop keys:
179
192
 
@@ -87,7 +87,7 @@ Common keys in `.oat/config.json`:
87
87
  - `archive.wrapUpExportPath` — optional tracked destination for `oat-wrap-up` reports; when unset, the skill falls back to `.oat/repo/reference/wrap-ups`
88
88
  - `archive.awsProfile` — optional AWS named profile forwarded as `AWS_PROFILE` to every `aws` invocation in archive flows
89
89
  - `archive.awsRegion` — optional AWS region forwarded as `AWS_REGION` to every `aws` invocation in archive flows
90
- - `tools.<pack>` — whether a bundled tool pack is currently installed in the repo or user scopes after lifecycle reconciliation
90
+ - `tools.<pack>` — project-scoped installation state for a bundled tool pack after lifecycle reconciliation
91
91
  - `workflow.gates.skills` / `workflow.gates.execTargets` — per-skill gates and cross-runtime exec targets; manage with `oat gate`
92
92
  - `workflow.gateTimeouts.code` / `workflow.gateTimeouts.artifact` — default review budgets in milliseconds
93
93
 
@@ -98,7 +98,28 @@ oat config get tools.project-management
98
98
  oat config set tools.project-management true
99
99
  ```
100
100
 
101
- The `tools.*` keys are primarily maintained by `oat tools install`, `oat tools update`, and `oat tools remove`, but they are intentionally visible through `oat config` so workflows and operators can inspect or override pack-state signals when needed.
101
+ The `tools.*` group is a shared project installation snapshot, not an
102
+ effective project-plus-user capability signal. `oat tools install`, `oat tools
103
+ update`, and `oat tools remove` reconcile it from project-scoped canonical
104
+ assets only. When project state is non-empty, reconciliation writes the complete
105
+ eight-pack boolean map. When no project packs remain, it removes the group while
106
+ preserving unrelated shared keys. User-only assets are ignored.
107
+
108
+ Use `oat config get tools.<pack>` to inspect project installation state.
109
+ `oat config set tools.<pack> ...` remains available as a shared override, but a
110
+ later lifecycle reconciliation may replace the manual value with the canonical
111
+ project snapshot.
112
+
113
+ Use `oat tools has <pack>` for current effective availability. It checks project
114
+ and user scopes by default; add `--scope project` or `--scope user` to isolate a
115
+ scope, and use the global `--json` flag for the `{ pack, available, scopes }`
116
+ result:
117
+
118
+ ```bash
119
+ oat tools has project-management
120
+ oat tools has project-management --scope user
121
+ oat --json tools has project-management
122
+ ```
102
123
 
103
124
  ### Explainer configuration
104
125
 
@@ -11,7 +11,7 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O
11
11
 
12
12
  - What it does: explains how bundled OAT packs are installed, updated, inspected, and removed.
13
13
  - When to use it: when you need to add capabilities to a repo, update installed skills, or understand which packs own which tools.
14
- - Primary commands: `oat tools list`, `oat tools install`, `oat tools update`, `oat tools remove`
14
+ - Primary commands: `oat tools list`, `oat tools has`, `oat tools install`, `oat tools update`, `oat tools remove`
15
15
 
16
16
  ## Bundled packs at a glance
17
17
 
@@ -19,17 +19,35 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O
19
19
  - `docs` - docs and agent-instructions governance workflows
20
20
  - `workflows` - project lifecycle skills, wave-program orchestration (`oat-wave-program`, `oat-wave-execute`), the project subagent-dispatch adapter, wrap-up reporting, reviewer agents, and core project templates
21
21
  - `ideas` - lightweight ideation and promotion flows
22
- - `utility` - review and repo-maintenance helpers plus the provider-neutral subagent-dispatch engine
22
+ - `utility` - review and repo-maintenance helpers plus portable subagent-selection guidance and the provider-neutral dispatch engine
23
23
  - `project-management` - file-backed backlog/reference skills plus backlog, roadmap, current-state, file-per-record decision, and AGENTS-guide templates
24
24
  - `research` - research, analysis, comparison, and synthesis skills
25
25
  - `brainstorm` - always-on brainstorming entry point with visual companion
26
26
 
27
- ### Cross-pack dispatch dependency
27
+ ### Orchestration guidance and dispatch dependencies
28
28
 
29
- The reusable dispatch contracts intentionally span two packs:
29
+ The utility pack ships the reusable orchestration pair:
30
+
31
+ - `subagent-orchestration` owns durable task classes, model-selection
32
+ principles, dated provider selection matrices, and refresh evidence.
33
+ - `oat-dispatch-subagents` owns capability checks, live catalog intersection,
34
+ authorized routes, launch acceptance, recovery, and dispatch records.
35
+
36
+ Provider-aware callers load the generic principles plus exactly one provider
37
+ selection reference, then the dispatch contract plus exactly one matching
38
+ provider mechanics reference. The first reference answers which candidates
39
+ satisfy the task-class floor; the second answers how the active provider can
40
+ launch them. Root callers retain classification, selection judgment,
41
+ cross-lane synthesis, and final authority.
42
+
43
+ Custom utility selection has a directional dependency: choosing
44
+ `oat-dispatch-subagents` automatically includes `subagent-orchestration`, while
45
+ the self-contained guidance skill may be installed alone. Full utility-pack
46
+ update and removal treat both as explicit members. Removing either skill by
47
+ name does not implicitly remove the other.
48
+
49
+ The OAT lifecycle adapter intentionally lives in a separate pack:
30
50
 
31
- - `utility` owns `oat-dispatch-subagents`, the provider-neutral engine for
32
- capability checks, catalog-aware selection, launch evidence, and recovery.
33
51
  - `workflows` owns `oat-project-dispatch-subagents`, the adapter that adds OAT
34
52
  project lifecycle context without duplicating provider mechanics.
35
53
 
@@ -41,9 +59,9 @@ oat tools install workflows
41
59
  ```
42
60
 
43
61
  The packs remain independently installable. If the workflows adapter is
44
- present without the utility engine, it fails closed and reports the missing
62
+ present without the utility contracts, it fails closed and reports the missing
45
63
  dependency instead of inventing a fallback route. Non-project analytical
46
- skills can use the utility engine directly.
64
+ skills can use the utility guidance and dispatch layers directly.
47
65
 
48
66
  ### Cross-pack explainer dependency
49
67
 
@@ -169,6 +187,28 @@ Key behavior:
169
187
  - Reports whether the tool is invocable (for skills) and whether an update is available
170
188
  - Returns exit code 1 if the tool is not found in any scope
171
189
 
190
+ ### `oat tools has <pack>`
191
+
192
+ Purpose:
193
+
194
+ - Check current availability of one bundled pack without treating shared config as a runtime capability cache
195
+
196
+ Key behavior:
197
+
198
+ - Defaults to effective availability across project and user scopes
199
+ - Accepts `--scope project`, `--scope user`, or `--scope all`
200
+ - Prints `true` or `false` in plain mode
201
+ - With the global `--json` flag, emits `{ "pack": "<pack>", "available": <boolean>, "scopes": ["project", "user"] }`; `scopes` contains only locations where the pack is currently found
202
+ - Exits `0` for every valid query, including an unavailable pack, `1` for an invalid pack or other actionable input error, and `2` for an unexpected scan or runtime failure
203
+
204
+ Examples:
205
+
206
+ ```bash
207
+ oat tools has project-management
208
+ oat tools has brainstorm --scope user
209
+ oat --json tools has workflows
210
+ ```
211
+
172
212
  ### `oat tools install`
173
213
 
174
214
  Purpose:
@@ -187,7 +227,7 @@ Key behavior:
187
227
  - Removing a pack from a scope happens only when you explicitly choose a narrower end-state in the interactive flow (e.g. a pack at `both` set to `project` only). All staged removals are shown in a single change summary and applied only after one batch confirmation — declining makes no changes
188
228
  - Non-interactive installs (including `--scope project`, `--scope user`, and the default pack set) are strictly additive and never remove a pack from a scope. Removal is interactive-only
189
229
  - Tracks installed vs bundled skill versions and reports outdated skills
190
- - Records installed pack state in shared repo config as `tools.<pack>: true` so other OAT workflows can detect installed capabilities without relying on filesystem heuristics
230
+ - Reconciles shared repo config from project-scoped canonical assets only; a user-only install does not set `tools.<pack>: true`
191
231
  - Refreshes the managed `OAT tools` section in the repository-root `AGENTS.md`.
192
232
  - Installing the `project-management` pack—through either the aggregate picker or `oat tools install project-management`—also upserts a managed `OAT project-management` section. It points agents to `.oat/repo/AGENTS.md` for active PJM and durable-reference routing, summarizes when to consult it, and gives decision-specific guidance for reviewing and creating durable records without hand-editing the generated index.
193
233
  - Interactive runs can prompt to update selected outdated skills
@@ -208,7 +248,7 @@ Key behavior:
208
248
  - Compares installed versions against bundled versions and copies updated assets
209
249
  - For `--pack <pack>` and `--all`, an already-installed pack is reconciled to include newly added bundled skills or agents in that same scope
210
250
  - Pack-targeted updates intentionally rewrite bundled template and script companions in place, even when the pack's installed skills are already current
211
- - For `--pack <pack>` and `--all`, shared repo config is also reconciled from an installed-pack scan so `tools.*` reflects what is actually available and stale `true` flags are cleared
251
+ - For `--pack <pack>` and `--all`, shared repo config is also reconciled from a project-scoped installed-pack scan so `tools.*` reflects repository installation state and stale `true` flags are cleared
212
252
  - Dry-run mode with `--dry-run`; auto-sync after mutations by default
213
253
  - Use `--no-sync` to skip auto-sync
214
254
  - Reports tools that are already current, newer than bundled, or not bundled (custom)
@@ -223,19 +263,21 @@ Key behavior:
223
263
 
224
264
  - Accepts a tool name, `--pack <pack>`, or `--all` (mutually exclusive)
225
265
  - Removes skill directories and agent `.md` files from canonical locations
226
- - For `--pack <pack>` and `--all`, shared repo config is rewritten from a post-removal scan so `tools.<pack>` becomes `false` when a pack is no longer installed in any scope
266
+ - For `--pack <pack>` and `--all`, shared repo config is reconciled from a post-removal project scan; removing the last project copy clears project state even when a user copy remains
227
267
  - Dry-run mode with `--dry-run`; auto-sync after mutations by default
228
268
  - Use `--no-sync` to skip auto-sync
229
269
 
230
270
  ## Shared config signal: `tools.*`
231
271
 
232
- Tool-pack lifecycle commands now persist pack availability in shared repo config under `.oat/config.json`.
272
+ Tool-pack lifecycle commands maintain a project installation snapshot in shared repo config under `.oat/config.json`.
273
+
274
+ - Install, update, and remove reconcile the snapshot from project-scoped canonical assets only. User-only operations never set a shared `true` flag.
275
+ - When at least one project pack is installed, reconciliation writes the complete eight-pack boolean map: `core`, `ideas`, `docs`, `workflows`, `utility`, `project-management`, `research`, and `brainstorm`.
276
+ - When no project packs remain, reconciliation removes the entire `tools` map. It preserves unrelated shared keys, avoids creating a default-only config file, and skips unchanged writes.
233
277
 
234
- - `oat tools install <pack>` writes `tools.<pack>: true`
235
- - `oat tools update --pack <pack>` and `oat tools update --all` rebuild the full `tools` map from installed-pack scans
236
- - `oat tools remove --pack <pack>` and `oat tools remove --all` rebuild the same map after removals
278
+ Use `oat config get tools.<pack>` to inspect this project snapshot. A manual `oat config set tools.<pack> ...` value is a shared override that the next lifecycle reconciliation may replace.
237
279
 
238
- This matters because other workflows can now check `oat config get tools.<pack>` instead of inferring capabilities from directory existence alone. For example, `oat-project-document` checks `tools.project-management` before auto-running repo-reference refresh work.
280
+ Use `oat tools has <pack>` when a workflow needs current effective availability from project or user scope. For example, `oat-project-document` checks `oat tools has project-management` before auto-running repo-reference refresh work.
239
281
 
240
282
  ## Workflows pack
241
283
 
@@ -360,20 +402,22 @@ Key behavior:
360
402
  and can surface it later if the conversation turns visual. Persistence paths
361
403
  use OAT-managed prefixes (`.oat/brainstorm/<session-id>/` repo-scope or
362
404
  `~/.oat/brainstorm/<session-id>/` user-scope).
363
- - **Terminal-state picker filtered by `tools.<pack>` config.** When the user
364
- converges on a destination, the skill consults `oat config get tools.ideas`,
365
- `tools.project-management`, and `tools.workflows` to filter the available
366
- terminal states. Pack-gated outcomes (capture-as-idea, scoped backlog item,
367
- project promotion, active-project fold-back) only appear when the
368
- corresponding pack is installed.
405
+ - **Terminal-state picker filtered by effective pack availability.** When the
406
+ user converges on a destination, the skill runs `oat tools has ideas`, `oat
407
+ tools has project-management`, and `oat tools has workflows` to filter the
408
+ available terminal states. Pack-gated outcomes (capture-as-idea, scoped
409
+ backlog item, project promotion, active-project fold-back) appear when the
410
+ corresponding pack is available at project or user scope. The separate `oat
411
+ config get activeProject` lookup resolves active project state.
369
412
  - **Destinations playbook.** The full set of terminal-state stanzas — trigger
370
413
  phrases, required template fields, confirmation patterns, handoff targets —
371
414
  lives at `.agents/skills/oat-brainstorm/references/destinations.md` and is
372
415
  consulted by the skill at destination-identification time.
373
416
  - **Pack lifecycle.** `oat tools install brainstorm`, `oat tools update --pack
374
417
  brainstorm`, and `oat tools remove --pack brainstorm` manage the skill plus
375
- visual-companion bundle as a unit. Standard config-write semantics
376
- (`tools.brainstorm: true` on install) apply.
418
+ visual-companion bundle as a unit. Project installs participate in the shared
419
+ project snapshot; user-only installs remain available through `oat tools has
420
+ brainstorm` without setting `tools.brainstorm` in shared config.
377
421
 
378
422
  ### Auto-sync behavior
379
423
 
@@ -97,21 +97,28 @@ At minimum, the skill contract should:
97
97
  - Stop before side effects if delegation is required for correctness and authorization remains unresolved.
98
98
  - Document the fallback path and any quality or independence tradeoff.
99
99
 
100
- OAT-specific skills should compose with the internal
101
- `oat-dispatch-subagents` contract instead of copying provider selection and
102
- recovery rules. The caller still owns decomposition, user interaction,
103
- verification of load-bearing claims, cross-lane synthesis, and artifact
104
- writes. The dispatch contract owns capability and authorization checks, live
105
- catalog evidence, route/model/effort selection, launch acceptance, recovery,
106
- and the neutral dispatch record.
100
+ Delegation-capable skills should load `subagent-orchestration` instead of
101
+ copying task classes, model-selection principles, dated provider matrices, or
102
+ refresh evidence. Load exactly one active-provider selection reference from
103
+ that skill. The caller applies the guidance and still owns decomposition,
104
+ classification judgment, user interaction, verification of load-bearing
105
+ claims, cross-lane synthesis, and artifact writes.
106
+
107
+ OAT-specific skills should separately compose with the internal
108
+ `oat-dispatch-subagents` contract instead of copying launch or recovery rules.
109
+ Load exactly one matching provider mechanics reference from that skill. The
110
+ dispatch contract owns capability and authorization checks, live catalog
111
+ evidence, authorized routes, launch acceptance, recovery, and the neutral
112
+ dispatch record. Keep model/effort/reasoning/service-tier axes explicit and do
113
+ not collapse the selection and mechanics references into one provider matrix.
107
114
 
108
115
  Keep project lifecycle policy out of that general layer. A lifecycle caller
109
116
  loads `oat-project-dispatch-subagents` to resolve project, phase/task, gate,
110
117
  write-boundary, commit, and worktree context, then passes a generic request to
111
118
  `oat-dispatch-subagents`. Analytical callers such as repository audits can use
112
- the general contract directly without requiring an active project. In either
113
- case, resolve the provider first and load exactly one provider-specific
114
- reference rather than merging provider mechanics into a universal catalog.
119
+ the guidance and dispatch contracts without requiring an active project. In
120
+ either case, resolve the provider first, then load one selection reference and
121
+ the matching mechanics reference.
115
122
 
116
123
  Use `create-agnostic-skill` or `create-oat-skill` as the starting point; both include the current delegation guidance and optional capability-detection template.
117
124
 
@@ -116,6 +116,32 @@ than falling back to the root target or a base role.
116
116
  - Rule adoption normalizes provider filenames back to canonical `.agents/rules/*.md` entries before cross-provider fanout.
117
117
  - Cross-provider fanout is explicit via `oat sync --scope all`.
118
118
 
119
+ ## Provider mutation safety
120
+
121
+ The generic sync engine validates provider destinations for every operation that
122
+ creates or updates a symlink, creates or updates a copy, or removes a managed
123
+ provider path. The same guard applies across provider adapters; it is not
124
+ Claude-specific.
125
+
126
+ Validation runs at three boundaries:
127
+
128
+ 1. During planning, before a provider operation is classified.
129
+ 2. Across the complete mutating plan before apply starts, so an already-unsafe
130
+ later entry cannot allow earlier provider or manifest mutations.
131
+ 3. Immediately before each entry's first filesystem mutation, so ancestry that
132
+ changes after preflight fails closed.
133
+
134
+ A mutation is refused when its destination escapes the sync scope, equals the
135
+ scope root, or has any existing parent that is a symbolic link or not a
136
+ directory. The final managed destination is excluded from the ancestry walk, so
137
+ an existing managed symlink can still be updated or removed normally.
138
+
139
+ Whole-plan preflight refusal leaves provider paths, canonical content, external
140
+ symlink targets, and manifest state unchanged. If ancestry changes after
141
+ preflight, the affected entry fails before its first removal or write and does
142
+ not gain manifest ownership. OAT does not traverse, unlink, or rewrite the
143
+ unsafe parent.
144
+
119
145
  ## Reference artifacts
120
146
 
121
147
  - `.oat/projects/<scope>/<project>/spec.md` (FR5)
@@ -66,7 +66,7 @@ Notable commands introduced in the current CLI surface:
66
66
  - `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
67
67
  - `oat project archive [project-path] [--project-recap-run <project-relative-path>]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project.
68
68
  - `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
69
- - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#plan-declared-parallelism).
69
+ - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
70
70
  - `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../cli-utilities/project-log.md).
71
71
  - `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
72
72
  - `oat gate review <prompt...>` - run a stateful, headless OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. `--timeout-ms <milliseconds>` overrides target, `workflow.gateTimeouts`, environment, and scope defaults; accepted values are 1,000–14,400,000. Final/phase/range code reviews default to 30 minutes, while task code and artifact reviews default to 15 minutes. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. For `targeting_correlation_failed`, do not run review-receive even if an artifact path is present. For `artifact_validation_failed`, correct the artifact and rerun the gate until it revalidates as `ok` or `blocked`. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. `review_failed` may include structured `refusal`, `noOutputProduced`, and metadata-only `activityEvidence`; these diagnostic fields never make a run receive-eligible. After a timeout, a validated run-correlated artifact returns the ordinary `ok` or `blocked` envelope with additive `lateCompletion: true`. Duplicate run-ID matches or a changed artifact with a mismatched run ID retain `targeting_correlation_failed` and `receiveEligible: false`. Orchestrators should read the structured result rather than poll the filesystem. See [Workflow Gates](../cli-utilities/workflow-gates.md).
@@ -61,6 +61,48 @@ Use [Instruction Sync](../provider-sync/instruction-sync.md) for the full strate
61
61
  - In TTY mode, select which outdated skills to update when prompted.
62
62
  - In non-interactive mode, rerun the relevant pack subcommand with `--force` if you want to overwrite outdated installed skills.
63
63
 
64
+ ## `sync` reports an unsafe provider parent
65
+
66
+ Errors containing `Unsafe provider parent`, `symbolic links are not allowed in
67
+ provider ancestry`, or `provider ancestry is not a directory` mean an existing
68
+ parent of a managed provider destination is a symlink or a non-directory entry.
69
+ OAT refuses to traverse, unlink, or rewrite that parent because it may be
70
+ user-managed or externally owned. Canonical content and external symlink targets
71
+ remain untouched.
72
+
73
+ Recover explicitly:
74
+
75
+ 1. Inspect the reported parent and preserve or migrate any user-managed content.
76
+ 2. Replace that provider parent with a real directory under the intended project
77
+ or user sync scope.
78
+ 3. Rerun sync with the matching scope:
79
+
80
+ ```bash
81
+ oat sync --scope project
82
+ oat sync --scope user
83
+ oat sync --scope all
84
+ ```
85
+
86
+ Do not replace the parent until you understand who owns its existing target.
87
+ OAT intentionally does not automate this recovery.
88
+
89
+ ## A user-installed pack is missing from shared `tools.*`
90
+
91
+ This is expected. `.oat/config.json#tools` records project installation state,
92
+ so a user-only install does not set `tools.<pack>` in shared repo config.
93
+
94
+ Check effective project-plus-user availability with:
95
+
96
+ ```bash
97
+ oat tools has <pack>
98
+ ```
99
+
100
+ To confirm specifically that the user copy is present, run:
101
+
102
+ ```bash
103
+ oat tools has <pack> --scope user
104
+ ```
105
+
64
106
  ## Manifest not found or invalid
65
107
 
66
108
  - Missing manifest: run `sync` or `init`
@@ -18,7 +18,7 @@ OAT lifecycle order:
18
18
  7. Summary (`oat-project-summary`) — generates `summary.md` as institutional memory; `oat-project-pr-final` and `oat-project-complete` auto-refresh it when missing or stale
19
19
  8. PR (`oat-project-pr-progress` / `oat-project-pr-final`) — sets `pr_open` status
20
20
  9. Revision loop (`oat-project-revise`) — optional; accepts post-PR feedback
21
- 10. Documentation sync (`oat-project-document`) — optional; reads project artifacts and code evidence to identify docs needing updates, checks for missing coverage of newly shipped capability areas, checks `tools.project-management`, and auto-runs `oat-pjm-update-repo-reference` before scanning docs when the project-management pack is installed
21
+ 10. Documentation sync (`oat-project-document`) — optional; reads project artifacts and code evidence to identify docs needing updates, checks for missing coverage of newly shipped capability areas, checks effective project-management availability with `oat tools has project-management`, and auto-runs `oat-pjm-update-repo-reference` before scanning docs when the pack is available
22
22
  11. Complete (`oat-project-complete`)
23
23
 
24
24
  **Shortcut:** `oat-project-next` reads project state and invokes the correct next skill automatically — use it instead of remembering which skill comes next. Complements `oat-project-progress` (which is read-only diagnostic).
@@ -63,7 +63,7 @@ from missing state.
63
63
  After implementation closeout finishes:
64
64
 
65
65
  1. **Summary** (`oat-project-summary`) — generates `summary.md` as institutional memory from project artifacts; PR-final and completion will auto-refresh it if you have not already run it or if it is stale
66
- 2. **Documentation** (`oat-project-document`) — optional sync of project docs; now uses the shared `tools.project-management` config signal to decide whether repo-reference refresh should run before docs analysis, and should recommend new docs pages/directories when the shipped work introduces a capability area that the docs app does not already cover
66
+ 2. **Documentation** (`oat-project-document`) — optional sync of project docs; checks effective project-management availability with `oat tools has project-management` to decide whether repo-reference refresh should run before docs analysis, and should recommend new docs pages/directories when the shipped work introduces a capability area that the docs app does not already cover
67
67
  3. **PR** (`oat-project-pr-final`) — creates PR description (auto-refreshes `summary.md` first when needed, then uses it as source), sets `oat_phase_status: pr_open`, and tracks actual PR existence with `oat_pr_status` / `oat_pr_url`
68
68
  4. **Revision loop** (`oat-project-revise`) — accepts post-PR feedback:
69
69
  - Inline feedback creates `p-revN` revision phases with `prevN-tNN` task IDs
@@ -53,16 +53,23 @@ does not launch a third tier.
53
53
 
54
54
  ## Dispatch Layers
55
55
 
56
- Every lifecycle launch flows through two contracts:
56
+ Every lifecycle launch composes three responsibilities:
57
57
 
58
58
  1. `oat-project-dispatch-subagents` resolves project state, role policy,
59
59
  ceilings, scope, files, commits, worktrees, and checkpoints.
60
- 2. `oat-dispatch-subagents` resolves capabilities, catalogs, exact routes,
61
- launch acceptance, continuation, and generic evidence.
62
-
63
- The lifecycle workflow remains authoritative for synthesis and state mutation.
64
- The dispatch engine does not edit `plan.md`, `implementation.md`, or project
65
- state.
60
+ 2. `subagent-orchestration` supplies the durable task classes and
61
+ model-selection principles. The caller loads exactly one active-provider
62
+ selection reference for dated candidates and refresh evidence.
63
+ 3. `oat-dispatch-subagents` resolves capabilities, live catalogs, exact
64
+ routes, launch acceptance, continuation, recovery, and dispatch records. It
65
+ loads exactly one matching provider mechanics reference.
66
+
67
+ The selection and mechanics references form a two-reference provider contract:
68
+ the first owns model guidance, while the second owns provider control surfaces.
69
+ They are loaded together for dispatch but never collapsed into one universal
70
+ matrix. The lifecycle workflow remains authoritative for classification,
71
+ selection judgment, synthesis, and state mutation. The dispatch engine does
72
+ not edit `plan.md`, `implementation.md`, or project state.
66
73
 
67
74
  ```mermaid
68
75
  sequenceDiagram
@@ -23,7 +23,7 @@ comes from configured dispatch policy or a configured cross-family gate
23
23
  (standing, scope-bound), or from explicit user approval for the current run.
24
24
  Availability of a provider CLI is capability evidence, not authorization. See
25
25
  the route tiers in
26
- [Orchestration Model](orchestration-model.md#route-tiers-and-terminality) for
26
+ [Orchestration Model](orchestration-model.md#accepted-launch-terminality) for
27
27
  how native, policy-resolved, and improvised routes are ranked, and why an
28
28
  accepted launch is terminal for automatic replacement.
29
29
 
@@ -276,8 +276,8 @@ task class sets its minimum model-capability floor:
276
276
  File count alone does not justify escalation. Interpretation and policy
277
277
  judgment either use an adequate stronger class or remain with the primary
278
278
  reviewer. Active user and repository instructions, the active-provider
279
- guidance, and the live nested catalog resolve current model examples; the
280
- canonical reviewer does not promise named models.
279
+ selection guidance, and the live nested catalog resolve current model
280
+ examples; the canonical reviewer does not promise named models.
281
281
 
282
282
  Reviewer-local fan-out is limited to one bounded, read-only, non-recursive
283
283
  round. Each worker receives a disjoint scope, cannot modify files or spawn more
@@ -288,15 +288,22 @@ workers, and returns a compact advisory report containing:
288
288
  - gaps in the assigned scope; and
289
289
  - explicit uncertainty, including uncertainty about absence claims.
290
290
 
291
- Before launching these lanes, the reviewer loads the generic
292
- `oat-dispatch-subagents` contract and exactly one active-provider reference.
293
- That shared contract owns nested capability checks, worker catalog resolution,
294
- model and effort selection, routing, authorization, launch evidence, and
295
- provider-specific mechanics. It records each lane's task class, model-class
296
- floor, classification rationale, and floor satisfaction without assuming that
297
- workers inherit the primary reviewer's target. Lanes may share one wave only
298
- when their task classes, model floors, and all other dispatch axes match;
299
- mixed-class reviews use separate waves and records.
291
+ Before launching these lanes, the reviewer loads `subagent-orchestration` for
292
+ durable task classes and model-selection principles, then exactly one
293
+ active-provider selection reference. The reviewer applies that guidance and
294
+ retains the classification, authority, reconciliation, and final finding
295
+ judgment.
296
+
297
+ The reviewer separately loads the internal `oat-dispatch-subagents` contract
298
+ and exactly one matching provider mechanics reference. That layer owns nested
299
+ capability checks, live worker-catalog resolution, authorized routing, launch
300
+ acceptance, recovery, and dispatch records. Selection guidance owns dated
301
+ provider matrices and refresh evidence; dispatch mechanics do not duplicate
302
+ them. The dispatch record preserves each reviewer-supplied task class,
303
+ model-class floor, classification rationale, selected axes, and floor
304
+ satisfaction without assuming workers inherit the primary reviewer's target.
305
+ Lanes may share one wave only when their task classes, model floors, and all
306
+ other dispatch axes match; mixed-class reviews use separate waves and records.
300
307
 
301
308
  This generic reviewer-local use is distinct from
302
309
  `oat-project-dispatch-subagents`, which is reserved for OAT lifecycle phase and
@@ -26,6 +26,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
26
26
  - Capture a scoped, shippable backlog item: `oat-pjm-add-backlog-item` directly when the work is already scoped, or `oat-brainstorm` when the thought hasn't converged yet — the brainstorm dispatcher's "scoped backlog item" destination pre-fills the title / description / acceptance criteria / scope estimate / priority from the conversation and then runs `oat-pjm-add-backlog-item` with confirmed inputs
27
27
  - Manage the repo backlog and reference docs: `oat-pjm-update-repo-reference`, `oat-pjm-review-backlog`
28
28
  - Turn a repo audit, maintainability review, backlog review, backlog directory, or backlog item into standalone external implementation plans: `oat-repo-improve`. Plans land under `.oat/repo/reference/external-plans/`; execute them directly or optionally pass one to `oat-project-import-plan` for tracked OAT execution.
29
+ - Choose what to delegate and route bounded work by task class across Codex, Claude, or Cursor: `subagent-orchestration`. It is self-contained and usable without OAT; live catalogs and current instructions take precedence over its dated provider examples.
29
30
  - Build visual project explainers and final project recaps: `oat-explainer-kit`, backed by the destination-neutral `explainer-kit` core. See [Explainer Kit](explainer-kit.md).
30
31
  - Work on docs surfaces: `authoring-docs` (general documentation baseline), `oat-docs-authoring` (targeted OAT/Fumadocs authoring), `oat-docs-bootstrap` (guided bootstrap of a new docs app), `oat-docs-analyze`, `oat-docs-apply`, and `oat-project-document`
31
32
  - Generate a shipping digest or scheduled recap: `oat-wrap-up`
@@ -123,6 +124,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
123
124
 
124
125
  === "Scaffolding and utility"
125
126
 
127
+ - `subagent-orchestration`
126
128
  - `explainer-kit`
127
129
  - `oat-worktree-bootstrap`
128
130
  - `oat-worktree-bootstrap-auto`
@@ -56,4 +56,16 @@ Failure to publish a backlog item or issue does not invalidate a successfully wr
56
56
 
57
57
  ## Orchestration
58
58
 
59
- Full repository audits use `oat-dispatch-subagents` for bounded read-only reconnaissance while the root agent retains vetting, prioritization, and plan writing. Dispatch is native-first. Configured project/workflow policy may authorize required CLI or cross-runtime routes; an agent-improvised alternate route requires explicit current-run approval.
59
+ Full repository audits use bounded read-only reconnaissance while the root
60
+ agent retains classification, vetting, prioritization, cross-lane synthesis,
61
+ and plan writing. Before launch, the caller loads the durable task classes and
62
+ model-selection principles from `subagent-orchestration` plus exactly one
63
+ active-provider selection reference.
64
+
65
+ The internal `oat-dispatch-subagents` skill then owns capability checks, live
66
+ catalog intersection, exact route selection, launch acceptance, recovery, and
67
+ dispatch records. It loads exactly one matching provider mechanics reference;
68
+ selection and mechanics references are not merged into one universal provider
69
+ contract. Dispatch is native-first. Configured project/workflow policy may
70
+ authorize required CLI or cross-runtime routes; an agent-improvised alternate
71
+ route requires explicit current-run approval.
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.13",
3
- "docs-config": "0.2.13",
4
- "docs-theme": "0.2.13",
5
- "docs-transforms": "0.2.13"
2
+ "cli": "0.2.15",
3
+ "docs-config": "0.2.15",
4
+ "docs-theme": "0.2.15",
5
+ "docs-transforms": "0.2.15"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-agent-instructions-analyze
3
- version: 1.11.1
3
+ version: 1.11.2
4
4
  description: Run when you need to evaluate agent instruction file coverage, quality, and drift. Produces a severity-rated analysis artifact. Run before oat-agent-instructions-apply to identify what needs improvement.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -107,7 +107,7 @@ Delta mode scoping:
107
107
  git diff --name-only "$STORED_HASH"..HEAD
108
108
  ```
109
109
 
110
- Use the changed file list to limit coverage gap assessment (Step 5) and drift detection (Step 7) to affected directories. Quality evaluation (Step 4) always runs on ALL instruction files regardless of mode.
110
+ Use the changed file list to limit coverage gap assessment (Step 4) and drift detection (Step 6) to affected directories. Quality evaluation (Step 3) always runs on ALL instruction files regardless of mode.
111
111
 
112
112
  ### Step 1: Discover Instruction Files
113
113