Product pulse — single-page metrics report
Produce a daily or weekly pulse report that measures the locked product strategy's metrics. Adapted from /ce-product-pulse in EveryInc/compound-engineering-plugin v3.5.0 (MIT).
The pulse closes the strategy↔pulse↔ship loop: strategy declares metrics, pulse measures them, learnings flow back to strategy refreshes.
When to run
Invoke when the user says:
- "Run product pulse for [product]"
- "Daily pulse"
- "Weekly pulse"
- "How's [product] doing?"
- Cron-scheduled (default: 8am daily — via the
/scheduleskill or Trigger.dev cron)
Do NOT invoke when:
- User wants a marketing dashboard →
/dashboard - User wants a deep analytics investigation →
data:analyze - User wants a competitive analysis →
/competitor-research - No locked
strategy-docexists for the product → run/strategy-docfirst; pulse is meaningless without locked metrics
Inputs
Required:
- Locked
strategy-doc(defines the metrics this pulse measures) - Product name / ship slug
Optional but valuable:
- MCP connections: PostHog / Mixpanel / Amplitude (usage), Datadog / Sentry / Logfire / Honeycomb (system perf), Stripe / Paddle (revenue), GSC (search), custom DB read replicas
- Latest user conversation / interview note (for the K3 qualitative pairing)
- Previous pulse for delta comparison
If MCP connection missing for a metric: flag the data gap explicitly; don't fabricate a number. Per .claude/rules/financial-data.md — never invent metrics.
Steps
- Phase 1 — Load locked strategy. Read
strategy-doc(the upstream dependency). Extract the metrics section. These are what we measure. - Phase 2 — Pull metrics. Query each MCP for the named metrics. Compare to previous period (default 7 days). Flag anomalies (>20% delta or threshold cross).
- Phase 3 — Pull system signals. Query infra MCPs (Datadog / Sentry / etc.) for errors, latency, regressions.
- Phase 4 — Pull qualitative. Find at least one user conversation, support ticket, or interview note from the period. If none: flag as a data gap and suggest a user call.
- Phase 5 — Compose pulse. Apply 4-section structure. Apply 30-40 line discipline. Cut anything that doesn't move strategy thinking.
- Phase 6 — Self-roast. Run checks below.
- Phase 7 — Push. GDoc / Notion + Slack notification (if cron-scheduled).
MCP credit gate
This skill calls free / read-only operations on PostHog / Mixpanel / Amplitude / GSC / Datadog / Sentry / Stripe MCPs. None spend credits. Confirm with the user only if connecting a new MCP for the first time.
Self-roast (run before push)
- All 4 sections present (Headlines / Usage / System Performance / Followups)
- Total line count 30-40 (cut if longer; anything over 40 is dilution)
- Every metric in pulse traces to a metric in the locked
strategy-doc - Anti-vanity-metrics rule applied (K2): no page views / impressions / MAU without conversion
- At least one qualitative signal present (K3): quoted user / ticket / interview
- Anomalies flagged (>20% delta) — with a 1-line interpretation, not just "X went up"
- Each followup has an owner + suggested next step (not just "look into this")
- No fabricated numbers — data gaps flagged explicitly per
financial-data.md
{Product} pulse — {YYYY-MM-DD}
Period: {start} → {end} · Strategy ref: {strategy-doc path/version}
Headlines
- {metric}: {value} ({±%} vs {prev}) — {1-line interpretation} -...
Usage
- {metric_1}: {value} ({±%}) — {note} -...
System Performance
- {error rate / latency / uptime} — {note} -...
Followups
- {problem} (owner: {name}) — {next step}. User signal: "{quote}" — {source} -...
## Composition rule reference
Pulse is the measurement node in the **PM closed loop** (P3). See [.claude/rules/pm-loop.md](../../../../../rules/pm-loop.md). Cron pattern (P8): schedule via the `/schedule` skill or Trigger.dev cron.
## Attribution
Adapted from [EveryInc/compound-engineering-plugin](https://github.com/EveryInc/compound-engineering-plugin) v3.5.0 (MIT). Source pattern: `/ce-product-pulse`. Single-page discipline: P4 from /steal Phase 4.