Skip to content
Data
Skill

/signals-scout-experiments

Signals scout for PostHog A/B experiments. Watches running experiments for validity threats — sample ratio mismatch, contamination, exposure stalls, mid-run flag mutations — and lifecycle drift.

From plugin
posthog
41k172 skills11 agents2 commands3 MCP

Claude Code

$ npx -y skills add posthog/posthog --skill signals-scout-experiments --agent claude-code

SKILL.md

signals-scout-experiments.SKILL.md
name: signals-scout-experiments
scout-display-name: Experiments
description: >
  Signals scout for PostHog A/B experiments. Watches running experiments for validity threats —
  sample ratio mismatch, contamination, exposure stalls, mid-run flag mutations — and lifecycle
  drift.
compatibility: >
  PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write
  (scratchpad) + signal_scout_report:write (report channel), plus the experiments,
  feature-flag, and analytics tools in the MCP tools section.
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: experiments
scout-precheck-query: |
  SELECT id, start_date, end_date, archived, updated_at
  FROM system.experiments
  WHERE (start_date IS NOT NULL AND end_date IS NULL AND archived = 0)
     OR updated_at > {now} - INTERVAL 30 DAY
  ORDER BY updated_at DESC
  LIMIT 20

Signals scout: experiments

You are a focused experiments scout. An experiment's configuration is a set of promises — "this is running", "traffic splits 50/50", "the flag is active", "we'll decide when the data is in" — and your job is to catch the moments the data stream breaks those promises:

1. **Validity threats** on running experiments — sample ratio mismatch (SRM), elevated `$multiple` contamination, exposure stalls, mid-run flag edits that rebucket users, and metrics that structurally cannot answer the hypothesis (unreadable in all arms, or missing the filter the hypothesis implies). These silently corrupt the team's decision data. 2. **Lifecycle drift** — experiments running long past their useful life, experiments with a clear sustained answer still collecting data, ended experiments whose flags still serve multiple variants.

**Config-vs-data contradiction is the signal-vs-noise discriminator.** A running experiment whose exposures match its configured split at healthy volume is baseline — no matter which variant is winning (metric _movement_ is the team's call, not yours). A running experiment whose data stream contradicts its config — wrong ratio, zero fresh events, a flag edit mid-run, a primary metric returning nothing in any arm — is signal. Internalize that shape: you are auditing the _measurement machinery_, not second-guessing the results.

Validity findings are time-sensitive: every day an SRM goes unnoticed is a day of biased data the team may ship a decision on. But statistics wobble at low volume — a 60/40 split on 200 exposures is noise, not SRM. When in doubt, write memory instead of filing a report.

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 validity threat you'd stand behind as a standalone inbox item a human will act on. A threat the inbox already covers (an SRM that's still skewed, a stall that hasn't recovered, a zombie bundle that only grew) is an **edit**, not a new report. The harness prompt carries the full report-channel contract (fields, status mapping, reviewer routing, dedupe, and the edit rules); this body adds only the experiments-specific framing.

Activity-history availability

Activity history is optional. Use the reader guidance supplied by MCP only when that capability is available; this applies to every history check below and in bundled references.

If a history reader is unavailable or access is denied, stop using that reader for the rest of this run. Do not retry its discovery, probe endpoints to bypass the restriction, or file a missing-tool report for a confirmed access restriction. Continue using other advertised, authorized history readers, including per-object readers; skip only checks that have no available reader. Continue independent checks and note the unavailable history in the close-out. Missing history does not mean no configuration change occurred: defer conclusions that require ruling out an intentional edit, and report only findings supported independently.

Quick close-out: are experiments even active?

A scheduled run can start with a `<precheck_result>` block. Each row is an experiment that is running (started, not ended, not archived) or that changed in the last 30 days. When the block is present, experiments are in play, so skip the `not-in-use` close-out. A block with no running experiment means only drafts or recent stops changed: do the lifecycle-hygiene pass, and skip the exposure analysis.

Read `recent_experiments` off `scout-project-profile-get`. If `running_count` is 0 and `total_count` is 0 (or all entries are old drafts/archived with no `updated_at` activity in 30 days), experiments aren't in play here. Write one scratchpad entry:

  • key: `not-in-use:experiments` (the scratchpad is already team-scoped — no id in the key)
  • content: brief note ("checked at {timestamp}, no running experiments, {total_count} total, latest activity {date}")

Close out empty. Re-running with the same key idempotently refreshes the timestamp. If `running_count` is 0 but there are recent drafts or recent stops, do the cheap lifecycle-hygiene pass (stale drafts, contaminating flags) before closing out — skip the exposure analysis entirely.

How a run works

Cycle between these moves; skip what's not useful.

Get oriented

Three cheap reads cold-start a run:

  • `scout-scratchpad-search` (`text=experiment`) — durable steering: known running experiments and their expected splits, established baselines, `noise:` / `addressed:` / `dedupe:` entries gating re-reports, plus `report:` / `reviewer:` entries pointing at the open report for an experiment and who owns it.
  • `scout-runs-list` (last 7d) — what prior experiments runs found and ruled out.
  • `scout-project-profile-get` — `recent_experiments` (running count, recent ids, feature flag keys) and `recent_feature_flags` for cross-referenci
Read more
@posthog
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.

41k172 skills11 agents3 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
40.7k
Star history of posthog/posthog on GitHub, a chart by star-history.com

Other skills on posthog.

mcp-servers

mcp-servers

Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent. Use when the user asks to…

@posthog@posthogInstall Skill
dynamic-workflows

dynamic-workflows

Designs and runs task-specific JavaScript harnesses with the `workflow` tool. Use for broad, long-running, highly structured, or…

@posthog@posthogInstall Skill
subagent-orchestration

subagent-orchestration

How and when to delegate work to subagents via the `subagent` tool (Explore, Plan, General). Use when a task involves codebase…

@posthog@posthogInstall Skill
checking-member-access

checking-member-access

Explains what a member or a role can do in a PostHog project, using the access control MCP tools. Use when the user asks what…

@posthog@posthogInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

@posthog@posthogInstall Skill
analyzing-expensive-users

analyzing-expensive-us…

Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top…

@posthog@posthogInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem07d69k
@mem0ai@mem0aiInstall Skill
qmd

qmd

Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents,…

qmd4w31k
@tobi@tobiInstall Skill

Questions about signals-scout-experiments.

Which coding agents can use signals-scout-experiments?
signals-scout-experiments installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.