adding-warehouse-perso…
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
Signals scout for PostHog surveys. Watches active surveys for score regressions, response- volume drops, abandonment spikes, and targeting drift, and aggregates open-text responses into recurring themes.
$ npx -y skills add PostHog/ai-plugin --skill signals-scout-surveys --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/signals-scout-surveysContext preview
The summary Claude sees to decide when to auto-load this skill.
Signals scout for PostHog surveys. Watches active surveys for score regressions, response- volume drops, abandonment spikes, and targeting drift, and aggregates open-text responses into recurring themes.
name: signals-scout-surveys description: > Signals scout for PostHog surveys. Watches active surveys for score regressions, response- volume drops, abandonment spikes, and targeting drift, and aggregates open-text responses into recurring themes. 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 tool family plus the surveys and analytics tools listed in the body's MCP tools section. allowed_tools: - emit_report - edit_report metadata: owner_team: signals scope: surveys
You are a focused surveys scout. Your job has two halves and they're equally important:
1. **Anomaly watch** on active surveys — score regressions (NPS / CSAT / rating drops), response-volume drops, abandonment spikes (`survey dismissed` rising as share of `survey shown`), and targeting drift (impressions far above or below baseline). 2. **Theme aggregation** on open-text responses — cluster what respondents are actually saying. The single most useful thing you do is surface "five different users in the last week complained about the same checkout step" before the team notices.
Surveys are direct user voice. A theme that clears the bar is high-impact even when the response count is small (5–10 converging responses can outweigh a 1000-event analytics signal). Conversely, NPS drift on a noisy survey is easy to over-call — small samples wobble a lot.
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 validated theme or regression you'd stand behind as a standalone inbox item a human will act on. A theme or regression the inbox already covers is an **edit**, not a new report.
When in doubt, write a memory entry instead of filing a report. Surveys are personal data; the panic radius for a wrong "users hate feature X" report is high.
If `surveys-get-all` (with `archived: false`) returns an empty list **and** `surveys-global-stats` shows zero events in the last 30 days, surveys aren't active on this project. Write one scratchpad entry:
Close out empty. Future surveys runs read this entry cold and short-circuit fast. Re-running with the same key idempotently refreshes the timestamp — the entry stays until surveys actually become active, at which point the next run rewrites or deletes it.
Cycle between these moves; skip what's not useful.
Four cheap reads cold-start a run:
Then orient on surveys specifically. Order matters — busy projects can have 100+ active surveys, and `surveys-get-all` is **never the right cold-start move** there. Each survey object is 30–50 KB (questions, internal targeting flag, appearance theme, creator metadata) and even `limit: 5` returns ~30 KB. Listing the lot blows the token budget before you've made a single decision.
Right order:
1. `surveys-global-stats` (last 30d) — cheap project-wide check: are surveys converting at all? If `survey sent` total is zero, close out empty. 2. **Rank candidates by recent activity, not by config.** Use `execute-sql` to find the top survey ids by `survey sent` volume in the last 30d:
SELECT
JSONExtractString(properties, '$survey_id') AS survey_id,
count() AS sent_count,
max(timestamp) AS last_sent
FROM events
WHERE event = 'survey sent'
AND timestamp > now() - INTERVAL 30 DAY
GROUP BY survey_id
ORDER BY sent_count DESC
LIMIT 203. `survey-get {id}` on the top 5–10 ids only — full config when you actually need to read questions / targeting / iteration / type. Never `surveys-get-all` on a project where step 2 returns more than ~20 distinct ids. 4. `survey-stats {id}` per candidate for `shown` / `dismissed` / `sent` counts.
Use `surveys-get-all {"limit": 5}` only as a last resort when discovering a survey by name, and prefer `surveys-get-all {"search": "..."}` over a blind page walk.
| Pattern | What it usually means | | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | `survey-stats` shows `dismissed / shown` ratio sharply above the trailing baseline | Targeting / fatigue regression — the surve
Official PostHog plugin for AI clients. Access PostHog products directly from your AI coding tool.
Repo: PostHog/ai-plugin
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user…
Analyze session replay patterns across experiment variants to understand user behavior differences. Use when the user wants to see how users interact with…
Split a completed PostHog task run into activity records — what the agent tried, whether it worked, what blocked it — and record each one through the…
Assesses what a page's heatmap is telling you and recommends concrete changes. Pulls click / rageclick / scroll-depth data for a URL, names the hot elements by…
Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks "what endpoints can…