/pm:sync scans your project for work that should be tracked as epics but isn’t yet. It picks up new OpenSpec proposals and Superpowers plans found on disk, and — when a github-issues tracker is configured — pulls open GitHub Issues in as untriaged epics. After sync completes, PM prompts you to triage any newly registered epics: assign priorities, set statuses, and add any dependency links.
What it registers
OpenSpec proposals
Any
openspec/changes/<id>/ directory not yet tracked becomes an openspec-lane epic registered with status: untriaged and priority: P?.Superpowers plans
Any Superpowers plan file not yet tracked becomes a
superpowers-lane epic registered with status: untriaged and priority: P?.GitHub Issues
When a
github-issues tracker is configured, open issues without a matching externalId become claude-code-lane epics. Default priority is P2; a P0, P1, P2, or P3 label on the issue overrides the default.Deduplication
Sync never creates duplicate epics. For OpenSpec and Superpowers sources, deduplication is by the epic’s id — if an epic with that id already exists instate.json, the candidate is skipped silently. For GitHub Issues, deduplication is by externalId (the issue number): if any existing epic already carries that externalId, the issue is not re-registered. Re-running /pm:sync as many times as you like is always safe.
When to run it
Run/pm:sync after pulling changes from another branch that may have introduced new OpenSpec proposals, after generating new proposals in the current session, at the start of a session when you know new work was filed in your issue tracker since you last worked, or any time you suspect the epic index is out of date relative to disk.
For
github-issues sync, the engine itself only scans local files and never calls an external system directly. When github-issues is configured (via /pm:tracker), the sync process fetches open issues, deduplicates them against existing externalId values in state.json, and registers each new issue as an untriaged claude-code-lane epic at P2. Any P0–P3 label present on the issue overrides the P2 default. Configure your GitHub tracker via /pm:tracker before expecting issue sync to work.