@open-agent-toolkit/cli 0.2.36 → 0.2.37

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 (183) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/backlog-lifecycle.md +18 -0
  3. package/assets/docs/cli-utilities/bootstrap.md +6 -3
  4. package/assets/docs/cli-utilities/config-and-local-state.md +26 -12
  5. package/assets/docs/cli-utilities/configuration.md +36 -13
  6. package/assets/docs/cli-utilities/tool-packs.md +423 -51
  7. package/assets/docs/provider-sync/scope-and-surface.md +4 -1
  8. package/assets/docs/reference/cli-reference.md +5 -3
  9. package/assets/docs/reference/file-locations.md +28 -4
  10. package/assets/docs/reference/troubleshooting.md +132 -2
  11. package/assets/docs/workflows/projects/lifecycle.md +21 -2
  12. package/assets/public-package-versions.json +4 -4
  13. package/assets/scripts/generate-oat-state.sh +441 -0
  14. package/assets/scripts/generate-thin-index.sh +200 -0
  15. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +10 -5
  16. package/assets/skills/oat-agent-instructions-apply/SKILL.md +30 -5
  17. package/assets/skills/oat-brainstorm/SKILL.md +34 -8
  18. package/assets/skills/oat-brainstorm/references/destinations.md +6 -1
  19. package/assets/skills/oat-docs-analyze/SKILL.md +9 -4
  20. package/assets/skills/oat-docs-apply/SKILL.md +6 -3
  21. package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +14 -1
  22. package/assets/skills/oat-pjm-decision/SKILL.md +22 -10
  23. package/assets/skills/oat-pjm-review-backlog/SKILL.md +20 -3
  24. package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +20 -10
  25. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  26. package/assets/skills/oat-project-document/SKILL.md +21 -3
  27. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  28. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  29. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  30. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  31. package/assets/skills/oat-project-summary/SKILL.md +23 -11
  32. package/assets/skills/oat-repo-knowledge-index/SKILL.md +6 -3
  33. package/dist/commands/backlog/index.d.ts +2 -0
  34. package/dist/commands/backlog/index.d.ts.map +1 -1
  35. package/dist/commands/backlog/index.js +67 -23
  36. package/dist/commands/backlog/new.d.ts +3 -0
  37. package/dist/commands/backlog/new.d.ts.map +1 -1
  38. package/dist/commands/backlog/new.js +8 -21
  39. package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
  40. package/dist/commands/decision/agents-guidance.js +2 -1
  41. package/dist/commands/decision/index.d.ts +2 -0
  42. package/dist/commands/decision/index.d.ts.map +1 -1
  43. package/dist/commands/decision/index.js +19 -3
  44. package/dist/commands/decision/new.d.ts +4 -0
  45. package/dist/commands/decision/new.d.ts.map +1 -1
  46. package/dist/commands/decision/new.js +11 -30
  47. package/dist/commands/doctor/index.d.ts +4 -0
  48. package/dist/commands/doctor/index.d.ts.map +1 -1
  49. package/dist/commands/doctor/index.js +254 -9
  50. package/dist/commands/init/tools/brainstorm/index.d.ts.map +1 -1
  51. package/dist/commands/init/tools/brainstorm/index.js +20 -6
  52. package/dist/commands/init/tools/docs/index.d.ts.map +1 -1
  53. package/dist/commands/init/tools/docs/index.js +4 -1
  54. package/dist/commands/init/tools/ideas/index.d.ts.map +1 -1
  55. package/dist/commands/init/tools/ideas/index.js +4 -1
  56. package/dist/commands/init/tools/index.d.ts +11 -2
  57. package/dist/commands/init/tools/index.d.ts.map +1 -1
  58. package/dist/commands/init/tools/index.js +459 -351
  59. package/dist/commands/init/tools/install-state.d.ts +2 -0
  60. package/dist/commands/init/tools/install-state.d.ts.map +1 -1
  61. package/dist/commands/init/tools/install-state.js +11 -0
  62. package/dist/commands/init/tools/project-management/agents-guidance.d.ts.map +1 -1
  63. package/dist/commands/init/tools/project-management/agents-guidance.js +3 -1
  64. package/dist/commands/init/tools/project-management/index.d.ts +1 -0
  65. package/dist/commands/init/tools/project-management/index.d.ts.map +1 -1
  66. package/dist/commands/init/tools/project-management/index.js +24 -55
  67. package/dist/commands/init/tools/project-management/install-project-management.d.ts +4 -0
  68. package/dist/commands/init/tools/project-management/install-project-management.d.ts.map +1 -1
  69. package/dist/commands/init/tools/project-management/install-project-management.js +4 -1
  70. package/dist/commands/init/tools/research/index.d.ts.map +1 -1
  71. package/dist/commands/init/tools/research/index.js +4 -1
  72. package/dist/commands/init/tools/shared/copy-helpers.d.ts.map +1 -1
  73. package/dist/commands/init/tools/shared/copy-helpers.js +10 -0
  74. package/dist/commands/init/tools/shared/skill-manifest.d.ts +15 -15
  75. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  76. package/dist/commands/init/tools/shared/skill-manifest.js +17 -122
  77. package/dist/commands/init/tools/utility/index.d.ts.map +1 -1
  78. package/dist/commands/init/tools/utility/index.js +4 -1
  79. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  80. package/dist/commands/init/tools/workflows/index.js +4 -1
  81. package/dist/commands/init/tools/workflows/install-workflows.d.ts.map +1 -1
  82. package/dist/commands/init/tools/workflows/install-workflows.js +2 -4
  83. package/dist/commands/pjm/adoption.d.ts +12 -0
  84. package/dist/commands/pjm/adoption.d.ts.map +1 -0
  85. package/dist/commands/pjm/adoption.js +47 -0
  86. package/dist/commands/pjm/doctor.d.ts +3 -2
  87. package/dist/commands/pjm/doctor.d.ts.map +1 -1
  88. package/dist/commands/pjm/doctor.js +28 -13
  89. package/dist/commands/pjm/index.d.ts +2 -0
  90. package/dist/commands/pjm/index.d.ts.map +1 -1
  91. package/dist/commands/pjm/index.js +11 -3
  92. package/dist/commands/pjm/init.d.ts +3 -0
  93. package/dist/commands/pjm/init.d.ts.map +1 -1
  94. package/dist/commands/pjm/init.js +37 -32
  95. package/dist/commands/pjm/migrate.d.ts +1 -0
  96. package/dist/commands/pjm/migrate.d.ts.map +1 -1
  97. package/dist/commands/pjm/migrate.js +1 -0
  98. package/dist/commands/pjm/template-source.d.ts +14 -0
  99. package/dist/commands/pjm/template-source.d.ts.map +1 -0
  100. package/dist/commands/pjm/template-source.js +56 -0
  101. package/dist/commands/remove/skills/remove-skills.d.ts.map +1 -1
  102. package/dist/commands/remove/skills/remove-skills.js +10 -19
  103. package/dist/commands/status/index.d.ts +5 -0
  104. package/dist/commands/status/index.d.ts.map +1 -1
  105. package/dist/commands/status/index.js +203 -2
  106. package/dist/commands/sync/index.d.ts.map +1 -1
  107. package/dist/commands/sync/index.js +40 -7
  108. package/dist/commands/sync/sync.types.d.ts +4 -0
  109. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  110. package/dist/commands/tools/has/has-pack.d.ts +11 -2
  111. package/dist/commands/tools/has/has-pack.d.ts.map +1 -1
  112. package/dist/commands/tools/has/has-pack.js +33 -20
  113. package/dist/commands/tools/index.d.ts.map +1 -1
  114. package/dist/commands/tools/index.js +3 -1
  115. package/dist/commands/tools/info/info-tool.d.ts +3 -0
  116. package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
  117. package/dist/commands/tools/info/info-tool.js +29 -4
  118. package/dist/commands/tools/list/list-tools.d.ts +3 -0
  119. package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
  120. package/dist/commands/tools/list/list-tools.js +31 -4
  121. package/dist/commands/tools/migrate/index.d.ts +26 -0
  122. package/dist/commands/tools/migrate/index.d.ts.map +1 -0
  123. package/dist/commands/tools/migrate/index.js +312 -0
  124. package/dist/commands/tools/migrate/migrate-pack.d.ts +81 -0
  125. package/dist/commands/tools/migrate/migrate-pack.d.ts.map +1 -0
  126. package/dist/commands/tools/migrate/migrate-pack.js +324 -0
  127. package/dist/commands/tools/outdated/outdated-tools.d.ts +11 -0
  128. package/dist/commands/tools/outdated/outdated-tools.d.ts.map +1 -1
  129. package/dist/commands/tools/outdated/outdated-tools.js +33 -5
  130. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  131. package/dist/commands/tools/remove/index.js +73 -20
  132. package/dist/commands/tools/remove/remove-tools.d.ts +28 -0
  133. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  134. package/dist/commands/tools/remove/remove-tools.js +156 -26
  135. package/dist/commands/tools/shared/apply-pack-reconcile.d.ts +41 -0
  136. package/dist/commands/tools/shared/apply-pack-reconcile.d.ts.map +1 -0
  137. package/dist/commands/tools/shared/apply-pack-reconcile.js +126 -0
  138. package/dist/commands/tools/shared/auto-sync.d.ts +5 -2
  139. package/dist/commands/tools/shared/auto-sync.d.ts.map +1 -1
  140. package/dist/commands/tools/shared/auto-sync.js +1 -0
  141. package/dist/commands/tools/shared/content-digest.d.ts +3 -0
  142. package/dist/commands/tools/shared/content-digest.d.ts.map +1 -0
  143. package/dist/commands/tools/shared/content-digest.js +57 -0
  144. package/dist/commands/tools/shared/format-pack-inventory.d.ts +3 -0
  145. package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -0
  146. package/dist/commands/tools/shared/format-pack-inventory.js +21 -0
  147. package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -1
  148. package/dist/commands/tools/shared/install-sync-context.js +2 -25
  149. package/dist/commands/tools/shared/pack-inventory.d.ts +46 -0
  150. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -0
  151. package/dist/commands/tools/shared/pack-inventory.js +207 -0
  152. package/dist/commands/tools/shared/pack-lifecycle.d.ts +34 -0
  153. package/dist/commands/tools/shared/pack-lifecycle.d.ts.map +1 -0
  154. package/dist/commands/tools/shared/pack-lifecycle.js +67 -0
  155. package/dist/commands/tools/shared/pack-manifest.d.ts +11 -0
  156. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -0
  157. package/dist/commands/tools/shared/pack-manifest.js +384 -0
  158. package/dist/commands/tools/shared/pack-paths.d.ts +21 -0
  159. package/dist/commands/tools/shared/pack-paths.d.ts.map +1 -0
  160. package/dist/commands/tools/shared/pack-paths.js +35 -0
  161. package/dist/commands/tools/shared/pack-reconcile.d.ts +64 -0
  162. package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -0
  163. package/dist/commands/tools/shared/pack-reconcile.js +158 -0
  164. package/dist/commands/tools/shared/project-tools-config.d.ts.map +1 -1
  165. package/dist/commands/tools/shared/project-tools-config.js +12 -38
  166. package/dist/commands/tools/shared/scan-tools.js +2 -2
  167. package/dist/commands/tools/shared/scoped-pack-intent.d.ts +34 -0
  168. package/dist/commands/tools/shared/scoped-pack-intent.d.ts.map +1 -0
  169. package/dist/commands/tools/shared/scoped-pack-intent.js +116 -0
  170. package/dist/commands/tools/shared/types.d.ts +22 -0
  171. package/dist/commands/tools/shared/types.d.ts.map +1 -1
  172. package/dist/commands/tools/update/index.d.ts.map +1 -1
  173. package/dist/commands/tools/update/index.js +30 -5
  174. package/dist/commands/tools/update/update-tools.d.ts +9 -1
  175. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  176. package/dist/commands/tools/update/update-tools.js +176 -64
  177. package/dist/config/oat-config.d.ts +6 -0
  178. package/dist/config/oat-config.d.ts.map +1 -1
  179. package/dist/config/oat-config.js +49 -20
  180. package/dist/fs/paths.d.ts +12 -0
  181. package/dist/fs/paths.d.ts.map +1 -1
  182. package/dist/fs/paths.js +87 -1
  183. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.2.36"
