@open-agent-toolkit/cli 0.2.65 → 0.2.67

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 (238) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +33 -2
  3. package/assets/docs/cli-utilities/index.md +3 -0
  4. package/assets/docs/cli-utilities/project-log.md +63 -4
  5. package/assets/docs/cli-utilities/remote-project-management.md +191 -0
  6. package/assets/docs/contributing/code.md +8 -4
  7. package/assets/docs/contributing/skills.md +29 -17
  8. package/assets/docs/docs-tooling/commands.md +3 -1
  9. package/assets/docs/provider-sync/manifest-and-drift.md +2 -18
  10. package/assets/docs/reference/cli-reference.md +12 -1
  11. package/assets/docs/reference/file-locations.md +22 -0
  12. package/assets/docs/reference/oat-directory-structure.md +30 -17
  13. package/assets/docs/reference/troubleshooting.md +44 -0
  14. package/assets/docs/workflows/projects/lifecycle.md +17 -0
  15. package/assets/docs/workflows/projects/picking-up-projects.md +18 -0
  16. package/assets/docs/workflows/skills/index.md +33 -0
  17. package/assets/docs/workflows/skills/repo-improve.md +7 -3
  18. package/assets/public-package-versions.json +4 -4
  19. package/assets/skills/create-agnostic-skill/SKILL.md +19 -37
  20. package/assets/skills/create-agnostic-skill/references/docs/skills-guide.md +58 -15
  21. package/assets/skills/create-agnostic-skill/references/skill-template.md +17 -15
  22. package/assets/skills/oat-agent-instructions-apply/SKILL.md +1 -1
  23. package/assets/skills/oat-agent-instructions-apply/references/instruction-file-templates/glob-scoped-rule.md +1 -4
  24. package/assets/skills/oat-doctor/SKILL.md +3 -6
  25. package/assets/skills/oat-pjm-remote/SKILL.md +101 -0
  26. package/assets/skills/oat-pjm-remote/references/external-action-protocol.md +43 -0
  27. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  28. package/assets/skills/oat-project-complete/SKILL.md +158 -30
  29. package/assets/skills/oat-project-complete/scripts/finalize-synced-archive.mjs +26 -7
  30. package/assets/skills/oat-project-complete/scripts/validate-durable-archive-receipt.mjs +183 -0
  31. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  32. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  33. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
  34. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  35. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  36. package/assets/skills/oat-project-retro/SKILL.md +1 -1
  37. package/assets/skills/oat-project-retro/references/apply-procedure.md +11 -0
  38. package/assets/skills/oat-project-review-provide/SKILL.md +4 -4
  39. package/assets/skills/oat-project-summary/SKILL.md +24 -2
  40. package/assets/skills/oat-repo-improve/SKILL.md +9 -2
  41. package/assets/skills/oat-repo-improve/references/plan-template.md +4 -6
  42. package/assets/skills/oat-repo-knowledge-index/SKILL.md +11 -9
  43. package/assets/skills/oat-wave-execute/SKILL.md +20 -6
  44. package/assets/skills/oat-wave-program/SKILL.md +9 -4
  45. package/dist/commands/backlog/new.d.ts +1 -0
  46. package/dist/commands/backlog/new.d.ts.map +1 -1
  47. package/dist/commands/backlog/new.js +3 -1
  48. package/dist/commands/config/index.d.ts +3 -1
  49. package/dist/commands/config/index.d.ts.map +1 -1
  50. package/dist/commands/config/index.js +362 -36
  51. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  52. package/dist/commands/docs/index-generate/index.js +68 -12
  53. package/dist/commands/docs/init/index.d.ts +11 -0
  54. package/dist/commands/docs/init/index.d.ts.map +1 -1
  55. package/dist/commands/docs/init/index.js +19 -1
  56. package/dist/commands/gate/index.d.ts.map +1 -1
  57. package/dist/commands/gate/index.js +10 -2
  58. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  59. package/dist/commands/instructions/instructions.utils.js +42 -9
  60. package/dist/commands/internal/validate-skill-version-bumps.d.ts.map +1 -1
  61. package/dist/commands/internal/validate-skill-version-bumps.js +5 -5
  62. package/dist/commands/pjm/doctor.d.ts +2 -0
  63. package/dist/commands/pjm/doctor.d.ts.map +1 -1
  64. package/dist/commands/pjm/doctor.js +71 -1
  65. package/dist/commands/pjm/index.d.ts +2 -0
  66. package/dist/commands/pjm/index.d.ts.map +1 -1
  67. package/dist/commands/pjm/index.js +3 -0
  68. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts +60 -0
  69. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts.map +1 -0
  70. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.js +151 -0
  71. package/dist/commands/pjm/remote/association.d.ts +27 -0
  72. package/dist/commands/pjm/remote/association.d.ts.map +1 -0
  73. package/dist/commands/pjm/remote/association.js +68 -0
  74. package/dist/commands/pjm/remote/authority.d.ts +210 -0
  75. package/dist/commands/pjm/remote/authority.d.ts.map +1 -0
  76. package/dist/commands/pjm/remote/authority.js +341 -0
  77. package/dist/commands/pjm/remote/batch.d.ts +15 -0
  78. package/dist/commands/pjm/remote/batch.d.ts.map +1 -0
  79. package/dist/commands/pjm/remote/batch.js +126 -0
  80. package/dist/commands/pjm/remote/closeout.d.ts +69 -0
  81. package/dist/commands/pjm/remote/closeout.d.ts.map +1 -0
  82. package/dist/commands/pjm/remote/closeout.js +208 -0
  83. package/dist/commands/pjm/remote/create-binding.d.ts +62 -0
  84. package/dist/commands/pjm/remote/create-binding.d.ts.map +1 -0
  85. package/dist/commands/pjm/remote/create-binding.js +126 -0
  86. package/dist/commands/pjm/remote/credential-safety.d.ts +7 -0
  87. package/dist/commands/pjm/remote/credential-safety.d.ts.map +1 -0
  88. package/dist/commands/pjm/remote/credential-safety.js +21 -0
  89. package/dist/commands/pjm/remote/discussion.d.ts +49 -0
  90. package/dist/commands/pjm/remote/discussion.d.ts.map +1 -0
  91. package/dist/commands/pjm/remote/discussion.js +124 -0
  92. package/dist/commands/pjm/remote/doctor.d.ts +22 -0
  93. package/dist/commands/pjm/remote/doctor.d.ts.map +1 -0
  94. package/dist/commands/pjm/remote/doctor.js +380 -0
  95. package/dist/commands/pjm/remote/external-action.d.ts +208 -0
  96. package/dist/commands/pjm/remote/external-action.d.ts.map +1 -0
  97. package/dist/commands/pjm/remote/external-action.js +367 -0
  98. package/dist/commands/pjm/remote/host-execution.d.ts +28 -0
  99. package/dist/commands/pjm/remote/host-execution.d.ts.map +1 -0
  100. package/dist/commands/pjm/remote/host-execution.js +63 -0
  101. package/dist/commands/pjm/remote/index.d.ts +41 -0
  102. package/dist/commands/pjm/remote/index.d.ts.map +1 -0
  103. package/dist/commands/pjm/remote/index.js +280 -0
  104. package/dist/commands/pjm/remote/jira-adf.d.ts +35 -0
  105. package/dist/commands/pjm/remote/jira-adf.d.ts.map +1 -0
  106. package/dist/commands/pjm/remote/jira-adf.js +169 -0
  107. package/dist/commands/pjm/remote/lifecycle.d.ts +163 -0
  108. package/dist/commands/pjm/remote/lifecycle.d.ts.map +1 -0
  109. package/dist/commands/pjm/remote/lifecycle.js +224 -0
  110. package/dist/commands/pjm/remote/local-projection.d.ts +30 -0
  111. package/dist/commands/pjm/remote/local-projection.d.ts.map +1 -0
  112. package/dist/commands/pjm/remote/local-projection.js +95 -0
  113. package/dist/commands/pjm/remote/managed-markdown.d.ts +30 -0
  114. package/dist/commands/pjm/remote/managed-markdown.d.ts.map +1 -0
  115. package/dist/commands/pjm/remote/managed-markdown.js +128 -0
  116. package/dist/commands/pjm/remote/migrate.d.ts +14 -0
  117. package/dist/commands/pjm/remote/migrate.d.ts.map +1 -0
  118. package/dist/commands/pjm/remote/migrate.js +32 -0
  119. package/dist/commands/pjm/remote/operation-state.d.ts +15 -0
  120. package/dist/commands/pjm/remote/operation-state.d.ts.map +1 -0
  121. package/dist/commands/pjm/remote/operation-state.js +143 -0
  122. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts +25 -0
  123. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts.map +1 -0
  124. package/dist/commands/pjm/remote/outbound-projection-safety.js +99 -0
  125. package/dist/commands/pjm/remote/output.d.ts +60 -0
  126. package/dist/commands/pjm/remote/output.d.ts.map +1 -0
  127. package/dist/commands/pjm/remote/output.js +48 -0
  128. package/dist/commands/pjm/remote/preview.d.ts +88 -0
  129. package/dist/commands/pjm/remote/preview.d.ts.map +1 -0
  130. package/dist/commands/pjm/remote/preview.js +154 -0
  131. package/dist/commands/pjm/remote/provider-conformance.d.ts +13 -0
  132. package/dist/commands/pjm/remote/provider-conformance.d.ts.map +1 -0
  133. package/dist/commands/pjm/remote/provider-conformance.js +37 -0
  134. package/dist/commands/pjm/remote/provider.d.ts +57 -0
  135. package/dist/commands/pjm/remote/provider.d.ts.map +1 -0
  136. package/dist/commands/pjm/remote/provider.js +28 -0
  137. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts +46 -0
  138. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts.map +1 -0
  139. package/dist/commands/pjm/remote/providers/github-publication-safety.js +126 -0
  140. package/dist/commands/pjm/remote/providers/github.d.ts +207 -0
  141. package/dist/commands/pjm/remote/providers/github.d.ts.map +1 -0
  142. package/dist/commands/pjm/remote/providers/github.js +1456 -0
  143. package/dist/commands/pjm/remote/providers/jira.d.ts +245 -0
  144. package/dist/commands/pjm/remote/providers/jira.d.ts.map +1 -0
  145. package/dist/commands/pjm/remote/providers/jira.js +1650 -0
  146. package/dist/commands/pjm/remote/providers/linear.d.ts +182 -0
  147. package/dist/commands/pjm/remote/providers/linear.d.ts.map +1 -0
  148. package/dist/commands/pjm/remote/providers/linear.js +1289 -0
  149. package/dist/commands/pjm/remote/purpose-policy.d.ts +29 -0
  150. package/dist/commands/pjm/remote/purpose-policy.d.ts.map +1 -0
  151. package/dist/commands/pjm/remote/purpose-policy.js +118 -0
  152. package/dist/commands/pjm/remote/reconcile.d.ts +42 -0
  153. package/dist/commands/pjm/remote/reconcile.d.ts.map +1 -0
  154. package/dist/commands/pjm/remote/reconcile.js +101 -0
  155. package/dist/commands/pjm/remote/resolution.d.ts +122 -0
  156. package/dist/commands/pjm/remote/resolution.d.ts.map +1 -0
  157. package/dist/commands/pjm/remote/resolution.js +243 -0
  158. package/dist/commands/pjm/remote/schema.d.ts +9309 -0
  159. package/dist/commands/pjm/remote/schema.d.ts.map +1 -0
  160. package/dist/commands/pjm/remote/schema.js +1503 -0
  161. package/dist/commands/pjm/remote/service.d.ts +20 -0
  162. package/dist/commands/pjm/remote/service.d.ts.map +1 -0
  163. package/dist/commands/pjm/remote/service.js +5121 -0
  164. package/dist/commands/pjm/remote/shared-storage.d.ts +36 -0
  165. package/dist/commands/pjm/remote/shared-storage.d.ts.map +1 -0
  166. package/dist/commands/pjm/remote/shared-storage.js +110 -0
  167. package/dist/commands/pjm/remote/snapshot.d.ts +32 -0
  168. package/dist/commands/pjm/remote/snapshot.d.ts.map +1 -0
  169. package/dist/commands/pjm/remote/snapshot.js +140 -0
  170. package/dist/commands/pjm/remote/storage-locator.d.ts +29 -0
  171. package/dist/commands/pjm/remote/storage-locator.d.ts.map +1 -0
  172. package/dist/commands/pjm/remote/storage-locator.js +62 -0
  173. package/dist/commands/pjm/remote/store.d.ts +85 -0
  174. package/dist/commands/pjm/remote/store.d.ts.map +1 -0
  175. package/dist/commands/pjm/remote/store.js +553 -0
  176. package/dist/commands/pjm/remote/verification.d.ts +40 -0
  177. package/dist/commands/pjm/remote/verification.d.ts.map +1 -0
  178. package/dist/commands/pjm/remote/verification.js +100 -0
  179. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  180. package/dist/commands/project/dispatch-ceiling/index.js +32 -18
  181. package/dist/commands/project/log/append.d.ts +48 -0
  182. package/dist/commands/project/log/append.d.ts.map +1 -1
  183. package/dist/commands/project/log/append.js +207 -30
  184. package/dist/commands/project/log/check.d.ts +87 -1
  185. package/dist/commands/project/log/check.d.ts.map +1 -1
  186. package/dist/commands/project/log/check.js +139 -5
  187. package/dist/commands/project/log/grammar.d.ts +165 -0
  188. package/dist/commands/project/log/grammar.d.ts.map +1 -1
  189. package/dist/commands/project/log/grammar.js +219 -1
  190. package/dist/commands/project/log/rollup.d.ts +16 -1
  191. package/dist/commands/project/log/rollup.d.ts.map +1 -1
  192. package/dist/commands/project/log/rollup.js +22 -2
  193. package/dist/commands/project/log/synthesize.d.ts +16 -0
  194. package/dist/commands/project/log/synthesize.d.ts.map +1 -1
  195. package/dist/commands/project/log/synthesize.js +85 -9
  196. package/dist/commands/status/index.d.ts.map +1 -1
  197. package/dist/commands/status/index.js +24 -2
  198. package/dist/commands/sync/apply.d.ts.map +1 -1
  199. package/dist/commands/sync/apply.js +6 -4
  200. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  201. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  202. package/dist/config/dispatch-matrix.d.ts.map +1 -1
  203. package/dist/config/dispatch-matrix.js +13 -5
  204. package/dist/config/oat-config.d.ts +41 -0
  205. package/dist/config/oat-config.d.ts.map +1 -1
  206. package/dist/config/oat-config.js +247 -9
  207. package/dist/config/own-keys.d.ts +22 -0
  208. package/dist/config/own-keys.d.ts.map +1 -0
  209. package/dist/config/own-keys.js +32 -0
  210. package/dist/config/resolve.d.ts +11 -0
  211. package/dist/config/resolve.d.ts.map +1 -1
  212. package/dist/config/resolve.js +35 -11
  213. package/dist/config/sync-config.d.ts.map +1 -1
  214. package/dist/config/sync-config.js +16 -0
  215. package/dist/drift/detector.d.ts.map +1 -1
  216. package/dist/drift/detector.js +52 -1
  217. package/dist/drift/skill-view-diagnostic.d.ts.map +1 -1
  218. package/dist/drift/skill-view-diagnostic.js +2 -23
  219. package/dist/engine/compute-plan.d.ts.map +1 -1
  220. package/dist/engine/compute-plan.js +22 -72
  221. package/dist/engine/managed-copy-hash.d.ts +69 -0
  222. package/dist/engine/managed-copy-hash.d.ts.map +1 -0
  223. package/dist/engine/managed-copy-hash.js +175 -0
  224. package/dist/fs/assets.d.ts +11 -0
  225. package/dist/fs/assets.d.ts.map +1 -1
  226. package/dist/fs/assets.js +1 -1
  227. package/dist/manifest/hash.d.ts +110 -0
  228. package/dist/manifest/hash.d.ts.map +1 -1
  229. package/dist/manifest/hash.js +111 -13
  230. package/dist/providers/ceiling/registry.d.ts.map +1 -1
  231. package/dist/providers/ceiling/registry.js +6 -1
  232. package/dist/providers/identity/dispatch-report.d.ts.map +1 -1
  233. package/dist/providers/identity/dispatch-report.js +4 -1
  234. package/dist/release/public-package-contract.d.ts.map +1 -1
  235. package/dist/release/public-package-contract.js +21 -0
  236. package/dist/validation/skills.d.ts.map +1 -1
  237. package/dist/validation/skills.js +305 -40
  238. package/package.json +2 -2
