Kick off the Measure & Learn stage. Spawns analytics-analyst (read-out) + experiment-designer (next test). Outputs performance read-out and feeds 2–3 next questions back into Discover (the loop closes).
Installs into .claude/skills of the current project.
Are you the author of Pm Measure?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/vandanaajaydubey111-pm-measure)
---
name: pm-measure
description: "Kick off the Measure & Learn stage. Spawns analytics-analyst (read-out) + experiment-designer (next test). Outputs performance read-out and feeds 2–3 next questions back into Discover (the loop closes)."
---
## 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-measure` command. Stage 6 — the loop closes here.
## Parse arguments
- **`<initiative-slug>`** (required) — must have launched.
- **`--window=<N>days`** (default: 30) → post-launch read-out window.
## Pre-flight
```bash
SLUG="${1:?usage: $pm-measure <initiative-slug> [--window=<N>days]}"
ls .great-pm/drafts/launch-plan-${SLUG}.md 2>/dev/null && echo "LAUNCH_OK" || echo "NO_LAUNCH"
ls .great-pm/drafts/metrics-plan-${SLUG}.md 2>/dev/null && echo "METRICS_OK" || echo "NO_METRICS"
bd list --label "gate:launch" --status closed | grep -q "$SLUG" && echo "LAUNCH_PASSED" || echo "NO_LAUNCH_GATE"
mkdir -p .great-pm/drafts
```
If `NO_LAUNCH_GATE` → BLOCKED. gate:launch must close (i.e. the launch
actually happened) before measurement.
If `NO_METRICS` → WARN. The read-out is much weaker without a pre-launch
metrics plan. Surface this honestly.
## 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. **analytics-analyst**
- Brief: read metrics plan (if it exists), pull current data, produce
a performance read-out covering:
- Headline (one paragraph, honest, no victory lap).
- North Star + KPI movement table (with confidence intervals).
- Funnel by segment.
- Retention cohorts.
- NPS/CSAT verbatim themes.
- Launch success measures (gtm-strategist's).
- **Causal note** — observed data ≠ controlled test.
- **2–3 next questions for Discover** (the loop closes).
- Open data gaps.
- Output: `.great-pm/drafts/performance-readout-<slug>.md` using
`templates/PERFORMANCE-READOUT-template.md`.
2. **experiment-designer** (conditional)
- If the read-out surfaces an interesting hypothesis worth testing,
experiment-designer drafts an experiment.
- Output: `.great-pm/drafts/experiment-<hypothesis-slug>.md` using
`templates/EXPERIMENT-template.md`.
3. Update PROJECT.md: stage `measure` → complete. Add the 2–3 next
questions under the initiative's "Open questions" list — these feed
the next $pm-discover cycle.
## Reporting
- **DONE**: `DONE: $pm-measure — performance-readout-<slug>.md ready. <N> next-cycle questions logged[, experiment-<slug>.md drafted].`
- **WEAK**: read-out produced but pre-launch metrics plan was missing — confidence is degraded. Recommend pm-audit on Metrics dimension.
- **BLOCKED**: launch gate not closed / no data accessible. tried + failed_because + need.
## Notes
- "A flat or negative result honestly told > a flattering one creatively
framed." The read-out template enforces this.
- The loop **closes** here — the next-cycle questions are the only output
that feeds back into $pm-discover. Don't skip them.
- If you find yourself rationalizing a flat result, run
`$pm-review --lens=generic` on the read-out before believing yourself.