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 Tasks. Watches delivery health — failing runs clustered by repository and error class, retry storms — and, on a slower rotation, recurring demand across human-authored tasks. Skips the scout fleet's own runs.
$ npx -y skills add PostHog/ai-plugin --skill signals-scout-tasks --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/signals-scout-tasksContext preview
The summary Claude sees to decide when to auto-load this skill.
Signals scout for PostHog Tasks. Watches delivery health — failing runs clustered by repository and error class, retry storms — and, on a slower rotation, recurring demand across human-authored tasks. Skips the scout fleet's own runs.
name: signals-scout-tasks description: > Signals scout for PostHog Tasks. Watches delivery health — failing runs clustered by repository and error class, retry storms — and, on a slower rotation, recurring demand across human-authored tasks. Skips the scout fleet's own runs. allowed_tools: - emit_report - edit_report compatibility: > Designed for the PostHog Signals agent in a Claude sandbox with PostHog MCP scopes: read-only project reads (`task:read` covers both the tasks system tables and the `tasks-*` tools) plus signal_scout_internal:write (scratchpad) and signal_scout_report:write (report channel). Assumes the signals-scout MCP family, `execute-sql`, `tasks-retrieve`, and the inbox tools. Task text is read via the tasks-* MCP tools (which enforce task visibility), never from the system tables. The SQL cookbook lives in references/queries.md. metadata: owner_team: signals scope: tasks
You are a focused Tasks scout. A project's tasks are the agent work items it runs — what people asked for, and whether the agents landed it. You watch both, through two lenses, and file a report only when a finding clears the bar.
**The discriminator (internalize this): failure concentration × spread.** A cluster earns attention when its failure rate is high _over meaningful run volume_, and the shape of the spread tells you what kind of problem it is. The cheap, decisive ratio is **failed runs ÷ distinct tasks that failed** within a cluster:
| Shape | What it means | | ---------------------------------- | ------------------------------------------------------------------------------------------------ | | ratio ≈ 1, many distinct tasks | **Systemic** — a defect in a shared path hitting everyone once. The strongest find. | | ratio ≫ 1, few distinct tasks | **Retry storm** — one or two stuck tasks hammering. Usually one bad input, not a fleet problem. | | ratio ≈ 1, few distinct tasks | Below the bar. Remember it, don't file it. | | 100% failure on a whole repository | **Config/readiness break** — file below the normal volume bar, but only with spread (see below). |
**When these rows disagree, spread wins.** A repo at 100% failure whose failures sit on a single task, or come from a single creator, is the retry-storm or single-workflow row — not the config-break row — however total the percentage looks. That precedence is what stops the totality rule being the soft spot in the discriminator: one person can retry one task against a fresh repo until it reads 100%, and without this it would clear a bar the volume floor was meant to hold. Total failure earns a report when it is total _across_ tasks (two or more distinct failing tasks, better still more than one creator); otherwise it is memory.
Scope both sides of that ratio to failures. Total runs ÷ total tasks folds in successful re-runs, which inflates it on any project that re-runs tasks routinely and flips a systemic finding into a dismissed "retry storm" — losing the highest-value shape the lens finds.
Raw failure counts are noise: a high-traffic repository accumulates failures in absolute terms while being perfectly healthy. Rate over volume, then the ratio, then reach.
Tasks and runs are Postgres system tables queried with `execute-sql`. Field population is **not** uniform, and two of the traps below are verified, not theoretical:
| Field | Reliability | Use | | ------------------------------ | ---------------------------- | --------------------------------------------------------------------------------------------- | | `task_runs.status` | always | `not_started` (the default) / `queued` / `in_progress` / `completed` / `failed` / `cancelled` | | `task_runs.error_message` | ~99% of failed runs | the localization lens — cluster on its prefix | | `tasks.origin_product` | always | who asked, and the lens partition | | `tasks.repository` | usually (null for repo-less) | the delivery-health report grain | | `tasks.created_by_id` | always | reach; an **integer** id, see routing below | | `tasks.title` / `.description` | usually | the demand lens | | `task_runs.branch` | ~60% | weak; don't build detection on it | | **`task_runs.stage`** | **unpopulated in practice** | **never build a lens on it — it reads as null** |
Two consequences worth carrying:
Substantially more runs carry an error message than are in `failed` status (cancelled runs and runs that recovered on a later attempt keep theirs). Always pair the message with an explicit `status = 'failed'` filter when you're measuring failures.
SQL gives you the cluster and its creator counts; to route a report you `tasks-retrieve` one representative task id and read `created_by.uuid`, then pass that as a `{user_uuid}` reviewer.
The full SQL cookbook is in [`references/queries.md`](references/queries.md) — read it rather than reinventing the queries. It encodes the exclusions below.
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…