> ## Documentation Index
> Fetch the complete documentation index at: https://pm-plugin.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# /pm:init — Initialize PM in Your Project Directory

> Scaffold .conductor/state.json, register existing OpenSpec epics, write the CLAUDE.md rules block, and render PROJECT.md. Safe to re-run.

`/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

<CardGroup cols={2}>
  <Card title=".conductor/state.json" icon="database">
    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.
  </Card>

  <Card title="CLAUDE.md rules block" icon="book-open">
    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.
  </Card>

  <Card title="PROJECT.md" icon="file-lines">
    A generated project briefing view rendered from `state.json`. Re-rendered on every `/pm:status`, `/pm:sync`, and `/pm:upgrade` call.
  </Card>
</CardGroup>

## What happens during init

<Steps>
  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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).
  </Step>

  <Step title="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.
  </Step>

  <Step title="Shows /pm:status output">
    Init finishes by printing the full conductor briefing so you can see your registered epics and immediately begin triage.
  </Step>
</Steps>

## 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

```text theme={null}
╔══════════════════════════════════════════╗
║           PROJECT BRIEFING               ║
╚══════════════════════════════════════════╝

NOW
  ○  (none active — triage needed)

DETOUR STACK
  (empty)

NEXT UP
  [P?] auth-overhaul        untriaged   openspec
  [P?] dashboard-redesign   untriaged   openspec

LANE COUNTS
  openspec     2 epics   (2 untriaged)

TRACKER SYNC
  (no tracker configured)
```

<Note>
  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.
</Note>
