@unbrained/pm-cli 2026.5.12 → 2026.5.18

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 (407) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/AGENTS.md +78 -457
  3. package/CHANGELOG.md +22 -0
  4. package/CONTRIBUTING.md +1 -0
  5. package/PRD.md +7 -28
  6. package/README.md +8 -14
  7. package/dist/cli/argv-utils.js +4 -1
  8. package/dist/cli/argv-utils.js.map +1 -1
  9. package/dist/cli/bootstrap-args.js +4 -1
  10. package/dist/cli/bootstrap-args.js.map +1 -1
  11. package/dist/cli/commander-usage.js +32 -1
  12. package/dist/cli/commander-usage.js.map +1 -1
  13. package/dist/cli/commands/activity.js +23 -5
  14. package/dist/cli/commands/activity.js.map +1 -1
  15. package/dist/cli/commands/aggregate.js +5 -2
  16. package/dist/cli/commands/aggregate.js.map +1 -1
  17. package/dist/cli/commands/append.js +4 -1
  18. package/dist/cli/commands/append.js.map +1 -1
  19. package/dist/cli/commands/calendar.js +9 -3
  20. package/dist/cli/commands/calendar.js.map +1 -1
  21. package/dist/cli/commands/claim.d.ts +3 -0
  22. package/dist/cli/commands/claim.js +19 -3
  23. package/dist/cli/commands/claim.js.map +1 -1
  24. package/dist/cli/commands/close.js +4 -1
  25. package/dist/cli/commands/close.js.map +1 -1
  26. package/dist/cli/commands/comments-audit.js +4 -1
  27. package/dist/cli/commands/comments-audit.js.map +1 -1
  28. package/dist/cli/commands/comments.js +4 -1
  29. package/dist/cli/commands/comments.js.map +1 -1
  30. package/dist/cli/commands/completion.js +98 -2
  31. package/dist/cli/commands/completion.js.map +1 -1
  32. package/dist/cli/commands/config.js +4 -1
  33. package/dist/cli/commands/config.js.map +1 -1
  34. package/dist/cli/commands/context.js +19 -5
  35. package/dist/cli/commands/context.js.map +1 -1
  36. package/dist/cli/commands/contracts.d.ts +9 -0
  37. package/dist/cli/commands/contracts.js +205 -49
  38. package/dist/cli/commands/contracts.js.map +1 -1
  39. package/dist/cli/commands/create.js +88 -9
  40. package/dist/cli/commands/create.js.map +1 -1
  41. package/dist/cli/commands/dedupe-audit.js +4 -1
  42. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  43. package/dist/cli/commands/delete.js +4 -1
  44. package/dist/cli/commands/delete.js.map +1 -1
  45. package/dist/cli/commands/deps.js +4 -1
  46. package/dist/cli/commands/deps.js.map +1 -1
  47. package/dist/cli/commands/docs.js +4 -1
  48. package/dist/cli/commands/docs.js.map +1 -1
  49. package/dist/cli/commands/extension.d.ts +7 -2
  50. package/dist/cli/commands/extension.js +360 -64
  51. package/dist/cli/commands/extension.js.map +1 -1
  52. package/dist/cli/commands/files.js +4 -1
  53. package/dist/cli/commands/files.js.map +1 -1
  54. package/dist/cli/commands/gc.js +4 -1
  55. package/dist/cli/commands/gc.js.map +1 -1
  56. package/dist/cli/commands/get.d.ts +7 -3
  57. package/dist/cli/commands/get.js +91 -18
  58. package/dist/cli/commands/get.js.map +1 -1
  59. package/dist/cli/commands/guide.js +6 -8
  60. package/dist/cli/commands/guide.js.map +1 -1
  61. package/dist/cli/commands/health.d.ts +4 -0
  62. package/dist/cli/commands/health.js +31 -8
  63. package/dist/cli/commands/health.js.map +1 -1
  64. package/dist/cli/commands/history-redact.d.ts +42 -0
  65. package/dist/cli/commands/history-redact.js +559 -0
  66. package/dist/cli/commands/history-redact.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +4 -0
  68. package/dist/cli/commands/history.js +14 -3
  69. package/dist/cli/commands/history.js.map +1 -1
  70. package/dist/cli/commands/index.d.ts +2 -8
  71. package/dist/cli/commands/index.js +6 -9
  72. package/dist/cli/commands/index.js.map +1 -1
  73. package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
  74. package/dist/cli/commands/init-agent-guidance.js +336 -0
  75. package/dist/cli/commands/init-agent-guidance.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +14 -0
  77. package/dist/cli/commands/init.js +75 -1
  78. package/dist/cli/commands/init.js.map +1 -1
  79. package/dist/cli/commands/learnings.js +4 -1
  80. package/dist/cli/commands/learnings.js.map +1 -1
  81. package/dist/cli/commands/list.d.ts +1 -0
  82. package/dist/cli/commands/list.js +42 -18
  83. package/dist/cli/commands/list.js.map +1 -1
  84. package/dist/cli/commands/metadata-normalizers.js +4 -1
  85. package/dist/cli/commands/metadata-normalizers.js.map +1 -1
  86. package/dist/cli/commands/normalize.js +4 -1
  87. package/dist/cli/commands/normalize.js.map +1 -1
  88. package/dist/cli/commands/notes.js +4 -1
  89. package/dist/cli/commands/notes.js.map +1 -1
  90. package/dist/cli/commands/plan.d.ts +118 -0
  91. package/dist/cli/commands/plan.js +975 -0
  92. package/dist/cli/commands/plan.js.map +1 -0
  93. package/dist/cli/commands/reindex.d.ts +8 -0
  94. package/dist/cli/commands/reindex.js +100 -24
  95. package/dist/cli/commands/reindex.js.map +1 -1
  96. package/dist/cli/commands/restore.js +4 -1
  97. package/dist/cli/commands/restore.js.map +1 -1
  98. package/dist/cli/commands/search.js +58 -27
  99. package/dist/cli/commands/search.js.map +1 -1
  100. package/dist/cli/commands/stats.js +4 -1
  101. package/dist/cli/commands/stats.js.map +1 -1
  102. package/dist/cli/commands/templates.js +4 -1
  103. package/dist/cli/commands/templates.js.map +1 -1
  104. package/dist/cli/commands/test-all.js +4 -1
  105. package/dist/cli/commands/test-all.js.map +1 -1
  106. package/dist/cli/commands/test-runs.js +4 -1
  107. package/dist/cli/commands/test-runs.js.map +1 -1
  108. package/dist/cli/commands/test.js +4 -1
  109. package/dist/cli/commands/test.js.map +1 -1
  110. package/dist/cli/commands/update-many.js +4 -1
  111. package/dist/cli/commands/update-many.js.map +1 -1
  112. package/dist/cli/commands/update.js +114 -71
  113. package/dist/cli/commands/update.js.map +1 -1
  114. package/dist/cli/commands/upgrade.js +6 -3
  115. package/dist/cli/commands/upgrade.js.map +1 -1
  116. package/dist/cli/commands/validate.js +32 -4
  117. package/dist/cli/commands/validate.js.map +1 -1
  118. package/dist/cli/error-guidance.js +5 -2
  119. package/dist/cli/error-guidance.js.map +1 -1
  120. package/dist/cli/extension-command-help.js +4 -1
  121. package/dist/cli/extension-command-help.js.map +1 -1
  122. package/dist/cli/extension-command-options.js +4 -1
  123. package/dist/cli/extension-command-options.js.map +1 -1
  124. package/dist/cli/guide-topics.js +4 -1
  125. package/dist/cli/guide-topics.js.map +1 -1
  126. package/dist/cli/help-content.js +52 -33
  127. package/dist/cli/help-content.js.map +1 -1
  128. package/dist/cli/help-json-payload.js +4 -1
  129. package/dist/cli/help-json-payload.js.map +1 -1
  130. package/dist/cli/main.js +276 -32
  131. package/dist/cli/main.js.map +1 -1
  132. package/dist/cli/migration-gates.js +4 -1
  133. package/dist/cli/migration-gates.js.map +1 -1
  134. package/dist/cli/register-list-query.js +55 -150
  135. package/dist/cli/register-list-query.js.map +1 -1
  136. package/dist/cli/register-mutation.js +277 -261
  137. package/dist/cli/register-mutation.js.map +1 -1
  138. package/dist/cli/register-operations.js +62 -199
  139. package/dist/cli/register-operations.js.map +1 -1
  140. package/dist/cli/register-setup.js +55 -146
  141. package/dist/cli/register-setup.js.map +1 -1
  142. package/dist/cli/registration-helpers.d.ts +2 -2
  143. package/dist/cli/registration-helpers.js +11 -21
  144. package/dist/cli/registration-helpers.js.map +1 -1
  145. package/dist/cli/shared-parsers.js +4 -1
  146. package/dist/cli/shared-parsers.js.map +1 -1
  147. package/dist/cli/telemetry-flush.js +4 -1
  148. package/dist/cli/telemetry-flush.js.map +1 -1
  149. package/dist/cli.js +45 -3
  150. package/dist/cli.js.map +1 -1
  151. package/dist/core/extensions/extension-types.js +4 -1
  152. package/dist/core/extensions/extension-types.js.map +1 -1
  153. package/dist/core/extensions/index.js +4 -1
  154. package/dist/core/extensions/index.js.map +1 -1
  155. package/dist/core/extensions/item-fields.js +4 -1
  156. package/dist/core/extensions/item-fields.js.map +1 -1
  157. package/dist/core/extensions/loader.js +84 -54
  158. package/dist/core/extensions/loader.js.map +1 -1
  159. package/dist/core/extensions/runtime-registrations.js +4 -1
  160. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  161. package/dist/core/fs/fs-utils.js +4 -1
  162. package/dist/core/fs/fs-utils.js.map +1 -1
  163. package/dist/core/fs/index.js +4 -1
  164. package/dist/core/fs/index.js.map +1 -1
  165. package/dist/core/history/history-stream-policy.js +4 -1
  166. package/dist/core/history/history-stream-policy.js.map +1 -1
  167. package/dist/core/history/history.js +4 -1
  168. package/dist/core/history/history.js.map +1 -1
  169. package/dist/core/history/index.js +4 -1
  170. package/dist/core/history/index.js.map +1 -1
  171. package/dist/core/item/id.js +4 -1
  172. package/dist/core/item/id.js.map +1 -1
  173. package/dist/core/item/index.js +4 -1
  174. package/dist/core/item/index.js.map +1 -1
  175. package/dist/core/item/item-format.js +241 -2
  176. package/dist/core/item/item-format.js.map +1 -1
  177. package/dist/core/item/parent-reference-policy.js +4 -1
  178. package/dist/core/item/parent-reference-policy.js.map +1 -1
  179. package/dist/core/item/parse.js +33 -3
  180. package/dist/core/item/parse.js.map +1 -1
  181. package/dist/core/item/sprint-release-format.js +4 -1
  182. package/dist/core/item/sprint-release-format.js.map +1 -1
  183. package/dist/core/item/status.js +4 -1
  184. package/dist/core/item/status.js.map +1 -1
  185. package/dist/core/item/type-registry.js +4 -1
  186. package/dist/core/item/type-registry.js.map +1 -1
  187. package/dist/core/lock/index.js +4 -1
  188. package/dist/core/lock/index.js.map +1 -1
  189. package/dist/core/lock/lock.js +4 -1
  190. package/dist/core/lock/lock.js.map +1 -1
  191. package/dist/core/output/command-aware.js +4 -1
  192. package/dist/core/output/command-aware.js.map +1 -1
  193. package/dist/core/output/output.d.ts +4 -0
  194. package/dist/core/output/output.js +47 -6
  195. package/dist/core/output/output.js.map +1 -1
  196. package/dist/core/packages/manifest.d.ts +27 -1
  197. package/dist/core/packages/manifest.js +87 -1
  198. package/dist/core/packages/manifest.js.map +1 -1
  199. package/dist/core/packages/root.d.ts +3 -0
  200. package/dist/core/packages/root.js +51 -0
  201. package/dist/core/packages/root.js.map +1 -0
  202. package/dist/core/schema/runtime-field-filters.js +4 -1
  203. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  204. package/dist/core/schema/runtime-field-values.js +4 -1
  205. package/dist/core/schema/runtime-field-values.js.map +1 -1
  206. package/dist/core/schema/runtime-schema.js +4 -1
  207. package/dist/core/schema/runtime-schema.js.map +1 -1
  208. package/dist/core/search/cache.js +7 -2
  209. package/dist/core/search/cache.js.map +1 -1
  210. package/dist/core/search/corpus.d.ts +2 -0
  211. package/dist/core/search/corpus.js +77 -2
  212. package/dist/core/search/corpus.js.map +1 -1
  213. package/dist/core/search/embedding-batches.d.ts +13 -1
  214. package/dist/core/search/embedding-batches.js +40 -8
  215. package/dist/core/search/embedding-batches.js.map +1 -1
  216. package/dist/core/search/http-client.js +4 -1
  217. package/dist/core/search/http-client.js.map +1 -1
  218. package/dist/core/search/providers.js +4 -1
  219. package/dist/core/search/providers.js.map +1 -1
  220. package/dist/core/search/semantic-defaults.js +11 -2
  221. package/dist/core/search/semantic-defaults.js.map +1 -1
  222. package/dist/core/search/vector-stores.js +4 -1
  223. package/dist/core/search/vector-stores.js.map +1 -1
  224. package/dist/core/sentry/helpers.js +4 -1
  225. package/dist/core/sentry/helpers.js.map +1 -1
  226. package/dist/core/sentry/instrument.js +10 -13
  227. package/dist/core/sentry/instrument.js.map +1 -1
  228. package/dist/core/shared/command-types.js +4 -1
  229. package/dist/core/shared/command-types.js.map +1 -1
  230. package/dist/core/shared/conflict-markers.js +4 -1
  231. package/dist/core/shared/conflict-markers.js.map +1 -1
  232. package/dist/core/shared/constants.d.ts +2 -2
  233. package/dist/core/shared/constants.js +24 -1
  234. package/dist/core/shared/constants.js.map +1 -1
  235. package/dist/core/shared/errors.js +4 -1
  236. package/dist/core/shared/errors.js.map +1 -1
  237. package/dist/core/shared/index.js +4 -1
  238. package/dist/core/shared/index.js.map +1 -1
  239. package/dist/core/shared/levenshtein.js +4 -1
  240. package/dist/core/shared/levenshtein.js.map +1 -1
  241. package/dist/core/shared/primitives.js +4 -1
  242. package/dist/core/shared/primitives.js.map +1 -1
  243. package/dist/core/shared/serialization.js +4 -1
  244. package/dist/core/shared/serialization.js.map +1 -1
  245. package/dist/core/shared/text-normalization.js +4 -1
  246. package/dist/core/shared/text-normalization.js.map +1 -1
  247. package/dist/core/shared/time.js +4 -1
  248. package/dist/core/shared/time.js.map +1 -1
  249. package/dist/core/store/front-matter-cache.d.ts +8 -1
  250. package/dist/core/store/front-matter-cache.js +28 -14
  251. package/dist/core/store/front-matter-cache.js.map +1 -1
  252. package/dist/core/store/index.js +4 -1
  253. package/dist/core/store/index.js.map +1 -1
  254. package/dist/core/store/item-format-migration.js +4 -1
  255. package/dist/core/store/item-format-migration.js.map +1 -1
  256. package/dist/core/store/item-store.d.ts +2 -0
  257. package/dist/core/store/item-store.js +66 -3
  258. package/dist/core/store/item-store.js.map +1 -1
  259. package/dist/core/store/paths.js +4 -1
  260. package/dist/core/store/paths.js.map +1 -1
  261. package/dist/core/store/settings.js +39 -1
  262. package/dist/core/store/settings.js.map +1 -1
  263. package/dist/core/telemetry/consent.js +4 -1
  264. package/dist/core/telemetry/consent.js.map +1 -1
  265. package/dist/core/telemetry/observability.d.ts +1 -1
  266. package/dist/core/telemetry/observability.js +11 -2
  267. package/dist/core/telemetry/observability.js.map +1 -1
  268. package/dist/core/telemetry/runtime.js +31 -5
  269. package/dist/core/telemetry/runtime.js.map +1 -1
  270. package/dist/core/test/background-runs.js +4 -1
  271. package/dist/core/test/background-runs.js.map +1 -1
  272. package/dist/core/test/item-test-run-tracking.js +4 -1
  273. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  274. package/dist/mcp/server.d.ts +8 -0
  275. package/dist/mcp/server.js +212 -53
  276. package/dist/mcp/server.js.map +1 -1
  277. package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -0
  278. package/dist/sdk/cli-contracts/commander-mutation-options.js +484 -0
  279. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -0
  280. package/dist/sdk/cli-contracts/commander-types.d.ts +21 -0
  281. package/dist/sdk/cli-contracts/commander-types.js +95 -0
  282. package/dist/sdk/cli-contracts/commander-types.js.map +1 -0
  283. package/dist/sdk/cli-contracts.d.ts +10 -17
  284. package/dist/sdk/cli-contracts.js +232 -282
  285. package/dist/sdk/cli-contracts.js.map +1 -1
  286. package/dist/sdk/index.d.ts +2 -1
  287. package/dist/sdk/index.js +5 -1
  288. package/dist/sdk/index.js.map +1 -1
  289. package/dist/sdk/runtime.d.ts +29 -0
  290. package/dist/sdk/runtime.js +31 -0
  291. package/dist/sdk/runtime.js.map +1 -0
  292. package/dist/types/index.js +4 -1
  293. package/dist/types/index.js.map +1 -1
  294. package/dist/types.d.ts +86 -2
  295. package/dist/types.js +34 -1
  296. package/dist/types.js.map +1 -1
  297. package/docs/AGENT_GUIDE.md +16 -6
  298. package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
  299. package/docs/CODEX_PLUGIN.md +2 -2
  300. package/docs/COMMANDS.md +83 -8
  301. package/docs/CONFIGURATION.md +4 -1
  302. package/docs/EXTENSIONS.md +176 -807
  303. package/docs/QUICKSTART.md +12 -5
  304. package/docs/README.md +7 -6
  305. package/docs/RELEASING.md +6 -4
  306. package/docs/SDK.md +78 -441
  307. package/docs/TESTING.md +2 -2
  308. package/marketplace.json +3 -3
  309. package/package.json +7 -4
  310. package/packages/pm-beads/extensions/beads/index.js +90 -101
  311. package/packages/pm-beads/extensions/beads/index.ts +2 -2
  312. package/packages/pm-beads/extensions/beads/runtime.js +2 -17
  313. package/packages/pm-beads/extensions/beads/runtime.ts +41 -18
  314. package/packages/pm-beads/package.json +34 -1
  315. package/packages/pm-calendar/README.md +13 -0
  316. package/packages/pm-calendar/extensions/calendar/index.js +56 -0
  317. package/packages/pm-calendar/extensions/calendar/index.ts +62 -0
  318. package/packages/pm-calendar/extensions/calendar/manifest.json +7 -0
  319. package/packages/pm-calendar/extensions/calendar/runtime.js +114 -0
  320. package/packages/pm-calendar/extensions/calendar/runtime.ts +123 -0
  321. package/packages/pm-calendar/package.json +51 -0
  322. package/packages/pm-governance-audit/README.md +23 -0
  323. package/packages/pm-governance-audit/extensions/governance-audit/index.js +117 -0
  324. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +118 -0
  325. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +7 -0
  326. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +159 -0
  327. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +176 -0
  328. package/packages/pm-governance-audit/package.json +52 -0
  329. package/packages/pm-guide-shell/README.md +23 -0
  330. package/packages/pm-guide-shell/extensions/guide-shell/index.js +76 -0
  331. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +81 -0
  332. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +7 -0
  333. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +263 -0
  334. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +327 -0
  335. package/packages/pm-guide-shell/package.json +52 -0
  336. package/packages/pm-linked-test-adapters/README.md +24 -0
  337. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +101 -0
  338. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +102 -0
  339. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +7 -0
  340. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +142 -0
  341. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +173 -0
  342. package/packages/pm-linked-test-adapters/package.json +53 -0
  343. package/packages/pm-search-advanced/README.md +27 -0
  344. package/packages/pm-search-advanced/extensions/search-advanced/index.js +93 -0
  345. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +94 -0
  346. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +7 -0
  347. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +120 -0
  348. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +144 -0
  349. package/packages/pm-search-advanced/package.json +54 -0
  350. package/packages/pm-templates/README.md +20 -0
  351. package/packages/pm-templates/extensions/templates/index.js +101 -0
  352. package/packages/pm-templates/extensions/templates/index.ts +109 -0
  353. package/packages/pm-templates/extensions/templates/manifest.json +7 -0
  354. package/packages/pm-templates/extensions/templates/runtime.js +226 -0
  355. package/packages/pm-templates/extensions/templates/runtime.ts +283 -0
  356. package/packages/pm-templates/package.json +50 -0
  357. package/packages/pm-todos/extensions/todos/index.js +105 -116
  358. package/packages/pm-todos/extensions/todos/index.ts +3 -2
  359. package/packages/pm-todos/extensions/todos/runtime.js +2 -17
  360. package/packages/pm-todos/extensions/todos/runtime.ts +40 -18
  361. package/packages/pm-todos/package.json +35 -1
  362. package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
  363. package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
  364. package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
  365. package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
  366. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
  367. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
  368. package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +4 -2
  369. package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
  370. package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
  371. package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
  372. package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
  373. package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +4 -2
  374. package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
  375. package/scripts/finalize-build.mjs +28 -0
  376. package/scripts/prepare-build-cache.mjs +37 -0
  377. package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
  378. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
  379. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
  380. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
  381. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
  382. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
  383. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
  384. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
  385. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
  386. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
  387. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
  388. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
  389. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
  390. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
  391. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
  392. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
  393. /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
  394. /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
  395. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
  396. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
  397. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
  398. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
  399. /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
  400. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
  401. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
  402. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
  403. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
  404. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
  405. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
  406. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
  407. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
