@unbrained/pm-cli 2026.5.14 → 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.
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +78 -457
- package/CHANGELOG.md +11 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +6 -5
- package/dist/cli/argv-utils.js +4 -1
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.js +4 -1
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +5 -1
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +4 -1
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.js +5 -2
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/append.js +4 -1
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.js +4 -1
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/claim.d.ts +3 -0
- package/dist/cli/commands/claim.js +19 -3
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +4 -1
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +4 -1
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/comments.js +4 -1
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +98 -2
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +4 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +19 -5
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +9 -0
- package/dist/cli/commands/contracts.js +152 -34
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +30 -6
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +4 -1
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/delete.js +4 -1
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/deps.js +4 -1
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/docs.js +4 -1
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +2 -1
- package/dist/cli/commands/extension.js +123 -33
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.js +4 -1
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/gc.js +4 -1
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.d.ts +7 -3
- package/dist/cli/commands/get.js +91 -18
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.js +6 -8
- package/dist/cli/commands/guide.js.map +1 -1
- package/dist/cli/commands/health.d.ts +4 -0
- package/dist/cli/commands/health.js +31 -8
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +42 -0
- package/dist/cli/commands/history-redact.js +559 -0
- package/dist/cli/commands/history-redact.js.map +1 -0
- package/dist/cli/commands/history.d.ts +4 -0
- package/dist/cli/commands/history.js +14 -3
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.js +6 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
- package/dist/cli/commands/init-agent-guidance.js +336 -0
- package/dist/cli/commands/init-agent-guidance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.js +75 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +4 -1
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/list.d.ts +1 -0
- package/dist/cli/commands/list.js +42 -18
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/metadata-normalizers.js +4 -1
- package/dist/cli/commands/metadata-normalizers.js.map +1 -1
- package/dist/cli/commands/normalize.js +4 -1
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +4 -1
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +118 -0
- package/dist/cli/commands/plan.js +975 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reindex.js +4 -1
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +4 -1
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.js +7 -2
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.js +4 -1
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/templates.js +4 -1
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.js +4 -1
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.js +4 -1
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/commands/test.js +4 -1
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +4 -1
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.js +114 -71
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.js +6 -3
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.js +32 -4
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +5 -2
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.js +4 -1
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.js +4 -1
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/guide-topics.js +4 -1
- package/dist/cli/guide-topics.js.map +1 -1
- package/dist/cli/help-content.js +35 -15
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.js +4 -1
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.js +203 -25
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +4 -1
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +37 -14
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +228 -4
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +33 -1
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +23 -13
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +10 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli/shared-parsers.js +4 -1
- package/dist/cli/shared-parsers.js.map +1 -1
- package/dist/cli/telemetry-flush.js +4 -1
- package/dist/cli/telemetry-flush.js.map +1 -1
- package/dist/cli.js +45 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/extensions/extension-types.js +4 -1
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.js +4 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.js +4 -1
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +77 -53
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runtime-registrations.js +4 -1
- package/dist/core/extensions/runtime-registrations.js.map +1 -1
- package/dist/core/fs/fs-utils.js +4 -1
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/fs/index.js +4 -1
- package/dist/core/fs/index.js.map +1 -1
- package/dist/core/history/history-stream-policy.js +4 -1
- package/dist/core/history/history-stream-policy.js.map +1 -1
- package/dist/core/history/history.js +4 -1
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/history/index.js +4 -1
- package/dist/core/history/index.js.map +1 -1
- package/dist/core/item/id.js +4 -1
- package/dist/core/item/id.js.map +1 -1
- package/dist/core/item/index.js +4 -1
- package/dist/core/item/index.js.map +1 -1
- package/dist/core/item/item-format.js +241 -2
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/parent-reference-policy.js +4 -1
- package/dist/core/item/parent-reference-policy.js.map +1 -1
- package/dist/core/item/parse.js +33 -3
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/sprint-release-format.js +4 -1
- package/dist/core/item/sprint-release-format.js.map +1 -1
- package/dist/core/item/status.js +4 -1
- package/dist/core/item/status.js.map +1 -1
- package/dist/core/item/type-registry.js +4 -1
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/index.js +4 -1
- package/dist/core/lock/index.js.map +1 -1
- package/dist/core/lock/lock.js +4 -1
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/command-aware.js +4 -1
- package/dist/core/output/command-aware.js.map +1 -1
- package/dist/core/output/output.d.ts +4 -0
- package/dist/core/output/output.js +47 -6
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/packages/manifest.d.ts +1 -0
- package/dist/core/packages/manifest.js +5 -1
- package/dist/core/packages/manifest.js.map +1 -1
- package/dist/core/packages/root.d.ts +3 -0
- package/dist/core/packages/root.js +51 -0
- package/dist/core/packages/root.js.map +1 -0
- package/dist/core/schema/runtime-field-filters.js +4 -1
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.js +4 -1
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +4 -1
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.js +7 -2
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +2 -0
- package/dist/core/search/corpus.js +77 -2
- package/dist/core/search/corpus.js.map +1 -1
- package/dist/core/search/embedding-batches.js +21 -7
- package/dist/core/search/embedding-batches.js.map +1 -1
- package/dist/core/search/http-client.js +4 -1
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/providers.js +4 -1
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +11 -2
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +4 -1
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +4 -1
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +10 -13
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/command-types.js +4 -1
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/conflict-markers.js +4 -1
- package/dist/core/shared/conflict-markers.js.map +1 -1
- package/dist/core/shared/constants.d.ts +2 -2
- package/dist/core/shared/constants.js +24 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/errors.js +4 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/shared/index.js +4 -1
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/levenshtein.js +4 -1
- package/dist/core/shared/levenshtein.js.map +1 -1
- package/dist/core/shared/primitives.js +4 -1
- package/dist/core/shared/primitives.js.map +1 -1
- package/dist/core/shared/serialization.js +4 -1
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/shared/text-normalization.js +4 -1
- package/dist/core/shared/text-normalization.js.map +1 -1
- package/dist/core/shared/time.js +4 -1
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +8 -3
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/index.js +4 -1
- package/dist/core/store/index.js.map +1 -1
- package/dist/core/store/item-format-migration.js +4 -1
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/item-store.d.ts +2 -0
- package/dist/core/store/item-store.js +66 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.js +4 -1
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings.js +39 -1
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +4 -1
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.d.ts +1 -1
- package/dist/core/telemetry/observability.js +11 -2
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +31 -5
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.js +4 -1
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/test/item-test-run-tracking.js +4 -1
- package/dist/core/test/item-test-run-tracking.js.map +1 -1
- package/dist/mcp/server.js +123 -14
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +10 -3
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +4 -1
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +6 -2
- package/dist/sdk/cli-contracts.js +213 -20
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.js +4 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.js +4 -1
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types.d.ts +86 -2
- package/dist/types.js +34 -1
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +16 -6
- package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
- package/docs/CODEX_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +80 -8
- package/docs/CONFIGURATION.md +4 -1
- package/docs/EXTENSIONS.md +158 -814
- package/docs/QUICKSTART.md +11 -5
- package/docs/README.md +7 -6
- package/docs/RELEASING.md +2 -2
- package/docs/TESTING.md +2 -2
- package/marketplace.json +3 -3
- package/package.json +4 -2
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/README.md +1 -1
- package/packages/pm-calendar/extensions/calendar/index.js +1 -1
- package/packages/pm-calendar/extensions/calendar/index.ts +1 -1
- package/packages/pm-calendar/extensions/calendar/runtime.js +26 -7
- package/packages/pm-calendar/extensions/calendar/runtime.ts +26 -7
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/README.md +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
- package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
- package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
- package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
- package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
- package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
- package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
- package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
- package/scripts/finalize-build.mjs +28 -0
- package/scripts/prepare-build-cache.mjs +37 -0
- package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
package/docs/QUICKSTART.md
CHANGED
|
@@ -9,7 +9,7 @@ Use this page to get from a clean repository to a tracked, verified item.
|
|
|
9
9
|
- Claim before implementation.
|
|
10
10
|
- Link changed files, docs, and tests to the item.
|
|
11
11
|
- Close only after evidence is recorded.
|
|
12
|
-
- Use `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
12
|
+
- Use `pm install guide-shell --project` before `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
13
13
|
|
|
14
14
|
Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
|
|
15
15
|
|
|
@@ -34,9 +34,10 @@ For one-off use:
|
|
|
34
34
|
npx @unbrained/pm-cli --help
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Optional first-party packages are installable on demand:
|
|
37
|
+
Optional first-party packages are installable during init or on demand:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
+
pm init --defaults --with-packages
|
|
40
41
|
pm package catalog --project
|
|
41
42
|
pm install '*' --project
|
|
42
43
|
pm install all --project
|
|
@@ -48,9 +49,14 @@ pm package doctor --project --detail summary
|
|
|
48
49
|
```bash
|
|
49
50
|
pm init
|
|
50
51
|
pm health --check-only
|
|
52
|
+
pm init --agent-guidance status
|
|
53
|
+
pm init --agent-guidance add
|
|
51
54
|
```
|
|
52
55
|
|
|
53
56
|
`pm init` creates `.agents/pm/` with settings, item folders, history, locks, search cache directories, and project extension storage.
|
|
57
|
+
When AGENTS/CLAUDE guidance is missing, default `pm init` uses `--agent-guidance ask`: it prompts only in TTY, never blocks non-interactive runs, and records declined prompts.
|
|
58
|
+
Use `pm init --agent-guidance add` to write the compact workflow block later, or `pm init --agent-guidance status` to inspect guidance state without changing files.
|
|
59
|
+
Use `pm init --defaults --with-packages` when agents should get bundled commands such as calendar, templates, advanced search, and governance helpers in one non-interactive setup step.
|
|
54
60
|
|
|
55
61
|
## Create Your First Item
|
|
56
62
|
|
|
@@ -94,9 +100,9 @@ Do not create a duplicate item until `context`, `search`, and list commands show
|
|
|
94
100
|
## Link Work Artifacts
|
|
95
101
|
|
|
96
102
|
```bash
|
|
97
|
-
pm files <item-id> --add path=src/core/lock/lock.ts,
|
|
98
|
-
pm docs <item-id> --add path=docs/ARCHITECTURE.md,
|
|
99
|
-
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",
|
|
103
|
+
pm files <item-id> --add path=src/core/lock/lock.ts,note="implementation"
|
|
104
|
+
pm docs <item-id> --add path=docs/ARCHITECTURE.md,note="design context"
|
|
105
|
+
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",timeout_seconds=240
|
|
100
106
|
```
|
|
101
107
|
|
|
102
108
|
Use `node scripts/run-tests.mjs ...` for linked tests so tracker data is sandboxed.
|
package/docs/README.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This directory is the public documentation home for `pm-cli`. It is organized for progressive disclosure: read the smallest page that answers the current question, then follow links only when more detail is needed.
|
|
4
4
|
|
|
5
|
-
## CLI Guide Router
|
|
5
|
+
## Optional CLI Guide Router
|
|
6
6
|
|
|
7
|
-
`pm guide`
|
|
7
|
+
`pm guide` is provided by the optional `guide-shell` package. Install it when local in-CLI documentation routing is useful:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
+
pm install guide-shell --project
|
|
10
11
|
pm guide
|
|
11
12
|
pm guide quickstart
|
|
12
13
|
pm guide commands --depth standard
|
|
@@ -23,7 +24,7 @@ pm guide release --json
|
|
|
23
24
|
| Maintainer | [Contributing](../CONTRIBUTING.md) | [Testing](TESTING.md), [Releasing](RELEASING.md), [Architecture](ARCHITECTURE.md) |
|
|
24
25
|
| Package author | [Packages and Extensions](EXTENSIONS.md) | [SDK](SDK.md), [starter extension](examples/starter-extension/README.md) |
|
|
25
26
|
| Codex user | [Codex Plugin](CODEX_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
|
|
26
|
-
| Machine client | `pm
|
|
27
|
+
| Machine client | `pm contracts --json` | [Command Reference](COMMANDS.md#machine-contracts), optionally `pm install guide-shell --project && pm guide commands` |
|
|
27
28
|
|
|
28
29
|
## Documentation Map
|
|
29
30
|
|
|
@@ -41,8 +42,8 @@ pm guide release --json
|
|
|
41
42
|
|
|
42
43
|
## Guide Topic Map
|
|
43
44
|
|
|
44
|
-
| `pm guide` topic | Primary docs |
|
|
45
|
-
|
|
45
|
+
| Optional `pm guide` topic | Primary docs |
|
|
46
|
+
|-----------------------------|--------------|
|
|
46
47
|
| `quickstart` | [Quickstart](QUICKSTART.md), [Command Reference](COMMANDS.md) |
|
|
47
48
|
| `commands` | [Command Reference](COMMANDS.md), [Configuration](CONFIGURATION.md) |
|
|
48
49
|
| `workflows` | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md) |
|
|
@@ -79,7 +80,7 @@ This documentation structure is tracked through:
|
|
|
79
80
|
When changing docs, link files back to the active item:
|
|
80
81
|
|
|
81
82
|
```bash
|
|
82
|
-
pm docs <item-id> --add path=docs/README.md,
|
|
83
|
+
pm docs <item-id> --add path=docs/README.md,note="documentation index"
|
|
83
84
|
pm comments <item-id> "Docs updated; links and build verified."
|
|
84
85
|
```
|
|
85
86
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Releasing `@unbrained/pm-cli`
|
|
2
2
|
|
|
3
3
|
This page is for maintainers cutting npm and GitHub releases. It assumes release work is tracked with `pm`.
|
|
4
|
-
For local progressive-disclosure routing, use `pm guide release`.
|
|
4
|
+
For local progressive-disclosure routing, install `guide-shell` with `pm install guide-shell --project`, then use `pm guide release`.
|
|
5
5
|
|
|
6
6
|
## Agent Quick Context
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ For local progressive-disclosure routing, use `pm guide release`.
|
|
|
10
10
|
- Publishing is owned by the tag-driven GitHub Actions release workflow.
|
|
11
11
|
- Do not run manual `npm publish`.
|
|
12
12
|
- Run local parity gates before pushing release tags.
|
|
13
|
-
- Use `pm guide release --json` for machine-readable release docs routing.
|
|
13
|
+
- Use `pm guide release --json` for machine-readable release docs routing after `guide-shell` is installed.
|
|
14
14
|
|
|
15
15
|
Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
|
|
16
16
|
|
package/docs/TESTING.md
CHANGED
|
@@ -36,7 +36,7 @@ Use focused runs while iterating, then run coverage before closure when risk or
|
|
|
36
36
|
Add tests to the item that owns the work:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",
|
|
39
|
+
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",timeout_seconds=240
|
|
40
40
|
pm test <item-id> --run --progress
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -76,7 +76,7 @@ Linked tests can include assertion metadata:
|
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
78
|
pm test <item-id> --add \
|
|
79
|
-
command="pm list-open --json",
|
|
79
|
+
command="pm list-open --json",timeout_seconds=120,assert_json_field_gte=count:0
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Common assertion keys include:
|
package/marketplace.json
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
},
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
|
-
"name": "pm-
|
|
10
|
+
"name": "pm-claude",
|
|
11
11
|
"description": "Native pm CLI integration for Claude Code — 18 MCP tools, 5 workflow skills, 14 slash commands, 3 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
12
|
-
"version": "1.
|
|
13
|
-
"source": "./plugins/pm-
|
|
12
|
+
"version": "1.4.0",
|
|
13
|
+
"source": "./plugins/pm-claude",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "unbrained",
|
|
16
16
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.18",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "unbrained",
|
|
@@ -49,12 +49,14 @@
|
|
|
49
49
|
".claude-plugin/**",
|
|
50
50
|
"plugins/**",
|
|
51
51
|
"packages/pm-*/**",
|
|
52
|
+
"scripts/finalize-build.mjs",
|
|
52
53
|
"scripts/install.sh",
|
|
53
54
|
"scripts/install.ps1",
|
|
55
|
+
"scripts/prepare-build-cache.mjs",
|
|
54
56
|
"marketplace.json"
|
|
55
57
|
],
|
|
56
58
|
"scripts": {
|
|
57
|
-
"build": "tsc -p tsconfig.json",
|
|
59
|
+
"build": "node scripts/prepare-build-cache.mjs && tsc -p tsconfig.json && node scripts/finalize-build.mjs",
|
|
58
60
|
"typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.packages.json",
|
|
59
61
|
"start": "node dist/cli.js",
|
|
60
62
|
"dev": "tsx src/cli.ts",
|
|
@@ -46,7 +46,7 @@ export function activate(api) {
|
|
|
46
46
|
api.registerCommand(calendarCommand("cal"));
|
|
47
47
|
api.registerService("output_format", (context) => {
|
|
48
48
|
const rendered = renderCalendarPackageOutput(context);
|
|
49
|
-
return rendered ??
|
|
49
|
+
return rendered ?? null;
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -52,7 +52,7 @@ export function activate(api: ExtensionApi): void {
|
|
|
52
52
|
api.registerCommand(calendarCommand("cal"));
|
|
53
53
|
api.registerService("output_format", (context) => {
|
|
54
54
|
const rendered = renderCalendarPackageOutput(context as ServiceOverrideContext);
|
|
55
|
-
return rendered ??
|
|
55
|
+
return rendered ?? null;
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -51,10 +51,6 @@ function isCalendarResult(value) {
|
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
function isCalendarCommand(command) {
|
|
55
|
-
return command === "calendar" || command === "cal";
|
|
56
|
-
}
|
|
57
|
-
|
|
58
54
|
function readPayloadFormat(payload) {
|
|
59
55
|
if (typeof payload === "object" && payload !== null) {
|
|
60
56
|
const format = payload.format;
|
|
@@ -72,6 +68,26 @@ function readPayloadResult(payload) {
|
|
|
72
68
|
return payload;
|
|
73
69
|
}
|
|
74
70
|
|
|
71
|
+
function readPayloadCommandOptions(payload) {
|
|
72
|
+
if (typeof payload === "object" && payload !== null) {
|
|
73
|
+
const commandOptions = payload.command_options;
|
|
74
|
+
if (typeof commandOptions === "object" && commandOptions !== null) {
|
|
75
|
+
return commandOptions;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function readPayloadGlobalOptions(payload) {
|
|
82
|
+
if (typeof payload === "object" && payload !== null) {
|
|
83
|
+
const global = payload.global;
|
|
84
|
+
if (typeof global === "object" && global !== null) {
|
|
85
|
+
return global;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
|
|
75
91
|
export async function runCalendarPackage(options, global) {
|
|
76
92
|
const loaded = await ensureCalendarCoreModule();
|
|
77
93
|
return loaded.runCalendar(options, global);
|
|
@@ -79,11 +95,14 @@ export async function runCalendarPackage(options, global) {
|
|
|
79
95
|
|
|
80
96
|
export function renderCalendarPackageOutput(context) {
|
|
81
97
|
const result = readPayloadResult(context.payload);
|
|
82
|
-
if (!calendarCore || !
|
|
98
|
+
if (!calendarCore || !isCalendarResult(result)) {
|
|
83
99
|
return null;
|
|
84
100
|
}
|
|
85
|
-
const options =
|
|
86
|
-
|
|
101
|
+
const options =
|
|
102
|
+
context.options && Object.keys(context.options).length > 0
|
|
103
|
+
? context.options
|
|
104
|
+
: readPayloadCommandOptions(context.payload);
|
|
105
|
+
const global = context.global ?? readPayloadGlobalOptions(context.payload);
|
|
87
106
|
const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
|
|
88
107
|
if (outputFormat === "markdown") {
|
|
89
108
|
return `${calendarCore.renderCalendarMarkdown(result)}\n`;
|
|
@@ -60,10 +60,6 @@ function isCalendarResult(value: unknown): value is CalendarResult {
|
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
function isCalendarCommand(command: unknown): boolean {
|
|
64
|
-
return command === "calendar" || command === "cal";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
63
|
function readPayloadFormat(payload: unknown): "toon" | "json" {
|
|
68
64
|
if (typeof payload === "object" && payload !== null) {
|
|
69
65
|
const format = (payload as { format?: unknown }).format;
|
|
@@ -81,6 +77,26 @@ function readPayloadResult(payload: unknown): unknown {
|
|
|
81
77
|
return payload;
|
|
82
78
|
}
|
|
83
79
|
|
|
80
|
+
function readPayloadCommandOptions(payload: unknown): CalendarOptions {
|
|
81
|
+
if (typeof payload === "object" && payload !== null) {
|
|
82
|
+
const commandOptions = (payload as { command_options?: unknown }).command_options;
|
|
83
|
+
if (typeof commandOptions === "object" && commandOptions !== null) {
|
|
84
|
+
return commandOptions as CalendarOptions;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function readPayloadGlobalOptions(payload: unknown): GlobalOptions {
|
|
91
|
+
if (typeof payload === "object" && payload !== null) {
|
|
92
|
+
const global = (payload as { global?: unknown }).global;
|
|
93
|
+
if (typeof global === "object" && global !== null) {
|
|
94
|
+
return global as GlobalOptions;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
|
|
84
100
|
export async function runCalendarPackage(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {
|
|
85
101
|
const loaded = await ensureCalendarCoreModule();
|
|
86
102
|
return loaded.runCalendar(options, global);
|
|
@@ -88,11 +104,14 @@ export async function runCalendarPackage(options: CalendarOptions, global: Globa
|
|
|
88
104
|
|
|
89
105
|
export function renderCalendarPackageOutput(context: ServiceOverrideContext): string | null {
|
|
90
106
|
const result = readPayloadResult(context.payload);
|
|
91
|
-
if (!calendarCore || !
|
|
107
|
+
if (!calendarCore || !isCalendarResult(result)) {
|
|
92
108
|
return null;
|
|
93
109
|
}
|
|
94
|
-
const options =
|
|
95
|
-
|
|
110
|
+
const options =
|
|
111
|
+
context.options && Object.keys(context.options).length > 0
|
|
112
|
+
? (context.options as CalendarOptions)
|
|
113
|
+
: readPayloadCommandOptions(context.payload);
|
|
114
|
+
const global = context.global ?? readPayloadGlobalOptions(context.payload);
|
|
96
115
|
const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
|
|
97
116
|
if (outputFormat === "markdown") {
|
|
98
117
|
return `${calendarCore.renderCalendarMarkdown(result)}\n`;
|
|
@@ -66,7 +66,7 @@ export function activate(api) {
|
|
|
66
66
|
api.registerCommand(completionTagsCommand());
|
|
67
67
|
api.registerService("output_format", (context) => {
|
|
68
68
|
const rendered = renderGuideShellPackageOutput(context);
|
|
69
|
-
return rendered ??
|
|
69
|
+
return rendered ?? null;
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -71,7 +71,7 @@ export function activate(api: ExtensionApi): void {
|
|
|
71
71
|
api.registerCommand(completionTagsCommand());
|
|
72
72
|
api.registerService("output_format", (context) => {
|
|
73
73
|
const rendered = renderGuideShellPackageOutput(context as ServiceOverrideContext);
|
|
74
|
-
return rendered ??
|
|
74
|
+
return rendered ?? null;
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "pm-
|
|
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.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|
|
@@ -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,
|
|
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-
|
|
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-
|
|
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
|
-
| `
|
|
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-
|
|
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`, `
|
|
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
|
+
```
|
|
@@ -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-
|
|
3
|
-
"version": "1.
|
|
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-
|
|
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": [
|