@@ -82,10 +82,32 @@ Config ownership note:
82
82
  - Runtime sync state: `.oat/sync/`
83
83
  - Repo knowledge: `.oat/repo/knowledge/`
84
84
  - Active PJM operational layer: `.oat/repo/pjm/` (`current-state.md`, `roadmap.md`, `backlog/`)
85
+ - Shared backlog remote-binding metadata: `.oat/repo/pjm/remote/bindings/`
85
86
  - Durable repo references: `.oat/repo/reference/` (file-per-record decisions under `decisions/`)
86
87
  - Repo reviews: `.oat/repo/reviews/`
87
88
  - Repo archive: `.oat/repo/archive/`
88
89
 
90
+ ### Remote PJM binding and operation state
91
+
92
+ Remote binding metadata follows the local owner:
93
+
94
+ - shared backlog bindings: `.oat/repo/pjm/remote/bindings/`
95
+ - shared or synced project bindings: `<project>/remote/bindings/`
96
+ - local project bindings: the local operational store's `metadata/bindings/`
97
+
98
+ Operational snapshots, journals, batches, and receipts default to
99
+ `<git-common-dir>/oat/pjm-remote/<repository-fingerprint>/`. Git linked
100
+ worktrees resolve the same common directory and therefore share this local
101
+ state. A separate clone has a different Git directory and begins without the
102
+ first clone's operational snapshot; run `oat pjm remote refresh` through a live
103
+ host capability before relying on remote freshness.
104
+
105
+ When shared state is explicitly previewed and approved,
106
+ `.oat/repo/pjm/remote/state/` or `<project>/remote/state/` replaces the local
107
+ operational root. Shared state can contain remote planning content and is not
108
+ available for local projects. See
109
+ [Remote Project Management](../cli-utilities/remote-project-management.md).
110
+
89
111
  ## Project artifact trees