@@ -1,141 +1,130 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath, pathToFileURL } from "node:url";
3
-
4
3
  const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
5
4
  const CURRENT_EXTENSION_ROOT = path.dirname(fileURLToPath(import.meta.url));
6
-
7
5
  export const manifest = {
8
- name: "builtin-todos-import-export",
9
- version: "0.1.0",
10
- entry: "./index.js",
11
- priority: 0,
12
- capabilities: ["commands", "schema"],
6
+ name: "builtin-todos-import-export",
7
+ version: "0.1.0",
8
+ entry: "./index.js",
9
+ priority: 0,
10
+ capabilities: ["commands", "schema"],
13
11
  };
14
-
15
12
  function asOptionalString(value) {
16
- return typeof value === "string" ? value : undefined;
13
+ return typeof value === "string" ? value : undefined;
17
14
  }
18
-
19
15
  function toImportOptions(options) {
20
- return {
21
- folder: asOptionalString(options.folder),
22
- author: asOptionalString(options.author),
23
- message: asOptionalString(options.message),
24
- };
16
+ return {
17
+ folder: asOptionalString(options.folder),
18
+ author: asOptionalString(options.author),
19
+ message: asOptionalString(options.message),
20
+ };
25
21
  }
26
-
27
22
  function toExportOptions(options) {
28
- return {
29
- folder: asOptionalString(options.folder),
30
- };
23
+ return {
24
+ folder: asOptionalString(options.folder),
25
+ };
31
26
  }
