@open-agent-toolkit/cli 0.2.64 → 0.2.66

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 (217) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +19 -1
  3. package/assets/docs/cli-utilities/index.md +3 -0
  4. package/assets/docs/cli-utilities/remote-project-management.md +191 -0
  5. package/assets/docs/contributing/skills.md +15 -5
  6. package/assets/docs/reference/cli-reference.md +12 -1
  7. package/assets/docs/reference/file-locations.md +22 -0
  8. package/assets/docs/reference/oat-directory-structure.md +30 -17
  9. package/assets/docs/reference/troubleshooting.md +44 -0
  10. package/assets/docs/workflows/skills/index.md +33 -0
  11. package/assets/public-package-versions.json +4 -4
  12. package/assets/skills/analyze/SKILL.md +2 -1
  13. package/assets/skills/authoring-docs/SKILL.md +2 -1
  14. package/assets/skills/compare/SKILL.md +2 -1
  15. package/assets/skills/create-agnostic-skill/SKILL.md +2 -1
  16. package/assets/skills/deep-research/SKILL.md +2 -1
  17. package/assets/skills/explainer-kit/SKILL.md +2 -1
  18. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +2 -1
  19. package/assets/skills/oat-agent-instructions-apply/SKILL.md +2 -1
  20. package/assets/skills/oat-brainstorm/SKILL.md +2 -1
  21. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +2 -1
  22. package/assets/skills/oat-dispatch-subagents/SKILL.md +2 -1
  23. package/assets/skills/oat-docs/SKILL.md +2 -1
  24. package/assets/skills/oat-docs-analyze/SKILL.md +2 -1
  25. package/assets/skills/oat-docs-apply/SKILL.md +2 -1
  26. package/assets/skills/oat-docs-authoring/SKILL.md +2 -1
  27. package/assets/skills/oat-docs-bootstrap/SKILL.md +2 -1
  28. package/assets/skills/oat-doctor/SKILL.md +5 -4
  29. package/assets/skills/oat-explainer-kit/SKILL.md +2 -1
  30. package/assets/skills/oat-explainer-kit/scripts/check-core.mjs +322 -2
  31. package/assets/skills/oat-idea-ideate/SKILL.md +2 -1
  32. package/assets/skills/oat-idea-new/SKILL.md +2 -1
  33. package/assets/skills/oat-idea-scratchpad/SKILL.md +2 -1
  34. package/assets/skills/oat-idea-summarize/SKILL.md +2 -1
  35. package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +2 -1
  36. package/assets/skills/oat-pjm-decision/SKILL.md +2 -1
  37. package/assets/skills/oat-pjm-remote/SKILL.md +101 -0
  38. package/assets/skills/oat-pjm-remote/references/external-action-protocol.md +43 -0
  39. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -1
  40. package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +2 -1
  41. package/assets/skills/oat-project-autonomous/SKILL.md +2 -1
  42. package/assets/skills/oat-project-capture/SKILL.md +2 -1
  43. package/assets/skills/oat-project-clear-active/SKILL.md +2 -1
  44. package/assets/skills/oat-project-complete/SKILL.md +2 -1
  45. package/assets/skills/oat-project-design/SKILL.md +2 -1
  46. package/assets/skills/oat-project-discover/SKILL.md +2 -1
  47. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +2 -1
  48. package/assets/skills/oat-project-document/SKILL.md +2 -1
  49. package/assets/skills/oat-project-implement/SKILL.md +2 -1
  50. package/assets/skills/oat-project-import-plan/SKILL.md +2 -1
  51. package/assets/skills/oat-project-lite/SKILL.md +2 -1
  52. package/assets/skills/oat-project-new/SKILL.md +2 -1
  53. package/assets/skills/oat-project-next/SKILL.md +2 -1
  54. package/assets/skills/oat-project-open/SKILL.md +2 -1
  55. package/assets/skills/oat-project-plan/SKILL.md +2 -1
  56. package/assets/skills/oat-project-plan-writing/SKILL.md +2 -1
  57. package/assets/skills/oat-project-pr-final/SKILL.md +2 -1
  58. package/assets/skills/oat-project-pr-progress/SKILL.md +2 -1
  59. package/assets/skills/oat-project-progress/SKILL.md +2 -1
  60. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -1
  61. package/assets/skills/oat-project-quick-start/SKILL.md +2 -1
  62. package/assets/skills/oat-project-reconcile/SKILL.md +2 -1
  63. package/assets/skills/oat-project-retro/SKILL.md +2 -1
  64. package/assets/skills/oat-project-retro-file/SKILL.md +2 -1
  65. package/assets/skills/oat-project-review-provide/SKILL.md +2 -1
  66. package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -1
  67. package/assets/skills/oat-project-review-receive/SKILL.md +2 -1
  68. package/assets/skills/oat-project-review-receive-remote/SKILL.md +2 -1
  69. package/assets/skills/oat-project-revise/SKILL.md +2 -1
  70. package/assets/skills/oat-project-spec/SKILL.md +2 -1
  71. package/assets/skills/oat-project-split/SKILL.md +2 -1
  72. package/assets/skills/oat-project-summary/SKILL.md +2 -1
  73. package/assets/skills/oat-repo-improve/SKILL.md +1 -1
  74. package/assets/skills/oat-repo-knowledge-index/SKILL.md +2 -1
  75. package/assets/skills/oat-repo-maintainability-review/SKILL.md +2 -1
  76. package/assets/skills/oat-review-provide/SKILL.md +2 -1
  77. package/assets/skills/oat-review-provide-remote/SKILL.md +2 -1
  78. package/assets/skills/oat-review-receive/SKILL.md +2 -1
  79. package/assets/skills/oat-review-receive-remote/SKILL.md +2 -1
  80. package/assets/skills/oat-wave-execute/SKILL.md +2 -1
  81. package/assets/skills/oat-wave-program/SKILL.md +2 -1
  82. package/assets/skills/oat-worktree-bootstrap/SKILL.md +2 -1
  83. package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +2 -1
  84. package/assets/skills/oat-wrap-up/SKILL.md +2 -1
  85. package/assets/skills/recon/SKILL.md +2 -1
  86. package/assets/skills/skeptic/SKILL.md +2 -1
  87. package/assets/skills/subagent-orchestration/SKILL.md +2 -1
  88. package/assets/skills/synthesize/SKILL.md +2 -1
  89. package/dist/commands/backlog/new.d.ts +1 -0
  90. package/dist/commands/backlog/new.d.ts.map +1 -1
  91. package/dist/commands/backlog/new.js +3 -1
  92. package/dist/commands/config/index.d.ts +1 -0
  93. package/dist/commands/config/index.d.ts.map +1 -1
  94. package/dist/commands/config/index.js +232 -1
  95. package/dist/commands/pjm/doctor.d.ts +2 -0
  96. package/dist/commands/pjm/doctor.d.ts.map +1 -1
  97. package/dist/commands/pjm/doctor.js +71 -1
  98. package/dist/commands/pjm/index.d.ts +2 -0
  99. package/dist/commands/pjm/index.d.ts.map +1 -1
  100. package/dist/commands/pjm/index.js +3 -0
  101. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts +60 -0
  102. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts.map +1 -0
  103. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.js +151 -0
  104. package/dist/commands/pjm/remote/association.d.ts +27 -0
  105. package/dist/commands/pjm/remote/association.d.ts.map +1 -0
  106. package/dist/commands/pjm/remote/association.js +68 -0
  107. package/dist/commands/pjm/remote/authority.d.ts +210 -0
  108. package/dist/commands/pjm/remote/authority.d.ts.map +1 -0
  109. package/dist/commands/pjm/remote/authority.js +341 -0
  110. package/dist/commands/pjm/remote/batch.d.ts +15 -0
  111. package/dist/commands/pjm/remote/batch.d.ts.map +1 -0
  112. package/dist/commands/pjm/remote/batch.js +126 -0
  113. package/dist/commands/pjm/remote/closeout.d.ts +69 -0
  114. package/dist/commands/pjm/remote/closeout.d.ts.map +1 -0
  115. package/dist/commands/pjm/remote/closeout.js +208 -0
  116. package/dist/commands/pjm/remote/create-binding.d.ts +62 -0
  117. package/dist/commands/pjm/remote/create-binding.d.ts.map +1 -0
  118. package/dist/commands/pjm/remote/create-binding.js +126 -0
  119. package/dist/commands/pjm/remote/credential-safety.d.ts +7 -0
  120. package/dist/commands/pjm/remote/credential-safety.d.ts.map +1 -0
  121. package/dist/commands/pjm/remote/credential-safety.js +21 -0
  122. package/dist/commands/pjm/remote/discussion.d.ts +49 -0
  123. package/dist/commands/pjm/remote/discussion.d.ts.map +1 -0
  124. package/dist/commands/pjm/remote/discussion.js +124 -0
  125. package/dist/commands/pjm/remote/doctor.d.ts +22 -0
  126. package/dist/commands/pjm/remote/doctor.d.ts.map +1 -0
  127. package/dist/commands/pjm/remote/doctor.js +380 -0
  128. package/dist/commands/pjm/remote/external-action.d.ts +208 -0
  129. package/dist/commands/pjm/remote/external-action.d.ts.map +1 -0
  130. package/dist/commands/pjm/remote/external-action.js +367 -0
  131. package/dist/commands/pjm/remote/host-execution.d.ts +28 -0
  132. package/dist/commands/pjm/remote/host-execution.d.ts.map +1 -0
  133. package/dist/commands/pjm/remote/host-execution.js +63 -0
  134. package/dist/commands/pjm/remote/index.d.ts +41 -0
  135. package/dist/commands/pjm/remote/index.d.ts.map +1 -0
  136. package/dist/commands/pjm/remote/index.js +280 -0
  137. package/dist/commands/pjm/remote/jira-adf.d.ts +35 -0
  138. package/dist/commands/pjm/remote/jira-adf.d.ts.map +1 -0
  139. package/dist/commands/pjm/remote/jira-adf.js +169 -0
  140. package/dist/commands/pjm/remote/lifecycle.d.ts +163 -0
  141. package/dist/commands/pjm/remote/lifecycle.d.ts.map +1 -0
  142. package/dist/commands/pjm/remote/lifecycle.js +224 -0
  143. package/dist/commands/pjm/remote/local-projection.d.ts +30 -0
  144. package/dist/commands/pjm/remote/local-projection.d.ts.map +1 -0
  145. package/dist/commands/pjm/remote/local-projection.js +95 -0
  146. package/dist/commands/pjm/remote/managed-markdown.d.ts +30 -0
  147. package/dist/commands/pjm/remote/managed-markdown.d.ts.map +1 -0
  148. package/dist/commands/pjm/remote/managed-markdown.js +128 -0
  149. package/dist/commands/pjm/remote/migrate.d.ts +14 -0
  150. package/dist/commands/pjm/remote/migrate.d.ts.map +1 -0
  151. package/dist/commands/pjm/remote/migrate.js +32 -0
  152. package/dist/commands/pjm/remote/operation-state.d.ts +15 -0
  153. package/dist/commands/pjm/remote/operation-state.d.ts.map +1 -0
  154. package/dist/commands/pjm/remote/operation-state.js +143 -0
  155. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts +25 -0
  156. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts.map +1 -0
  157. package/dist/commands/pjm/remote/outbound-projection-safety.js +99 -0
  158. package/dist/commands/pjm/remote/output.d.ts +60 -0
  159. package/dist/commands/pjm/remote/output.d.ts.map +1 -0
  160. package/dist/commands/pjm/remote/output.js +48 -0
  161. package/dist/commands/pjm/remote/preview.d.ts +88 -0
  162. package/dist/commands/pjm/remote/preview.d.ts.map +1 -0
  163. package/dist/commands/pjm/remote/preview.js +154 -0
  164. package/dist/commands/pjm/remote/provider-conformance.d.ts +13 -0
  165. package/dist/commands/pjm/remote/provider-conformance.d.ts.map +1 -0
  166. package/dist/commands/pjm/remote/provider-conformance.js +37 -0
  167. package/dist/commands/pjm/remote/provider.d.ts +57 -0
  168. package/dist/commands/pjm/remote/provider.d.ts.map +1 -0
  169. package/dist/commands/pjm/remote/provider.js +28 -0
  170. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts +46 -0
  171. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts.map +1 -0
  172. package/dist/commands/pjm/remote/providers/github-publication-safety.js +126 -0
  173. package/dist/commands/pjm/remote/providers/github.d.ts +207 -0
  174. package/dist/commands/pjm/remote/providers/github.d.ts.map +1 -0
  175. package/dist/commands/pjm/remote/providers/github.js +1456 -0
  176. package/dist/commands/pjm/remote/providers/jira.d.ts +245 -0
  177. package/dist/commands/pjm/remote/providers/jira.d.ts.map +1 -0
  178. package/dist/commands/pjm/remote/providers/jira.js +1650 -0
  179. package/dist/commands/pjm/remote/providers/linear.d.ts +182 -0
  180. package/dist/commands/pjm/remote/providers/linear.d.ts.map +1 -0
  181. package/dist/commands/pjm/remote/providers/linear.js +1289 -0
  182. package/dist/commands/pjm/remote/purpose-policy.d.ts +29 -0
  183. package/dist/commands/pjm/remote/purpose-policy.d.ts.map +1 -0
  184. package/dist/commands/pjm/remote/purpose-policy.js +118 -0
  185. package/dist/commands/pjm/remote/reconcile.d.ts +42 -0
  186. package/dist/commands/pjm/remote/reconcile.d.ts.map +1 -0
  187. package/dist/commands/pjm/remote/reconcile.js +101 -0
  188. package/dist/commands/pjm/remote/resolution.d.ts +122 -0
  189. package/dist/commands/pjm/remote/resolution.d.ts.map +1 -0
  190. package/dist/commands/pjm/remote/resolution.js +243 -0
  191. package/dist/commands/pjm/remote/schema.d.ts +9309 -0
  192. package/dist/commands/pjm/remote/schema.d.ts.map +1 -0
  193. package/dist/commands/pjm/remote/schema.js +1503 -0
  194. package/dist/commands/pjm/remote/service.d.ts +20 -0
  195. package/dist/commands/pjm/remote/service.d.ts.map +1 -0
  196. package/dist/commands/pjm/remote/service.js +5121 -0
  197. package/dist/commands/pjm/remote/shared-storage.d.ts +36 -0
  198. package/dist/commands/pjm/remote/shared-storage.d.ts.map +1 -0
  199. package/dist/commands/pjm/remote/shared-storage.js +110 -0
  200. package/dist/commands/pjm/remote/snapshot.d.ts +32 -0
  201. package/dist/commands/pjm/remote/snapshot.d.ts.map +1 -0
  202. package/dist/commands/pjm/remote/snapshot.js +140 -0
  203. package/dist/commands/pjm/remote/storage-locator.d.ts +29 -0
  204. package/dist/commands/pjm/remote/storage-locator.d.ts.map +1 -0
  205. package/dist/commands/pjm/remote/storage-locator.js +62 -0
  206. package/dist/commands/pjm/remote/store.d.ts +85 -0
  207. package/dist/commands/pjm/remote/store.d.ts.map +1 -0
  208. package/dist/commands/pjm/remote/store.js +553 -0
  209. package/dist/commands/pjm/remote/verification.d.ts +40 -0
  210. package/dist/commands/pjm/remote/verification.d.ts.map +1 -0
  211. package/dist/commands/pjm/remote/verification.js +100 -0
  212. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  213. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  214. package/dist/config/oat-config.d.ts +26 -0
  215. package/dist/config/oat-config.d.ts.map +1 -1
  216. package/dist/config/oat-config.js +186 -2
  217. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.2.64"
