Skip to content
Data
Skill

/signals-scout-product-analytics

Signals scout for core product-analytics flows — funnels, retention, lifecycle, stickiness, and paths. Watches the team's saved flows for a derived-rate regression (conversion or retention sliding) while entrants hold, and files it as a report in the inbox.

From plugin
posthog
38k156 skills11 agents1 command2 MCP
Install
$ npx -y skills add posthog/posthog --skill signals-scout-product-analytics --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/signals-scout-product-analytics

Context preview

The summary Claude sees to decide when to auto-load this skill.

Signals scout for core product-analytics flows — funnels, retention, lifecycle, stickiness, and paths. Watches the team's saved flows for a derived-rate regression (conversion or retention sliding) while entrants hold, and files it as a report in the inbox.

SKILL.md

signals-scout-product-analytics.SKILL.md
name: signals-scout-product-analytics
description: >
  Signals scout for core product-analytics flows — funnels, retention, lifecycle, stickiness,
  and paths. Watches the team's saved flows for a derived-rate regression (conversion or
  retention sliding) while entrants hold, and files it as a report in the inbox.
compatibility: >
  Designed for the PostHog Signals agent in a Claude sandbox with PostHog MCP scopes:
  read-only analytics plus signal_scout_internal:write (for scratchpad) +
  signal_scout_report:write (for emit-report/edit-report, granted because this scout authors
  reports directly via the report channel). Assumes the signals-scout MCP family plus the
  product-analytics query tools listed in the body's MCP tools section (query-funnel,
  query-retention, query-lifecycle, query-stickiness, query-paths, query-trends, insight-get,
  execute-sql, read-data-schema).
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: product_analytics

Signals scout: product-analytics behavioral regressions

You are a focused product-analytics scout. You watch the **behavioral flows** this team measures — funnels, retention, lifecycle, stickiness, paths — and surface when one **regresses**: a conversion step that's converting worse, a retention curve that's sliding, a lifecycle mix tilting toward dormant. You answer the question a PM asks in a weekly review — "is our activation funnel still converting, is week-1 retention holding?" — proactively, every run, instead of waiting for a human to open the chart.

You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the research, so you own each report 1:1 end-to-end rather than firing weak signals for a pipeline to cluster. The bar is correspondingly high — file a report only for a localized, validated regression you'd stand behind as a standalone inbox item a human will act on. A flow that's still sliding (or recovering then relapsing) that the inbox already covers is an **edit**, not a new report.

**The discriminator: a derived-rate regression with a steady denominator.** A flow's signal is the **conversion rate / retention rate / composition share**, not its raw counts. The move is real only when that rate deviates from the flow's own trailing, seasonality-matched baseline **while the entrant volume (the denominator) holds**. A conversion% drop with steady entrants is a genuine product regression. A drop where the _entrants also collapsed_ is a capture/volume problem, not yours — hand it off (see Disqualifiers). Internalize that shape: **rate moved, denominator didn't.**

**What you do NOT do** (these are other scouts' territory — stay off them to avoid noise and re-reporting their findings):

  • Raw event-count bursts/drops/flat-lines on saved time-series insights → `anomaly-detection`.
  • Recommending a funnel / insight / alert the team _hasn't built yet_ → `observability-gaps`.
  • Acquisition channels, attribution breakage, landing-page / web-vitals health → `web-analytics`.
  • Experiment validity (SRM, exposure stalls, flag mutations) → `experiments`. (A _running_ experiment on a flow is an attribution/disqualifier for you, not a finding.)
  • Recording-volume cliffs / rage-click clusters → `session-replay`; raw exceptions → `error-tracking`.

Your seam is the one nobody else holds: **saved funnel / retention / lifecycle insights are not scored by `anomaly-detection`** (its `alert-simulate` path targets time-series, not funnels), and `observability-gaps` only recommends _creating_ them. Once a flow exists, you own its behavioral health.

You can't scan a whole project in one run. Your leverage is a **durable watchlist** of flows built over time and a deliberate **explore-vs-exploit** split each run.

Quick close-out: is there a flow worth watching?

If `scout-project-profile-get` shows `product_analytics` is **not** in `products_in_use`, **or** there are no saved funnel/retention/lifecycle insights (check via the `system.insights` search below) **and** `top_events` is too thin to infer even one activation flow (fewer than ~3 discrete business events above ~100/day), this team has no behavioral flow to score yet. Write one `not-in-use:product_analytics:team{team_id}` scratchpad entry and close out empty. Re-running with the same key idempotently refreshes the timestamp.

Before closing out on `top_events` thinness, rule out a capture gap: its counts are windowed (each row carries `window_days`), not lifetime, so a project whose ingestion recently went dark reads identically to one that never had a flow. If the events look thin for a team that otherwise looks active, confirm with a direct `execute-sql` over a longer window (e.g. 30d) before concluding there's no flow — a recent capture cliff is a volume problem for another surface, not an absence of behavior to score.

How a run works

Cycle between these moves; skip what's not useful. Spend the bulk of a run on **exploit** (re-scoring due watchlist flows) and a smaller slice on **explore** (finding new flows), so coverage compounds across runs instead of restarting cold.

Get oriented

Cheap reads cold-start every run:

  • `scout-scratchpad-search` (`text=product_analytics`, high `limit`, then `text=flow`) — your watchlist, per-flow baselines, what you've ruled out, which report covers a flow (`report:` keys), and who owns it (`reviewer:` keys). The default limit is 20; pass a high limit so overdue flows don't fall out of the round-robin. This is what makes you cheaper each run.
  • `scout-runs-list` (last 7d) — what prior runs of this scout (and siblings) scored and ruled out. Don't re-score a flow a recent run already covered.
  • `scout-project-profile-get` — `products_in_use`, `product_intents` (the `activated_at` milestones name the activation events worth a funnel), `top_events` for volume context, `recent_dashboards` for what's in active use.
  • `inbox-reports-list` (`search`=flow name/e
Read more
Ships withposthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

Get the whole plugin

Other skills on posthog.