---
name: pm-cost
description: "Estimate the cost of a proposed initiative BEFORE kicking it off — LLM cost projection across the 6-stage loop + human-equivalent + savings_x. Use this when an initiative might be too ambitious for the moment."
---

## 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.
- For the spawn tool's `task_name` or `agent_name` identifier, replace canonical role-name hyphens with underscores (`query-refiner-pm` → `query_refiner_pm`). Keep canonical names unchanged in prompts, filenames, verdict logs, and user-facing output; this is an internal identifier mapping, not a role rename.
- 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-cost` command. Project the cost of a proposed initiative before commitment.

## Operating procedure

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. Parse the initiative description from `$ARGUMENTS`.
2. **Sketch the loop stages** this initiative will touch — some skip stages (a quick bug-fix skips Discover & Strategize).
3. **Estimate agent runs per stage**:
   - Discover (if applicable): user-researcher 1, feedback-synthesizer 1, market-analyst 1
   - Strategize (if applicable): product-strategist 1, pricing-strategist 0–1
   - Prioritize: prioritization-analyst 1, roadmap-planner 1
   - Define: spec-writer 1, spec-reviewer 1, metrics-architect 1
   - Launch: launch-manager 1, gtm-strategist 1
   - Measure: experiment-designer 0–1, analytics-analyst 1
   - Cross-cutting: pm-lead orchestrates throughout; pm-reviewer reviews each gate
4. **Pull lessons** — read `.great-pm/lessons.md` for cost outliers tagged similar; apply if relevant.
5. **Sum LLM cost** at Opus-4.7 rates (~$0.50–2 per agent run; orchestrators on the high end).
6. **Human-equivalent** — same work, human team rates ($150/hr PM, $100/hr researcher, $150/hr analyst, +30% coordination).
7. **Output**: range (optimistic – pessimistic), savings_x, top 2 risks.

## Output shape

```
Cost estimate — <initiative>

Loop stages: <list, e.g. Discover → Strategize → Prioritize → Define>
Expected agent runs: <total>

LLM cost:           $<X.XX> (optimistic) — $<Y.YY> (pessimistic)
Human equivalent:   $<H_low> — $<H_high>
Savings_x:          ~<Z>×

Top risks (cost outliers from past):
  - <risk>: <why> → <mitigation>

Assumptions:
  - <key assumption>
```

## Reporting
- **DONE**: `DONE: cost estimate for <initiative> — $<X.XX>–$<Y.YY> LLM, ~<Z>× cheaper than a human team.`
- **BLOCKED**: when description is too vague to sketch stages.

## Notes
This is a budget conversation, not a quote. Treat the range as the honest interval, not a midpoint promise.