90
112
 
91
113
  - Shared: `.oat/projects/shared/<project>/`
@@ -38,6 +38,9 @@ Project scope is used for project workflows and repo-local sync state. User scop
38
38
  repo/
39
39
  knowledge/
40
40
  pjm/
41
+ remote/
42
+ bindings/
43
+ state/
41
44
  reference/
42
45
  reviews/
43
46
  archive/
@@ -45,16 +48,16 @@ Project scope is used for project workflows and repo-local sync state. User scop
45
48
 
46
49
  ## Top-level entries
47
50
 
48
- | Path | Purpose | Notes |
49
- | ------------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
50
- | `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, and `documentation.*` |
51
- | `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
52
- | `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
53
- | `.oat/projects/` | OAT project artifacts | `shared`, `synced`, `local`, and lifecycle `archived` locations |
54
- | `.oat/ideas/` | Project-level ideas store | Often gitignored |
55
- | `.oat/sync/` | Interop sync state/config | See details below |
56
- | `.oat/templates/` | Artifact templates used by OAT skills | Source for scaffolding. Includes `docs-app-fuma/` (Fumadocs) and `docs-app-mkdocs/` (MkDocs) templates. |
57
- | `.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.*`, 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/` |
58
61
 
59
62
  ## `.oat/sync/` details
