pm CLI โ Claude Code Plugin
Native pm integration for Claude Code via the Model Context Protocol (MCP). Claude can use all pm operations as native tools โ no shell invocation, no context switching.
Architecture
pm-cli/ (repo root)
โโโ .claude-plugin/
โ โโโ marketplace.json # Root marketplace catalog โ read by /plugin marketplace add
โโโ plugins/pm-claude/
โ โโโ .claude-plugin/
โ โ โโโ plugin.json # Claude Code plugin manifest (name: "pm-claude")
โ โโโ .mcp.json # MCP server config using ${CLAUDE_PLUGIN_ROOT}
โ โโโ skills/
โ โ โโโ pm-workflow/ # Auto-invoked: orient โ claim โ implement โ close
โ โ โโโ pm-developer/ # Developer execution loop with evidence requirements
โ โ โโโ pm-release/ # Release gate sequence and evidence linking
โ โ โโโ pm-audit/ # Comprehensive audit suite
โ โ โโโ pm-planner/ # Planning: decompose, prioritize, triage
โ โโโ commands/
โ โ โโโ pm-status.md # /pm-status
โ โ โโโ pm-start-task.md # /pm-start-task [id|keywords]
โ โ โโโ pm-close-task.md # /pm-close-task [id]
โ โ โโโ pm-triage.md # /pm-triage <request>
โ โ โโโ pm-audit.md # /pm-audit
โ โ โโโ pm-search.md # /pm-search <query>
โ โ โโโ pm-new.md # /pm-new <title>
โ โ โโโ pm-list.md # /pm-list [filter]
โ โ โโโ pm-calendar.md # /pm-calendar [view]
โ โโโ hooks/
โ โ โโโ hooks.json # SessionStart hook definition
โ โ โโโ session-start.mjs # Injects pm context at session start
โ โโโ agents/
โ โ โโโ pm-coordinator.md # Subagent for multi-item coordination
โ โโโ scripts/
โ โ โโโ pm-mcp-server.mjs # MCP server launcher (repo โ npx fallback)
โ โโโ README.md # User-facing installation guide
โโโ scripts/
โโโ smoke-claude-plugin.mjs # Full plugin smoke test (run in CI)
The MCP server itself lives at src/mcp/server.ts (compiled to dist/mcp/server.js) and is bundled with the npm package as the pm-mcp binary.
Capability Inventory
The canonical user-facing inventory for MCP tools, slash commands, skills, subagents, and pm_run actions lives in plugins/pm-claude/README.md. This page focuses on architecture, launcher behavior, and smoke-test expectations so capability counts do not drift between docs.
Installation Methods
1. Plugin marketplace (recommended โ full feature set)
Add the pm-cli GitHub repo as a marketplace source, then install:
/plugin marketplace add unbraind/pm-cli
/plugin install pm-claude@pm
This clones the repo, reads .claude-plugin/marketplace.json at the root, installs the plugin from ./plugins/pm-claude/, and configures the MCP server, skills, slash commands, subagents, and the session hook automatically.
2. Global MCP via Claude Code CLI (MCP tools only)
claude mcp add --transport stdio pm-mcp -- npx -y --package=@unbrained/pm-cli@latest pm-mcp
Gives you the 26 MCP tools without skills or slash commands.
3. Direct project .mcp.json (project-scoped MCP only)
Add to the project's .mcp.json:
{
"mcpServers": {
"pm-mcp": {
"command": "node",
"args": ["./plugins/pm-claude/scripts/pm-mcp-server.mjs"],
"env": { "PM_AUTHOR": "claude-code-agent" }
}
}
}
The repo root .mcp.json uses this approach โ activates automatically when Claude Code opens this repository.
MCP Server Launcher
plugins/pm-claude/scripts/pm-mcp-server.mjs resolves the server in order:
PM_CLI_MCP_SERVERenv var (explicit override)dist/mcp/server.jswalking up from the launcher (repo checkout)npx -y --package=@unbrained/pm-cli@latest pm-mcp(npm-installed fallback)
This means the plugin works both from a repo checkout and from an npm-cached plugin install.
Session Start Hook
hooks/session-start.mjs runs at the start of each Claude Code session. It:
- Checks for
.agents/pm/settings.jsonin the current workspace. - Exits silently if pm is not initialized.
- Runs
pm context --limit 5 --jsonwith a 5-second timeout. - Injects a compact status line into the session context.
Example injection:
pm tracker: 3 in_progress, 2 open
โข [pm-xxxx] Fix authentication bug (in_progress)
โข [pm-yyyy] Add calendar feature (in_progress)
โข [pm-zzzz] Update docs (open)
Use pm_context tool or /pm-status for full details.
Testing the Plugin
Full Claude Code plugin smoke test (runs in CI)
node scripts/smoke-claude-plugin.mjs
# or:
pnpm smoke:claude-plugin
Verifies: plugin file structure, manifest name consistency, MCP initialize, 26 tools present, full workflow (init โ create โ claim โ update โ link files/docs/tests โ get โ context โ search โ validate โ health), and session-start hook.
MCP server smoke test
node scripts/smoke-codex-plugin-mcp.mjs
# or:
pnpm smoke:codex-plugin
Contract-safe preflight (recommended for CI agents)
pm contracts --schema-only --json
pm contracts --command extension --flags-only --json
pm extension --doctor --project --detail summary --strict-exit
pm extension --reload --project
Why this matters:
pm contractsis extension-aware and reflects active runtime action/flag surfaces.extension --doctornow includes policy diagnostics and deterministic warning codes.extension --reloadprovides cache-busted module reload for extension dev loops.--strict-exitturns warning states into CI-failing exits when governance gates require it.
CLI simplification compatibility notes
The conservative CLI simplification pass adds invocation normalization and replay metadata that plugin/tooling flows should consume:
- long-option aliases/shape variants and high-confidence typos are normalized before parse
- setup resolution can auto-discover initialized tracker roots from ancestor directories
- structured error envelopes may include
recoverywith replay-ready guidance (attempted_command,normalized_args,provided_fields,missing,suggested_retry)
For migration details and automation expectations, see:
Validate manifests
claude plugin validate .claude-plugin/marketplace.json
claude plugin validate plugins/pm-claude/.claude-plugin/plugin.json
Manual verification
After installing the plugin:
- Start Claude Code:
claude(in a pm-initialized directory) - Ask: "What's the current pm project status?"
โ Verify Claude uses
pm_context(not Bash) - Try
/pm-statusโ active items + calendar - Try
/pm-search authenticationโ search results - Try
/pm-new Fix the login timeout bugโ duplicate-checked create - Try
/pm-start-task pm-xxxxโ claim and start - Try
/pm-calendar weekโ upcoming deadlines - Try
/pm-close-task pm-xxxxโ verify, evidence, close
Compatibility
| pm-cli version | Plugin version | Claude Code version |
|---|---|---|
| 2026.5.x+ | 1.0.0 | Any current |
The MCP server uses JSON-RPC 2.0 over stdio with protocol version 2025-06-18.
Extension Policy Diagnostics
When extension governance policy is configured (settings.extensions.policy), plugin and MCP automation can surface:
extension_policy_violation_*warnings in warn modeextension_policy_blocked_*warnings in enforce modeextension_policy_*_trustwarnings for trust/provenance gates- policy summary counters under
extension doctordetails (summary.policy+triage.policy_*)
This enables contract-safe and policy-safe automation without falling back to shell heuristics.