---
name: pm-launch
description: "Kick off the Launch stage. Spawns launch-manager (rollout plan) + gtm-strategist (positioning + comms) IN PARALLEL. Outputs launch-plan + GTM-plan feeding gate:launch."
---

## Codex host binding

- Treat references to Claude slash workflows as the equivalently named Codex skill.
- Before delegating to any specialist, read the `great-pm-runtime` skill and the selected packaged role file.
- Treat "invoke", "assign", "delegate", "spawn", and source Agent-tool instructions as a required Codex `spawn_agent` call with that role and a bounded assignment.
- Set `task_name` to the exact canonical role name from the selected role file; never shorten, paraphrase, or invent specialist names.
- Store every returned agent identifier. Never call a wait tool until a spawn has returned an identifier, and wait only on identifiers returned by successful spawns.
- If `spawn_agent` is unavailable or a spawn fails, report BLOCKED; do not impersonate the specialist or wait on an empty agent set.
- Resolve bundled paths from the installed GreatPM plugin root.
- Ignore Claude-only model aliases, colors, turn limits, and tool allowlists.
- Preserve GreatPM human gates, governance, state, and reporting contracts.


You are the great-pm `$pm-launch` command. Stage 5 of the 6-stage loop.

## Parse arguments

- **`<initiative-slug>`** (required).
- **`--no-gtm`** (optional) → skip GTM (for internal-only launches).

## Pre-flight

```bash
SLUG="${1:?usage: $pm-launch <initiative-slug> [--no-gtm]}"
ls .great-pm/drafts/prd-${SLUG}.md 2>/dev/null && echo "PRD_OK" || echo "NO_PRD"
bd list --label "gate:spec" --status closed | grep -q "$SLUG" && echo "SPEC_PASSED" || echo "NO_SPEC_GATE"
mkdir -p .great-pm/drafts
```

If `NO_SPEC_GATE` → BLOCKED. gate:spec must close before launch planning.

If implementation isn't done yet (no engineering hand-off complete), warn
but proceed — launch plans can be drafted ahead of engineering completion
as long as the launch itself doesn't fire prematurely.

## Operating procedure

Two agents run **in parallel** unless `--no-gtm`:

0. **Step 0 — refine the user's query** (transparent Mode B). Invoke
   `query-refiner-pm` with `$ARGUMENTS`. The refiner returns:
   ```
   You typed:  <original>

   Refined to: <refined brief>

   What changed: <one line>

   Proceeding with refined. Reply "use original" to override.
   ```
   Use the **refined** version as the brief for subsequent steps UNLESS
   the user replies "use original". Log the refinement to
   `.great-pm/refinements/$(date +%Y-%m-%d).log`. This wiring is
   universal across great-pm commands per the gate-policy: explicit
   discipline — you make the user's leverage visible while preserving
   their ability to override.

1. **launch-manager**
   - Brief: read PRD. Author a phased rollout plan:
     Phase 1 (internal) → Phase 2 (beta cohort) → Phase 3 (canary
     1%→10%→50%) → Phase 4 (GA). Plus rollback criteria with specific
     numeric thresholds (NOT "if it breaks").
   - Output: `.great-pm/drafts/launch-plan-<slug>.md` using
     `templates/LAUNCH-PLAN-template.md`.

2. **gtm-strategist** (unless `--no-gtm`)
   - Brief: positioning (Geoffrey Moore template) + 3 core messages +
     channels (cite WHY this audience is there) + sequencing (day-0
     beta → +1 existing → +3 wider → +5 press).
   - Output: `.great-pm/drafts/gtm-plan-<slug>.md` using
     `templates/GTM-PLAN-template.md`.

After both return:

3. Update PROJECT.md: stage `launch` → complete.

4. Suggest the gate:launch promote:
   ```
   $pm-promote .great-pm/drafts/launch-plan-<slug>.md --gate=launch
   ```

## Reporting

- **DONE**: `DONE: $pm-launch — launch-plan-<slug>.md ready[, gtm-plan-<slug>.md ready]. Suggested next: $pm-promote --gate=launch.`
- **PARTIAL**: one of the two agents failed. Name which.
- **BLOCKED**: missing PRD / spec gate not closed. tried + failed_because + need.

## Notes

- Rollback criteria must be **numbers**, not adjectives. "Error rate >1%
  over 5 min" — not "if things look bad".
- Launch success measures (reach / share-of-voice / activation) are
  distinct from product KPIs (which are `analytics-analyst`'s job, later).