60
63
 
@@ -283,8 +286,17 @@ Typical contents:
283
286
  reviews/
284
287
  pr/
285
288
  references/
289
+ remote/
290
+ bindings/
291
+ state/
286
292
  ```
287
293
 
294
+ The `remote/bindings/` directory is portable metadata for shared and synced
295
+ projects. `remote/state/` exists only after approved shared-storage promotion.
296
+ With the default local storage policy, operational state instead lives under
297
+ `<git-common-dir>/oat/pjm-remote/<repository-fingerprint>/`, outside `.oat/`.
298
+ Linked worktrees share that location; independent clones do not.
299
+
288
300
  ### Core artifact roles
289
301
 
290
302
  | File | Purpose |
@@ -310,13 +322,14 @@ Not all workflow modes require every artifact:
310
322
 
311
323
  ## `.oat/repo/` structure
312
324
 
313
- | Path | Purpose |
314
- | ---------------------- | ---------------------------------------------------------------------------------------- |
315
- | `.oat/repo/knowledge/` | Generated codebase knowledge indexes |
316
- | `.oat/repo/pjm/` | Active operational PJM layer (`current-state.md`, `roadmap.md`, and `backlog/`) |
317
- | `.oat/repo/reference/` | Durable append-mostly references, including file-per-record decisions under `decisions/` |
318
- | `.oat/repo/reviews/` | Repo-scoped review artifacts (ad-hoc/non-project) |
319
- | `.oat/repo/archive/` | Archived repo-level artifacts |
325
+ | Path | Purpose |
326
+ | ----------------------- | ---------------------------------------------------------------------------------------- |
327
+ | `.oat/repo/knowledge/` | Generated codebase knowledge indexes |
328
+ | `.oat/repo/pjm/` | Active operational PJM layer (`current-state.md`, `roadmap.md`, and `backlog/`) |
329
+ | `.oat/repo/pjm/remote/` | Portable backlog binding metadata and, only when approved, shared operational state |
330
+ | `.oat/repo/reference/` | Durable append-mostly references, including file-per-record decisions under `decisions/` |
331
+ | `.oat/repo/reviews/` | Repo-scoped review artifacts (ad-hoc/non-project) |
332
+ | `.oat/repo/archive/` | Archived repo-level artifacts |
320
333
 
321
334
  Canonical project-management repo-reference surface splits the active
322
335
  operational layer (`pjm/`) from durable references (`reference/`):
@@ -264,6 +264,50 @@ managed default itself:
264
264
  oat tools update --pack project-management --scope user
265
265
  ```
266
266
 
