name: pm-as-code description: "Strict Markdown project management with status.md as the canonical entrypoint: checkbox-only tasks with IDs, acceptance criteria, evidence, and append-only pulse history. Includes no-dependency Bash and Windows (PowerShell/CMD) ticket and collab wrappers for long-running and multi-agent repos."
PM as Code
Contract
- Read
status.mdfirst in every session. - Treat
status.mdas a generated snapshot; never edit it manually. - Keep all actionables as checkboxes only:
- [ ]or- [x]. - Give every task an ID (
T-0001,T-0002, ...), and keep counters instatus.md. - Keep required section order exactly as defined in
references/status-template.md. - Keep acceptance criteria for active tasks keyed by task ID.
- Treat Pulse history as append-only.
- Resolve ambiguity by updating docs, never by relying on chat memory.
- Route every state mutation through collab wrappers by default:
scripts/pm-collab.sh(Bash)scripts/pm-collab.ps1orscripts/pm-collab.cmd(Windows)
- Use
pm-collab run <pm-ticket command...>; it auto-resolves agent identity and auto-claims task IDs when needed. - Agent identity resolution order:
PM_AGENT->CODEX_THREAD_ID->CLAUDE_SESSION_ID-> host fallback. - Use
pm-ticket.*directly only for read-only/status commands or maintenance. - Empty state is not a blocker: if
status.md/.pmdo not exist yet, runpm-collab ... initand continue. - If repo-local wrappers are missing, invoke installed skill scripts directly (for example from
~/.codex/skills/pm-as-code/scripts/or~/.claude/skills/pm-as-code/scripts/).
Done Gate
A task is done only when all are true:
- task checkbox is
[x] - acceptance criteria are
[x] - evidence is recorded
Now / In progress / Blocked / Nextare updated- a new Pulse entry is appended
Session Loop
- Read
status.md. - Select scope (
--scopeorPM_SCOPE) and ensure initialization (pm-collab ... initor automatic bootstrap on firstpm-collab runmutation). - Execute one active task ID (prefer
Now) withpm-collab run .... - If new work appears, create a new task ID immediately via
pm-collab run new .... - If blocked, move task to
Blockedwith explicit blocker text viapm-collab run move .... - On completion, run the Done Gate through
pm-collab run done ...(render is automatic).
Mode Selection
Use ledger mode by default:
scripts/pm-collab.sh(Bash)scripts/pm-collab.ps1orscripts/pm-collab.cmd(Windows)- Prefer scoped ledgers for parallel teams:
--scope <name>(orPM_SCOPE). - Ledger files in
.pm/scopes/<scope>/*are the machine record. - Manual edits to
status.mdare forbidden; script render is authoritative. status.mdis rendered:- single default scope: full snapshot
- multiple scopes (or non-default only): compact scope index to
status.<scope>.md
Notes:
pm-collab run ...works for both single-agent and multi-agent workflows.- Explicit
claim/unclaimremains available for manual reservation control.
Concurrency Policy
Concurrent edits are expected in multi-agent work.
Default behavior:
- Do not hand-edit
status.mdduring concurrent work. - Perform writes through
pm-collab ... runfor lock + claim enforcement. - Re-render snapshot after task updates.
Escalate only on true same-task conflicts:
- target task ID missing
- duplicated task ID
- acceptance criteria block for that ID cannot be mapped safely
If conflict is true same-task:
- create a new task
Resolve status conflict for <ID> - move original task to
Blockedwith blocker noted
For teammate handoffs, use a bounded task pack:
scripts/pm-ticket.sh [--scope <name>] render-context <T-0001> [evidence-tail]scripts/pm-ticket.ps1 [--scope <name>] render-context <T-0001> [evidence-tail]
References
references/pm-rules.mdreferences/status-template.mdreferences/optional-doc-templates.mdreferences/compact-ticket-system.md