SessionStart hook automatically injects the project briefing every time you start or resume, even after a context compaction. This guide covers the commands you’ll use every day once your project is initialized with /pm:init.
Starting a session
The moment Claude Code opens, PM is already working. TheSessionStart hook fires on startup, resume, and compact events and runs conductor.mjs brief automatically. Without typing a single command, you immediately see:
- The active epic — its lane, priority, and current story progress
- The detour stack — any paused work, with
⚠ reconcile-on-resumeflags where applicable - The next-up queue — your highest-priority
queuedepics ordered P0 → P3
/pm:init, the hook is a complete no-op — it exits silently and does not affect the session in any way.
The daily loop
A typical working day with PM follows a clear rhythm:1
Open Claude Code
The
SessionStart briefing fires automatically. You see the active epic, any paused work, and your queue — no command needed.2
Confirm with /pm:status
Run
/pm:status for a fresh-rendered view. This re-renders PROJECT.md from .conductor/state.json first, so the output always reflects the current state of record.3
Get a work recommendation
Run
/pm:next to receive a concrete recommendation for what to build right now. PM applies the full priority algorithm and tells you exactly which epic to pick up and why.4
Build the active epic in its lane
Work through the epic using whatever workflow its lane requires — an OpenSpec proposal flow, a Superpowers plan, or a direct claude-code build. PM tracks status but stays out of your way while you build.
5
Commit and update status
After each
git commit, PM’s PostToolUse hook nudges you to update the epic’s status in .conductor/state.json. This keeps the index honest and re-renders PROJECT.md automatically.6
Sync new work
Run
/pm:sync to register any new OpenSpec proposals or Superpowers plans that appeared on disk since your last session. If a github-issues tracker is configured, this also pulls open issues in as untriaged epics.Checking status
/pm:status re-renders the briefing on demand. What you see:
- Active epic — the currently in-flight epic, its lane (e.g.
openspec,superpowers,claude-code), and live story progress read directly from checkbox state intasks.mdor your plan file - Detour stack — every paused frame in order, with a
⚠ reconcile-on-resumewarning on any frame whose detour touched code the paused epic depends on - Next-up queue — the highest-priority
queuedepics sorted P0 → P3, withdepends-onblockers named inline - Per-lane counts — how many epics are active, queued, or paused in each lane
.conductor/state.json. PROJECT.md is a generated view — re-render it any time by running /pm:status or the render subcommand directly.
Deciding what’s next
/pm:next applies a strict priority algorithm so you never have to guess:
- If the detour stack is non-empty — the top frame is the answer. Finish or resume that work before picking up anything new.
- Otherwise — find the highest-priority
queuedepic, ordered P0 → P3. - Ties — if two epics share the same priority, PM surfaces both and asks you to decide rather than silently picking one.
depends-on link also shapes the queue: if an epic’s declared dependency is not yet archived, that epic is skipped entirely and the blocker is named explicitly in the output. You always know why something was skipped, not just that it was.
After a context compaction
PM is designed around the assumption that context will compact. Two hooks collaborate to make the recovery seamless:PreCompactfires right before the context window collapses. It runsconductor.mjs snapshot, which re-rendersPROJECT.mdand writes.conductor/brief.txtwith the freshest possible state — so nothing is lost in the collapse.SessionStartfires immediately after (on thecompactevent) and re-injects the full briefing viaadditionalContext. By the time you see the next response, PM has already re-oriented the session around the current queue.
After every git commit
ThePostToolUse hook fires after every Bash tool use. PM runs commit-nudge, which inspects whether the invocation included a git commit and does two things:
- Re-renders
PROJECT.mdso the index stays current. - Inspects the commit shape to detect whether it looks like an unlogged minimal detour — a small, self-contained fix that happened silently. If it does, PM suggests running
log-detourto append a timestamped record to.conductor/detours.log.