Skip to main content
/pm:init bootstraps PM in your project. Run it once in any directory — it creates the .conductor/ state directory, scans for existing OpenSpec proposals to register as epics, writes the managed rules block into CLAUDE.md, and renders the initial PROJECT.md. Until you run this command, all of PM’s hooks stay dormant in your project, so this is always your first step.

What it creates

.conductor/state.json

The single source of truth for every epic, the detour stack, tracker config, and the pmVersion stamp. All engine operations read and write this file.

CLAUDE.md rules block

A managed section injected into your project’s CLAUDE.md that carries the PM discipline — lanes, statuses, detour workflow, and decision rules — into every Claude Code session automatically.

PROJECT.md

A generated project briefing view rendered from state.json. Re-rendered on every /pm:status, /pm:sync, and /pm:upgrade call.

What happens during init

1

Engine scaffolds state

The conductor engine creates .conductor/state.json with an empty epic index, an empty detour stack, and a pmVersion stamp matching your installed version.
2

Scans for existing work

PM scans for OpenSpec change directories (openspec/changes/<id>/). Any found are registered as untriaged epics in the openspec lane so no prior work is lost.
3

Writes the CLAUDE.md rules block

The managed rules block is inserted into CLAUDE.md (or the file is created if it doesn’t exist). The block is delimited so future /pm:upgrade calls can refresh it without touching your surrounding content.
4

Renders PROJECT.md

The engine renders the initial project briefing from state, giving you a human-readable snapshot of every registered epic and the current detour stack (empty at this point).
5

Offers tracker mirroring (conditional)

If PM detects real signals of active issue-tracker usage — a connected tracker MCP, issue-key conventions in your history, or an explicit note in your codebase — it offers to connect an external mirror. Being hosted on GitHub, GitLab, or Bitbucket is not a signal. Saying no loses nothing; PM tracks everything locally regardless.
6

Shows /pm:status output

Init finishes by printing the full conductor briefing so you can see your registered epics and immediately begin triage.

After init

Once init completes, PM prompts you to triage your epics. Triage means:
  • Designating exactly one epic as active (the thing being built right now)
  • Assigning each epic a priority of P0, P1, P2, or P3
  • Setting each epic’s status to active, queued, or later
Until you triage them, any epics discovered during the scan sit in the untriaged lane. PM won’t recommend untriaged epics via /pm:next — triage is the gate that admits work into the priority queue.

Idempotency

If .conductor/state.json already exists, init is a complete no-op — you can re-run it safely. If you genuinely need to reset your project’s PM state, delete .conductor/state.json and run /pm:init again, though this is rarely the right move. For version migrations after installing a new PM release, use /pm:upgrade instead — it preserves your epic history and runs the correct migration scripts.

Example output after init

PM’s hooks stay dormant in your project until /pm:init runs. This is intentional, matching the same design as openspec init. Running init is what arms the hooks for all future sessions.