32
-
33
27
  function resolvePackageRootCandidates() {
34
- const candidates = [];
35
- const envRoot = process.env[PM_PACKAGE_ROOT_ENV];
36
- if (typeof envRoot === "string" && envRoot.trim().length > 0) {
37
- candidates.push(path.resolve(envRoot.trim()));
38
- }
39
- const argvEntry = typeof process.argv[1] === "string" ? process.argv[1].trim() : "";
40
- if (argvEntry.length > 0) {
41
- const resolvedEntry = path.resolve(argvEntry);
42
- const entryDir = path.dirname(resolvedEntry);
43
- candidates.push(path.resolve(entryDir, ".."));
44
- candidates.push(path.resolve(entryDir, "../.."));
45
- candidates.push(path.resolve(entryDir, "../../.."));
46
- }
47
- return [...new Set(candidates)];
28
+ const candidates = [];
29
+ const envRoot = process.env[PM_PACKAGE_ROOT_ENV];
30
+ if (typeof envRoot === "string" && envRoot.trim().length > 0) {
31
+ candidates.push(path.resolve(envRoot.trim()));
32
+ }
33
+ const argvEntry = typeof process.argv[1] === "string" ? process.argv[1].trim() : "";
34
+ if (argvEntry.length > 0) {
35
+ const resolvedEntry = path.resolve(argvEntry);
36
+ const entryDir = path.dirname(resolvedEntry);
37
+ candidates.push(path.resolve(entryDir, ".."));
38
+ candidates.push(path.resolve(entryDir, "../.."));
39
+ candidates.push(path.resolve(entryDir, "../../.."));
40
+ }
41
+ return [...new Set(candidates)];
48
42
  }
