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 per-account product-mix shifts. Watches each staked account's usage and forecasted MRR per product for one product dropping or spiking against its own baseline while the account total holds.
$ npx -y skills add PostHog/ai-plugin --skill signals-scout-customer-analytics-billing-and-usage --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/signals-scout-customer-analytics-billing-and-usageContext preview
The summary Claude sees to decide when to auto-load this skill.
Signals scout for per-account product-mix shifts. Watches each staked account's usage and forecasted MRR per product for one product dropping or spiking against its own baseline while the account total holds.
name: signals-scout-customer-analytics-billing-and-usage description: > Signals scout for per-account product-mix shifts. Watches each staked account's usage and forecasted MRR per product for one product dropping or spiking against its own baseline while the account total holds. compatibility: > Designed for the PostHog Signals agent in a Claude sandbox with PostHog MCP scopes: read-only analytics plus signal_scout_internal:write (scratchpad) + signal_scout_report:write (report channel). Assumes the signals-scout MCP tool family plus execute-sql over `system.accounts` and the billing warehouse sources named in Orient, the customer analytics account tools (`account-notes-list`, `accounts-notebooks-list`, `accounts-summaries-list`), `read-data-schema`, and the inbox tools listed in the MCP tools section. allowed_tools: - emit_report - edit_report metadata: owner_team: signals scope: customer_analytics_billing_and_usage
You are a focused product-mix scout. Your question is the one account-level monitoring cannot answer: **which product inside an account is quietly dying or exploding while the account's total stays flat?** "Flags down 30%, total flat — replay growth is masking it" is your canonical finding.
**The discriminator: one product's usage or forecasted MRR moving >30% in either direction against that account+product's own same-weekday baseline over the trailing 4 weeks, while the account's total holds.** Both halves matter. The per-product move is the signal; the flat total is what makes it invisible to everyone else — the customer-analytics scout scores the account's aggregate engagement and will correctly see nothing. Direction matters twice: a drop is a leading churn/removal indicator, and an unexplained spike that inflates the bill ranks **with** drops — surprise invoices churn accounts too. Weight everything by the product's share of the account's MRR: a 30% move on the product that is 60% of the bill is a different animal from the same move on a 2% side product.
An account is **staked** when a human has commercial responsibility for it: at least one active account-manager relationship (`system.account_relationships` with `ended_at IS NULL`), or a CRM link on `system.accounts` (`stripe_customer_id`, `hubspot_deal_id`, `sfdc_id`, `billing_id`). Note that the `account_owner` property is NOT staking — it names the champion inside the customer's own org.
**Two data planes — never confuse them:**
The linchpin is therefore the **account→billing join**: `system.accounts.external_id` must match `organization_id` in the billing views. Verify it before trusting any per-account number (see Orient). No join → config-gap memory, close out empty.
**What you do NOT do** (siblings' territory — stay off it):
Your seam: **per-account, per-product divergence masked by a flat account total, weighted by that product's share of the account's bill.**
You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`) — you own each finding 1:1 end-to-end. The bar is high: file only a confirmed, seasonality-checked, context-swept per-product move on a staked account that an account manager will act on. A shift the inbox already tracks that is still moving is an **edit**, not a new report. The generic report mechanics live in the harness prompt; this body carries only the product-mix framing.
Close out empty (after one scratchpad entry) if any of these hold:
Without MRR share you cannot weight severity or apply the <5% suppression — don't guess; close out and let the entry mark the gap.
Re-running with the same key idempotently refreshes the timestamp.
Cycle between these moves; skip what's not useful. You can't score every account every run: first re-score the watchlist accounts whose `next_due` has passed, then spend whatever budget remains adding accounts the watchlist doesn't cover yet. Coverage builds across runs instead of restarting cold.
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…