267
+ ## A remote PJM command is pending, uncertain, or blocked
268
+
269
+ Read the JSON envelope before retrying:
270
+
271
+ ```bash
272
+ oat pjm remote doctor --json
273
+ ```
274
+
275
+ Before the first provider-contacting command, discover a matching live
276
+ connector. If no capable connector exists, inspect an already configured
277
+ provider CLI's live help. Construct only bounded provider-neutral capability
278
+ evidence and supply it through `--capability-evidence-stdin`.
279
+
280
+ - `pending` with `externalAction` means OAT durably prepared one exact semantic
281
+ host action. Confirm the previously selected capability remains granted,
282
+ execute that exact action at most once, then submit one bounded observation
283
+ through `oat pjm remote operation continue`.
284
+ - `uncertain` means an effect may have occurred. Follow the envelope's recovery
285
+ instructions; never repeat a create or update blindly.
286
+ - `needs-review` requires an explicit reconciliation choice.
287
+ - `blocked` means policy, approval, capability, lifecycle state, or outbound
288
+ safety prevented the action. Do not bypass the gate or broaden the field
289
+ projection.
290
+
291
+ Only an `ok` envelope after authoritative read-back is remote success. Native
292
+ provider output, a zero process exit, or a visible remote change is not.
293
+
294
+ ## A clone or worktree has unexpected remote PJM state
295
+
296
+ Linked worktrees share default local operational state through the Git common
297
+ directory. If one worktree has a pending operation, inspect or continue it
298
+ instead of starting a competing action elsewhere.
299
+
300
+ Independent clones do not share that local store. In a fresh clone, use
301
+ portable binding metadata plus `oat pjm remote refresh` through a matching live
302
+ host capability before treating snapshots as current. Offline, doctor and
303
+ migration remain available, but commands requiring remote freshness stay
304
+ pending or blocked.
305
+
306
+ If the repository opted into `.oat/repo/pjm/remote/state/` or
307
+ `<project>/remote/state/`, remember that shared operational storage may contain
308
+ remote planning content visible to repository readers. Promotion requires an
309
+ exact persisted preview and fresh approval; local projects cannot use it.
310
+
267
311
  ## `--scope all` fails outside a Git repository
268
312
 
269
313
  It should not. `oat status --scope all` and `oat doctor --scope all` complete
@@ -113,6 +113,15 @@ and retro is not added to the lite closeout sequence.
113
113
  On completion, OAT treats archive handling as an explicit closeout choice:
114
114
 
115
115
  - When archiving is selected, the local archive is written to `.oat/projects/archived/<project>/`.
116
+ - Every completion that will actually archive — any durable (`shared` or
117
+ `synced`) project with archive selected — keeps the `activeProject` pointer
118
+ until the archive returns a validated receipt, and only then clears it.
119
+ `local` projects are never durable and never archive, so they clear the
120
+ pointer immediately, as does any completion that declines archive. An archive
121
+ failure therefore leaves the pointer intact and the completion directly
122
+ resumable. See
123
+ [Picking Up a Project](picking-up-projects.md#archive-contents) for the
124
+ post-archive resume and its manual recovery path.
116
125
  - When archiving is disabled or declined, durable projects remain at their
117
126
  active path. Synced completion still finalizes and pushes the project ref,
118
127
  commits the discovery record as `complete`, retains the checkout and ref, and
@@ -183,6 +192,14 @@ each finding as a `deferred advisory` warning and continues, a project with no l
183
192
  final completion summary, and a resumed completion whose log already
184
193
  carries a seal runs report-only and appends nothing.
185
194
 
195
+ A resume detects that seal from `oat project log check`, which reports a
196
+ `sealed` field, rather than by re-reading the log. The invariant is enforced in
197
+ the CLI: replaying the seal reports `already-appended` and leaves exactly one
198
+ seal entry; a replay recognized by its own idempotency key reports
199
+ `already-appended` even on a sealed log (nothing is appended), and every
200
+ append carrying new content is refused with `status: "sealed"` and a non-zero
201
+ exit.
202
+
186
203
  Repositories that never adopted PJM skip the sweep with a one-line note. A
187
204
  missing planning surface degrades the sweep, never the closeout.
188
205
 
@@ -99,6 +99,24 @@ If closeout is interrupted after terminal archive identity exists, rerun
99
99
  completion so it can resume from the completed ref and archive metadata. Do not
100
100
  use `pull` or `open` to recreate an active record or checkout.
101
101
 
102
+ For a `shared` project, archive moves the project into
103
+ `.oat/projects/archived/<project>/` and removes the source directory, while
104
+ completion keeps the `activeProject` pointer until the receipt validates.
105
+ Rerunning completion after an interruption between the archive and that clear
106
+ recognizes exactly this state — the pointer names a source directory that no
107
+ longer exists and the archive carries `oat_lifecycle: complete` plus the
108
+ `Lifecycle complete; archived locally` phase marker — so it validates the
109
+ discovered archive and clears the pointer without archiving a second time or
110
+ sealing the project log again. An interruption before the archive leaves the
111
+ source directory in place, so completion simply reruns from the start and skips
112
+ the work it already finished.
113
+
114
+ If the archive cannot be discovered — the source directory is gone and either
115
+ no archived project or several match the name — completion stops and leaves the
116
+ pointer untouched. Recover manually: locate the archive directory under
117
+ `.oat/projects/archived/`, confirm `oat_lifecycle: complete` in its `state.md`,
118
+ then clear the pointer with `oat config set activeProject ""`.
119
+
102
120
  ## Related
103
121
 
104
122
  - [Reviewing OAT PRs](reviewing-oat-prs.md)
@@ -31,6 +31,10 @@ Use this section when you want to choose the right OAT skill for a task. If you
31
31
  [Project Retrospectives](../projects/retro.md).
32
32
  - 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
33
33
  - Manage the repo backlog and reference docs: `oat-pjm-update-repo-reference`, `oat-pjm-review-backlog`
34
+ - Operate an explicit GitHub, Linear, or Jira planning-record binding through a
35
+ live host capability: `oat-pjm-remote`. The OAT CLI retains policy, preview,
36
+ approval, journal, and verification authority; the skill discovers and
37
+ invokes only the exact host action emitted for one durable operation.
34
38
  - 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.
35
39
  - 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.
36
40
  - 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).