3
+ "oatVersion": "0.2.66"
4
4
  }
@@ -15,6 +15,7 @@ For the deep file-by-file reference, see:
15
15
  - [File Locations](../reference/file-locations.md)
16
16
  - [`.oat` Directory Structure](../reference/oat-directory-structure.md)
17
17
  - [Sync Config (`.oat/sync/config.json`)](../provider-sync/config.md)
18
+ - [Remote Project Management](remote-project-management.md)
18
19
 
19
20
  ## The five config surfaces
20
21
 
@@ -51,7 +52,7 @@ What each command is for:
51
52
  - `oat config list` shows the currently resolved command-surface values for shared and repo-local keys.
52
53
  - `oat config get <key>` reads one supported key value.
53
54
  - `oat config set <key> <value>` updates supported shared or repo-local keys.
54
- - `oat config unset <key>` removes a supported key from one surface, using the same `--shared`/`--local`/`--user` flags and per-key restrictions as `set`. The resolved value then falls back to the next surface down, or to the built-in default. A key the surface does not hold exits 0 as already-unset (`--json` adds a `removed` boolean to tell the two apart). Unknown keys, lifecycle state, `tools.*` pack intent, the `workflow.dispatchCeiling` aggregate read views, and environment-shadowed keys with nothing stored are refused with exit 1 — see [CLI Reference](../reference/cli-reference.md#oat-config-surface-flags).
55
+ - `oat config unset <key>` removes a supported key from one surface, using the same `--shared`/`--local`/`--user` flags and per-key restrictions as `set`. The resolved value then falls back to the next surface down, or to the built-in default. A key the surface does not hold exits 0 as already-unset (`--json` adds a `removed` boolean to tell the two apart). Unknown keys, lifecycle state, `tools.*` pack intent, aggregate read views, read-only remote-policy structure, and environment-shadowed keys with nothing stored are refused with exit 1 — see [CLI Reference](../reference/cli-reference.md#oat-config-surface-flags).
55
56
  - `oat config describe` shows the supported config catalog across shared repo, repo-local, user, and sync/provider surfaces.
56
57
  - `oat config describe <key>` shows file, scope, default, mutability, owning command, and description for one key.
57
58
 
@@ -101,10 +102,27 @@ Common keys in `.oat/config.json`:
101
102
  - `archive.awsProfile` — optional AWS named profile forwarded as `AWS_PROFILE` to every `aws` invocation in archive flows
102
103
  - `archive.awsRegion` — optional AWS region forwarded as `AWS_REGION` to every `aws` invocation in archive flows
103
104
  - `tools.<pack>` — project-scope intent for a bundled tool pack (`true` or absent)
105
+ - `pjm.remote.storage.state` — `local` by default; `shared` requires an
106
+ explicit preview and fresh approval and is unavailable to local projects
107
+ - `pjm.remote.policy.description` — `none`, `managed-section`, or `replace`;
108
+ the default is `none`
109
+ - `pjm.remote.policy.authority.*` — repository defaults and operation-specific
110
+ authority for remote creates, field updates, transitions, annotations,
111
+ deletion, relink, detach, and recreate; the default is `read-only`
112
+ - `pjm.remote.policy.providers.<provider>.*` — optional GitHub, Linear, or Jira
113
+ replacement policy; its operation override or default may broaden the
114
+ repository result before later restrictions apply
104
115
  - `pjm.initialized` / `pjm.schemaVersion` — explicit repository PJM adoption written by `oat pjm init`
105
116
  - `workflow.gates.skills` / `workflow.gates.execTargets` — per-skill gates and cross-runtime exec targets; manage with `oat gate`
106
117
  - `workflow.gateTimeouts.code` / `workflow.gateTimeouts.artifact` — default review budgets in milliseconds
107
118
 
119
+ Remote authority resolves the repository operation override, repository
120
+ default, or built-in read-only fallback first. Matching provider policy replaces
121
+ that result. Binding defaults and operation restrictions then clamp authority,
122
+ and purpose field grants intersect to narrow outbound fields. No configured
123
+ layer bypasses hard approval floors or current caller-owned authority evidence;
124
+ missing, stale, or mismatched evidence fails closed.
125
+
108
126
  Tool-pack intent example:
109
127
 
110
128
  ```bash
@@ -14,6 +14,7 @@ Use this section when you want bootstrap guidance, tool-pack lifecycle details,
14
14
  - [CLI Bootstrap](bootstrap.md) - Foundational `oat init` guidance outside provider-sync-specific onboarding.
15
15
  - [Tool Packs and Installed Assets](tool-packs.md) - Bundled packs and `oat tools` lifecycle commands.
16
16
  - [Configuration](configuration.md) - OAT configuration guidance across shared, local, user, and provider-sync surfaces.
17
+ - [Remote Project Management](remote-project-management.md) - Provider-neutral remote bindings, policy, previews, approvals, storage, and recovery.
17
18
  - [Config and Local State](config-and-local-state.md) - Utility command groups for config, local state, diagnostics, and related inspection flows.
18
19
  - [Project Log](project-log.md) - Append-only project observations, synthesis, inspection, and durable roll-up.
19
20
  - [Backlog Lifecycle](backlog-lifecycle.md) - Backlog item states, atomic close-out with `oat backlog archive`, and lifecycle drift detection in `oat pjm doctor`.
@@ -51,6 +52,7 @@ Use CLI Utilities when:
51
52
  - Use [CLI Bootstrap](bootstrap.md) when you are starting with `oat init`.
52
53
  - Go to [Tool Packs](tool-packs.md) when you are managing bundled OAT packs and installed assets.
53
54
  - Read [Configuration](configuration.md) for config semantics, or [Config and Local State](config-and-local-state.md) for inspection and diagnostic command groups.
55
+ - Read [Remote Project Management](remote-project-management.md) before binding local planning records to GitHub, Linear, or Jira.
54
56
  - Use [Workflow Gates](workflow-gates.md) when you want a skill to run a configured final command before it is considered done.
55
57
 
56
58
  ## Common Tasks
@@ -66,5 +68,6 @@ Use CLI Utilities when:
66
68
  - [CLI Bootstrap](bootstrap.md) - Foundational `oat init` guidance outside provider-sync-specific onboarding.
67
69
  - [Tool Packs](tool-packs.md) - Bundled packs and `oat tools` lifecycle commands.
68
70
  - [Configuration](configuration.md) - OAT configuration guidance.
71
+ - [Remote Project Management](remote-project-management.md) - Safely operate explicit remote planning-record bindings.
69
72
  - [Config and Local State](config-and-local-state.md) - Utility command groups for config, local state, diagnostics, and related inspection flows.
70
73
  - [Workflow Gates](workflow-gates.md) - Per-skill final commands and cross-runtime review dispatch.
@@ -0,0 +1,191 @@
1
+ ---
2
+ title: Remote Project Management
3
+ description: Safely bind OAT planning records to GitHub, Linear, or Jira through provider-neutral host capabilities.
4
+ ---
5
+
6
+ # Remote Project Management
7
+
8
+ Remote project management connects an OAT backlog item or project to a remote
9
+ GitHub, Linear, or Jira record. OAT owns policy, previews, approvals, durable
10
+ operation state, and authoritative read-back verification. The host agent owns
11
+ live execution capability discovery.
12
+
13
+ Remote management is deliberately explicit. It does not turn every plan task
14
+ into a remote issue, run background synchronization, or treat a provider result
15
+ as proof of success.
16
+
17
+ ## Prerequisite
18
+
19
+ Confirm that file-backed project management is adopted before using a remote
20
+ command:
21
+
22
+ ```bash
23
+ oat pjm doctor --json
24
+ ```
25
+
26
+ Continue only when `adoption.state` is `declared` or `inferred-legacy`. Run
27
+ `oat pjm init` first when adoption is absent or only partially initialized.
28
+
29
+ ## Lifecycle operations
30
+
31
+ The command family is `oat pjm remote`:
32
+
33
+ ```bash
34
+ oat pjm remote intake github:example/repository#123 --to-backlog BL-123 --capability-evidence-stdin --json
35
+ oat pjm remote publish --binding rb_example --capability-evidence-stdin --json
36
+ oat pjm remote refresh --binding rb_example --capability-evidence-stdin --json
37
+ oat pjm remote reconcile --binding rb_example --capability-evidence-stdin --json
38
+ oat pjm remote closeout --project .oat/projects/shared/example --capability-evidence-stdin --json
39
+ oat pjm remote discussion --binding rb_example --limit 20 --capability-evidence-stdin --json
40
+ oat pjm remote resolve relink --binding rb_example github:example/repository#456 --capability-evidence-stdin --json
41
+ oat pjm remote resolve detach --binding rb_example --json
42
+ oat pjm remote resolve recreate --binding rb_example --capability-evidence-stdin --json
43
+ oat pjm remote doctor --json
44
+ oat pjm remote migrate --check --json
45
+ ```
46
+
47
+ Before each provider-contacting example, the host discovers live capability and
48
+ supplies only its bounded provider-neutral evidence on standard input. Mutation
49
+ commands also require the current caller-owned authority evidence requested by
50
+ their live help.
51
+
52
+ - `intake` reads one remote record into a selected local backlog target and
53
+ creates the binding.
54
+ - `publish` creates or updates one explicitly selected binding.
55
+ - `refresh` updates retained snapshots without writing remotely.
56
+ - `reconcile` classifies local, remote, and baseline changes before proposing
57
+ any write.
58
+ - `closeout` prepares a reviewed batch while preserving independent per-binding
59
+ outcomes.
60
+ - `discussion` returns one bounded, sanitized page as non-persisted evidence.
61
+ - `resolve relink`, `detach`, and `recreate` handle anomalous bindings without
62
+ discarding identity history or retrying an uncertain create blindly.
63
+ - `doctor` and `migrate` diagnose or repair local records without contacting a
64
+ provider.
65
+
66
+ Use `--help` on the live command for current options. JSON output uses one
67
+ versioned envelope and may return a nonzero shell exit for a safely persisted
68
+ `pending`, `needs-review`, `partial`, `uncertain`, or `blocked` outcome.
69
+
70
+ ## Repository-owned policy
71
+
72
+ Remote policy lives only in the shared repository config at `.oat/config.json`.
73
+ The safe defaults are local operational state, no description publication, and
74
+ read-only authority:
75
+
76
+ ```json
77
+ {
78
+ "pjm": {
79
+ "remote": {
80
+ "schemaVersion": 1,
81
+ "storage": { "state": "local" },
82
+ "policy": {
83
+ "description": "none",
84
+ "authority": { "default": "read-only" }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ Use the config command instead of editing nested values by hand:
92
+
93
+ ```bash
94
+ oat config set pjm.remote.policy.description managed-section --shared
95
+ oat config set pjm.remote.policy.authority.operations.update-fields user-approved --shared
96
+ oat config set pjm.remote.policy.providers.github.authority.operations.create user-approved --shared
97
+ ```
98
+
99
+ Description modes are `none`, `managed-section`, and `replace`. Authority modes
100
+ are `read-only`, `user-approved`, `user-authorized`, and `autonomous`.
101
+ For each operation, OAT resolves the repository operation override, then its
102
+ repository default, then the built-in read-only fallback. A matching provider
103
+ operation override or provider default replaces that repository result and may
104
+ broaden it. Binding defaults and operation restrictions then clamp authority,
105
+ while purpose field grants intersect to narrow the outbound fields. Provider
106
+ configuration never bypasses hard approval floors or the requirement for
107
+ current caller-owned authority evidence; missing, stale, or mismatched evidence
108
+ fails closed. Autonomous configuration is not a background grant.
109
+
110
+ ## Live host capability boundary
111
+
112
+ At operation time, the host agent inspects currently granted MCP or connector
113
+ descriptions for the requested semantic operation and exact account, workspace,
114
+ site, or repository context. If no capable connector is available, it may
115
+ inspect the live help of an already configured provider CLI before the first
116
+ provider-contacting command.
117
+
118
+ OAT does not store provider tool names, native schemas, captured catalogs,
119
+ executable names, flags, or CLI dialects. The host returns only bounded,
120
+ sanitized capability evidence through `--capability-evidence-stdin`. It must not
121
+ install tools, request credential values, or switch execution surfaces after an
122
+ attempt begins. The CLI may then emit one provider-neutral `externalAction`.
123
+ The host executes that exact action at most once and returns one bounded
124
+ observation with `oat pjm remote operation continue`.
125
+
126
+ ## Content and outbound safety
127
+
128
+ Inbound provider text is retained only through an allowlist of core fields and
129
+ adapter-approved extensions. If a retained text field triggers a conservative
130
+ sensitive-content signal, OAT suppresses that whole field and marks the
131
+ snapshot incomplete. This is a bounded field-safety rule, not general DLP or
132
+ credential-value parsing.
133
+
134
+ Every remote create or update consumes only an explicit normalized projection.
135
+ The universal provider-neutral pre-write gate evaluates that projection before
136
+ preview, approval, action, and authoritative read-back. It never scans the
137
+ repository, worktree, Git history, or arbitrary files for secrets. Missing,
138
+ stale, failed, or blocked safety evidence prevents execution.
139
+
140
+ ## Previews, approval floors, and uncertainty
141
+
142
+ Mutation-capable commands persist and return a preview before execution. The
143
+ preview digest binds the target, normalized fields, remote revision,
144
+ capability, safety result, and effective policy. If any load-bearing input
145
+ changes, the approval is stale.
146
+
147
+ Fresh approval is always required for complete description replacement,
148
+ relink, detach, recreate, destructive operations, and promotion to shared
149
+ operational storage. `user-approved` authority also requires applying the exact
150
+ persisted preview. Higher configured authority cannot bypass those floors.
151
+
152
+ The host submits a bounded observation with `oat pjm remote operation continue`.
153
+ Only an OAT `ok` envelope after authoritative read-back means success. A
154
+ connector response, process exit, or visible remote change is evidence rather
155
+ than a verdict. If a create or update is uncertain, do not retry it blindly;
156
+ use the recovery guidance in the envelope so OAT can search, relink, recreate,
157
+ or reconcile without producing duplicates.
158
+
159
+ ## Storage and worktrees
160
+
161
+ Portable binding metadata follows its backlog or project owner. Shared backlog
162
+ metadata lives under `.oat/repo/pjm/remote/bindings`; project metadata lives
163
+ under that project's `remote/bindings` directory. Local projects keep their
164
+ portable metadata in the local operational store.
165
+
166
+ Operational snapshots, journals, batches, and receipts default to a
167
+ repository-fingerprinted directory under the Git common directory:
168
+ `.git/oat/pjm-remote/<repository-fingerprint>/`. All linked worktrees for one
169
+ repository therefore share the same local operational state, while another
170
+ clone gets its own store.
171
+
172
+ Shared operational storage is opt-in and may expose remote planning content to
173
+ everyone with repository access. It requires a persisted preview and fresh
174
+ approval, and it is rejected for local projects. Preview the exact proposed
175
+ paths through `oat pjm remote storage shared --help` before applying them.
176
+
177
+ ## Offline behavior
178
+
179
+ OAT can inspect portable bindings, the bounded local snapshot, journals,
180
+ receipts, and pending recovery instructions while offline. `remote doctor` and
181
+ `migrate` are local-only. Provider refresh, publication, reconciliation writes,
182
+ and authoritative verification remain pending or blocked until matching live
183
+ capability evidence is available; offline state never fabricates remote
184
+ freshness or success.
185
+
186
+ ## Related references
187
+
188
+ - [Configuration](configuration.md)
189
+ - [CLI Reference](../reference/cli-reference.md)
190
+ - [File Locations](../reference/file-locations.md)
191
+ - [Troubleshooting](../reference/troubleshooting.md)
@@ -204,9 +204,14 @@ resolution. `resolveSkillVersion` in
204
204
  runtime helper and the validators cannot disagree.
205
205
 
206
206
  The top-level `version` field remains supported as a deprecated alias. Every
207
- bundled skill still uses it today, so `pnpm oat:validate-skills` reports each
208
- one as a non-blocking warning; the value is still read, and nothing breaks.
209
- Migrating the bundled skills is tracked separately.
207
+ bundled skill now declares `metadata.version` and carries no top-level
208
+ `version`, so `pnpm oat:validate-skills` reports no alias warnings on the
209
+ bundled tree. The alias is retained for third-party skills installed from
210
+ packs, which may still carry it; it retires on the schedule recorded in
211
+ `DR-260908-bundled-skills-declare` — the warning becomes an error in the first
212
+ release after 0.2.65 that changes the validator, and the resolver's top-level
213
+ read is removed one release after that error has produced no findings on the
214
+ bundled tree.
210
215
 
211
216
  A skill that carries both fields with different values is a conflict. The
212
217
  resolver reports the `metadata.version` value together with the conflict, and
@@ -214,7 +219,12 @@ the callers that must not guess act on it: validation reports an error rather
214
219
  than silently picking one, and canonical role resolution treats the identity as
215
220
  invalid. The runtime version readers still return the `metadata.version` value,
216
221
  so an installed-versus-bundled comparison keeps working while the conflict is
217
- being fixed. Carrying both with the _same_ value is accepted.
222
+ being fixed. Carrying both with the _same_ value resolves without a conflict and
223
+ without an alias warning, because `metadata.version` wins. A bundled skill must
224
+ still carry `metadata.version` alone: the corpus sweep in
225
+ `packages/cli/src/validation/skills.test.ts` fails on any column-0 `version:`
226
+ line under `.agents/skills`, which is the only check that catches the
227
+ same-value case.
218
228
 
219
229
  ### The version is gated
220
230
 
@@ -227,7 +237,7 @@ resolved version, so it enforces the bump whether the skill declares
227
237
  of Done) and in CI; a changed skill whose version matches `origin/main` fails
228
238
  the gate. The deprecation warning above is deliberately not part of that gate:
229
239
  `check:skill-bumps` fails on any finding it receives, so an alias warning
230
- routed through it would fail every changed skill until the migration lands.
240
+ routed through it would fail every changed skill that still carried one.
231
241
 
232
242
  ## Practical Authoring Flow
233
243
 
@@ -14,6 +14,7 @@ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oa
14
14
  - [CLI Bootstrap](../cli-utilities/bootstrap.md) - Bootstrap a repo with `oat init`, guided setup, and initial provider adoption.
15
15
  - [Tool Packs](../cli-utilities/tool-packs.md) - Install, update, inspect, migrate, and remove bundled OAT skills and agents at project or user scope.
16
16
  - [Config and Local State](../cli-utilities/config-and-local-state.md) - Config, backlog, local paths, diagnostics, and related utility commands.
17
+ - [Remote Project Management](../cli-utilities/remote-project-management.md) - Explicit remote bindings, policy, host handoffs, and recovery.
17
18
  - [Workflow Gates](../cli-utilities/workflow-gates.md) - Per-skill final commands, review gates, and cross-runtime prompt dispatch.
18
19
  - [Docs Tooling Commands](../docs-tooling/commands.md) - Docs app scaffolding, migration, index generation, and nav sync.
19
20
  - [Provider Sync](../provider-sync/index.md) - Sync behavior, provider capabilities, config, and drift management.
@@ -43,6 +44,7 @@ The first practical expansion path is to keep improving the existing owners: [Do
43
44
  | `oat init` | Bootstrap canonical OAT directories, sync config, optional hooks, and guided setup. | [CLI Bootstrap](../cli-utilities/bootstrap.md) |
44
45
  | `oat tools ...` | Install, inspect, update, remove, and migrate bundled OAT tool packs and assets across project and user scope. | [Tool Packs](../cli-utilities/tool-packs.md) |
45
46
  | `oat pjm ...` | Adopt PJM for a repository and record it (`init`), run read-only adoption and reference diagnostics (`doctor`), and migrate legacy layouts to `pjm/` + `reference/` (`migrate`). Adoption is separate from pack placement. | [Install vs. initialize](../cli-utilities/tool-packs.md#install-vs-initialize) |
47
+ | `oat pjm remote ...` | Intake, publish, refresh, reconcile, close out, inspect discussion, resolve anomalies, diagnose, migrate, and continue durable host actions for explicit remote bindings. | [Remote Project Management](../cli-utilities/remote-project-management.md) |
46
48
  | `oat decision ...` | Create, index, and migrate file-per-record repo decisions under `reference/decisions/` (`init`, `new`, `regenerate-index`, `migrate`). | [Config and Local State](../cli-utilities/config-and-local-state.md#oat-decision-) |
47
49
  | `oat backlog ...` / `oat local ...` | File-backed backlog helpers, local path sync, and local-only operational support. | [Config and Local State](../cli-utilities/config-and-local-state.md) |
48
50
  | `oat config ...` / `oat instructions ...` | Config discovery, source-aware config dumps, supported mutations, and instruction-integrity helpers. | [Config and Local State](../cli-utilities/config-and-local-state.md) |
@@ -134,6 +136,12 @@ Notable commands introduced in the current CLI surface:
134
136
  never converted into a `recorded-absent` row or pull guidance.
135
137
  - `oat tools migrate --pack <pack> --from <scope> --to <scope>` - move one installed pack between project and user scope. Always previews first, installs and re-inventories the destination before touching the source, and offers source removal only after the destination is verified complete. Declining or running non-interactively leaves the pack installed at both scopes rather than failing. `--dry-run` stops after the preview; there is no force flag. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-migrate).
136
138
  - `oat pjm doctor --json` - read-only repository PJM diagnostics whose result carries an additive `adoption` object (`state` of `declared` | `inferred-legacy` | `partial-initialization` | `none`, `repoRoot`, and `recovery`). This, not `oat tools has project-management`, is the check that answers whether _this repository_ adopted PJM.
139
+ - `oat pjm remote ... --json` - operate one explicit provider-neutral binding.
140
+ The family includes `intake`, `publish`, `refresh`, `reconcile`, `closeout`,
141
+ `discussion`, `resolve`, `doctor`, `migrate`, `storage`, and
142
+ `operation continue`. An `ok` envelope exits 0, a system `failed` envelope exits 2, and
143
+ every safely persisted nonterminal or blocked status exits 1. A `pending`
144
+ envelope with `externalAction` is a durable host handoff, not remote success.
137
145
  - `oat config dump --json` - merged config with source attribution
138
146
  - `oat project status --json` - full parsed state for the active tracked project. **Stable contract for skills:** the JSON output is a typed read interface for OAT skills; the field set consumed by migrated skills is locked by `MIGRATED_FIELDS` in `packages/cli/src/commands/project/status.test.ts`. Removing or renaming any of `project.{name, path, phase, phaseStatus, workflowMode, docsUpdated, lastCommit, prStatus, prUrl}` is a breaking change and will fail the contract test.
139
147
  - `oat project status --field <path>` - print one arbitrary dot-path field from the same status payload, e.g. `project.workflowMode` or `project.timestamps.stateUpdated`. Missing/null fields print `null`; object and array fields print compact JSON.
@@ -171,12 +179,15 @@ Per-key restrictions apply identically to `set` and `unset`: structural keys can
171
179
 
172
180
  `oat config unset <key>` removes the key from the selected surface and prunes any parent object it empties, so the resolved value falls back through the remaining surfaces to the built-in default. Removing a key the surface does not hold is not an error: it reports an already-unset outcome and exits 0. With `--json` the envelope adds a `removed` boolean, which is the machine-readable way to tell a real removal from an already-unset no-op, since both exit 0. A stored value that fails validation is still removed, matching `oat config set`, which repairs the same file.
173
181
 
174
- `unset` refuses five classes of key, each with exit code 1:
182
+ Remote settings under `pjm.remote.*` remain shared-only. Removing a mutable leaf preserves sibling settings and the required empty `policy` object, if necessary, so the remaining remote configuration stays readable. Explicit defaults are removed from disk rather than silently written back by normalization; effective values still use fail-closed defaults. Remote policy must pass strict validation before removal.
183
+
184
+ `unset` refuses six classes of key, each with exit code 1:
175
185
 
176
186
  - **Unknown keys**, including keys OAT reads but does not expose in the `oat config` catalog (`documentation.index`). These are not removable by any `oat config` command.
177
187
  - **Lifecycle state** (`activeProject`, `lastPausedProject`) — cleared with `oat config set <key> ''` instead.
178
188
  - **Pack intent** (`tools.*`) — removed with `oat tools remove --pack <pack> --scope project`, which also removes the installed pack files. Clearing the intent alone would leave them behind.
179
189
  - **Aggregate read views** (`workflow.dispatchCeiling`, `workflow.dispatchCeiling.providers`) — these are assembled for `get` from the leaf keys and are not stored as such. Unset `workflow.dispatchCeiling.preset` or `workflow.dispatchCeiling.providers.<provider>` instead.
190
+ - **Read-only remote-policy structure** (`pjm.remote`, `pjm.remote.policy`, `pjm.remote.schemaVersion`) — unset a documented mutable child key instead; removing the complete policy or its schema discriminator is not supported.
180
191
  - **Environment-shadowed keys with nothing stored on the target surface** — when `OAT_PROJECTS_ROOT`, `OAT_PROJECTS_DEFAULT_SCOPE`, or `OAT_WORKTREES_ROOT` supplies the effective value and the surface holds nothing to remove, clear the environment variable in your shell. When the surface _does_ hold a stored value, `unset` removes it (as `set` would rewrite it) and warns that the override still supplies the effective value.
181
192
 
182
193
  ## `workflow.*` preference keys
@@ -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
@@ -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"
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.64",
3
- "docs-config": "0.2.64",
4
- "docs-theme": "0.2.64",
5
- "docs-transforms": "0.2.64"
2
+ "cli": "0.2.66",
3
+ "docs-config": "0.2.66",
4
+ "docs-theme": "0.2.66",
5
+ "docs-transforms": "0.2.66"
6
6
  }
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: analyze
3
- version: 0.2.0
4
3
  description: Multi-angle analysis of existing artifacts, codebases, documents, or systems. Examines what you have from six analysis angles and produces structured findings with prioritized recommendations.
5
4
  argument-hint: 'target [--context path]'
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Glob, Grep, Bash, WebSearch, WebFetch, AskUserQuestion, Agent, mcp__*
7
+ metadata:
8
+ version: 0.2.1
8
9
  ---
9
10
 
10
11
  # /analyze
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: authoring-docs
3
- version: 1.0.0
4
3
  description: Use when creating, restructuring, migrating, auditing, or reviewing technical documentation for software projects. Provides evidence-first, provider-portable Markdown authoring standards.
5
4
  argument-hint: '[docs task or target path]'
6
5
  disable-model-invocation: false
7
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
7
  user-invocable: true
8
+ metadata:
9
+ version: 1.0.1
9
10
  ---
10
11
 
11
12
  # Authoring Docs
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: compare
3
- version: 0.1.1
4
3
  description: Domain-aware comparative analysis with clear recommendations. Compares options across auto-detected or user-specified dimensions and produces a qualitative assessment with a clear winner.
5
4
  argument-hint: 'item1 item2 [item3...] [--save] [--context path] [--dimensions "dim1, dim2, ..."]'
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Glob, Grep, Bash, WebSearch, WebFetch, AskUserQuestion, Agent, mcp__*
7
+ metadata:
8
+ version: 0.1.2
8
9
  ---
9
10
 
10
11
  # /compare