3
+ "oatVersion": "0.2.37"
4
4
  }
@@ -9,6 +9,18 @@ The file-backed backlog under `.oat/repo/pjm/backlog/` tracks work as one Markdo
9
9
 
10
10
  For the flag-by-flag command reference, see [`oat backlog archive`](config-and-local-state.md#oat-backlog-archive). For the two-layer PJM surface that hosts the backlog, see [Tool Packs](tool-packs.md#install-vs-initialize).
11
11
 
12
+ ## Adoption comes first
13
+
14
+ `oat backlog` mutations require this repository to have adopted PJM. Installing
15
+ the `project-management` pack makes the capability available — including at user
16
+ scope, which is the default — but it does not adopt PJM for a repository, and
17
+ `oat backlog init` is not an alternate adoption path.
18
+
19
+ Run `oat pjm init` once per repository. Until adoption is recorded, backlog
20
+ mutations write nothing and return an error naming the repository path and
21
+ `oat pjm init` as the recovery. Check the current state with
22
+ `oat pjm doctor --json` and read its `adoption.state` field.
23
+
12
24
  ## Where a backlog item lives
13
25
 
14
26
  - **`items/<id>.md`** - active, file-backed records. Each carries frontmatter with a `status` and an `updated` timestamp.
@@ -58,4 +70,10 @@ The manual close-out this command replaces is exactly where the two motivating r
58
70
  - **`pjm:backlog_completed_unarchived`** (warn) - `completed.md` references an item whose file still lives in `items/`.
59
71
  - **`pjm:backlog_duplicate_id`** (fail) - the same `<id>.md` exists in both `items/` and `archived/`. `oat backlog archive` refuses to auto-resolve this (it would clobber the archived record), so the duplicate must be reconciled by hand.
60
72
 
73
+ These backlog checks run once the repository is adopted. `oat doctor` keys the
74
+ `pjm:*` family on repository adoption state rather than on
75
+ `tools.project-management`, so a repository whose PJM capability lives at user
76
+ scope still gets full backlog diagnostics. An unadopted repository reports
77
+ `pjm:adoption` with the `oat pjm init` recovery instead of backlog drift.
78
+
61
79
  Doctor reports drift; it never auto-fixes. A human or agent runs `oat backlog archive` (or corrects the status) and re-runs doctor to confirm the backlog is clean again.
@@ -29,6 +29,7 @@ Key behavior:
29
29
  - Interactive adoption in TTY mode
30
30
  - JSON/non-TTY contract support
31
31
  - Establishes the base structure used by `oat status`, `oat sync`, `oat init tools`, and `oat doctor`
32
+ - Pack intent recorded during guided setup is scoped: a project-scope install writes `tools.<pack>: true` to `.oat/config.json`, a user-scope install writes it to `~/.oat/config.json`, and neither writes the other
32
33
  - For project scope, creates canonical `.agents/skills/`, `.agents/agents/`, and `.agents/rules/` directories
33
34
 
34
35
  ### Guided setup
@@ -43,9 +44,10 @@ After core initialization completes, `oat init` can enter an interactive guided
43
44
  **Steps (each independently skippable):**
44
45
 
45
46
  1. **Tool packs** — install OAT tool packs. The core pack (diagnostics, passive docs access) is checked by default and always installs at user scope. Guided setup asks whether to customize per-pack scope:
46
- - choose **Yes** to run the per-pack scope selector for user-eligible packs (`ideas`, `docs`, `utility`, `research`, `brainstorm`)
47
+ - choose **Yes** to run the per-pack scope selector for every pack that allows both scopes (`ideas`, `docs`, `workflows`, `utility`, `project-management`, `research`, `brainstorm`)
47
48
  - choose **No** to apply additive per-pack defaults without extra scope prompts
48
- - project-only packs such as `workflows` and `project-management` remain project-scoped
49
+ - on a fresh install every pack defaults to **user** scope, so capabilities follow you across repositories; an existing install keeps its current placement
50
+ - installing `project-management` installs the capability only. Adopting it for this repository is a separate, explicit `oat pjm init` step — see [Install vs. initialize](tool-packs.md#install-vs-initialize)
49
51
  2. **Local paths** — multi-select from default gitignored artifact paths (analysis, PR, reviews, ideas). Pre-existing paths are pre-checked; only new paths are added.
50
52
  3. **Documentation** — detect or enter docs metadata for the repo when documentation exists.
51
53
  4. **Provider sync** — sync provider project views via `oat sync --scope project`.
@@ -68,6 +70,7 @@ oat init --scope project
68
70
 
69
71
  Related commands:
70
72
 
71
- - `oat tools ...` (tool-pack install, update, remove, list, info): `tool-packs.md`
73
+ - `oat tools ...` (tool-pack install, update, remove, migrate, list, info): `tool-packs.md`
74
+ - `oat pjm init` (adopt project management for this repository): `tool-packs.md#install-vs-initialize`
72
75
  - `oat local ...`, `oat doctor`, and other utility commands: `config-and-local-state.md`
73
76
  - `oat status` / `oat sync` (provider sync): `../provider-sync/index.md`
@@ -94,7 +94,7 @@ Pass `--context`, `--decision`, and `--consequences` together when creating a re
94
94
 
95
95
  The decision index uses managed marker pairs and is deterministic, so an index merge conflict can be resolved by re-running `oat decision regenerate-index` and staging the result. Decision records replace the legacy single `decision-record.md`; repos still on the old layout migrate with `oat decision migrate` (or the broader `oat pjm migrate`).
96
96
 
97
- `oat decision init` is the lightweight standalone setup path. It does not require the `project-management` tool pack and does not create current state, roadmap, or backlog artifacts. Its AGENTS guidance uses `oat decision` directly while also recognizing `oat-pjm-decision` when that optional skill is installed later.
97
+ `oat decision init` is the lightweight standalone setup path. It does not require the `project-management` tool pack and does not create current state, roadmap, or backlog artifacts. It is also not an alternate adoption path for the broader PJM surface: repository PJM mutations still require `oat pjm init`, and `oat decision` mutations fail closed with that recovery when the repository has not adopted PJM. Its AGENTS guidance uses `oat decision` directly while also recognizing `oat-pjm-decision` when that optional skill is installed later.
98
98
 
99
99
  ## `oat local ...`
100
100
 
@@ -165,7 +165,7 @@ Archive lifecycle settings live here as shared repo config:
165
165
 
166
166
  `archive.awsProfile` and `archive.awsRegion` are forwarded as `AWS_PROFILE` / `AWS_REGION` env vars into every `aws` spawn that runs during `oat-project-complete` and `oat repo archive sync`, and they override any values already set in the parent shell — the repo's archive-scoped declaration wins so users don't have to remember to unset `AWS_PROFILE` per shell. The per-invocation `oat repo archive sync --profile <profile>` and `--region <region>` flags then override the config for a single run, giving precedence `flag > config > shell env`. When neither flag nor config is set, the parent shell's `AWS_PROFILE` / `AWS_REGION` pass through unchanged. Raw access keys (`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`) remain a shell-environment concern — there is no config plumbing for them.
167
167
 
168
- Tool-pack installation state also lives here as shared repo config:
168
+ Project-scope tool-pack intent also lives here as shared repo config:
169
169
 
170
170
  - `tools.core`
171
171
  - `tools.brainstorm`
@@ -176,19 +176,33 @@ Tool-pack installation state also lives here as shared repo config:
176
176
  - `tools.utility`
177
177
  - `tools.workflows`
178
178
 
179
- This complete eight-pack map is the shared project installation snapshot.
180
- Lifecycle reconciliation derives it only from project-scoped canonical assets;
181
- user-only packs do not set these keys. Use `oat config get tools.<pack>` to
182
- inspect repository installation state.
179
+ These keys record **project-scope intent only**, and only for packs actually
180
+ installed at project scope. Intent is true-or-absent: a lifecycle mutation
181
+ writes `true` for the scope it changed and deletes the key on removal. It never
182
+ writes `false`, never derives one pack's key from another's, and never writes
183
+ the full eight-pack map. A user-scope install records the same shape under
184
+ `~/.oat/config.json` instead. Use `oat config get tools.<pack>` to inspect
185
+ declared project intent.
186
+
187
+ Declared intent is not the same as what is installed. Use `oat tools list`,
188
+ `oat tools info <name>`, `oat status`, or `oat doctor` to see observed
189
+ inventory — placement, completeness, missing managed assets, and drift.
183
190
 
184
191
  For workflow routing or troubleshooting that needs current effective
185
192
  availability, run `oat tools has <pack>`. It checks project plus user scope by
186
- default; use `--scope project` or `--scope user` to isolate one scope. The
187
- global `--json` flag returns the matching scopes with the boolean result.
188
-
189
- PJM diagnostics intentionally use project configuration where repository setup
190
- is the question. Disabled or unset repos report PJM as skipped instead of
191
- treating absent `.oat/repo/pjm/` files as drift.
193
+ default; use `--scope project` or `--scope user` to isolate one scope. A scope
194
+ counts only when the pack is **complete** there. The global `--json` flag
195
+ returns the matching scopes plus per-scope completeness and the missing assets
196
+ behind a `false`.
197
+
198
+ Repository PJM adoption is tracked separately from pack intent, under
199
+ `pjm.initialized` and `pjm.schemaVersion` in `.oat/config.json`. PJM
200
+ diagnostics key on that adoption state, not on `tools.project-management`, so a
201
+ repository whose PJM capability lives at user scope is still diagnosed
202
+ correctly. A repository that never adopted PJM reports adoption state `none`
203
+ with `oat pjm init` as the recovery instead of treating absent
204
+ `.oat/repo/pjm/` files as drift. See
205
+ [Install vs. initialize](tool-packs.md#install-vs-initialize).
192
206
 
193
207
  Workflow automation preferences are also visible through `oat config` and can be set at local, shared, or user scope. Notable review-loop keys:
194
208
 
@@ -87,33 +87,42 @@ 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>` — project-scoped installation state for a bundled tool pack after lifecycle reconciliation
90
+ - `tools.<pack>` — project-scope intent for a bundled tool pack (`true` or absent)
91
+ - `pjm.initialized` / `pjm.schemaVersion` — explicit repository PJM adoption written by `oat pjm init`
91
92
  - `workflow.gates.skills` / `workflow.gates.execTargets` — per-skill gates and cross-runtime exec targets; manage with `oat gate`
92
93
  - `workflow.gateTimeouts.code` / `workflow.gateTimeouts.artifact` — default review budgets in milliseconds
93
94
 
94
- Tool-pack state example:
95
+ Tool-pack intent example:
95
96
 
96
97
  ```bash
97
98
  oat config get tools.project-management
98
99
  oat config set tools.project-management true
99
100
  ```
100
101
 
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.
102
+ `tools.*` records **declared intent per scope**, not effective project-plus-user
103
+ capability. Project intent lives in `.oat/config.json`; user intent lives in the
104
+ same key shape under `~/.oat/config.json`. `oat tools install`, `oat tools
105
+ update`, `oat tools remove`, and `oat tools migrate` write only the scope they
106
+ changed.
107
107
 
108
- Use `oat config get tools.<pack>` to inspect project installation state.
108
+ Intent is true-or-absent. Installing writes `true`; removing deletes the key.
109
+ OAT never writes `false`, never infers one pack's key from another's, and never
110
+ writes a full eight-pack map. A legacy `false` left over from an older release
111
+ is diagnosed as a `legacy-false-conflict` rather than honored as an opt-out.
112
+
113
+ Use `oat config get tools.<pack>` to inspect declared intent.
109
114
  `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.
115
+ later lifecycle mutation for that scope may replace the manual value.
116
+
117
+ Declared intent is not the same as installed inventory. Use `oat tools list`,
118
+ `oat tools info <name>`, `oat status`, or `oat doctor` to see what is actually
119
+ present, what is missing, and which scoped command repairs it.
112
120
 
113
121
  Use `oat tools has <pack>` for current effective availability. It checks project
114
122
  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:
123
+ scope. Availability is complete-only — a partially installed pack reports
124
+ `false`. The global `--json` flag returns `pack`, `available`, `scopes`,
125
+ `unavailableScopes`, per-scope `completeness`, and the `missing` managed assets:
117
126
 
118
127
  ```bash
119
128
  oat tools has project-management
@@ -121,6 +130,20 @@ oat tools has project-management --scope user
121
130
  oat --json tools has project-management
122
131
  ```
123
132
 
133
+ Repository PJM adoption example:
134
+
135
+ ```bash
136
+ oat config get pjm.initialized
137
+ oat pjm doctor --json
138
+ ```
139
+
140
+ `pjm.initialized` is written by `oat pjm init` after the canonical scaffold is
141
+ verified. It is the authoritative repository adoption marker: PJM, backlog, and
142
+ decision mutations fail closed without it, and `oat doctor` keys its `pjm:*`
143
+ checks on adoption state rather than on `tools.project-management`. See
144
+ [Install vs. initialize](tool-packs.md#install-vs-initialize) for the full state
145
+ table and template precedence.
146
+
124
147
  ### Explainer configuration
125
148
 
126
149
  The `oat-explainer-kit` adapter owns two typed config groups. Build and publish