@@ -46,6 +50,34 @@ Use this section when you want to choose the right OAT skill for a task. If you
46
50
  - Capture or refine ideas: `oat-idea-new` (capture a new idea), `oat-idea-ideate` (resume an existing tracked idea or expand a scratchpad seed — not for blank-slate brainstorms; use `oat-brainstorm` for those), `oat-idea-scratchpad`, `oat-idea-summarize`
47
51
  - Run a project-independent brainstorming conversation: `oat-brainstorm` — entry point with an explicit activation contract. Hard Activation fires only on the `brainstorm` verb ("let's brainstorm", "brainstorm this", "can we brainstorm X", "help me brainstorm X", or `/oat-brainstorm`); ambiguous exploratory phrasing answers conversationally without the banner and offers structured mode only after sustained exploration. Once entered, runs a structured design conversation (one question at a time, 2-3 approaches with a recommendation) and routes to inline / doc-to-path / idea / backlog item / project handoffs based on installed packs. See [Tool Packs](../../cli-utilities/tool-packs.md) for the brainstorm pack details.
48
52
 
53
+ ## Remote host execution loop
54
+
55
+ Use `oat-pjm-remote` only for an explicit remote lifecycle request. Its loop is
56
+ deliberately narrow:
57
+
58
+ 1. Before the first provider-contacting command, inspect currently granted MCP
59
+ or connector descriptions for a semantic and exact-context match.
60
+ 2. If no capable connector is available, inspect an already configured
61
+ provider CLI's live help before the first attempt. Do not install a tool,
62
+ retain its dialect, or switch execution surfaces mid-attempt.
63
+ 3. Construct only bounded provider-neutral capability evidence and pass it to
64
+ the requested command with `--capability-evidence-stdin`. Treat the CLI's
65
+ policy, preview, approval, safety, and durable state as authoritative.
66
+ 4. When the CLI returns `pending` with `externalAction`, execute that exact
67
+ semantic action at most once and submit one bounded,
68
+ sanitized observation with `oat pjm remote operation continue`.
69
+ 5. Continue only when the CLI emits another exact action for the same durable
70
+ operation. Stop on its terminal envelope.
71
+
72
+ The skill cannot broaden the normalized projection, bypass effective policy,
73
+ binding clamps, purpose field grants, hard approval floors, or caller-owned
74
+ authority evidence, read credential values, persist native provider data, or
75
+ declare remote success. A connector result, process exit, or visible remote
76
+ change is only evidence. Success requires an OAT `ok` envelope after
77
+ authoritative read-back.
78
+ See [Remote Project Management](../../cli-utilities/remote-project-management.md)
79
+ for policy, storage, approval, and recovery details.
80
+
49
81
  ## If You Are Trying To...
50
82
 
51
83
  - choose the right skill for a task, stay in this guide page
@@ -122,6 +154,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
122
154
  - `oat-pjm-add-backlog-item`
123
155
  - `oat-pjm-update-repo-reference`
124
156
  - `oat-pjm-review-backlog`
157
+ - `oat-pjm-remote`
125
158
  - `docs-completed-projects-gap-review`
126
159
 
127
160
  === "Research"
@@ -72,9 +72,13 @@ Failure to publish a backlog item or issue does not invalidate a successfully wr
72
72
 
73
73
  Full repository audits use bounded read-only reconnaissance while the root
74
74
  agent retains classification, vetting, prioritization, cross-lane synthesis,
75
- and plan writing. Before launch, the caller loads the durable task classes and
76
- model-selection principles from `subagent-orchestration` plus exactly one
77
- active-provider selection reference.
75
+ and plan writing. Plan writes never move below the caller's model class — a
76
+ parallelized author runs on the caller's model and every plan is
77
+ caller-reviewed before publication or wave composition; the
78
+ `keeps external-plan writes on the caller's model class` case in
79
+ `skills-bundled-docs-contract.test.ts` is the backstop. Before launch, the
80
+ caller loads the durable task classes and model-selection principles from
81
+ `subagent-orchestration` plus exactly one active-provider selection reference.
78
82
 
79
83
  The internal `oat-dispatch-subagents` skill then owns capability checks, live
80
84
  catalog intersection, exact route selection, launch acceptance, recovery, and
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.65",
3
- "docs-config": "0.2.65",
4
- "docs-theme": "0.2.65",
5
- "docs-transforms": "0.2.65"
2
+ "cli": "0.2.67",
3
+ "docs-config": "0.2.67",
4
+ "docs-theme": "0.2.67",
5
+ "docs-transforms": "0.2.67"
6
6
  }
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
7
7
  user-invocable: true
8
8
  metadata:
9
- version: 1.4.3
9
+ version: 1.5.0
10
10
  ---
11
11
 
12
12
  # Create Skill
@@ -69,7 +69,7 @@ If not provided in arguments, ask for:
69
69
  **The context window is a shared resource.** Skills share context with everything else the agent needs. Structure information in three levels:
70
70
 
71
71
  1. **Metadata** (~100 words): Name + description in frontmatter, always loaded
72
- 2. **SKILL.md body** (<5k words): Loads when skill triggers
72
+ 2. **SKILL.md body** (~5,000 tokens): Loads when skill triggers
73
73
  3. **Bundled resources**: Files in `references/`, `scripts/`, `assets/` loaded as-needed
74
74
 
75
75
  **Writing principles:**
@@ -172,11 +172,12 @@ Natural language request that triggers this skill
172
172
  **Frontmatter notes:**
173
173
 