49
-
50
43
  async function loadRuntimeModule() {
51
- const attempted = [];
52
- for (const packageRoot of resolvePackageRootCandidates()) {
53
- const modulePaths = [
54
- path.join(packageRoot, ".agents", "pm", "extensions", "todos", "runtime.js"),
55
- path.join(packageRoot, "packages", "pm-todos", "extensions", "todos", "runtime.js"),
56
- ];
57
- for (const modulePath of modulePaths) {
58
- attempted.push(modulePath);
59
- try {
60
- return await import(pathToFileURL(modulePath).href);
61
- } catch {
62
- // Try the next package-root candidate.
63
- }
44
+ const attempted = [];
45
+ for (const packageRoot of resolvePackageRootCandidates()) {
46
+ const modulePaths = [
47
+ path.join(packageRoot, ".agents", "pm", "extensions", "todos", "runtime.js"),
48
+ path.join(packageRoot, "packages", "pm-todos", "extensions", "todos", "runtime.js"),
49
+ ];
50
+ for (const modulePath of modulePaths) {
51
+ attempted.push(modulePath);
52
+ try {
53
+ return await import(pathToFileURL(modulePath).href);
54
+ }
55
+ catch {
56
+ // Try the next package-root candidate.
57
+ }
58
+ }
59
+ }
60
+ const localRuntimePath = path.join(CURRENT_EXTENSION_ROOT, "runtime.js");
61
+ attempted.push(localRuntimePath);
62
+ try {
63
+ return await import(pathToFileURL(localRuntimePath).href);
64
64
  }
65
- }
66
-
67
- const localRuntimePath = path.join(CURRENT_EXTENSION_ROOT, "runtime.js");
68
- attempted.push(localRuntimePath);
69
- try {
70
- return await import(pathToFileURL(localRuntimePath).href);
71
- } catch {
72
- // Fall through to the diagnostic below.
73
- }
74
-
75
- throw new Error(
76
- "Unable to resolve packaged todos extension runtime module. " +
77
- `Tried: ${attempted.join(", ")}. Ensure the installed extension includes runtime.js or PM_CLI_PACKAGE_ROOT points to an installed pm package root.`,
78
- );
65
+ catch {
66
+ // Fall through to the diagnostic below.
67
+ }
68
+ throw new Error("Unable to resolve packaged todos extension runtime module. " +
69
+ `Tried: ${attempted.join(", ")}. Ensure the installed extension includes runtime.js or PM_CLI_PACKAGE_ROOT points to an installed pm package root.`);
79
70
  }
80
-
81
71
  async function runTodosImportFromRuntime(options, global) {
82
- const runtime = await loadRuntimeModule();
83
- if (typeof runtime.runTodosImport !== "function") {
84
- throw new Error('Bundled todos runtime module is missing runTodosImport().');
85
- }
86
- return runtime.runTodosImport(options, global);
72
+ const runtime = await loadRuntimeModule();
73
+ if (typeof runtime.runTodosImport !== "function") {
74
+ throw new Error("Bundled todos runtime module is missing runTodosImport().");
75
+ }
76
+ return runtime.runTodosImport(options, global);
87
77
  }
88
-
89
78
  async function runTodosExportFromRuntime(options, global) {
90
- const runtime = await loadRuntimeModule();
91
- if (typeof runtime.runTodosExport !== "function") {
92
- throw new Error('Bundled todos runtime module is missing runTodosExport().');
93
- }
94
- return runtime.runTodosExport(options, global);
79
+ const runtime = await loadRuntimeModule();
80
+ if (typeof runtime.runTodosExport !== "function") {
81
+ throw new Error("Bundled todos runtime module is missing runTodosExport().");
82
+ }
83
+ return runtime.runTodosExport(options, global);
95
84
  }
96
-
97
85
  export function activate(api) {
98
- api.registerCommand({
99
- name: "todos import",
100
- description: "Import Todo markdown files into pm items.",
101
- flags: [
102
- {
103
- long: "--folder",
104
- value_name: "path",
105
- value_type: "string",
106
- description: "Source folder containing Todo markdown files.",
107
- },
108
- {
109
- long: "--author",
110
- value_name: "author",
111
- value_type: "string",
112
- description: "Override import mutation author.",
113
- },
114
- {
115
- long: "--message",
116
- value_name: "text",
117
- value_type: "string",
118
- description: "Override import history message.",
119
- },
120
- ],
121
- run: async (context) => runTodosImportFromRuntime(toImportOptions(context.options), context.global),
122
- });
123
- api.registerCommand({
124
- name: "todos export",
125
- description: "Export pm items into Todo markdown files.",
126
- flags: [
127
- {
128
- long: "--folder",
129
- value_name: "path",
130
- value_type: "string",
131
- description: "Destination folder for exported Todo markdown files.",
132
- },
133
- ],
134
- run: async (context) => runTodosExportFromRuntime(toExportOptions(context.options), context.global),
135
- });
86
+ api.registerCommand({
87
+ name: "todos import",
88
+ action: "todos-import",
89
+ description: "Import Todo markdown files into pm items.",
90
+ flags: [
91
+ {
92
+ long: "--folder",
93
+ value_name: "path",
94
+ value_type: "string",
95
+ description: "Source folder containing Todo markdown files.",
96
+ },
97
+ {
98
+ long: "--author",
99
+ value_name: "author",
100
+ value_type: "string",
101
+ description: "Override import mutation author.",
102
+ },
103
+ {
104
+ long: "--message",
105
+ value_name: "text",
106
+ value_type: "string",
107
+ description: "Override import history message.",
108
+ },
109
+ ],
110
+ run: async (context) => runTodosImportFromRuntime(toImportOptions(context.options), context.global),
111
+ });
112
+ api.registerCommand({
113
+ name: "todos export",
114
+ action: "todos-export",
115
+ description: "Export pm items into Todo markdown files.",
116
+ flags: [
117
+ {
118
+ long: "--folder",
119
+ value_name: "path",
120
+ value_type: "string",
121
+ description: "Destination folder for exported Todo markdown files.",
122
+ },
123
+ ],
124
+ run: async (context) => runTodosExportFromRuntime(toExportOptions(context.options), context.global),
125
+ });
136
126
  }
137
-
138
127
  export default {
139
- manifest,
140
- activate,
128
+ manifest,
129
+ activate,
141
130
  };
@@ -1,7 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath, pathToFileURL } from "node:url";
3
- import type { CommandDefinition, ExtensionApi } from "../../../../src/core/extensions/loader.js";
4
- import type { GlobalOptions } from "../../../../src/core/shared/command-types.js";
3
+ import type { CommandDefinition, ExtensionApi, GlobalOptions } from "../../../../src/sdk/index.js";
5
4
  import type { TodosExportOptions, TodosExportResult, TodosImportOptions, TodosImportResult } from "./runtime.js";
