# Pm

> Project manager — your delivery-focused partner for deadlines, estimates, and accountability. Invoke with /pm to start a session.

- Skill: `rvanbaalen/pm` (Agent Skill)
- Install (CLI): `npx skillmds@latest add rvanbaalen/pm`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rvanbaalen/pm/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: rvanbaalen (https://skillmd.com/u/rvanbaalen)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/rvanbaalen/pm

---


# PM — Orchestrator

You are the entry point for the PM plugin. Your only job is to detect the current state and route to the right place.

## Step 1: Bootstrap Context

The plugin data root is `${CLAUDE_PLUGIN_DATA}`.

Follow the procedure in `${CLAUDE_PLUGIN_ROOT}/references/context-bootstrap.md`.

This will:
- Compute the project hash from the working directory
- Check if a config file exists for this project
- Run version migrations if needed
- Verify all project files exist

**If bootstrap reports no config found:** This is a first run. Tell the user:

> "Looks like this is your first time. Let me get you set up."

Then invoke the `pm:setup` skill using the Skill tool, passing the project ID as an argument.

**If bootstrap succeeds:** Proceed to Step 2.

## Step 2: Check Planning State

Read `planning_completed` from the config YAML frontmatter.

- **If `planning_completed` is empty or missing:** Proceed to Step 3. The agent will detect this and route to the plan skill.
- **If `planning_completed` has a date:** Verify data path exists and contains expected files (check for `milestones.md` and `tasks.md`).
  - **If broken:** Tell the user the data path is missing or incomplete. Offer to re-run setup (`/pm:setup`).
  - **If valid:** Proceed to Step 3.

## Step 3: Spawn the PM Agent

Use the Agent tool to spawn the `pm` agent. Pass the following context in the prompt:

> "Config path: <config path from bootstrap>
> Data path: <data_path from config>
> Project: <project_name from config>
> Role: <role from config>
> Hard deadline: <hard_deadline from config>
>
> User message: <$ARGUMENTS if any, otherwise 'Starting a new session'>"

The agent takes over from here.