174
174
  - `argument-hint`, `allowed-tools`, `user-invocable`, `context`, `hooks` are Claude Code specific
175
- - Other agents ignore unknown frontmatter fields, so it's safe to include Claude-specific fields everywhere
175
+ - `allowed-tools`: write the value as a **comma-separated** list. The spec's own example is space-delimited and OAT never parses the separator — `validateOatSkills` in `packages/cli/src/validation/skills.ts` only checks that the key is present, and `getToolDetail` in `packages/cli/src/commands/tools/info/index.ts` reads the raw scalar — so this is OAT's authoring convention rather than a runtime contract. Backstop: `it('declares allowed-tools as a comma-separated list in every canonical skill')` in `packages/cli/src/validation/skills.test.ts`
176
+ - The spec defines a fixed field set, and providers differ in which extension fields they read. An unread field is inert rather than guaranteed harmless, so check the dated compatibility section of `references/docs/skills-guide.md` for the per-provider picture before depending on one
176
177
  - `name`: max 64 chars for cross-provider portability (Codex allows 100, but 64 is the spec limit)
177
178
  - `metadata.version`: include valid semver and start new skills at `1.0.0`. The Agent Skills specification puts the version under `metadata`, and OAT resolves `metadata.version` first and the top-level `version` second — `resolveSkillVersion` in `packages/cli/src/commands/shared/frontmatter.ts` owns that order, backstopped by `packages/cli/src/commands/shared/frontmatter.test.ts`
178
- - `version` (top-level): the deprecated alias, still read when `metadata.version` is absent. Do not set both to different values: OAT reports the conflict, skill validation fails on it, and canonical role identity rejects it
179
- - `description`: **single line, ≤ 500 chars** (Codex enforces single-line ≤ 500 chars; spec allows 1024)
179
+ - `version` (top-level): the deprecated alias, still read when `metadata.version` is absent — but a skill whose only version is that alias no longer validates. `validateOatSkills` in `packages/cli/src/validation/skills.ts` reports it as `skill-version-alias` at `severity: 'error'`, so `pnpm oat:validate-skills` fails the skill outright; the pass runs over every skill directory, not just `oat-*`, so an agnostic skill is covered too. Backstop: `it('reports exactly once for a non-oat-* alias-only skill')` in `packages/cli/src/validation/skills.test.ts`. Setting both to different values is the separate `skill-version-conflict` error: OAT reports the conflict, skill validation fails on it, and canonical role identity rejects it. Declare `metadata.version` and leave the alias out
180
+ - `description`: **single line, ≤ 500 chars**. This is OAT's house rule, not a provider requirement: `validateOatSkills` in `packages/cli/src/validation/skills.ts` enforces it only for skills whose directory name starts with `oat-`. For every other skill it is an unenforced authoring convention this repository follows for portability. Backstops in `packages/cli/src/validation/skills.test.ts`: `it('reports description longer than 500 characters')` and `it('does not report a description longer than 500 characters for a non-oat-* skill')`. The spec allows 1024
180
181
  - Bump `metadata.version` on future edits: patch for fixes/clarifications, minor for backward-compatible behavior additions, major for breaking workflow/interface changes
181
182
 
182
183
  **Writing the `description` field:**
@@ -194,7 +195,7 @@ Examples:
194
195
  - Bad: "Reviews code by checking spec compliance, then code quality, then creates PR"
195
196
  - Good: "Use when reviewing code or checking PRs. Systematic quality and security analysis."
196
197
 
197
- Present the plan and wait for user approval before creating files.
198
+ Present the plan and ask once for approval, stating the approval scope: it covers the skill directory, its `SKILL.md`, and the supporting files this plan named, for the rest of this run. Re-ask only if the file set changes. If the user declines, stop before creating any file and report the plan instead.
198
199
 
199
200
  ### Step 4: Create Skill File
200
201
 
@@ -231,18 +232,21 @@ Skills can include supporting files in subdirectories:
231
232
 
232
233
  ### Step 5: Sync and Verify
233
234
 
234
- After creating the skill, run OAT sync to update provider views:
235
+ If the repository uses OAT sync, refresh the provider views for this repository only:
235
236
 
236
237
  ```bash
237
- oat sync
238
+ oat sync --scope project
238
239
  ```
239
240
 
241
+ A bare `oat sync` defaults to `--scope all`, which also rewrites the invoking user's home-scope provider
242
+ directories. `withScopeOption` in `packages/cli/src/commands/shared/scope-option.ts` owns that default, and `it('sync --help matches snapshot')` in `packages/cli/src/commands/help-snapshots.test.ts` is its backstop.
243
+
240
244
  Verify:
241
245
 
242
246
  - File created at `.agents/skills/{skill-name}/SKILL.md`
243
247
  - Frontmatter syntax is valid
244
248
  - Frontmatter includes valid semver `metadata.version:` (new skills start at `1.0.0`)
245
- - Skill appears in `AGENTS.md`
249
+ - Skill resolves through the provider views after a scoped sync — check with `oat tools info {skill-name}` or the provider's own skill list
246
250
  - Examples include both invocation styles
247
251
  - If the skill name starts with `oat-`, run `pnpm oat:validate-skills` and fix any findings
248
252
 
@@ -268,7 +272,7 @@ Provide:
268
272
  - **Context window is a public good**—keep skills lean, challenge every paragraph
269
273
  - Description is the trigger—include "when to use" in frontmatter, not just body
270
274
  - Bump `metadata.version` for edits: patch = fixes/clarifications, minor = backward-compatible additions, major = breaking changes
271
- - Keep SKILL.md **under 500 lines / ~5,000 tokens** (spec constraint)
275
+ - Keep SKILL.md **under 500 lines / ~5,000 tokens** — OAT's authoring budget, not a specification limit; see the dated provider-compatibility section of `references/docs/skills-guide.md` for what each provider documents
272
276
  - Use clear, task-based headings