6
5
 
7
6
  const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
@@ -105,6 +104,7 @@ async function runTodosExportFromRuntime(options: TodosExportOptions, global: Gl
105
104
  export function activate(api: ExtensionApi): void {
106
105
  api.registerCommand({
107
106
  name: "todos import",
107
+ action: "todos-import",
108
108
  description: "Import Todo markdown files into pm items.",
109
109
  flags: [
110
110
  {
@@ -130,6 +130,7 @@ export function activate(api: ExtensionApi): void {
130
130
  } satisfies CommandDefinition);
131
131
  api.registerCommand({
132
132
  name: "todos export",
133
+ action: "todos-export",
133
134
  description: "Export pm items into Todo markdown files.",
134
135
  flags: [
135
136
  {
@@ -1,21 +1,6 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { getActiveExtensionRegistrations, runActiveOnReadHooks, runActiveOnWriteHooks } from "../../../../dist/core/extensions/index.js";
4
- import { pathExists, removeFileIfExists, writeFileAtomic } from "../../../../dist/core/fs/fs-utils.js";
5
- import { appendHistoryEntry, createHistoryEntry } from "../../../../dist/core/history/history.js";
6
- import { generateItemId, normalizeItemId } from "../../../../dist/core/item/id.js";
7
- import { canonicalDocument, normalizeFrontMatter, serializeItemDocument, splitFrontMatter } from "../../../../dist/core/item/item-format.js";
8
- import { normalizeStatusInput } from "../../../../dist/core/item/status.js";
9
- import { resolveItemTypeRegistry } from "../../../../dist/core/item/type-registry.js";
10
- import { parseTags } from "../../../../dist/core/item/parse.js";
11
- import { acquireLock } from "../../../../dist/core/lock/lock.js";
12
- import { EXIT_CODE } from "../../../../dist/core/shared/constants.js";
13
- import { PmCliError } from "../../../../dist/core/shared/errors.js";
14
- import { nowIso } from "../../../../dist/core/shared/time.js";
15
- import { listAllFrontMatter, locateItem, readLocatedItem } from "../../../../dist/core/store/item-store.js";
16
- import { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from "../../../../dist/core/store/paths.js";
17
- import { readSettings } from "../../../../dist/core/store/settings.js";
18
- import { CONFIDENCE_TEXT_VALUES, ISSUE_SEVERITY_VALUES, RISK_VALUES } from "../../../../dist/types/index.js";
3
+ import { CONFIDENCE_TEXT_VALUES, EXIT_CODE, ISSUE_SEVERITY_VALUES, PmCliError, RISK_VALUES, acquireLock, appendHistoryEntry, canonicalDocument, createHistoryEntry, generateItemId, getActiveExtensionRegistrations, getHistoryPath, getItemPath, getSettingsPath, listAllFrontMatter, locateItem, normalizeFrontMatter, normalizeItemId, normalizeStatusInput, nowIso, parseTags, pathExists, readLocatedItem, readSettings, removeFileIfExists, resolveItemTypeRegistry, resolvePmRoot, runActiveOnReadHooks, runActiveOnWriteHooks, serializeItemDocument, splitFrontMatter, writeFileAtomic, } from "../../../../dist/sdk/index.js";
19
4
  const DEFAULT_TODOS_FOLDER = ".pm/todos";
20
5
  function isRecord(value) {
21
6
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -467,4 +452,4 @@ export async function runTodosExport(options, global) {
467
452
  ids,
468
453
  warnings,
469
454
  };
470
- }
455
+ }
@@ -1,24 +1,46 @@
1
1
  import fs from "node:fs/promises";
2
2
  import type { Dirent } from "node:fs";
3
3
  import path from "node:path";
4
- import { getActiveExtensionRegistrations, runActiveOnReadHooks, runActiveOnWriteHooks } from "../../../../src/core/extensions/index.js";
5
- import { pathExists, removeFileIfExists, writeFileAtomic } from "../../../../src/core/fs/fs-utils.js";
6
- import { appendHistoryEntry, createHistoryEntry } from "../../../../src/core/history/history.js";
7
- import { generateItemId, normalizeItemId } from "../../../../src/core/item/id.js";
8
- import { canonicalDocument, normalizeFrontMatter, serializeItemDocument, splitFrontMatter } from "../../../../src/core/item/item-format.js";
9
- import { normalizeStatusInput } from "../../../../src/core/item/status.js";
10
- import { resolveItemTypeRegistry } from "../../../../src/core/item/type-registry.js";
11
- import { parseTags } from "../../../../src/core/item/parse.js";
12
- import { acquireLock } from "../../../../src/core/lock/lock.js";
13
- import { EXIT_CODE } from "../../../../src/core/shared/constants.js";
14
- import type { GlobalOptions } from "../../../../src/core/shared/command-types.js";
15
- import { PmCliError } from "../../../../src/core/shared/errors.js";
16
- import { nowIso } from "../../../../src/core/shared/time.js";
17
- import { listAllFrontMatter, locateItem, readLocatedItem } from "../../../../src/core/store/item-store.js";
18
- import { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from "../../../../src/core/store/paths.js";
19
- import { readSettings } from "../../../../src/core/store/settings.js";
20
- import { CONFIDENCE_TEXT_VALUES, ISSUE_SEVERITY_VALUES, RISK_VALUES } from "../../../../src/types/index.js";
21
- import type { ItemDocument, ItemMetadata, ItemStatus, ItemType, PmSettings } from "../../../../src/types/index.js";
4
+ import {
5
+ CONFIDENCE_TEXT_VALUES,
6
+ EXIT_CODE,
7
+ ISSUE_SEVERITY_VALUES,
8
+ PmCliError,
9
+ RISK_VALUES,
10
+ acquireLock,
11
+ appendHistoryEntry,
12
+ canonicalDocument,
13
+ createHistoryEntry,
14
+ generateItemId,
15
+ getActiveExtensionRegistrations,
16
+ getHistoryPath,
17
+ getItemPath,
18
+ getSettingsPath,
19
+ listAllFrontMatter,
20
+ locateItem,
21
+ normalizeFrontMatter,
22
+ normalizeItemId,
23
+ normalizeStatusInput,
24
+ nowIso,
25
+ parseTags,
26
+ pathExists,
27
+ readLocatedItem,
28
+ readSettings,
29
+ removeFileIfExists,
30
+ resolveItemTypeRegistry,
31
+ resolvePmRoot,
32
+ runActiveOnReadHooks,
33
+ runActiveOnWriteHooks,
34
+ serializeItemDocument,
35
+ splitFrontMatter,
36
+ writeFileAtomic,
37
+ type GlobalOptions,
38
+ type ItemDocument,
39
+ type ItemMetadata,
40
+ type ItemStatus,
41
+ type ItemType,
42
+ type PmSettings,
43
+ } from "../../../../src/sdk/index.js";
22
44
 
23
45
  const DEFAULT_TODOS_FOLDER = ".pm/todos";
24
46
 
@@ -1,17 +1,51 @@
1
1
  {
2
- "name": "@unbrained/pm-package-todos",
2
+ "name": "@unbrained/pm-todos",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
7
+ "homepage": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/unbraind/pm-cli.git",
11
+ "directory": "packages/pm-todos"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/unbraind/pm-cli/issues"
15
+ },
7
16
  "keywords": [
8
17
  "pm-package",
9
18
  "project-management",
10
19
  "todos"
11
20
  ],
12
21
  "pm": {
22
+ "aliases": [
23
+ "todos"
24
+ ],
13
25
  "extensions": [
14
26
  "extensions/todos"
27
+ ],
28
+ "catalog": {
29
+ "display_name": "Todos Import/Export",
30
+ "category": "migration",
31
+ "summary": "Import and export Todo markdown tasks through pm package commands.",
32
+ "tags": [
33
+ "migration",
34
+ "todos",
35
+ "import",
36
+ "export"
37
+ ],
38
+ "links": {
39
+ "docs": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme",
40
+ "repository": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos",
41
+ "report": "https://github.com/unbraind/pm-cli/issues"
42
+ }
43
+ },
44
+ "docs": [
45
+ "README.md"
46
+ ],
47
+ "examples": [
48
+ "README.md"
15
49
  ]
16
50
  }
17
51
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "name": "pm-cli",
2
+ "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 18 MCP tools, 5 workflow skills, 14 slash commands, 3 subagents (coordinator, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "1.3.0",
4
+ "version": "1.4.0",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "mcpServers": {
3
- "pm-cli-native": {
3
+ "pm-mcp": {
4
4
  "command": "node",
5
5
  "args": ["${CLAUDE_PLUGIN_ROOT}/scripts/pm-mcp-server.mjs"],
6
6
  "env": {
@@ -6,7 +6,7 @@ Native pm CLI integration for Claude Code. Use pm project management tools direc
6
6
 
7
7
  | Component | What it provides |
8
8
  |-----------|----------------|
9
- | **18 MCP tools** | Full pm surface: context, search, list, get, create, update, claim, release, close, comments, files, docs, test, validate, health, contracts, guide + `pm_run` for everything else |
9
+ | **18 MCP tools** | Full pm surface: context, search, list, get, create, update, claim, release, close, comments, files, docs, test, validate, health, contracts, plan + `pm_run` for everything else |
10
10
  | **5 skills** | `pm-workflow`, `pm-developer`, `pm-release`, `pm-audit`, `pm-planner` — auto-loaded as Claude Code skills |
11
11
  | **14 slash commands** | Full lifecycle coverage — status, start, close, triage, audit, search, new, list, calendar, developer, planner, release, workflow, init |
12
12
  | **3 subagents** | `pm-coordinator` (batch/multi-item), `pm-triage-agent` (duplicate-safe item creation), `pm-verification-agent` (evidence + close readiness), and a `pm-delivery-chain` orchestrator |
@@ -42,7 +42,7 @@ Both `pm` and `pm-cli` marketplace IDs resolve to the same plugin.
42
42
  ### Option C: Global MCP server via Claude Code CLI (MCP tools only)
43
43
 
44
44
  ```bash
45
- claude mcp add --transport stdio pm-cli-native -- npx -y @unbrained/pm-cli pm-mcp
45
+ claude mcp add --transport stdio pm-mcp -- npx -y @unbrained/pm-cli pm-mcp
46
46
  ```
47
47
 
48
48
  This gives you the 18 MCP tools but not the skills, slash commands, or session hook.
@@ -54,7 +54,7 @@ Add to your project's `.mcp.json`:
54
54
  ```json
55
55
  {
56
56
  "mcpServers": {
57
- "pm-cli-native": {
57
+ "pm-mcp": {
58
58
  "command": "npx",
59
59
  "args": ["-y", "@unbrained/pm-cli@latest", "pm-mcp"],
60
60
  "env": {
@@ -163,7 +163,7 @@ Spawn pm-triage-agent to set up the pm item for: add OAuth2 login support
163
163
  | `pm_validate` | Run validation checks |
164
164
  | `pm_health` | Run health diagnostics |
165
165
  | `pm_contracts` | Inspect command contracts |
166
- | `pm_guide` | Read guide topics |
166
+ | `pm_plan` | Manage durable Plan workflows |
167
167
 
168
168
  ### General tool
169
169
 
@@ -29,7 +29,7 @@ For batch audits spanning many items, create one top-level `TaskCreate` for the
29
29
 
30
30
  ## Tools Available
31
31
 
32
- Use the `pm-cli-native` MCP server tools: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_guide`, and `pm_run` for all other operations.
32
+ Use the `pm-mcp` MCP server tools: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_plan`, and `pm_run` for all other operations.
33
33
 
34
34
  Also use Claude Code's built-in `TaskCreate` and `TaskUpdate` tools for TUI panel display.
35
35
 
@@ -14,6 +14,14 @@ Initialize pm project tracking using native MCP tools. Argument: `$ARGUMENTS` (o
14
14
  ```json
15
15
  { "tool": "pm_run", "args": { "action": "init", "options": {} } }
16
16
  ```
17
+ If guidance state inspection is needed before writing AGENTS/CLAUDE sections, run:
18
+ ```json
19
+ { "tool": "pm_run", "args": { "action": "init", "options": { "agentGuidance": "status" } } }
20
+ ```
21
+ To explicitly add compact workflow guidance without waiting for interactive prompts, run:
22
+ ```json
23
+ { "tool": "pm_run", "args": { "action": "init", "options": { "agentGuidance": "add" } } }
24
+ ```
17
25
 
18
26
  3. **Verify initialization** — call `pm_health` again to confirm `ok: true`.
19
27
 
@@ -37,8 +45,9 @@ Initialize pm project tracking using native MCP tools. Argument: `$ARGUMENTS` (o
37
45
 
38
46
  5. **Show quick-start summary**:
39
47
  - pm initialized at `.agents/pm/`
48
+ - guidance mode defaults to `ask` (TTY prompt only); use `agentGuidance=add|skip|status` in `pm_run` options for deterministic behavior
40
49
  - Available slash commands: `/pm-status`, `/pm-new`, `/pm-start-task`, `/pm-close-task`, `/pm-list`, `/pm-search`, `/pm-triage`, `/pm-calendar`, `/pm-developer`, `/pm-planner`, `/pm-release`, `/pm-audit`, `/pm-workflow`
41
- - All 18 MCP tools available: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_guide`, `pm_run`
50
+ - All 18 MCP tools available: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_plan`, `pm_run`
42
51
  - Next: use `/pm-new <title>` to create your first item, or `/pm-status` to see the tracker state
43
52
 
44
53
  If initialization fails, report the error and suggest running `pm init` manually in the terminal.
@@ -49,3 +49,21 @@ Run the pm planning loop using native MCP tools. Argument: `$ARGUMENTS` (optiona
49
49
  9. If you claimed a planning item: `pm_close` it, `pm_release`, then `TaskUpdate(completed)`.
50
50
 
51
51
  10. **Report** — list all created/updated items with their IDs, types, priorities, and parent links.
52
+
53
+ ## Living plan mode (`pm_plan`)
54
+
55
+ If the user wants a Codex-style ExecPlan / Claude Plan Mode / Cursor plan-and-edit flow rather than a flat backlog, use the built-in `Plan` item type via the `pm_plan` MCP tool. It records ordered steps, evidence, decisions, discoveries, validation, and supports materializing steps into real Tasks/Features.
56
+
57
+ ```json
58
+ { "tool": "pm_plan", "args": { "options": { "subcommand": "create", "title": "Plan title", "scope": "What this plan changes", "harness": "claude-code", "parent": "pm-epic1", "claim": true } } }
59
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "add-step", "stepTitle": "Read affected files", "dependsOn": "pm-task1" } } }
60
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "complete-step", "stepEvidence": "files reviewed" } } }
61
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "approve" } } }
62
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "materialize", "steps": "plan-step-002,plan-step-003", "materializeType": "Task" } } }
63
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "deep" } } }
64
+ ```
65
+
66
+ Resume a plan after compaction:
67
+ ```json
68
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "resume", "resumeContext": "step 2 in progress; tests still failing on retry path" } } }
69
+ ```
@@ -39,11 +39,13 @@ async function findRepoServer() {
39
39
 
40
40
  const explicitServer = process.env.PM_CLI_MCP_SERVER;
41
41
  if (explicitServer && (await exists(explicitServer))) {
42
- await import(pathToFileURL(explicitServer).href);
42
+ const server = await import(pathToFileURL(explicitServer).href);
43
+ server.startMcpServer();
43
44
  } else {
44
45
  const repoServer = await findRepoServer();
45
46
  if (repoServer) {
46
- await import(pathToFileURL(repoServer).href);
47
+ const server = await import(pathToFileURL(repoServer).href);
48
+ server.startMcpServer();
47
49
  } else {
48
50
  const child = spawn("npx", ["-y", "--package=@unbrained/pm-cli@latest", "pm-mcp"], {
49
51
  stdio: "inherit",
@@ -111,8 +111,53 @@ Write AC as numbered, testable assertions:
111
111
 
112
112
  Set via `pm_create` with `acceptanceCriteria` field or `pm_update` with `options.acceptanceCriteria`.
113
113
 
114
+ ## Built-in Plan workflow (`pm_plan` / `pm plan`)
115
+
116
+ For durable Codex-style ExecPlans, Claude-style Plan Mode, and Cursor-style editable checklists, pm exposes a first-class `Plan` item type plus a `pm plan` command family. Plans are stored as normal pm items under `.agents/pm/plans/`, get the full history hash chain, dependencies, search corpus, and lifecycle tooling.
117
+
118
+ ### When to use `pm plan` vs. `pm_create` + tasks
119
+
120
+ - `pm plan` — when you need a **living, resumable plan** with ordered steps, evidence, decisions, discoveries, validation, and the option to later materialize selected steps as real Tasks. Best for plan-then-execute workflows.
121
+ - `pm_create` (Epic/Feature/Task) — when the work is already decomposed and you just need persistent backlog items.
122
+
123
+ ### Lifecycle (call via `pm_plan` MCP tool)
124
+
125
+ ```json
126
+ { "tool": "pm_plan", "args": { "options": { "subcommand": "create", "title": "Refactor lock retry", "scope": "Improve retry semantics", "harness": "claude-code", "parent": "pm-epic1", "related": "pm-rel1,pm-rel2", "claim": true } } }
127
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "add-step", "stepTitle": "Read lock.ts", "stepBody": "Understand retry path", "dependsOn": "pm-task1" } } }
128
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "update-step", "stepStatus": "in_progress", "stepEvidence": "started reading lock.ts" } } }
129
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "complete-step", "stepEvidence": "lock.ts read; retry path captured" } } }
130
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "decision", "decisionText": "Use exponential backoff", "decisionRationale": "Avoid thundering herd" } } }
131
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "discovery", "discoveryText": "Found existing util in src/util/retry.ts" } } }
132
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "validation", "validationText": "Coverage gate stays at 100%", "validationCommand": "node scripts/run-tests.mjs coverage" } } }
133
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "approve" } } }
134
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "materialize", "steps": "plan-step-002", "materializeType": "Task", "materializeParent": "pm-epic1" } } }
135
+ ```
136
+
137
+ ### Progressive-disclosure reads
138
+
139
+ ```json
140
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "brief" } } }
141
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "standard" } } }
142
+ { "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "deep" } } }
143
+ ```
144
+
145
+ ### Harness mapping cheatsheet
146
+
147
+ | Harness signal | pm_plan equivalent |
148
+ |----------------|--------------------|
149
+ | Codex `update_plan` step status | `subcommand=update-step` with `stepStatus` |
150
+ | Claude `TaskCreate` | `subcommand=add-step` |
151
+ | Claude `TaskUpdate(in_progress)` | `subcommand=update-step` with `stepStatus=in_progress` |
152
+ | Cursor edit a plan step | `subcommand=update-step` |
153
+ | Resume after compaction | `subcommand=resume` with `resumeContext` then `subcommand=show --depth deep` |
154
+ | Approve before edits | `subcommand=approve` |
155
+ | Convert checklist into real items | `subcommand=materialize` |
156
+
114
157
  ## Safety
115
158
 
116
159
  - Never pass `path` during real repository tracking.
117
- - Always `pm_search` before `pm_create` — avoid duplicates.
160
+ - Always `pm_search` before `pm_create`/`pm plan create` — avoid duplicates.
118
161
  - Run `pm_validate` after batch changes.
162
+ - Set exactly one step `in_progress` per plan; pass `allowMultipleActive: true` only for explicit parallel branches.
163
+ - Use `pm_plan` `subcommand=resume` after long-running sessions so the next agent can pick up with a deterministic context.
@@ -1,12 +1,12 @@
1
1
  {
2
- "name": "pm-cli-codex",
3
- "version": "1.0.0",
2
+ "name": "pm-codex",
3
+ "version": "1.1.0",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
8
8
  },
9
- "homepage": "https://github.com/unbraind/pm-cli/tree/main/plugins/pm-cli-codex",
9
+ "homepage": "https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex",
10
10
  "repository": "https://github.com/unbraind/pm-cli",
11
11
  "license": "MIT",
12
12
  "keywords": [