273
277
  - Include working examples for both invocation styles
274
278
  - Document all arguments with defaults
@@ -289,7 +293,7 @@ Skills that need user decisions (parameter choices, confirmations, disambiguatio
289
293
 
290
294
  Do **not** hard-code a specific Codex question tool name in skill prose unless the runtime contract is guaranteed. Prefer capability-based wording ("structured user-input tooling when available") so the skill remains portable across Codex hosts.
291
295
 
292
- **Claude Code enhancement:** Add `AskUserQuestion` to `allowed-tools` in frontmatter. Claude Code renders these as structured UI prompts with selectable options, headers, and multi-select support. Other providers ignore the field and handle the same instructions as conversational questions.
296
+ **Claude Code enhancement:** Add `AskUserQuestion` to `allowed-tools` in frontmatter. Claude Code renders these as structured UI prompts with selectable options, headers, and multi-select support. Providers that do not read `allowed-tools` handle the same instructions as conversational questions; treat the field as having no effect there rather than as universally supported, and check the dated compatibility matrix in `references/docs/skills-guide.md`.
293
297
 
294
298
  **When to include interactive input:**
295
299
 
@@ -374,32 +378,11 @@ For multi-step skills, print brief progress updates so the user knows what's hap
374
378
 
375
379
  ### Frontmatter Reference
376
380
 
377
- Legend: ✅ supported | ⚠️ provider-specific | 💤 ignored | ❓ unknown
378
-
379
- | Field | Spec | Claude Code | Cursor | Codex CLI | Gemini CLI |
380
- | -------------------------- | --------------- | ----------- | ------ | ----------- | ---------- |
381
- | `name` | ✅ required | ✅ | ✅ | ✅ required | ✅ |
382
- | `description` | ✅ required | ✅ | ✅ | ✅ required | ✅ |
383
- | `license` | ✅ optional | ❓ | ✅ | 💤 | ❓ |
384
- | `compatibility` | ✅ optional | ❓ | ✅ | 💤 | ❓ |
385
- | `metadata` | ✅ optional | ❓ | ✅ | 💤 | ❓ |
386
- | `allowed-tools` | ⚠️ experimental | ✅ | ❓ | 💤 | ❓ |
387
- | `disable-model-invocation` | ❌ | ✅ | ✅ | 💤 | ❓ |
388
- | `user-invocable` | ❌ | ✅ | ❓ | 💤 | ❓ |
389
- | `argument-hint` | ❌ | ✅ | ❓ | 💤 | ❓ |
390
- | `context` / `agent` | ❌ | ✅ | ❌ | 💤 | ❓ |
391
- | `hooks` | ❌ | ✅ | ❌ | 💤 | ❓ |
392
-
393
- **Key takeaway:** `name` + `description` are the only truly portable interface. Codex ignores unknown keys (safe to include Claude fields), so layer tool-specific fields on top of a portable baseline. For the full matrix, see `references/docs/skills-guide.md` (bundled with this skill).
381
+ **Key takeaway:** `name` + `description` are the only truly portable interface. Layer tool-specific fields on top of that baseline, but treat an unread field as inert rather than guaranteed harmless — providers differ in which extension fields they read, and not every provider documents what it does with the rest. The single canonical, dated compatibility matrix lives in `references/docs/skills-guide.md` (bundled with this skill); consult it rather than a copy.
394
382
 
395
383
  ### Detail Level
396
384
 
397
- | Skill Type | Detail Level | Examples |
398
- | --------------------- | ------------ | ------------------------------ |
399
- | Complex workflows | Detailed | docs-new, docs-review |
400
- | Simple command-like | Concise | update-doc-refs, create-ticket |
401
- | Reference/standards | Detailed | repo-documentation |
402
- | Helper (auto-invoked) | Moderate | read-relevant-docs |
385
+ For the detail level each skill type warrants, see `references/skill-template.md`.
403
386
 
404
387
  ## Examples
405
388
 
@@ -428,7 +411,7 @@ I need a skill for running database migrations
428
411
  - [Agent Skills Open Standard](https://agentskills.io) — the spec
429
412
  - [Claude Code Skills](https://code.claude.com/docs/en/skills) — Claude-specific features
430
413
  - [Cursor Skills](https://cursor.com/docs/context/skills) — Cursor-specific features
431
- - [Codex CLI Skills](https://developers.openai.com/codex/skills) — Codex-specific features
414
+ - [Codex CLI Skills](https://learn.chatgpt.com/docs/build-skills) — Codex-specific features
432
415
  - [Gemini CLI Skills](https://geminicli.com/docs/cli/skills/) — Gemini-specific features
433
416
  - [npx skills CLI](https://github.com/vercel-labs/skills) — installing remote/community skills
434
417
  - [Skills best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) — authoring guidance
@@ -439,7 +422,7 @@ I need a skill for running database migrations
439
422
 
440
423
  **Skill not appearing in menu:**
441
424
 
442
- - Run `oat sync` to regenerate provider views
425
+ - Run `oat sync --scope project` to regenerate this repository's provider views
443
426
  - Verify YAML frontmatter syntax is valid
444
427
  - Check that skill name matches directory name
445
428
  - Ensure `user-invocable` is not set to `false` (Claude Code)
@@ -461,7 +444,6 @@ I need a skill for running database migrations
461
444
  Successful skill creation:
462
445
 
463
446
  - ✅ Skill created at `.agents/skills/{name}/SKILL.md`
464
- - ✅ `oat sync` run successfully
465
447
  - ✅ For `oat-*` skills, `pnpm oat:validate-skills` passes
466
448
  - ✅ Frontmatter valid
467
449
  - ✅ Workflow uses "Step" naming