---
title: "PostHog (@posthog) skills · skilld"
canonical_url: "https://skilld.dev/gh/posthog"
meta:
  description: "200 agent skills published by PostHog on skilld. posthog, analytics, Debugging."
  "og:description": "200 agent skills published by PostHog."
  "og:title": "PostHog on skilld"
---

`

![Avatar for PostHog](https://skilld.dev/_img/avatar?url=https%3A%2F%2Fgithub.com%2Fposthog.png)

# **PostHog**

[@posthog](https://github.com/posthog)org

The single platform to analyze, test, observe, and deploy new features

200 skills 40k San Francisco, California Synced 17 days ago

Mostly·posthog, analytics, Debugging

[GitHub](https://github.com/posthog) [Website](https://posthog.com)

## Skills

### [posthog/posthog](https://skilld.dev/gh/posthog/posthog)

200 skills 40k

`npx skilld add posthog/posthog`

- [

  **/adding-activity-logging**40k

  Adds or changes activity logging (the audit trail) for a Django model in PostHog. Use when a model's writes must show in the Activity side panel or the advanced activity logs, when adding ModelActivityMixin, an ActivityScope, a model\_activity\_signal receiver, an activity describer, or field exclusions, when auditing which write paths of a model are logged, or when a change is missing from the activity log. Covers the receiver-module convention, writes the signal cannot see (QuerySet.update, bulk\_create), the actor outside requests, and product models on a separate database. Trigger terms - activity log, audit log, audit trail, ModelActivityMixin, log\_activity, changes\_between, activity describer, who changed this. /adding-activity-logging by posthog](https://skilld.dev/gh/posthog/posthog/adding-activity-logging)
- [

  **/adding-inbox-sources**40k

  Add a new warehouse-backed source to the PostHog Desktop Self-driving Inbox (the feature that ships GitHub, Linear, Zendesk, pganalyze, Jira). A source syncs one warehouse table (issues/tickets/conversations) and a cloud "signals scout" watches it and emits findings. Use when asked to "add a new inbox/self-driving source", "wire up \<Jira/GitLab/Sentry/Intercom/Freshdesk/Front/Gorgias/etc> as a signal source", or to extend the source-toggle grid. Covers all three surfaces (posthog/posthog scout emitter + posthog/code UI wiring + the context-mill self-driving wizard skill that offers the source in \`npx @posthog/wizard self-driving\`), the deploy ordering between them, and created\_via attribution. /adding-inbox-sources by posthog](https://skilld.dev/gh/posthog/posthog/adding-inbox-sources)
- [

  **/adding-ingestion-warnings**40k

  How to add a new ingestion warning type to the event ingestion pipeline. Use when emitting a new warning from nodejs ingestion code (emitIngestionWarning, captureIngestionWarning, pipeline \`warnings\` arrays, \`drop()\` with warnings), when adding a warning type, category, or severity, or when a typecheck error says a string is not assignable to IngestionWarningType. Covers the INGESTION\_WARNING\_TYPES registry (the single source of truth for type, category, and severity), the details-key conventions that ClickHouse v2 materializes into columns, debouncing, and the downstream surfaces to keep in sync (v1 UI map, resolving-ingestion-warnings skill, docs, v2 API). /adding-ingestion-warnings by posthog](https://skilld.dev/gh/posthog/posthog/adding-ingestion-warnings)
- [

  **/adding-mcp-store-servers**40k

  Add a third-party MCP server (Linear, Notion, GitHub, ...) to the PostHog MCP store catalog. Use when asked to "add X to the MCP store", expand the MCP server marketplace, or fix a broken catalog entry. Covers finding the vendor's remote MCP endpoint, probing it (handshake, OAuth discovery, DCR), authoring the catalog entry in products/mcp\_store/backend/catalog.py, verification tiers, and the operator handoff for servers without Dynamic Client Registration. /adding-mcp-store-servers by posthog](https://skilld.dev/gh/posthog/posthog/adding-mcp-store-servers)
- [

  **/adding-personhog-rpc**40k

  Guide for adding a new RPC to personhog-replica and personhog-router. Covers eligibility checks, proto definition, code generation for Python and Node.js clients, Rust implementation (storage trait, postgres queries, service handler, router wiring), and index compatibility validation. Use when adding a new gRPC endpoint to personhog, migrating a Django ORM query to personhog, or extending the personhog service API. /adding-personhog-rpc by posthog](https://skilld.dev/gh/posthog/posthog/adding-personhog-rpc)
- [

  **/adding-product-alerting**40k

  Recommended repo-engineering guide when adding alerting to a PostHog product or extending the shared alerts platform. Routes lifecycle state machines, AlertPolicy, destinations, HogFunction dispatch, email, fixed-cadence and calendar scheduling, insight evaluation, the AlertWizard, and shared alert editor components. Use for product alert implementations, shared destination types, lifecycle or scheduling options, advanced alert settings, and platform alert infrastructure. Not for configuring alerts in an existing product. /adding-product-alerting by posthog](https://skilld.dev/gh/posthog/posthog/adding-product-alerting)
- [

  **/adding-project-secret-api-key-auth**40k

  How to gate a PostHog API endpoint with project secret API key (PSAK) auth — a project-scoped, user-less service credential. Use when adding PSAK support to a viewset action, allowing a new scope for PSAKs, handling synthetic users (ProjectSecretAPIKeyUser), or choosing PSAK-aware rate throttles. Trigger terms: PSAK, ProjectSecretAPIKey, project secret API key, phs\_ token, service auth, programmatic endpoint auth. /adding-project-secret-api-key-auth by posthog](https://skilld.dev/gh/posthog/posthog/adding-project-secret-api-key-auth)
- [

  **/adopting-generated-api-types**40k

  Use when migrating frontend code from manual API client calls (\`api.get\`, \`api.create\`, \`api.surveys.get\`, \`api.dashboards.list\`, \`new ApiRequest()\`) and handwritten TypeScript interfaces to generated API functions and types. Triggers on files importing from \`lib/api\`, files with \`api.get<\`, \`api.create<\`, \`api.\<entity>.\<method>\`, manual interface definitions that duplicate backend serializers, or any frontend file that constructs API URLs by hand. Covers the full replacement workflow — finding the generated equivalent, swapping imports, adapting call sites, and removing dead manual types. /adopting-generated-api-types by posthog](https://skilld.dev/gh/posthog/posthog/adopting-generated-api-types)
- [

  **/analyzing-expensive-users**40k

  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 LLM cost, user-level cost drivers, or patterns behind high AI observability spend. /analyzing-expensive-users by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-expensive-users)
- [

  **/analyzing-experiment-precompute-canary**40k

  Analyze the experiment precompute result-consistency canary across prod-US and prod-EU, deep-dive any issues, and produce an actionable report. Sweeps the canary's Prometheus health gauges in both regions, and when anything is unhealthy pulls the structured divergence/failure logs from Loki to reconstruct exactly which (team, experiment, metric) went wrong, by how much, and which class of divergence it is (stability vs correctness, and for correctness whether exposure counts or only values differ). Mechanism-level root cause needs ClickHouse and is out of scope — the skill hands off with precise drill-down steps. Use when the user asks to check / analyze / verify the experiment precompute canary, investigate a canary divergence or alert, or confirm precomputed experiment results are consistent in production. All data comes through the Grafana MCP (Prometheus + Loki) — no payload decryption, no ClickHouse. /analyzing-experiment-precompute-canary by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-experiment-precompute-canary)
- [

  **/analyzing-experiment-query-performance**40k

  Pull and interpret production experiment query-performance data from the staff-only \`/api/debug\_ch\_queries\` endpoints backing the \`/experiments/staff\` scene: slowest experiment queries, precompute read/build health, and preaggregation cache footprint. Covers prod-US and prod-EU via a \`query\_performance:read\` personal API key, all query params, and response field semantics (exception codes, exposure paths, precompute skip reasons, job states). Use when investigating slow or failing experiment queries, precompute regressions, 307/159/241 errors, preaggregation table growth, or when asked how experiment query performance or the precompute rollout is doing in production. /analyzing-experiment-query-performance by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-experiment-query-performance)
- [

  **/analyzing-experiment-session-replays**40k

  Analyze session replay patterns across experiment variants to understand user behavior differences. Use when the user wants to see how users interact with different experiment variants, identify usability issues, compare behavior patterns between control and test groups, or get qualitative insights to complement quantitative experiment results. Also covers pairing the observed behavior with a linked survey when the user wants qualitative feedback beyond what recordings show. /analyzing-experiment-session-replays by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-experiment-session-replays)
- [

  **/analyzing-insights-across-teams**40k

  Analyze PostHog insights, dashboards, or teams beyond the current project by querying the prod Postgres replicas synced into the dogfood data warehouse (US project 2, "PostHog App + Website"). Use when asked to analyze insights across all teams or projects, another team's insights, or fleet-wide insight/dashboard usage — cases where \`system.insights\` only returns the current project's rows and the agent would otherwise report the data as inaccessible. Covers the synced table names for US and EU and the column-verification workflow. /analyzing-insights-across-teams by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-insights-across-teams)
- [

  **/analyzing-task-runs**40k

  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 report\_activity tool. Use when a task asks to analyze a run, produce a task analysis, or review a run from an attached run log. Covers the log query protocol (bounded jq queries over the raw JSONL), both log schemas, the activity schema, and evidence verification. Records facts only; it does not suggest fixes. /analyzing-task-runs by posthog](https://skilld.dev/gh/posthog/posthog/analyzing-task-runs)
- [

  **/announcing-behavior-changes**40k

  Decides whether a behavior-changing fix needs an in-app notice, then builds one that reaches only the affected users and can be removed later. Use when a change alters what an existing user sees without them doing anything — a metric moves, a chart shifts, a count drops, a date range resolves differently, a matcher matches differently — and when adding, reviewing, or removing such a notice. Trigger terms: behavior change, breaking change, semantics change, "results may differ", change notice, deprecation banner, migration banner. Carries the gate (narrow to the affected users with a tested predicate, or do not ship a notice at all), the pattern from \`SqlInsightDateFilterNotice\`, where to anchor the notice, and the flag-based removal path. Not for new features (use the changelog), not for permanent per-object warnings computed by the backend, and not for the wording itself (see \`/writing-user-facing-copy\`). /announcing-behavior-changes by posthog](https://skilld.dev/gh/posthog/posthog/announcing-behavior-changes)
- [

  **/assessing-heatmaps**40k

  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 cross-referencing autocapture events on the same page, and can create a saved heatmap the user opens in PostHog, then summarizes the behavior and proposes improvements. TRIGGER when: user asks what a heatmap shows, why people aren't clicking something, where users rage-click, how far they scroll, what to change on a page based on heatmap/click data, or to 'analyze/assess/review the heatmap' for a URL. DO NOT TRIGGER when: the user only wants to create a saved heatmap screenshot with no analysis (use heatmaps-saved-create directly), or is asking about session replay in general (use investigating-replay). /assessing-heatmaps by posthog](https://skilld.dev/gh/posthog/posthog/assessing-heatmaps)
- [

  **/auditing-endpoints**40k

  Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks "what endpoints can I clean up?", "are any of my endpoints broken?", "which materialised versions are still being called?", or wants a one-shot cleanup pass over the Endpoints product. Produces a prioritised report grouped by issue type, with recommended actions but does not modify anything without explicit confirmation. /auditing-endpoints by posthog](https://skilld.dev/gh/posthog/posthog/auditing-endpoints)
- [

  **/auditing-experiments-flags**40k

  Audit PostHog experiments and feature flags for configuration issues, staleness, and best-practice violations. Read when the user asks to audit, health-check, or review experiments or feature flags, check flag hygiene, or verify experiment setup. /auditing-experiments-flags by posthog](https://skilld.dev/gh/posthog/posthog/auditing-experiments-flags)
- [

  **/auditing-llm-gateway-parity**40k

  Audits services/llm-gateway against PostHog/ai-gateway and updates services/llm-gateway/PARITY.md from current implementation evidence. Use when either gateway changes auth, attribution, billing, endpoints, providers, models, routing, or metadata; when reviewing a Python gateway change; or when asked to refresh, verify, or report gateway parity. This skill updates the parity record but does not migrate callers. /auditing-llm-gateway-parity by posthog](https://skilld.dev/gh/posthog/posthog/auditing-llm-gateway-parity)
- [

  **/auditing-warehouse-source-coverage**40k

  Audit already-implemented Data warehouse import sources for endpoints, schemas, and tables the vendor's API offers but we never wired up. Use when asked whether a source is missing endpoints, to find new endpoints a vendor has added since a source was built, to refresh COVERAGE\_GAPS.md, to prioritize which source to deepen next, or to check coverage before an integration review. Covers dumping our real endpoint inventory credential-free, ranking sources by production adoption, diffing against vendor OpenAPI/GraphQL specs, and recording findings. Not for implementing a source (use implementing-warehouse-sources), adding a vendor API version (warehouse-source-new-version), or writing source docs (documenting-warehouse-sources). /auditing-warehouse-source-coverage by posthog](https://skilld.dev/gh/posthog/posthog/auditing-warehouse-source-coverage)
- [

  **/auditing-warehouse-source-health**40k

  Audit the health of a PostHog project's data warehouse sources and syncs — find every broken or degraded source connection, sync schema, and webhook channel. Use when the user asks "why are my imports failing?", "what's broken with my sources?", "why is my warehouse data stale?", or wants a one-shot triage of source/sync health before deciding where to dig in. Produces a prioritized report grouped by severity, with recommended next steps. For materialized-view health use \`auditing-warehouse-view-health\`; for a single failing sync use \`diagnosing-failed-warehouse-syncs\`. /auditing-warehouse-source-health by posthog](https://skilld.dev/gh/posthog/posthog/auditing-warehouse-source-health)
- [

  **/auditing-warehouse-view-health**40k

  Audit the health of a PostHog project's materialized views (saved queries) — find every failed materialization and flag unused or stale materialized views that cost storage and compute. Use when the user asks "which of my views are broken?", "why is this materialized view failing?", "are any of my views wasting compute?", or wants a one-shot triage of view health. For source/sync health use \`auditing-warehouse-source-health\`. /auditing-warehouse-view-health by posthog](https://skilld.dev/gh/posthog/posthog/auditing-warehouse-view-health)
- [

  **/authoring-ci-workflows**40k

  Use when adding or editing a GitHub Actions workflow, composite action, or reusable workflow under \`.github/\` — new CI jobs, triggers, matrices, checkout/clone tuning, action pinning, GitHub App token auth, concurrency groups, \`timeout-minutes\`, \`paths\` filters, caching, or runner choice. Covers PostHog's workflow-authoring conventions and the reasons behind them: the 500-runs/10s dispatch cap, shallow vs full clone, per-SHA push concurrency, dedicated App-token rate-limit buckets, and fork-safe secrets on a public repo. Points to the linters (\`bin/hogli lint:workflows\`, actionlint) that enforce the mechanical rules, and to the narrower skills for production deploys, secrets, and Depot runners. Not for debugging red CI (use debugging-ci-failures) or wiring a new secret end to end (use managing-github-actions-secrets). /authoring-ci-workflows by posthog](https://skilld.dev/gh/posthog/posthog/authoring-ci-workflows)
- [

  **/authoring-data-quality-checks**40k

  Adds and runs data quality checks (dbt-test style assertions) on a project's warehouse tables and saved-query views, and HogQL catalog metrics: not-null, uniqueness, accepted values, referential integrity, row-count bounds, freshness, and custom HogQL. Metrics support custom SQL checks only. Use when asked to test a model, validate a view, check for nulls or duplicates, add data quality checks, find out why a number looks wrong, or judge whether a warehouse table is trustworthy before using it in an analysis. To describe what data \*means\* (metrics, certifications, joins), see setting-up-data-catalog instead. Trigger terms: data quality, data test, dbt test, not null check, uniqueness check, freshness check, referential integrity, row count check, validate model, is this table trustworthy. /authoring-data-quality-checks by posthog](https://skilld.dev/gh/posthog/posthog/authoring-data-quality-checks)
- [

  **/authoring-error-tracking-alerts**40k

  Author error tracking alerts that fire when an issue is created, reopened, or starts spiking. Use when the user asks to set up error notifications, route exceptions to Slack/webhook/Linear, or evaluate which error events are worth alerting on. Covers trigger-event selection, integration choice, dedup against existing alerts, and shipping with the canonical message body shape. /authoring-error-tracking-alerts by posthog](https://skilld.dev/gh/posthog/posthog/authoring-error-tracking-alerts)
- [

  **/authoring-log-alerts**40k

  Author useful, low-noise log alerts on services in a PostHog project. Use when the user asks to set up alerts for their logs, suggest alerts they should add, or evaluate whether a service is worth monitoring. Covers service triage, baseline characterisation, threshold drafting, back-testing via simulate, and shipping with a notification destination. /authoring-log-alerts by posthog](https://skilld.dev/gh/posthog/posthog/authoring-log-alerts)
- [

  **/authoring-scouts**40k

  How to author, edit, and adapt PostHog Signals scouts — the scheduled agents that scan a project and file what they find. Use to customize a canonical scout (narrow its scope, retune thresholds, add disqualifiers), tweak a scout's schedule or dry-run posture, write a new scout for a surface the fleet doesn't cover, build a measurement scout that records structured output (an LLM-judge scoring a sample on a schedule — a custom metric no query can compute), or steer a scout without editing it by leaving it a note. Covers the scout SKILL.md anatomy, the report contract, the structured-output channel, the dedupe + scratchpad-memory conventions, scout notes, the per-team skills-store path vs the canonical in-repo path, and the test loop. Trigger on "write/edit/customize a signals scout", "new scout for X", "tune my scout schedule", "make a scout that watches \<event>", "score/judge/measure X with a scout", "structured output from a scout", "scout output to Slack", "leave a note for / give feedback to a scout". /authoring-scouts by posthog](https://skilld.dev/gh/posthog/posthog/authoring-scouts)
- [

  **/autoresolving-pr-conflicts**40k

  Operating procedure for the conflict-autoresolver agent: sweep open PostHog/posthog PRs that conflict with master, resolve the trivial conflicts (generated artifacts deterministically, source conflicts with judgment), land one merge commit on the PR head, and flag everything else for a human. Use when running as the scheduled conflict autoresolver, when asked to sweep or auto-resolve merge conflicts against master, or when asked to bring a conflicting PR up to date without rewriting its history. Trigger terms: conflict sweep, autoresolve, merge conflicts, conflicting PRs, bring PR up to date, restack. Operators setting up the automation itself: see references/routine-setup.md. /autoresolving-pr-conflicts by posthog](https://skilld.dev/gh/posthog/posthog/autoresolving-pr-conflicts)
- [

  **/building-a-dashboard**40k

  Build a new dashboard, or update an existing one, from a set of insights — the same job the in-app assistant does with its upsert-dashboard tool, but over MCP. Use when a user asks to create a dashboard, put several metrics/charts together on one page, assemble a dashboard for a topic (product analytics, retention, revenue, activation, etc.), or add/remove/replace insights on a dashboard they already have. Covers deciding create vs update, reusing existing insights vs creating new ones, and using PostHog's vetted dashboard templates as reference for what a strong dashboard on a topic looks like. /building-a-dashboard by posthog](https://skilld.dev/gh/posthog/posthog/building-a-dashboard)
- [

  **/building-canvases**40k

  Create or edit a PostHog freeform canvas — a sandboxed browser application (data board, document, form, small tool, graphics experiment) stored in PostHog and rendered by the desktop/web app. Use when a task asks to build, generate, update, or fix a standalone canvas app, or when a freeform canvas id is given as the publish target. For grid/home canvases, widget placements, or reusable components, use composing-grid-canvases instead. Covers resolving or creating the target canvas, choosing an implementation approach (React + Quill vs plain HTML/browser APIs), the read → edit → validate → publish → build loop, and which companion canvas skills to load for the details. /building-canvases by posthog](https://skilld.dev/gh/posthog/posthog/building-canvases)
- [

  **/building-html-canvases**40k

  Author a PostHog canvas with semantic HTML, CSS, and direct browser APIs — documents, articles, generative graphics, 2D canvas and WebGL experiences, and focused experiments where React components add no useful structure. Use after building-canvases has routed a canvas request to a plain-HTML/browser-API implementation. Covers the thin component wrapper the current runtime requires, styling and theming without Quill, drawing surfaces, and animation/cleanup patterns. /building-html-canvases by posthog](https://skilld.dev/gh/posthog/posthog/building-html-canvases)
- [

  **/building-loops**40k

  Build a Loop for PostHog Desktop: a workflow that creates an AI task each time its trigger fires, optionally followed by a Slack or email notification with the task's result. Use when asked to create, set up, or change a loop, a recurring agent, a scheduled task, or an automation that runs an AI task when a GitHub, Slack, or PostHog event happens. Covers the exact graph, trigger configs, schedule presets, the notify step, structured output, and the test-run steps. /building-loops by posthog](https://skilld.dev/gh/posthog/posthog/building-loops)
- [

  **/building-product-empty-states**40k

  Guide for adding a product setup empty state — the skippable first-run screen a product scene shows until real data arrives, built on the shared ProductEmptyState component. Use when adding an empty state or first-run/setup screen to a product scene, declaring \`emptyState\` on a \`SceneExport\`, writing a product setup-status detection logic, building an animated example-data preview widget, or deciding between the scene-level \`ProductEmptyState\` gate and an inline \`ProductIntroduction\` panel. Covers the \`productSetupStatusLogic\` single-layer contract, real-data detection rules, local-only skip semantics, wizard commands, and design tokens. /building-product-empty-states by posthog](https://skilld.dev/gh/posthog/posthog/building-product-empty-states)
- [

  **/building-react-quill-canvases**40k

  Author the React + Quill implementation of a PostHog canvas: the single-component contract, the allowed imports, Quill (PostHog's design system) component and composition rules, theme-aware design tokens, loading skeletons, and the in-canvas date picker. Use after building-canvases has routed a canvas request to a React implementation — dashboards, data boards, forms, tools, or any canvas that should look native to PostHog. /building-react-quill-canvases by posthog](https://skilld.dev/gh/posthog/posthog/building-react-quill-canvases)
- [

  **/building-workflows**40k

  Build, edit, test, enable, and monitor PostHog workflows over MCP. Author the action/edge graph so it runs and opens cleanly in the visual editor, then change drafts surgically with patch operations. Use when asked to build, set up, automate, change, fix, or debug a workflow, campaign, broadcast, drip sequence, or event-triggered automation in the workflows product. /building-workflows by posthog](https://skilld.dev/gh/posthog/posthog/building-workflows)
- [

  **/check-posthog-loading**40k

  Inspect how the PostHog JavaScript SDK is loaded across a list of URLs. Use to confirm consistent installation across pages, find pages missing the snippet, detect mismatched API keys or hosts between pages, and verify the load method (head snippet vs deferred vs array.js). /check-posthog-loading by posthog](https://skilld.dev/gh/posthog/posthog/check-posthog-loading)
- [

  **/checking-deploy-timing**40k

  Determine when a PostHog code change reached a given environment by reading the hidden GIT deploy annotations in the project and correlating them with the merge commit on GitHub. Use when PostHog staff ask "when was X deployed", "is my change live in the US/EU yet", "has my PR shipped", "did the fix roll out to prod-us", or otherwise want to know whether/when a commit, PR, or feature went out to a region. Do not answer deploy-timing questions from event/data volume alone — that only shows when data changed, not when code shipped. /checking-deploy-timing by posthog](https://skilld.dev/gh/posthog/posthog/checking-deploy-timing)
- [

  **/checking-member-access**40k

  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 someone can see or edit, who can edit dashboards or feature flags, why a member can or cannot open a dashboard, notebook or table, what a role grants, which properties are hidden from someone, or how the project's default access is set. Covers what each level means, how the stored rule, the enforced level and the inherited access relate, what the null values mean, which tool answers which question, and when the answer needs the role tools too. /checking-member-access by posthog](https://skilld.dev/gh/posthog/posthog/checking-member-access)
- [

  **/choosing-trend-or-slope-view**40k

  Clarify how to visualize change over a time range before building a trend. Use whenever the user asks how much something changed, grew, dropped, improved, or regressed between two points or periods — "how much did X change from A to B", "before vs after", "start vs end", "week over week", "compare this month to last", "change over time" — or mentions a "slope chart" / "slopegraph". Two readings of "change" need different charts: the whole trend (a line, every interval) versus just the two endpoints (a slope, start vs end). Ask which they want, then render it. Not for choosing a saved insight ChartDisplayType in the insight editor. /choosing-trend-or-slope-view by posthog](https://skilld.dev/gh/posthog/posthog/choosing-trend-or-slope-view)
- [

  **/claude**40k

  Sync this fork of @anthropic-ai/claude-agent-acp (packages/agent/src/adapters/claude) with a newer upstream release: bump the claude-agent-sdk / @agentclientprotocol/sdk, port upstream bug fixes and new SDK message handling, preserve the fork's divergences, verify, and update UPSTREAM.md. Use when asked to "upgrade/sync the claude adapter", "bump the agent SDK", or "port upstream claude-agent-acp changes". /claude by posthog](https://skilld.dev/gh/posthog/posthog/claude)
- [

  **/cleaning-up-stale-feature-flags**40k

  Identify stale feature flags in a PostHog project and clean up the code that checks them. Use when the user wants to find, audit, or remove unused, fully rolled out, or abandoned feature flags. When the agent can read and edit a repository it performs the code cleanup itself: tested local changes, and one draft PR per flag when the user authorizes publishing. Agents without repository access generate a tailored cleanup prompt instead. Covers staleness detection, dependency checking, retained-path rules, and the code-first ordering. This skill does not archive or otherwise change a flag in PostHog. /cleaning-up-stale-feature-flags by posthog](https://skilld.dev/gh/posthog/posthog/cleaning-up-stale-feature-flags)
- [

  **/clickhouse-autoresearch-campaign**40k

  Run a ClickHouse query optimization campaign on one git branch using pi-autoresearch, dynamic lanes and hypotheses, baseline result capture, correctness checks, and stagnation-aware lane/campaign review. /clickhouse-autoresearch-campaign by posthog](https://skilld.dev/gh/posthog/posthog/clickhouse-autoresearch-campaign)
- [

  **/clickhouse-migrations**40k

  ClickHouse migration patterns and rules. Use when creating or modifying ClickHouse migrations. /clickhouse-migrations by posthog](https://skilld.dev/gh/posthog/posthog/clickhouse-migrations)
- [

  **/composing-grid-canvases**40k

  Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases. Use when a task asks to add, fill, move, resize, or remove a widget on a grid or home canvas, to compose a whole canvas of widgets from one ask, to build a reusable widget/component, or when a placement id or grid canvas id is the target. Covers the component store search → configure → fork → build ladder, the component placement contract (size, configSchema), the placement lifecycle (pending/generating/live/failed), the guarded layout patch loop, and reading the canvas's comment threads. /composing-grid-canvases by posthog](https://skilld.dev/gh/posthog/posthog/composing-grid-canvases)
- [

  **/configuring-experiment-analytics**40k

  Configures the analytics side of a PostHog experiment — exposure criteria (server-resolved default exposure event vs custom exposure events), primary and secondary metrics, the supported metric types (count, sum, ratio with \`math\` and \`math\_property\`, retention with \`retention\_window\_start\` and \`start\_handling\`), multivariate user handling ("Exclude" vs "First seen variant"), and how to read results once the experiment is live. Use when the user adds or edits a primary or secondary metric (e.g. "add a secondary metric tracking 'downloaded\_file' per user"), sets up a ratio metric (e.g. "revenue from purchase\_completed / pageviews"), sets up a retention metric (e.g. "$pageview → uploaded\_file, 7-day window"), configures custom exposure (e.g. "only count users who hit /checkout"), changes multivariate handling, or asks "who is in the analysis?", "how do I measure impact?", "is this winning?", "what's the confidence level?", or "should I ship?". /configuring-experiment-analytics by posthog](https://skilld.dev/gh/posthog/posthog/configuring-experiment-analytics)
- [

  **/configuring-experiment-rollout**40k

  Configures the rollout shape of a PostHog experiment — the variant split (50/50, 80/20, A/B/C ratios), the overall rollout percentage that gates how many users enter the experiment, and the disambiguation when a percentage like "roll out to 25%" could mean either. Use when the user mentions a rollout percentage, variant split, or traffic distribution; gives a ratio like 60/40, 70/30, or 80/20; asks "who sees the test variant?"; wants to increase, decrease, or change the rollout or split on a draft or running experiment; weighs equal vs uneven splits; or proposes a mid-experiment split change (often an anti-pattern that needs reset or end-and-restart). /configuring-experiment-rollout by posthog](https://skilld.dev/gh/posthog/posthog/configuring-experiment-rollout)
- [

  **/consuming-endpoints-from-client-code**40k

  Wire a PostHog endpoint into a client app or SDK. Covers fetching the OpenAPI spec, generating a typed client with openapi-generator or @hey-api/openapi-ts, sending the right auth header, shaping the variables payload (HogQL code\_name vs insight breakdown property), handling rate-limit and materialised-endpoint error responses. Use when the user says "how do I call my endpoint", "generate a client for this", or "what auth header do I use". /consuming-endpoints-from-client-code by posthog](https://skilld.dev/gh/posthog/posthog/consuming-endpoints-from-client-code)
- [

  **/context-layer-consolidation**40k

  Keep the context wiki coherent using the deterministic lint report queue /context-layer-consolidation by posthog](https://skilld.dev/gh/posthog/posthog/context-layer-consolidation)
- [

  **/context-layer-dreaming**40k

  Synthesizes recent organizational activity into a durable context wiki. Use when running a nightly or incremental context-layer dream, or when updating sourced organizational context from completed work. /context-layer-dreaming by posthog](https://skilld.dev/gh/posthog/posthog/context-layer-dreaming)
- [

  **/context-layer-health-check**40k

  Semantic review of context wiki quality after deterministic consolidation /context-layer-health-check by posthog](https://skilld.dev/gh/posthog/posthog/context-layer-health-check)
- [

  **/copying-endpoints-across-projects**40k

  Copy a PostHog endpoint (a saved HogQL/insight query exposed as an API route) to another project in the same organization, or duplicate it under a new name in the same project. Use when the user wants to duplicate an endpoint, promote an endpoint from staging to production, replicate an endpoint's query/variables/freshness config in another workspace, or clone an endpoint to iterate on it. Unlike feature flags and experiments, endpoints have NO native cross-project copy tool — this skill covers the read-then-recreate flow (endpoint-get then endpoint-create), the active-project switching it requires, name-collision checks, and the safe defaults (land unmaterialised in the target, verify with endpoint-run). Does not cover editing endpoint versions (see managing-endpoint-versions) or authoring a brand-new endpoint from scratch (see creating-an-endpoint). /copying-endpoints-across-projects by posthog](https://skilld.dev/gh/posthog/posthog/copying-endpoints-across-projects)
- [

  **/copying-flags-across-projects**40k

  Copy a feature flag from one PostHog project to one or more target projects in the same organization. Use when the user wants to duplicate a flag, promote a flag from staging to production, sync flags across projects, or replicate a flag configuration in a different workspace. Covers cohort remapping, scheduled-change handling, encrypted payloads, and the safe defaults (disabled in target, no scheduled changes). /copying-flags-across-projects by posthog](https://skilld.dev/gh/posthog/posthog/copying-flags-across-projects)
- [

  **/creating-ai-subscription**40k

  Create a recurring AI-generated PostHog report — schedule a free-text prompt to run on a cron, with the LLM-synthesized markdown delivered to email or Slack on each tick. Use when the user wants a recurring AI summary of X on any cadence (daily, weekly, monthly, yearly) rather than a one-off report. (To attach an AI summary to an existing insight/dashboard subscription instead of a free-text prompt, see \`managing-subscriptions\` and its \`summary\_enabled\` option.) /creating-ai-subscription by posthog](https://skilld.dev/gh/posthog/posthog/creating-ai-subscription)
- [

  **/creating-an-endpoint**40k

  Create a PostHog endpoint with the right shape on the first try — covers query kind choice, name conventions, what to expose as variables (HogQL code\_name vs insight breakdown), data\_freshness\_seconds, and whether to materialise on day one. Use when the user says "create an endpoint", "expose this query as an API", "turn this insight into an endpoint", or asks for help structuring a new endpoint. Steers away from common mistakes: materialising a query with cohort breakdowns or compare mode, inline-only variables on a materialised endpoint, unbounded date ranges, ambiguous names. /creating-an-endpoint by posthog](https://skilld.dev/gh/posthog/posthog/creating-an-endpoint)
- [

  **/creating-box-plot-insights**40k

  Creates product analytics or SQL-backed box plot insights in PostHog. Use when a user asks to create, build, or save a box plot, visualize a numeric distribution, compare quartiles or medians across dates or groups, or turn SQL results into a box plot. Chooses between a standard Trends box plot and a SQL insight, validates the distribution data, saves the insight, and verifies it. /creating-box-plot-insights by posthog](https://skilld.dev/gh/posthog/posthog/creating-box-plot-insights)
- [

  **/creating-experiments**40k

  Guides agents through the 3-step experiment creation flow: defining the hypothesis, configuring rollout, and setting up analytics. Delegates rollout decisions to configuring-experiment-rollout and metric setup to configuring-experiment-analytics. TRIGGER when: user asks to create a new experiment or A/B test, OR when you are about to call experiment-create. DO NOT TRIGGER when: user is updating an existing experiment, managing lifecycle, or only browsing experiments. /creating-experiments by posthog](https://skilld.dev/gh/posthog/posthog/creating-experiments)
- [

  **/creating-online-evaluations**40k

  Author continuously-running online evaluations in PostHog AI observability, grounded in real failure modes you've identified. Use when the user wants evaluations that automatically score new generations or whole traces going forward — "create an eval to catch X", "continuously check that responses do Y", "turn these failures into evals". Covers letting the explored data decide how many evals to create, proposing that set for the user to pick, choosing the target and eval type (hog / llm\_judge / sentiment), configuring a provider and model for an llm\_judge eval (a provider key gates enabling, not creation), scoping which generations trigger it via conditions, creating disabled, verifying scope, and enabling. Proposes a sentiment eval when no failure mode is worth catching. Finding and ranking the failure modes worth evaluating is its own job — use exploring-ai-failures first. To debug or manage evaluations that already exist, use exploring-llm-evaluations. /creating-online-evaluations by posthog](https://skilld.dev/gh/posthog/posthog/creating-online-evaluations)
- [

  **/creating-replay-vision-scanners**40k

  Guides agents through creating and safely sizing a Replay Vision scanner: choosing the scanner type (monitor/classifier/scorer/summarizer), shaping the RecordingsQuery that selects sessions, and — crucially — estimating the credits it will spend and checking the org's remaining budget before creating, so a broad scanner doesn't exhaust the budget on its first scheduled sweep. TRIGGER when: user asks to create, set up, or configure a Replay Vision scanner, OR when you are about to call vision-scanners-create, OR when widening an existing scanner's query, sampling\_rate, or sampling\_mode (or moving it to a pricier model) via vision-scanners-update. DO NOT TRIGGER when: only reading scanners or observations, deleting a scanner, or running an existing scanner against a single session on demand (vision-scanners-scan-session). For a one-off question about sessions you already have, use vision-scanners-inline-scan-create rather than creating a scanner — the skill's first section covers when that applies. /creating-replay-vision-scanners by posthog](https://skilld.dev/gh/posthog/posthog/creating-replay-vision-scanners)
- [

  **/creating-surveys**40k

  Creates and launches PostHog surveys through MCP, including NPS/CSAT popovers, hosted feedback forms, and headless surveys. Guides survey type selection, audience targeting, draft review, and launch readiness. Use when asked to create a survey or form, or before calling survey-create. For investigating an existing survey's delivery or responses, use debugging-surveys instead. /creating-surveys by posthog](https://skilld.dev/gh/posthog/posthog/creating-surveys)
- [

  **/debugging-ci-failures**40k

  Debugs failing GitHub Actions CI runs for PostHog PRs, commits, and branches, and answers broad CI-health questions ("is CI red?", "is master green today?", "what's broken right now?"). Use when the user asks why CI is red, asks for the current CI or master status, or mentions a failing check, GitHub Actions run, Depot runner, workflow, job, shard, merge queue kick, flaky test, lint failure, typecheck failure, snapshot diff, migration check, generated types drift, or skills build failure. Interactive runs start with the \`hogli ci:insights\` digest (cross-run CI history from engineering analytics), then use read-only inspection, failure classification, the smallest local reproduction with hogli, and safe reporting without rerunning CI or posting to GitHub. Running unattended as the "Master-red diagnosis" workflow: see references/master-red-incident.md for its sandbox-compatible first step. /debugging-ci-failures by posthog](https://skilld.dev/gh/posthog/posthog/debugging-ci-failures)
- [

  **/debugging-experiments**40k

  Debug and support PostHog Experiments (A/B tests) for a customer looking at their own results. Use whenever an experiment support ticket is pasted or a customer asks a results question, most commonly "why aren't my exposures even?", "why is one variant getting no traffic?", "why am I missing / seeing too few exposures?", "why does the bias banner show?", or "why don't PostHog's numbers match my SQL?". Pulls the experiment's real data read-only, matches it to a known-cause catalog, and produces a customer-facing explanation, fix, and review of the pertinent numbers. Loads diagnosing-experiment-results as its deep diagnostic library. DO NOT TRIGGER when: creating an experiment (use creating-experiments), only configuring rollout (configuring-experiment-rollout) or metrics (configuring-experiment-analytics), asking lifecycle questions (managing-experiment-lifecycle), or the underlying feature flag is what's misbehaving rather than the results (use debugging-feature-flags). /debugging-experiments by posthog](https://skilld.dev/gh/posthog/posthog/debugging-experiments)
- [

  **/debugging-local-replay**40k

  Debugs why session recordings aren't appearing in the local dev environment. Use when a developer reports that local replay ingestion isn't working, recordings aren't showing up despite /s calls, or the replay pipeline seems broken after hogli start. Covers the full local pipeline: SDK capture, Caddy proxy, capture-replay (Rust), Kafka, ingestion-sessionreplay (Node), recording-api (Node), SeaweedFS, and common failure modes like orphaned processes, stuck phrocs workers, and trigger misconfiguration. /debugging-local-replay by posthog](https://skilld.dev/gh/posthog/posthog/debugging-local-replay)
- [

  **/debugging-local-task-agent-runs**40k

  Debug the output of local PostHog task runs — the wizard cloud-run path that executes inside a Docker sandbox under the local Temporal \`process-task\` workflow (the wizard that integrates PostHog, then the coding agent that commits and opens the PR). Use when a local run looks stuck, failed, or silent, or when you need to read the wizard or agent logs. Covers the \`.env.local\` keys + \`ai\_features\` intent required for cloud runs locally, finding the task UUID (docker ps, temporal CLI, Temporal UI at localhost:8081), tailing live logs inside the sandbox container (\`/tmp/posthog-wizard.log\`, \`/tmp/agent-server.log\`), and reading the durable per-run console log from object storage after the sandbox is torn down. Trigger terms: task-sandbox, run\_wizard, agent-server, process-task, SANDBOX\_PROVIDER, LLM\_GATEWAY, cloud\_run, posthog-wizard.log. /debugging-local-task-agent-runs by posthog](https://skilld.dev/gh/posthog/posthog/debugging-local-task-agent-runs)
- [

  **/debugging-mcp-analytics**40k

  Debug, support, and build PostHog MCP Analytics — product analytics for MCP servers (the \`@posthog/mcp\` and \`posthog.mcp\` SDKs plus the mcp\_analytics product). Use when MCP analytics data looks wrong or missing ("events aren't showing", "intent clusters are empty", "sessions are missing", "per-tool numbers look wrong"), when writing queries over \`$mcp\_\*\` events by hand, or when doing feature work on the SDKs, the dashboard and its query runners, the self-instrumented MCP server, the \`wizard mcp-analytics\` install command, or the in-app onboarding. Covers the repo map, the \`$mcp\_\*\` vocabulary and where each property comes from, the rules that silently corrupt metrics when ignored, the end-to-end pipeline and where each stage breaks, and which repo to change. For reading the data rather than fixing it, prefer the \`exploring-mcp-\*\` and \`improving-mcp-tools\` skills. /debugging-mcp-analytics by posthog](https://skilld.dev/gh/posthog/posthog/debugging-mcp-analytics)
- [

  **/debugging-signals-pipeline**40k

  Debug the signals pipeline locally end-to-end. Covers emitting test signals from fixtures, monitoring Temporal workflows via the REST API, reading sandbox agent logs from object storage, inspecting Docker sandbox containers, and diagnosing common failures (stale ClickHouse embeddings, agentsh network denials, inactivity timeouts). Use when a signal isn't reaching the inbox, a signal-report-summary workflow fails, or a sandbox task run times out. /debugging-signals-pipeline by posthog](https://skilld.dev/gh/posthog/posthog/debugging-signals-pipeline)
- [

  **/debugging-surveys**40k

  Diagnose PostHog Surveys configuration and responses across all five SDKs (web/posthog-js, iOS, Android, Flutter, React Native). Use whenever a Surveys support ticket is pasted ("survey not showing", "fewer responses than expected", "responses disappeared", "responses are incomplete", "only the first question was answered", "the user says they didn't mean to submit", "survey shows on wrong platform"), or when diagnosing why a survey does or doesn't display. Covers the eligibility pipeline, how a response actually gets stored (partial responses, branching, optional questions, auto-submit), cross-SDK feature parity, the known-cause catalog, read-only diagnostic queries, staff access, and the customer-reply style guide. /debugging-surveys by posthog](https://skilld.dev/gh/posthog/posthog/debugging-surveys)
- [

  **/debugging-table-access-denied**40k

  Debugs a TableAccessDeniedError from an error tracking issue, Slack alert, or user report. Use when investigating why HogQL denied a system or warehouse table and whether the occurrence is a real bug or expected behavior. Trigger terms include TableAccessDeniedError, table\_access\_denied, and "You don't have access to table". /debugging-table-access-denied by posthog](https://skilld.dev/gh/posthog/posthog/debugging-table-access-denied)
- [

  **/depot-ci**40k

  Configures and manages Depot CI, a drop-in replacement for GitHub Actions that runs workflows entirely within Depot. Use when migrating GitHub Actions workflows to Depot CI, running \`depot ci migrate\`, managing Depot CI secrets and variables, running workflows with \`depot ci run\`, debugging Depot CI runs with \`depot ci run list\`, \`depot ci status\`, \`depot ci logs\`, \`depot ci diagnose\`, or \`depot ci ssh\`, inspecting test results with \`depot tests\` or run artifacts with \`depot ci artifacts\`, checking workflow compatibility, or understanding Depot CI capabilities. Also use when the user mentions .depot/ directory, depot ci commands, or asks about running GitHub Actions workflows on Depot's infrastructure without GitHub-hosted runners. Also use when comparing what Depot CI and GitHub Actions report for a skipped, empty-matrix or continue-on-error job, or when working out whether a check run satisfies a required status check or a merge queue. /depot-ci by posthog](https://skilld.dev/gh/posthog/posthog/depot-ci)
- [

  **/depot-container-builds**40k

  Configures and runs Depot remote container builds using \`depot build\` and \`depot bake\`. Use when building Docker images, creating Dockerfiles with Depot, pushing images to registries, building multi-platform/multi-arch images (linux/amd64, linux/arm64), debugging container build failures, optimizing Dockerfile layer caching, using docker-bake.hcl or docker-compose builds, or migrating from \`docker build\` / \`docker buildx build\` to Depot. Also use when the user mentions depot build, depot bake, container builds, image builds, or asks about Depot's build cache, build parallelism, or ephemeral registry. /depot-container-builds by posthog](https://skilld.dev/gh/posthog/posthog/depot-container-builds)
- [

  **/depot-github-runners**40k

  Configures Depot-managed GitHub Actions runners as a drop-in replacement for GitHub-hosted runners. Use when setting up or migrating GitHub Actions workflows to use Depot runners, choosing runner sizes (CPU/RAM), configuring runs-on labels, setting up ARM or Windows or macOS runners, troubleshooting GitHub Actions runner issues, configuring egress filtering, using Depot Cache with GitHub Actions, or running Dagger/Dependabot on Depot runners. Also use when the user mentions depot-ubuntu, depot-windows, depot-macos runner labels, or asks about faster/cheaper GitHub Actions runners. Not for Depot CI, the separate engine that reads .depot/workflows/ — that is the depot-ci skill. /depot-github-runners by posthog](https://skilld.dev/gh/posthog/posthog/depot-github-runners)
- [

  **/designing-email-templates**40k

  Author, save, and edit email templates in the PostHog workflows library — compose email design JSON with Liquid personalization and create and round-trip-edit templates over MCP. Use when asked to design, build, update, or fix an email template for workflows, broadcasts, or campaigns. /designing-email-templates by posthog](https://skilld.dev/gh/posthog/posthog/designing-email-templates)
- [

  **/diagnosing-ci-and-merge-bottlenecks**40k

  Diagnoses CI and pull-request pipeline health for a GitHub repo using the engineering analytics MCP tools — pull-requests (PR list with CI status), workflow-health (per-workflow CI trends), and pr-lifecycle (a single PR's timeline). Use when asked whether CI is getting faster or slower, which GitHub Actions workflow is the slow or flaky long-pole, how long PRs take from open to merge, how an author's merge time compares to the cohort, which open PRs have failing or pending CI, or where a specific pull request is stuck. Triggers on "engineering analytics", "is CI getting slower", "slow workflow", "flaky CI", "time to merge", "cycle time", "PR throughput", "failing checks", "where is PR \<n> stuck", "CI long pole", "what's holding up this PR". For a verdict on one specific CI failure (whose fault, which commit) use investigating-ci-failures; to save these numbers as insights use turning-engineering-analytics-into-insights. /diagnosing-ci-and-merge-bottlenecks by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-ci-and-merge-bottlenecks)
- [

  **/diagnosing-endpoint-performance**40k

  Diagnose why a PostHog endpoint is slow or expensive and propose a concrete fix — bump the cache TTL, enable materialisation, restructure variables, or rewrite the query. Use when the user says "this endpoint is slow", "my endpoint times out", "we're hitting the cost cap on this one", or asks "should I materialise this?". Focuses on a single named endpoint, not a project-wide audit. /diagnosing-endpoint-performance by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-endpoint-performance)
- [

  **/diagnosing-experiment-results**40k

  Diagnoses bias, anomalies, and strange results on a PostHog experiment. Covers 0-exposure experiments, sample ratio mismatch, identity fragmentation, multi-variant exposure, uneven-split exclusion bias, significance traps (peeking, A/A, Bayesian vs Frequentist), PostHog-vs-SQL discrepancies, surprises after mid-run edits, and qualitative follow-up via a variant-split survey. TRIGGER when: user asks 'is my experiment biased?' or 'why 0 exposures?', references the bias banner, says a variant looks strange / wrong / off, sees significance flipping or A/A significance, finds PostHog numbers disagreeing with their SQL, reports surprises after mid-run edits, or wants qualitative feedback or a survey for an experiment. DO NOT TRIGGER when: creating an experiment (use creating-experiments), only configuring rollout (use configuring-experiment-rollout) or metrics (use configuring-experiment-analytics), or only asking lifecycle questions (use managing-experiment-lifecycle). /diagnosing-experiment-results by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-experiment-results)
- [

  **/diagnosing-failed-warehouse-syncs**40k

  Diagnose why a data warehouse sync is failing and recommend the right recovery action. Use when the user asks "why isn't my Stripe/Postgres/Hubspot sync working?", "this table has been stuck for hours", "the data in the warehouse looks wrong", or wants to troubleshoot a specific source or schema. Covers source-level vs schema-level failures, stuck Running states, credential and schema-drift errors, incremental-field misconfig, CDC prerequisite failures, and the cancel / reload / resync / delete-data recovery actions. /diagnosing-failed-warehouse-syncs by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-failed-warehouse-syncs)
- [

  **/diagnosing-missing-recordings**40k

  Diagnoses why a session recording is missing or was not captured. Use when a user asks why a session has no replay, why recordings aren't appearing, or wants to troubleshoot session replay capture issues for a specific session ID or across their project. Covers SDK diagnostic signals, project settings, sampling, triggers, ad blockers, and quota/billing scenarios. /diagnosing-missing-recordings by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-missing-recordings)
- [

  **/diagnosing-sdk-health**40k

  Diagnoses the health of a project's PostHog SDK integrations — which SDKs are out of date and how to fix them. Use when a user asks about PostHog SDK versions, outdated SDKs, upgrade recommendations, "SDK health", "SDK doctor" (the former name), or when events or features seem off and it might be due to an old SDK. /diagnosing-sdk-health by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-sdk-health)
- [

  **/diagnosing-stacktrace-symbolication**40k

  Help users debug PostHog Error Tracking stack-trace symbolication for any supported platform — JavaScript/TypeScript web, React Native (Hermes), Android (Proguard / R8), or iOS / macOS (dSYM). The PostHog symbol-set lookup flow is universal across platforms; build-tool and artifact details live in per-platform references (JavaScript is fleshed out, others come as we encounter them). Use when stack frames stay minified or obfuscated after symbols are uploaded, PostHog symbol sets show last\_used but frames are not readable, chunk IDs or dSYM UUIDs do not match, "Token not found" appears, uploaded source maps / dSYMs / Proguard mappings look empty, or bundler / symbol-upload configuration needs troubleshooting. /diagnosing-stacktrace-symbolication by posthog](https://skilld.dev/gh/posthog/posthog/diagnosing-stacktrace-symbolication)
- [

  **/django-migrations**40k

  Django migration patterns and safety workflow for PostHog. Use when creating, adjusting, or reviewing Django/Postgres migrations, including non-blocking index/constraint changes, multi-phase schema changes, data backfills, migration conflict rebasing, and product model moves that require SeparateDatabaseAndState. Also use for any deletion or removal of a model, table, column, product, or app — including deleting migration files or retiring a feature — even when no migration is written. /django-migrations by posthog](https://skilld.dev/gh/posthog/posthog/django-migrations)
- [

  **/django-startup-time**40k

  Keep heavy imports off the django.setup() path that every process (web, celery, temporal, migrate, shell, CI) pays for. Use when touching AppConfig.ready(), wiring signal receivers, editing the lazy API router (posthog/api/rest\_router.py or its \_\_init\_\_.py shim), deferring a heavy import, when the startup-import-budget guard fails, or when merging master into a long-lived branch that made the router lazy. /django-startup-time by posthog](https://skilld.dev/gh/posthog/posthog/django-startup-time)
- [

  **/documenting-warehouse-sources**40k

  Write or update the user-facing posthog.com documentation for a PostHog Data warehouse import source. Use when adding a new source doc, fixing an inconsistent or stub source doc, or standardizing the docs at contents/docs/cdp/sources. Covers the canonical template, shared snippets, the auto-rendered \<SourceParameters /> and \<SourceTables /> components, frontmatter, and the docsUrl/slug rule that prevents 404s. /documenting-warehouse-sources by posthog](https://skilld.dev/gh/posthog/posthog/documenting-warehouse-sources)
- [

  **/downloading-batch-export-files**40k

  Export PostHog events, persons, sessions, or the results of a HogQL query on demand and download the resulting files. Use when the user asks to download/export raw PostHog data, export HogQL query results, create a one-off file export, fetch a Parquet or JSONLines export, or use the file\_download\_batch\_exports API. Covers starting the export with MCP, polling completion, and downloading via the existing REST redirect endpoint. /downloading-batch-export-files by posthog](https://skilld.dev/gh/posthog/posthog/downloading-batch-export-files)
- [

  **/dynamic-workflows**40k

  Designs and runs task-specific JavaScript harnesses with the \`workflow\` tool. Use for broad, long-running, highly structured, or adversarial work that benefits from many isolated agents: exhaustive audits, root-cause investigations, research, large triage queues, competing proposals, repeated verification, and independent changes across disjoint files. Covers decomposition patterns, agent and model routing, structured handoffs, failure handling, and the workflow runtime API. /dynamic-workflows by posthog](https://skilld.dev/gh/posthog/posthog/dynamic-workflows)
- [

  **/editing-agents-md**40k

  Decide whether a rule belongs in an AGENTS.md / CLAUDE.md file, and write it so it holds. Use before adding, editing, or removing any instruction in a root or nested AGENTS.md, when a convention keeps getting broken and someone proposes documenting it, when reviewing a diff that touches one, or when a file has grown and needs a trim. Carries the enforcement-tag convention (\`\[lint: \<id>\]\` / \`\[review\]\`), the six configuration smells to check against, and the size budget. Trigger terms: AGENTS.md, CLAUDE.md, agent instructions, context file, add a rule, document this convention, the file is too long. /editing-agents-md by posthog](https://skilld.dev/gh/posthog/posthog/editing-agents-md)
- [

  **/establishing-code-ownership**40k

  Determine which PostHog team owns a file, directory, or code path, or enumerate all code a team owns (via distributed \`owners.yaml\`, \`products/\*/product.yaml\`, and \`.github/CODEOWNERS\`). Use when assigning a reviewer, attributing a bug or slow query to a team, routing work, scoping a team-wide audit, or answering "who owns X" / "what does team Y own". /establishing-code-ownership by posthog](https://skilld.dev/gh/posthog/posthog/establishing-code-ownership)
- [

  **/exploring-ai-failures**40k

  Find where an AI/LLM application is failing in production and surface the failure patterns, working from real traces. Use when someone wants to understand what's going wrong with an AI feature, find and categorize failure modes, triage errors, or investigate quality issues (wrong answers, ignored instructions, hallucinations, tool misuse) — "what's failing in my agent", "surface error patterns", "why are the responses bad", "find the common failure modes", "what should I fix next". Covers scoping to one use case, finding failing traces by whichever signal fits the context (code errors, metric outliers, trace-type slices, manual review, existing-eval spikes, clustering), and reading them into a ranked failure taxonomy. /exploring-ai-failures by posthog](https://skilld.dev/gh/posthog/posthog/exploring-ai-failures)
- [

  **/exploring-apm-traces**40k

  Investigates distributed application performance using PostHog APM (OpenTelemetry span) data via MCP. Use when the user asks about service traces, slow HTTP/database spans, error spans, error-rate trends or spikes, latency distributions, trace IDs, or span attributes — not AI observability traces or product logs. Uses posthog:query-apm-spans, posthog:apm-trace-get, posthog:apm-spans-sparkline, posthog:apm-services-list, posthog:apm-attributes-list, and posthog:apm-attribute-values-list. /exploring-apm-traces by posthog](https://skilld.dev/gh/posthog/posthog/exploring-apm-traces)
- [

  **/exploring-autocapture-events**40k

  Guides exploration of $autocapture events captured by posthog-js to understand user interactions, find CSS selectors (especially data-attr attributes), evaluate selector uniqueness, query matching clicks ad-hoc, and create actions. Use when the user asks about autocapture data, wants to find what users are clicking, needs to build actions from click events, asks about elements\_chain, wants to build a trend or funnel filtered by clicks or other autocapture interactions, asks which properties autocapture sends, or asks how to filter $autocapture events. Only applies to projects using posthog-js autocapture. /exploring-autocapture-events by posthog](https://skilld.dev/gh/posthog/posthog/exploring-autocapture-events)
- [

  **/exploring-endpoint-execution-logs**40k

  Explore and diagnose a PostHog endpoint's execution logs — error messages, failed runs, cache misses, slow runs, or unexpected row counts during endpoint invocations. Use when the user says "my endpoint is failing", "show me the logs for endpoint X", "what error did endpoint Y produce", "why did endpoint Z return no rows", "is this endpoint hitting cache", or "check the last N runs". Focused on a single named endpoint's runtime log entries, not project-wide auditing or query performance profiling. /exploring-endpoint-execution-logs by posthog](https://skilld.dev/gh/posthog/posthog/exploring-endpoint-execution-logs)
- [

  **/exploring-live-traffic**40k

  Inspects PostHog Web analytics Live tab data — current users online, last-30-minutes pageviews, top pages, referrers, devices, browsers, countries, bot traffic, and the per-minute bot/users charts. Use when the user asks "who is on my site right now?", "what is happening live?", "what bots are crawling me?", asks about the "live tab" / "live dashboard", wants live numbers (last 30 min), or wants help filtering or drilling into the live view. Also covers building product-analytics insights that mirror what the tiles show. /exploring-live-traffic by posthog](https://skilld.dev/gh/posthog/posthog/exploring-live-traffic)
- [

  **/exploring-llm-clusters**40k

  Investigate AI observability clusters — understand usage patterns in AI/LLM traffic, compare cluster behavior, compute cost/latency metrics, and drill into individual traces within clusters. /exploring-llm-clusters by posthog](https://skilld.dev/gh/posthog/posthog/exploring-llm-clusters)
- [

  **/exploring-llm-costs**40k

  Investigate LLM spend in PostHog — total cost over time, cost by model, provider, user, trace, or custom dimension, token and cache-hit economics, and cost regressions. Use when the user asks "how much are we spending on LLMs?", "which model / user / feature is most expensive?", "why did cost spike?", wants to build a cost dashboard or alert, or pastes a trace URL and asks about its cost. /exploring-llm-costs by posthog](https://skilld.dev/gh/posthog/posthog/exploring-llm-costs)
- [

  **/exploring-llm-evaluations**40k

  Investigate AI observability evaluations — \`hog\` (deterministic code-based), \`llm\_judge\` (LLM-prompt-based), and \`sentiment\` (user-message sentiment). Find existing evaluations, inspect their configuration, run them against specific generations, query individual results, and set up scheduled reports on an evaluation. Use when the user asks to debug why an evaluation is failing, surface common failure modes, compare results across filters, dry-run a Hog evaluator, prototype a new LLM-judge prompt, inspect sentiment classifications, or manage the evaluation lifecycle. /exploring-llm-evaluations by posthog](https://skilld.dev/gh/posthog/posthog/exploring-llm-evaluations)
- [

  **/exploring-llm-traces**40k

  Debug and inspect LLM/AI agent traces using PostHog's MCP tools. Use when the user pastes a trace or session URL (e.g. /ai-observability/traces/\<id> or /ai-observability/sessions/\<id>), asks to debug a trace, figure out what went wrong, check if an agent used a tool correctly, verify context/files were surfaced, inspect subagent behavior, investigate LLM decisions, or analyze token usage and costs. Also use when raw SQL/HogQL against \`events.properties.$ai\_input\` / \`$ai\_output\_choices\` returns empty — message content lives only on the dedicated \`posthog.ai\_events\` table. /exploring-llm-traces by posthog](https://skilld.dev/gh/posthog/posthog/exploring-llm-traces)
- [

  **/exploring-mcp-intent-clusters**40k

  Explore PostHog MCP intent clusters — agent goals grouped by semantic similarity, with each cluster's tool distribution and error rates, plus the tool-centric pivot (capture rate per intent, discovery rate against the advertised catalog, description fit, tool overlaps). Use when the user asks "what are agents trying to do with the MCP?", "group the intents", "which goals fail most?", "what does each cluster route to?", "when agents have this intent do they find my tool?", "which tools get mixed up?", wants to recompute the clustering, or pastes an MCP analytics intent-clustering URL. /exploring-mcp-intent-clusters by posthog](https://skilld.dev/gh/posthog/posthog/exploring-mcp-intent-clusters)
- [

  **/exploring-mcp-sessions**40k

  Investigate individual PostHog MCP sessions — the sequence of tool calls a single agent made in one run, what it was trying to do, and where it went wrong. Use when the user asks "what did this MCP session do?", "show me the tool calls for session X", "what was the agent's goal?", "which sessions had errors?", "who is connecting to my MCP?", or pastes an MCP analytics sessions URL. /exploring-mcp-sessions by posthog](https://skilld.dev/gh/posthog/posthog/exploring-mcp-sessions)
- [

  **/exploring-mcp-tool-original-user-motive**40k

  Build a starting-point taxonomy for an MCP tool — what users were trying to accomplish before they reached the tool — and publish it as a PostHog notebook. Reconstructs each session's goal from its opening tool calls, then clusters those goals into named categories with size, share, and facet mix. Use when the user asks "why do people use this tool?", "what are users actually trying to do?", "what problem brings people here?", "where do these sessions start?", "segment usage of \<tool> by goal", or wants a Clio-style taxonomy of MCP usage. Complements exploring-mcp-intent-clusters, which groups what agents did per call rather than why the session began. The agent running this skill writes the goal labels itself, reading the corpus query output session by session — the bundled scripts cover the mechanical facets but measurably lose the goal's altitude, so do not delegate that field to them. /exploring-mcp-tool-original-user-motive by posthog](https://skilld.dev/gh/posthog/posthog/exploring-mcp-tool-original-user-motive)
- [

  **/exploring-mcp-tool-quality**40k

  Investigate the quality of PostHog MCP tool calls — error rates, latency, reach, and which tools are failing or slow. Use when the user asks "which MCP tool has the highest error rate?", "what's the slowest tool?", "which tools fail most often?", "how reliable is tool X?", wants a tool-quality matrix, or pastes an MCP analytics tool-quality / dashboard URL and asks what it shows. /exploring-mcp-tool-quality by posthog](https://skilld.dev/gh/posthog/posthog/exploring-mcp-tool-quality)
- [

  **/exploring-mcp-tool-usage**40k

  Starting point for exploring how a PostHog MCP server's tools are used — routes a broad question to the typed tool that answers it. Use when the user asks "how is my MCP doing?", "what should I look at?", "explore my tool calls", "who uses my MCP tools?", "what are agents doing with the MCP?", or pastes an MCP analytics URL without a specific question. Offers a menu of questions, each backed by a query tool, then hands off to the focused skill. /exploring-mcp-tool-usage by posthog](https://skilld.dev/gh/posthog/posthog/exploring-mcp-tool-usage)
- [

  **/exploring-replay-vision-observations**40k

  Guides agents through pulling a Replay Vision scanner's observations, reading the findings, and acting on them — summarizing patterns across sessions, drilling into individual recordings, and turning real, corroborated issues into PostHog tasks, insights, or an investigating-replay hand-off. TRIGGER when: user wants to pull/read/triage Replay Vision observations, asks "what has my scanner found", wants to act on or summarize scanner findings, turn observations into tasks/work, or points at a /replay-vision/\<scanner-id> URL. DO NOT TRIGGER when: creating or sizing a scanner (use creating-replay-vision-scanners), running a one-off scan you don't then analyse, or authoring a signals scout. /exploring-replay-vision-observations by posthog](https://skilld.dev/gh/posthog/posthog/exploring-replay-vision-observations)
- [

  **/exploring-scouts**40k

  How to explore and make sense of PostHog Signals scouts — the scheduled agents that scan a project and write reports into the Signals inbox. Use when a user wants to understand what scouts they have, how each one is behaving, and whether the fleet is actually working. Covers surveying the fleet and its schedules, reading recent scout runs and drilling into a single run's reasoning, inspecting the durable scratchpad memory the fleet has built up, tracing a run to the reports it wrote or edited, and assessing a scout's health and performance over time (cadence, success rate, report rate, signal-to-noise). Read-only and exploratory — to write or tune a scout, use \`authoring-scouts\` instead. Trigger on "what are my scouts doing", "how is my \<x> scout performing", "show me recent scout runs", "why did this scout find/report nothing", "what has the fleet learned", "explore scout run \<id>", "is my scout working". /exploring-scouts by posthog](https://skilld.dev/gh/posthog/posthog/exploring-scouts)
- [

  **/extending-hobby-smoke-tests**40k

  Design, extend, review, or debug PostHog Hobby end-to-end smoke tests in bin/hobby-ci.py and .github/workflows/ci-hobby.yml. Use when adding an ingestion round trip, deciding whether a product belongs in Hobby CI, changing the CI Hobby service topology or API-key scopes, or diagnosing a smoke test that captures data but cannot query it. /extending-hobby-smoke-tests by posthog](https://skilld.dev/gh/posthog/posthog/extending-hobby-smoke-tests)
- [

  **/extending-personhog-test-harness**40k

  When and how to add scenarios, chaos events, and invariants to the personhog e2e test harness (rust/personhog-test-harness). Use after fixing a bug or regression in the personhog leader path (leader, router, writer, replica, coordination protocol) so the fix gets a permanent regression scenario; when adding a new failure mode to test (crashes, drains, zombies, lag, failover); or when a new correctness property needs asserting during runs. Trigger terms: personhog gate, chaos scenario, test harness, leader path regression, handoff bug, eviction, writer lag, acked write. /extending-personhog-test-harness by posthog](https://skilld.dev/gh/posthog/posthog/extending-personhog-test-harness)
- [

  **/feature-usage-feed**40k

  Set up an LLM-judge evaluation that extracts canonical use cases for a PostHog feature at scale and streams the results to a Slack channel as a live feed. Use when someone wants to understand how users are actually using a specific AI/LLM-powered feature in production — what they're investigating, what questions they're trying to answer, and what patterns surface — without manually reading hundreds of traces. Assumes the feature emits \`$ai\_generation\` and \`$ai\_evaluation\` events with \`$session\_id\` linkage to the trigger user's recording (the standard setup post the session-summary linkage PRs). /feature-usage-feed by posthog](https://skilld.dev/gh/posthog/posthog/feature-usage-feed)
- [

  **/filtering-bot-traffic**40k

  Identify, measure, and exclude bot / crawler / AI-agent traffic in PostHog web and product analytics using the traffic classification surface (the isLikelyBot / getTrafficType HogQL functions and the $virt\_\* virtual properties). Use when the user asks to "exclude bots", "filter out crawlers", "remove bot traffic from my numbers", "how much of my traffic is bots / AI crawlers", "is GPTBot / ChatGPT / Claude hitting my site", "break down traffic by human vs bot", or wants clean human-only counts in an insight or dashboard. For the real-time Live tab bot tiles, use exploring-live-traffic instead. /filtering-bot-traffic by posthog](https://skilld.dev/gh/posthog/posthog/filtering-bot-traffic)
- [

  **/finding-deleted-feature-flags**40k

  Find feature flags that were soft-deleted in the active project within a recent time window. Use when the user asks "what flags were deleted in the last N days", "show me recently deleted feature flags", "who deleted flag X", "audit recent flag deletions", or anything similar. Handles the non-obvious gotcha that system.feature\_flags exposes the deleted boolean but does not expose a deletion timestamp — the actual deleted-at time lives in the per-flag activity log and must be cross-referenced. /finding-deleted-feature-flags by posthog](https://skilld.dev/gh/posthog/posthog/finding-deleted-feature-flags)
- [

  **/finding-experiments**40k

  Resolves a PostHog experiment reference from natural language to a concrete experiment ID by browsing \`experiment-list\` (not feature-flag tools), with disambiguation when multiple experiments match. Use when the user names or quotes an experiment ("split test demo", "the File engagement boost experiment", "onboarding retention test", "landing page hero experiment", "pricing experiment"), describes it loosely ("the signup experiment", "my pricing test", "the one with the new checkout"), uses a relative reference ("latest", "most recent", "the one I created yesterday"), filters by status (running, draft, paused, exposure frozen, stopped, archived), or otherwise refers to an experiment by anything other than its concrete ID. /finding-experiments by posthog](https://skilld.dev/gh/posthog/posthog/finding-experiments)
- [

  **/finding-llm-gateway-migration-candidates**40k

  Finds and ranks callers that could move from services/llm-gateway to PostHog/ai-gateway. Use when asked what to migrate next, to find low-risk gateway migration candidates, to audit remaining Python gateway callers, or to identify callers blocked by Go gateway parity. Searches code and deployment wiring, inventories each caller's required contract, filters out unsupported migrations, and returns an evidence-backed shortlist without changing callers. /finding-llm-gateway-migration-candidates by posthog](https://skilld.dev/gh/posthog/posthog/finding-llm-gateway-migration-candidates)
- [

  **/finding-replay-for-issue**40k

  Finds the most informative session recording linked to an error tracking issue. Use when a user has an error tracking issue ID and wants to watch a replay showing what the user was doing when the error occurred. Ranks linked sessions by recency, activity score, and journey completeness, then summarizes the pre-error context. Replaces blind session picking from potentially hundreds of linked recordings. /finding-replay-for-issue by posthog](https://skilld.dev/gh/posthog/posthog/finding-replay-for-issue)
- [

  **/finding-sessions-to-watch**40k

  Guides a user from "I want to watch recordings but don't know which ones" to a short, high-signal list of sessions worth watching. Use when the user asks which sessions or replays to watch, wants help finding interesting / useful recordings, says they don't know where to start in session replay, or wants to watch sessions about a goal (signup, pricing, onboarding, checkout, a feature, rageclicks, errors, mobile, a specific person) without naming exact filters. Turns a vague intent into a focused RecordingsQuery via \`query-session-recordings-list\`, then deep-links the best few and hands off to \`investigating-replay\`. Do NOT use when the user already has a recording/session ID (use investigating-replay) or wants the replay for a known error issue (use finding-replay-for-issue). /finding-sessions-to-watch by posthog](https://skilld.dev/gh/posthog/posthog/finding-sessions-to-watch)
- [

  **/fixing-flaky-tests**40k

  Guides an agent through reproducing, root-causing, fixing, and validating flaky tests in the PostHog monorepo. Use when a test fails intermittently in CI but passes on rerun or locally, when \`hogli ci:insights\` or the debugging-ci-failures skill classifies a failure as a flaky test, when given a GitHub Actions URL for a flaky job, when asked to check Trunk Flaky Tests for a test, PR, or master, or when asked to deflake, stabilize, or fix a flaky Jest, pytest, or Playwright test. Core discipline: reproduce locally before changing anything, fix the root cause (never mask it with sleeps, retries, or bigger timeouts), and prove the fix with an N-run validation loop sized to the observed failure rate. Stabilizing is not the only valid outcome — the skill also gates whether the test should exist, so deleting a test that catches nothing real, or re-leveling one that flakes because of the level it runs at, are first-class endings. /fixing-flaky-tests by posthog](https://skilld.dev/gh/posthog/posthog/fixing-flaky-tests)
- [

  **/formatting-insight-axes**40k

  Pick the right y-axis unit when creating or updating an insight via \`posthog:insight-create\` or \`posthog:insight-update\` — both TrendsQuery (\`trendsFilter.aggregationAxisFormat\`) and SQL insights (\`DataVisualizationNode\`, \`chartSettings.yAxis\[\].settings.formatting\`). Use when the agent is about to add a \`formula\` purely to convert units (e.g. dividing seconds by 60 to display minutes), when a \`math\_property\` or SQL column is a duration, currency, ratio, or large count, or whenever the user mentions "format the y-axis", "duration", "seconds", "minutes", "hours", "milliseconds", "ms", "percentage", "%%", "currency", "decimals", "axis label", or "axis unit" in the context of a graph insight. /formatting-insight-axes by posthog](https://skilld.dev/gh/posthog/posthog/formatting-insight-axes)
- [

  **/gating-production-deploys**40k

  Use when adding or editing a GitHub Actions workflow that pushes a container image to a registry (ECR/ghcr/Docker Hub via build-push-action) or dispatches a production deploy (a \`commit\_state\_update\` repository\_dispatch to PostHog/charts). Those run from a single canonical deploy repo, gated by the CD\_DEPLOY\_ENABLED variable. Does NOT apply to workflows that publish GitHub releases, npm, crates, or Homebrew — those stay on the public repo. /gating-production-deploys by posthog](https://skilld.dev/gh/posthog/posthog/gating-production-deploys)
- [

  **/generating-clickhouse-query-performance-reports**40k

  Produce and structure slow-query performance reports for PostHog's production ClickHouse (US and EU). Use when asked for a slow query report, query performance analysis over the last N days, per-team query cost, OOM or timeout investigation, cluster cost/memory regressions, or materialization candidates. Covers the modern \`query\_log\_archive\` source (typed \`lc\_\*\` columns, multi-day retention), how to categorize and attribute slow queries, root-cause patterns (unmaterialized JSONExtract, high-cardinality breakdowns, heavy joins), and the report structure. Runs queries via the \`querying-production-databases-via-metabase\` skill. /generating-clickhouse-query-performance-reports by posthog](https://skilld.dev/gh/posthog/posthog/generating-clickhouse-query-performance-reports)
- [

  **/grouping-noisy-errors**40k

  Consolidate PostHog error tracking issues that are the same actual error reported under different fingerprints. Use when the user asks "why do I have so many TypeError issues that look the same?", "merge these duplicates", "stop splitting this error into new issues", or wants to clean up fingerprint sprawl. Decides between a one-shot merge of existing issues and a durable grouping rule that keeps future events from creating new fingerprints. Does NOT group conceptually similar bugs across different runtimes, SDKs, or call sites. /grouping-noisy-errors by posthog](https://skilld.dev/gh/posthog/posthog/grouping-noisy-errors)
- [

  **/hogli**40k

  PostHog developer CLI and repo tooling reference. Use when the user mentions hogli, asks about repo CLI tools, bin scripts, Makefiles, how to run/build/test/lint, or any dev environment commands. /hogli by posthog](https://skilld.dev/gh/posthog/posthog/hogli)
- [

  **/implementing-mcp-tools**40k

  Guide for exposing PostHog product endpoints as MCP tools. Use when creating new or updating API endpoints, adding MCP tool definitions, scaffolding YAML configs, or writing serializers with good descriptions. Covers the full pipeline from Django serializer to generated TypeScript tool handler. /implementing-mcp-tools by posthog](https://skilld.dev/gh/posthog/posthog/implementing-mcp-tools)
- [

  **/implementing-mcp-ui-apps**40k

  Guide for adding MCP UI apps — interactive visualizations that render tool results in MCP clients like Claude Desktop. Use when adding a new detail or list view for an MCP tool, creating view components in products/\*/mcp/apps/, or linking tools to UI apps via YAML. /implementing-mcp-ui-apps by posthog](https://skilld.dev/gh/posthog/posthog/implementing-mcp-ui-apps)
- [

  **/implementing-warehouse-sources**40k

  Implement and extend PostHog Data warehouse import sources. Use when adding a new source under products/warehouse\_sources/backend/temporal/data\_imports/sources, adding datasets/endpoints to an existing source, or adding incremental sync, resumable imports, webhook ingestion, pagination, credentials validation, and source tests. /implementing-warehouse-sources by posthog](https://skilld.dev/gh/posthog/posthog/implementing-warehouse-sources)
- [

  **/improving-drf-endpoints**40k

  Use when editing, reviewing, or auditing DRF viewsets and serializers in PostHog. Triggers on files in posthog/api/, products/\*/backend/api/, products/\*/backend/presentation/, or any file importing rest\_framework. Covers field typing, schema annotations, enum collision fixes, and OpenAPI spec quality — everything that flows downstream into generated TypeScript types and MCP tools. /improving-drf-endpoints by posthog](https://skilld.dev/gh/posthog/posthog/improving-drf-endpoints)
- [

  **/improving-mcp-tools**40k

  Run an improve-my-MCP campaign: an autoresearch-style loop that measures the MCP agent experience with the eval harness, picks the highest-impact tool problem from production data, makes one bounded fix, and keeps it only if before/after scores improve. Use when asked to "improve my MCP", run an MCP improvement campaign, fix tool discoverability or descriptions based on evidence, or prepare an eval-backed PR for a tool change. Every shipped change must carry eval evidence; guardrails below are hard rules. /improving-mcp-tools by posthog](https://skilld.dev/gh/posthog/posthog/improving-mcp-tools)
- [

  **/inbox-exploration**40k

  Explore PostHog's Inbox and act on what it surfaces — the place where signal reports cluster into actionable issues and trends. Use when the user asks "what's in my inbox?", "what should I look at?", "which reports are actionable?", "what's PostHog flagged recently?", asks about a specific report by ID or title, wants to act on / fix / implement a report (turn it into a PR), wants to resolve, dismiss, or snooze a report, or wants to see which signal sources are configured. Covers listing, filtering, drilling into, and acting on reports, plus pointers to the deeper \`signals\` skill when raw signals or semantic search are needed. /inbox-exploration by posthog](https://skilld.dev/gh/posthog/posthog/inbox-exploration)
- [

  **/ingestion-pipeline-doctor-nodejs**40k

  Ingestion pipeline architecture overview and convention reference. Use when you need a quick orientation to the pipeline framework or want to know which doctor agent to use for a specific concern. /ingestion-pipeline-doctor-nodejs by posthog](https://skilld.dev/gh/posthog/posthog/ingestion-pipeline-doctor-nodejs)
- [

  **/instrumenting-first-party-metrics**40k

  How to instrument PostHog's own Metrics product from PostHog-owned code — record counters, gauges, and histograms that land in posthog.metrics, the same way customers do. Use when adding application metrics in this monorepo (web, Celery, Temporal), when asked to push or ship metrics into posthog metrics, or when unsure whether the SDK in this environment supports posthog.metrics yet. Covers the environment decision (SDK-first per the public docs, OTel fallback when the SDK path is not available), the exact version gates per SDK, what is already wired internally, and how to validate metrics actually arrive. /instrumenting-first-party-metrics by posthog](https://skilld.dev/gh/posthog/posthog/instrumenting-first-party-metrics)
- [

  **/integrating-with-posthog-ai**40k

  Wire a PostHog product surface into the PostHog AI agent from the frontend. Use when attaching scene or entity context, injecting instructions to steer the agent, reacting to the agent calling a tool, applying an agent edit back into an open form, or rendering a product tool card in a thread. /integrating-with-posthog-ai by posthog](https://skilld.dev/gh/posthog/posthog/integrating-with-posthog-ai)
- [

  **/investigate-metric**40k

  Diagnose why a product metric changed (dropped, spiked, or plateaued) by orchestrating breakdowns, actors, paths, lifecycle, retention, and annotations queries. Use when the user reports an anomaly, asks "why did X change?", or needs root-cause analysis for a trend, funnel, retention, stickiness, or lifecycle metric. /investigate-metric by posthog](https://skilld.dev/gh/posthog/posthog/investigate-metric)
- [

  **/investigating-ci-failures**40k

  Investigates a specific CI failure to a verdict: whose fault, which commit, who wrote it, and whether it's fixed. Use for "who broke master", "why did this test fail in CI", "is this failure my PR's fault or everyone's", "is this test flaky or actually broken", "when did this failure start". Works from the engineering\_analytics warehouse views (engineering\_analytics\_ci\_failures, engineering\_analytics\_ci\_job\_history) plus the CI failure logs. Not for aggregate CI health, cost, or merge bottlenecks (use diagnosing-ci-and-merge-bottlenecks) and not for building saved insights (use turning-engineering-analytics-into-insights). /investigating-ci-failures by posthog](https://skilld.dev/gh/posthog/posthog/investigating-ci-failures)
- [

  **/investigating-error-issue**40k

  Investigates a single PostHog error tracking issue end-to-end. Use when the user provides an issue ID or pastes an issue URL (\`/error\_tracking/\<id>\`) and wants to understand the error — who it affects, what triggers it, when it started, whether it correlates with a release, browser, OS, or feature flag, and what the next step should be. Pulls aggregated metrics, sample exception events, segment breakdowns, linked replays, and synthesizes a hypothesis-grade summary in one pass. /investigating-error-issue by posthog](https://skilld.dev/gh/posthog/posthog/investigating-error-issue)
- [

  **/investigating-logs**40k

  Investigate logs in a PostHog project: verify a service or deployment is healthy, explain an error spike, triage an incident, or understand what a log stream is saying. Use when the user asks to "check the logs", asks whether a service, deploy, release, or change is working or broke anything, asks why errors are up or what changed, or wants the root cause of failures visible in logs. Routes the logs MCP tools (services overview, pattern mining, before/after pattern diffing, bucketed counts, facets, raw rows) so investigations start from summaries instead of raw rows or hand-written SQL over the logs table. /investigating-logs by posthog](https://skilld.dev/gh/posthog/posthog/investigating-logs)
- [

  **/investigating-metric-anomalies**40k

  Investigates server/infrastructure metric anomalies in PostHog Metrics — from "this metric is rising/dropping/spiking" or a fired alert to a probable cause with evidence. Use when asked why a metric looks wrong (ingestion lag rising, error rate spiking, latency degrading, queue depth growing, throughput dropping), when an alert fires on an OTel/Prometheus metric, or for any incident triage that starts from a metric symptom. Composes characterize-metric-anomaly, query-metrics, and metric-names-list with logs (query-logs) and traces (APM span tools) for cross-signal root-cause correlation. /investigating-metric-anomalies by posthog](https://skilld.dev/gh/posthog/posthog/investigating-metric-anomalies)
- [

  **/investigating-replay**40k

  Investigates a session recording by gathering metadata, person profile, same-session events, and linked error tracking issues in one pass. Use when a user provides a recording or session ID and wants to understand what happened — who the user was, what they did, what errors occurred, and whether there are related error tracking issues. Replaces the manual chain of session-recording-get, persons-retrieve, execute-sql, and query-error-tracking-issues-list. /investigating-replay by posthog](https://skilld.dev/gh/posthog/posthog/investigating-replay)
- [

  **/isolating-product-facade-contracts**40k

  Plan and execute product isolation migrations to a facade plus contract layer in PostHog, following the Visual review architecture. Use when a product still exposes internals (models/logic/views) across boundaries and needs migration toward contracts.py + facade/api.py + presentation separation, with a PR strategy that minimizes review latency and conflicts with parallel work. /isolating-product-facade-contracts by posthog](https://skilld.dev/gh/posthog/posthog/isolating-product-facade-contracts)
- [

  **/maintaining-python-tests**40k

  Maintains existing pytest and Django test suites without weakening correctness. Use when asked to reduce Python test runtime or CI work, investigate slow pytest families, remove stale migration tests, consolidate repeated setup, improve Python test ownership, or measure whether a test optimization worked after merge. Ranks work by measured cost, applies the writing-tests value gate to existing coverage, preserves distinct behavior cases, validates isolation after shared-fixture changes, and separates testcase work from pytest-suite wall time. For an intermittent failure, use fixing-flaky-tests instead. /maintaining-python-tests by posthog](https://skilld.dev/gh/posthog/posthog/maintaining-python-tests)
- [

  **/manage-dashboard-widgets**40k

  Guides PostHog engineers through dashboard widget platform work — ship a new widget\_type (WIDGET\_REGISTRY, catalog, run\_widgets, WidgetCard) or update a shipped type (config, query, layout, RBAC, tile filter bar, list footer, titleHref, throttles). Use for WidgetSpec, widget\_specs/, widget-configs.zod.ts, hogli build:openapi, error\_tracking\_list, session\_replay\_list, widgetFilters, formatWidgetListCountFooter, widget\_query\_throttle, or WidgetCard composition. New types need widget-intake confirmation first. Not for MCP batch-add of existing types or adding tiles to a dashboard. /manage-dashboard-widgets by posthog](https://skilld.dev/gh/posthog/posthog/manage-dashboard-widgets)
- [

  **/managing-dashboards**40k

  Guides PostHog engineers through dashboard platform and scene changes. Use when changing Dashboard, DashboardTile, dashboardLogic, dashboard layouts, dashboard sharing or embeds, public dashboards, templates, filters, variables, refresh behavior, tile loading, dashboard lists, or dashboard permissions. Covers normal, shared, embedded, export, product-embedded, and template surfaces; RBAC; cache and query behavior; responsive layouts; and large or small dashboards. Use manage-dashboard-widgets instead for a widget\_type or WidgetCard change. /managing-dashboards by posthog](https://skilld.dev/gh/posthog/posthog/managing-dashboards)
- [

  **/managing-endpoint-versions**40k

  Work safely with endpoint versions — preview a draft in the playground, roll back to an older version, update settings on one version without bumping query history, deactivate a specific version. Use when the user asks "how do I roll back my endpoint", "preview my changes before publishing", "I want to fix v5 without bumping the version", or anything involving the version history. Calls out today's limitations honestly: there is no pointer flip; "rollback" means forking the old query into a new top version. /managing-endpoint-versions by posthog](https://skilld.dev/gh/posthog/posthog/managing-endpoint-versions)
- [

  **/managing-experiment-lifecycle**40k

  Guides experiment state transitions: launching, pausing, resuming, freezing/unfreezing exposure, ending, shipping variants, archiving, resetting, duplicating, and copying to another project. Covers preconditions, implications for variant assignment and analysis, and the decision framework for when to use each action. TRIGGER when: user asks to launch, pause, resume, end, ship, archive, reset, duplicate, or copy an experiment to another project, or to freeze/unfreeze exposure (stop enrolling new users while metrics keep flowing, or reopen enrollment). DO NOT TRIGGER when: user is creating an experiment (use creating-experiments), configuring rollout (use configuring-experiment-rollout), or setting up metrics (use configuring-experiment-analytics). /managing-experiment-lifecycle by posthog](https://skilld.dev/gh/posthog/posthog/managing-experiment-lifecycle)
- [

  **/managing-github-actions-secrets**40k

  Creates and updates GitHub Actions secrets for PostHog workflows. Use when adding a new CI secret, rotating an existing secret, wiring a workflow to an API token, package registry credential, deploy key, or any value referenced via \`${{ secrets.\* }}\` in \`.github/workflows/\`. /managing-github-actions-secrets by posthog](https://skilld.dev/gh/posthog/posthog/managing-github-actions-secrets)
- [

  **/managing-path-cleaning-rules**40k

  Inspects URL paths and proposes, tests, orders, and applies project-level path cleaning rules so dynamic segments (numeric IDs, UUIDs, slugs, dates) collapse into readable aliases. Use when the user says "clean the paths", "normalize URLs", "group similar pages", "too many distinct paths", "/users/123 and /users/456 are the same page", "set up path cleaning", or asks why a Web analytics or Paths breakdown is fragmented across thousands of nearly-identical URLs. Covers regex syntax (re2), alias placeholder convention, rule ordering, the test workflow, and applying rules via the path-cleaning-rules-update MCP tool. /managing-path-cleaning-rules by posthog](https://skilld.dev/gh/posthog/posthog/managing-path-cleaning-rules)
- [

  **/managing-reminders**40k

  Create and manage PostHog reminders — private, human-paced nudges that fire as in-app notifications on a schedule, optionally linked to a PostHog resource. Use when the user says "remind me to…", wants a one-off or recurring nudge (daily/weekly/monthly/yearly, a cron schedule, or a specific date/time), wants to be reminded to look at a dashboard, insight, experiment, feature flag, survey, notebook, replay, or error, or wants to list, change, or cancel their reminders. Covers when to pick a reminder over an alert or subscription, the one-off vs recurring vs cron schedule field mappings, timezones, and attaching a resource. /managing-reminders by posthog](https://skilld.dev/gh/posthog/posthog/managing-reminders)
- [

  **/managing-streamlit-apps**40k

  Create, deploy, and operate Streamlit apps in PostHog via the streamlit-apps MCP tools — create an app, set its source, start and stop its sandbox, poll status, list versions, delete, and share the app with humans via its PostHog URL. Use when asked to "create a streamlit app", "deploy a data app", "ship a dashboard app", "restart/stop my app", "why is my app not running", or "give me a link to the app". /managing-streamlit-apps by posthog](https://skilld.dev/gh/posthog/posthog/managing-streamlit-apps)
- [

  **/managing-subscriptions**40k

  Manage PostHog subscriptions — scheduled email, Slack, or webhook deliveries of insight or dashboard snapshots, optionally with an AI-written summary attached to each delivery. Use when the user wants to subscribe to an insight or dashboard, get an AI summary attached to those deliveries, check existing subscriptions, change delivery frequency, add or remove recipients, or stop receiving updates. /managing-subscriptions by posthog](https://skilld.dev/gh/posthog/posthog/managing-subscriptions)
- [

  **/mcp-servers**40k

  Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent. Use when the user asks to add/install/remove an MCP server, connect a tool like Linear/Sentry/Supabase/GitHub via MCP, set up mcp.json, or when MCP tools are failing or need OAuth login. /mcp-servers by posthog](https://skilld.dev/gh/posthog/posthog/mcp-servers)
- [

  **/merging-prs**40k

  Merge a PR into \`master\` through the Trunk merge queue and babysit it until it lands. Enqueue with a \`/trunk merge\` comment, then watch \`trunk merge status\` and the PR state until it is MERGED or the queue kicks it out, reporting Trunk's own reason for the terminal transition. Use when asked to merge a PR, "merge when ready", "land it", "ship it", to merge a whole stack (comment on the top PR — the queue merges it and every layer below atomically), to get a PR approved via the \`stamphog\` label, or to babysit/watch a PR through the queue. Never use \`gh pr merge\` in this repo — the queue is the only path into master. /merging-prs by posthog](https://skilld.dev/gh/posthog/posthog/merging-prs)
- [

  **/migrating-llm-gateway-callers**40k

  Migrates an LLM caller from services/llm-gateway to PostHog/ai-gateway. Use when adding a gateway caller, converting an existing Python gateway integration, adopting shared Go-capable client builders, changing gateway URLs or headers for a caller, or removing a Python fallback. Inventories the caller's contract, checks the parity record, implements the supported migration, updates tests, and stops with a documented blocker when Go parity is missing. /migrating-llm-gateway-callers by posthog](https://skilld.dev/gh/posthog/posthog/migrating-llm-gateway-callers)
- [

  **/modeling-activation-metrics**40k

  Build reusable activation models — an activation-rate metric and a per-user/per-account activated flag — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the user wants to define, model, or measure activation, the "aha moment", onboarding success, or which early actions predict a user sticking around. The core idea this skill enforces: activation is NOT a single assumed event — it is a retention-validated combination of early actions, chosen by balancing reach (enough users hit it) against predictive power (those who hit it retain much better). Covers finding candidate actions, validating them against retention lift, count thresholds and action combinations, per-product and B2B group-level activation, and modeling the winning definition as a durable activated-flag + activation-rate model. Read modeling-warehouse-foundations first; composes modeling-product-usage-metrics for the retention validation. /modeling-activation-metrics by posthog](https://skilld.dev/gh/posthog/posthog/modeling-activation-metrics)
- [

  **/modeling-conversion-metrics**40k

  Build reusable conversion models — funnel/step conversion rates, drop-off, and time-to-convert — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the user wants to model, define, or compute a conversion rate, funnel, step completion, drop-off, activation-funnel, signup-to-paid, or any "what % of users who did A went on to do B (within N days)" metric. Covers the funnel model (ordered steps, the conversion-window time-box, strict vs any-order), the person-vs-group aggregation unit, overall vs step-to-step conversion (two different numbers), breakdown attribution, and when a saved funnel insight beats a warehouse view. On PostHog, model funnels in HogQL with windowFunnel; in dbt, stage the event stream and compute an fct\_conversion mart with tests. Read modeling-warehouse-foundations first for the view-vs-dbt mechanics; pairs with query-funnel for interactive analysis. /modeling-conversion-metrics by posthog](https://skilld.dev/gh/posthog/posthog/modeling-conversion-metrics)
- [

  **/modeling-dimension-tables**40k

  Build reusable dimension / lookup tables for a star schema — country/region, timezone, currency, date, plan/product, and other descriptive attributes — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the user wants to model dimension tables, lookup tables, a star schema, conformed dimensions, or wants to enrich events/revenue/usage with country, region, timezone, plan, or currency attributes without repeating JOINs. Covers sourcing the dimension data (upload, warehouse source, or derive from events), shaping it into an aliased one-row-per-entity view (optionally materialized on a slow schedule since dimensions change rarely), and attaching it to facts via a saved or person join so its columns read as native fields. Key rule: for currency use the built-in convertCurrency() instead of a hand-rolled rate table. Read modeling-warehouse-foundations first; dimensions here are reused by the revenue, conversion, activation, and product-usage modeling skills. /modeling-dimension-tables by posthog](https://skilld.dev/gh/posthog/posthog/modeling-dimension-tables)
- [

  **/modeling-product-usage-metrics**40k

  Build reusable product-usage and engagement models — retention, stickiness, and lifecycle — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the user wants to model, define, or compute whether users come back (retention / churn), how frequently they engage (stickiness / power users / DAU-WAU-MAU ratio), or the composition of the active base (new / returning / resurrecting / dormant lifecycle). These three are one engagement family sharing a start-event/return-event vocabulary and an interval granularity; this skill treats them together and helps pick the right lens: retention for the return-rate cohort matrix, stickiness for the frequency distribution, lifecycle for growth quality. On PostHog, model them in HogQL (mirroring query-retention / query-stickiness / query-lifecycle); in dbt, build fct\_retention / fct\_stickiness / fct\_lifecycle marts with tests. Read modeling-warehouse-foundations first; feeds the retention validation used by modeling-activation-metrics. /modeling-product-usage-metrics by posthog](https://skilld.dev/gh/posthog/posthog/modeling-product-usage-metrics)
- [

  **/modeling-revenue-metrics**40k

  Build reusable revenue models — MRR, ARR, gross revenue, new/expansion/contraction/churn, ARPU, LTV, and per-customer/per-account revenue — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the user wants to model, define, or compute recurring revenue, monthly/annual recurring revenue, churn or retention of revenue, lifetime value, average revenue per user, or revenue by customer, cohort, product, or currency. On PostHog, build on the managed revenue\_analytics\_\* views (revenue\_item, mrr, customer, subscription, charge, product) fed by Stripe or custom revenue events — not raw Stripe tables — and normalize money with convertCurrency(). In dbt, stage the payment source and compute fct\_mrr / fct\_revenue\_item / dim\_customer marts with tests. Covers picking the right source, the subscription-config gotcha that leaves MRR empty, currency handling, and linking revenue to persons/groups. Read modeling-warehouse-foundations first for the view-vs-dbt mechanics. /modeling-revenue-metrics by posthog](https://skilld.dev/gh/posthog/posthog/modeling-revenue-metrics)
- [

  **/modeling-warehouse-foundations**40k

  Shared foundations for building reusable data models in PostHog, on either of two stacks: PostHog-native data-warehouse views / materialized views (HogQL, via the view-\* MCP tools), or an external dbt project (sources.yml + staging/marts + schema tests) run against your own or PostHog's managed warehouse. Read before authoring any specific business model — covers the PostHog-vs-dbt decision, the view-create → view-materialize → sync\_frequency workflow and the HogQL column-aliasing rule, the dbt project skeleton and the honest "no native dbt integration" picture, warehouse joins and star-schema dimensions, currency conversion with convertCurrency(), and checking/registering models in the data catalog for reuse. Companion to the domain skills modeling-revenue-metrics, modeling-conversion-metrics, modeling-activation-metrics, modeling-product-usage-metrics, and modeling-dimension-tables. Use when the user asks how to build a view, materialized view, or dbt model in PostHog, or which of the two stacks to use. /modeling-warehouse-foundations by posthog](https://skilld.dev/gh/posthog/posthog/modeling-warehouse-foundations)
- [

  **/modifying-taxonomic-filter**40k

  Guides safe changes to the TaxonomicFilter, PostHog's picker for events, actions, properties, cohorts, and more. Use when adding features, fixing bugs, improving search or loading performance, or refactoring the classic picker, rebuild menu, or headless filter panel. Covers real selection behavior, two live surfaces, shared telemetry, the conditional Postgres search plan, and result reveal rules. /modifying-taxonomic-filter by posthog](https://skilld.dev/gh/posthog/posthog/modifying-taxonomic-filter)
- [

  **/monitoring-capture-service**40k

  Guide for using the Grafana MCP to monitor and diagnose the capture service (rust/capture) in production. Use when investigating latency, event loss, Kafka backpressure, Redis issues, rate limiting, Envoy proxy issues, or any capture health question. Covers prod-us and prod-eu environments. /monitoring-capture-service by posthog](https://skilld.dev/gh/posthog/posthog/monitoring-capture-service)
- [

  **/monitoring-ingestion-pipeline**40k

  Guide for using the Grafana MCP to monitor and diagnose the Node.js ingestion pipeline workers in production. Use when investigating event lag, drops, pipeline errors, person/group processing, Kafka consumer health, Redis, Postgres, ClickHouse downstream health, or any ingestion worker question. Covers prod-us and prod-eu environments. /monitoring-ingestion-pipeline by posthog](https://skilld.dev/gh/posthog/posthog/monitoring-ingestion-pipeline)
- [

  **/optimizing-clickhouse-and-hogql-queries**40k

  Workflow for optimizing ClickHouse and HogQL queries. Use when a HogQL query, query runner, insight, or report is too slow; when a hand-written ClickHouse query (via \`sync\_execute\` or in a migration) is too slow; when ClickHouse times out or hits memory limits; when investigating a slow \`system.query\_log\` row; or when reviewing a proposed HogQL printer change for performance. Covers extracting the ClickHouse SQL, common smells (\`FROM ... FINAL\`, \`JSONExtract\` over properties, missing skip indexes, self-joins, CTE blow-up), measuring against a real cluster, and applying the fix at the right layer (printer, query runner, or migration). Does NOT cover Postgres / Django ORM / app-database queries; for those use \`profiling-slow-api-endpoints\`. /optimizing-clickhouse-and-hogql-queries by posthog](https://skilld.dev/gh/posthog/posthog/optimizing-clickhouse-and-hogql-queries)
- [

  **/organizing-conversations-code**40k

  File layout for the conversations product. Use when adding, moving, renaming, or reviewing files under products/conversations/ — especially frontend components, scenes, helpers, and tests. Conversations React components live in their own folder under products/conversations/frontend/components/, never as loose files in components/ or at the frontend root. Expand this skill as more conversations layout rules land. /organizing-conversations-code by posthog](https://skilld.dev/gh/posthog/posthog/organizing-conversations-code)
- [

  **/placing-product-frontend-code**40k

  Decide which tree a frontend file belongs in — \`products/\<name>/frontend/\` or \`frontend/src/scenes/\<name>/\` — and explain why the boundary is real rather than stylistic. Use when adding a new scene, component, or logic file for a product; when creating a new directory under \`frontend/src/scenes/\`; when a product has UI in both trees and you need to know which side to extend; or when moving a scene into its product. Covers the merge-queue lane cost of the split, the measurement showing a dependency graph cannot substitute for the path signal, and a report script that shows how far each product's move has gone. /placing-product-frontend-code by posthog](https://skilld.dev/gh/posthog/posthog/placing-product-frontend-code)
- [

  **/planning-voice-agent-user-interviews**40k

  Plan a round of user interviews conducted by PostHog''s AI voice agent (a "robo interviewer") — the automated voice-agent interview product. Captures a UserInterviewTopic (who to target, what to ask, framing context, question list) and calls user-interview-topics-create. ONLY trigger when the user clearly wants an AI voice agent to actually run the interview calls (e.g. "set up robo user interviews", "have the voice agent interview these users"). Do NOT trigger for ordinary user research that does not involve the voice agent — finding or shortlisting users to talk to ("who''d be a good fit to interview about Y"), planning questions for a human-run interview, or analysing feedback are audience discovery, handled with normal data queries, not this skill. Also do NOT trigger for uploading a recorded interview audio file or browsing topics with user-interview-topics-list. When intent is ambiguous, first confirm what kind of research it is and whether they want an AI voice agent to conduct it (see Step 0). /planning-voice-agent-user-interviews by posthog](https://skilld.dev/gh/posthog/posthog/planning-voice-agent-user-interviews)
- [

  **/playwright-test**40k

  Write a playwright test, make sure it runs, and is not flaky. /playwright-test by posthog](https://skilld.dev/gh/posthog/posthog/playwright-test)
- [

  **/posthog-desktop**40k

  Scopes work to the desktop app at products/desktop — a nested standalone pnpm/turbo/Biome workspace imported from the now-archived PostHog/code repo, with posthog/posthog the only source of truth for PRs, CI and publishing, and not part of the root frontend or Django build. Use when the user says /posthog-desktop, or works on the Electron desktop app, apps/code, apps/web, apps/mobile, packages/core, packages/ui, packages/workspace-server, @posthog/api-client, @posthog/agent, or the agent framework. Pins the working directory to products/desktop, swaps in that tree's toolchain and conventions in place of the monorepo's, and defines the few paths outside the tree that may be touched (Django APIs the app calls, desktop-\* CI at the root). /posthog-desktop by posthog](https://skilld.dev/gh/posthog/posthog/posthog-desktop)
- [

  **/profiling-slow-api-endpoints**40k

  Profiles slow PostHog API endpoints when the main cost is in Postgres or Python. Use when a screen, picker, or list is slow; a Django endpoint has high tail latency; a query plan changes with tenant size; or a proposed database fix needs production evidence. Covers APM traces, safe production EXPLAIN, representative measurements, implementation choices, tests, rollout, and post-deploy verification. For ClickHouse or HogQL latency, use \`optimizing-clickhouse-and-hogql-queries\` instead. /profiling-slow-api-endpoints by posthog](https://skilld.dev/gh/posthog/posthog/profiling-slow-api-endpoints)
- [

  **/qa-frontend**40k

  Internal PostHog developer frontend/browser QA skill. Use only when a PostHog developer explicitly asks to run frontend QA, browser-test a PR, verify a UI flow against the local PostHog stack, use qa-frontend, or QA current frontend changes with browser/runtime evidence. Do not use for generic code review, PR review, "check my changes", CI debugging, or security audit; use qa-team, debugging-ci-failures, or security-audit instead. Runs in PR mode or local mode, plans adaptive browser and visual checks, drives browser MCP/tooling such as Playwright MCP or Chrome DevTools MCP, captures evidence, and applies only approved/narrow fixes. /qa-frontend by posthog](https://skilld.dev/gh/posthog/posthog/qa-frontend)
- [

  **/qa-team**40k

  Multi-agent QA review team for code changes. This skill should be used when the user asks to "review my code", "run QA", "qa-team", "review this branch", "code review", "check my changes", or wants a comprehensive multi-perspective code review of the current branch's changes. Spawns parallel specialist agents (security, database, reliability, compatibility, data integrity, performance, frontend, copy) that independently review the diff and produce a converged report. Also includes two generalist reviewers for convergence validation. /qa-team by posthog](https://skilld.dev/gh/posthog/posthog/qa-team)
- [

  **/querying-canvas-data**40k

  Get PostHog data into a canvas correctly: the host-injected \`ph\` SDK (loadInsight, query, capture, state, connectors, openExternal, navigate), the data hierarchy (saved insights first, typed query nodes second, inline HogQL last), verifiability (insight-backed metrics link their saved insight in PostHog; ad-hoc queries expose the exact query that ran), per-insight-type result shapes, progressive per-query loading, date-range wiring, live third-party data through the viewer's own connections (ph.connectors), and event capture from a canvas. Use whenever a canvas shows metrics, charts, tables, any PostHog data, or data from GitHub or an MCP server, or needs to send analytics events. /querying-canvas-data by posthog](https://skilld.dev/gh/posthog/posthog/querying-canvas-data)
- [

  **/querying-local-postgres**40k

  Run read-only SQL against the local Postgres app database (SELECT, EXPLAIN, EXPLAIN ANALYZE on SELECT). Default local URL postgres://posthog:posthog@localhost:5432/posthog; else DATABASE\_URL. Use when querying the local DB, inspecting tables, debugging data, or analyzing query plans. Mutations are strictly forbidden. /querying-local-postgres by posthog](https://skilld.dev/gh/posthog/posthog/querying-local-postgres)
- [

  **/querying-posthog-data**40k

  Required reading before writing any HogQL/SQL or calling execute-sql against PostHog. Use whenever the user wants to search, find, or do complex aggregations PostHog entities (insights, dashboards, cohorts, feature flags, experiments, surveys, hog flows, data warehouse, persons, etc.) and query analytics data (trends, funnels, retention, lifecycle, paths, stickiness, web analytics, error tracking, logs, sessions, LLM traces). Also the first stop for a governed business or telemetry measure (MRR, activation, billable usage, active organizations, failure rates): check the semantic layer (canonical metrics in system.information\_schema.metrics) before deriving from raw events or a typed domain tool. Covers HogQL syntax differences from ClickHouse SQL, system table schemas (system.\*), available functions, query examples, and the schema-discovery workflow. /querying-posthog-data by posthog](https://skilld.dev/gh/posthog/posthog/querying-posthog-data)
- [

  **/querying-production-databases-via-metabase**40k

  Runs read-only production database analysis through PostHog's internal Metabase instances. Use for ClickHouse query logs, slow query cost, Postgres query plans, index selection, or tenant-size analysis. Covers US and EU database discovery, SSO login through \`hogli\`, safe query rules, and query patterns for both engines. /querying-production-databases-via-metabase by posthog](https://skilld.dev/gh/posthog/posthog/querying-production-databases-via-metabase)
- [

  **/querying-tophog**40k

  Query tophog — the ingestion pipeline's heavy-hitter store in ClickHouse — to identify hot or expensive actors (team\_id, distinct\_id, session\_id, partition) during incident triage. Use when investigating ingestion lag, a hot or lagging Kafka partition, expensive person processing, merge storms, or any "which team or distinct\_id is causing this" question. Covers the internal Metabase access path (SSO via hogli), the tophog schema, and the cost-vs-volume query lens. Internal-only: results contain cross-customer identifiers. /querying-tophog by posthog](https://skilld.dev/gh/posthog/posthog/querying-tophog)
- [

  **/quill-code**40k

  Edit the @posthog/quill design system locally and consume the change in products/desktop before it is published to npm. Use when changing quill components/primitives/tokens, when a quill change must be tested inside the Code app, or when the user mentions quill, the design system, the .local-quill tarball, or the @posthog/quill pnpm override. /quill-code by posthog](https://skilld.dev/gh/posthog/posthog/quill-code)
- [

  **/react-doctor**40k

  Diagnose and fix React codebase health issues. Use when reviewing React code, fixing performance problems, auditing security, or improving code quality. /react-doctor by posthog](https://skilld.dev/gh/posthog/posthog/react-doctor)
- [

  **/resolving-ingestion-warnings**40k

  Diagnoses and resolves PostHog ingestion warnings — problems recorded while ingesting events (dropped events, rejected person merges, oversized payloads, invalid data). Use when a user asks why events are missing, dropped, or undercounted, why identify/alias calls don't work or accounts stay duplicated, why person or group properties aren't updating or profiles look inflated, why recordings have gaps, heatmaps are empty, LLM token counts are missing, why cookieless events vanish, or whenever the \`ingestion\_warning\` health check fires. Explains severity triage (error = dropped, warning = modified, info = intentional) and routes all warning types — size limits and enrichment, merges and distinct IDs, \`$process\_person\_profile\`, timestamps, cookieless, heatmaps, transformations, session replay — to per-issue reference files with code-level causes and per-SDK fixes. /resolving-ingestion-warnings by posthog](https://skilld.dev/gh/posthog/posthog/resolving-ingestion-warnings)
- [

  **/review-hog-authoring**40k

  How to author custom PostHog Review skills: the review perspectives, blind-spot checks, validation criteria, and resolution criteria that drive PostHog Review's automated PR reviews. Use when a user wants a new review perspective (a specialist lens on their PRs), a custom blind-spot sweep, their own validation bar for which findings get published, or their own bar for which review comments get implemented. Trigger on "create a PostHog Review perspective", "custom review perspective", "my own blind-spot check", "custom validation criteria", "custom resolution criteria", "tune what PostHog Review publishes", "tune what PostHog Review implements". /review-hog-authoring by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-authoring)
- [

  **/review-hog-blind-spots-general**40k

  The general blind-spot check for PostHog Review, the final sweep that runs after every enabled review perspective has reviewed a chunk. Hunts for real, high-value issues that ALL of the perspectives missed, conditioned on what they actually found; returns an empty list over padding. /review-hog-blind-spots-general by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-blind-spots-general)
- [

  **/review-hog-perspective-contracts-security**40k

  The Contracts & Security review perspective for PostHog Review. Verifies that changed code is safe and maintains compatibility: API contracts and breaking changes, injection / authz / data exposure, input validation, and schema / interface alignment. Reports security and contract issues only. /review-hog-perspective-contracts-security by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-perspective-contracts-security)
- [

  **/review-hog-perspective-logic-correctness**40k

  The Logic & Correctness review perspective for PostHog Review. Verifies that changed code does what it is supposed to do: business logic, edge cases, data transformations, and query / data-access correctness. Reports correctness issues only; security and performance are separate perspectives. /review-hog-perspective-logic-correctness by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-perspective-logic-correctness)
- [

  **/review-hog-perspective-performance-reliability**40k

  The Performance & Reliability review perspective for PostHog Review. Verifies that changed code will perform and hold up in production: resource efficiency, error handling and recovery, scalability, and operational readiness. Reports performance and reliability issues only. /review-hog-perspective-performance-reliability by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-perspective-performance-reliability)
- [

  **/review-hog-resolution-criteria**40k

  The resolution criteria for PostHog Review's resolution stage: the bar for deciding, per unresolved review thread, whether the ask is worth implementing and safe to implement unattended. Implements contained, provable fixes; declines noise with a reason; escalates real-but-risky asks to a human. /review-hog-resolution-criteria by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-resolution-criteria)
- [

  **/review-hog-validation-criteria**40k

  The validation criteria for PostHog Review, the bar for deciding whether a flagged PR issue is worth keeping. Keeps real, user-affecting correctness / security / data-loss / contract / performance problems; drops overengineering, speculation, paranoia, never-gonna-happen edge cases, and style. /review-hog-validation-criteria by posthog](https://skilld.dev/gh/posthog/posthog/review-hog-validation-criteria)
- [

  **/reviewing-personhog-protocol**40k

  The full review process for personhog coordination-protocol changes — leases, fencing, handoffs, supervisors, failure budgets, warming, and changelog semantics. Use before pushing or requesting review on any personhog protocol changeset, when asked for an exhaustive or careful review of personhog code, and after any reviewer finds a gap the author missed. Covers the adversarial two-pass process, the review lens dimensions, the model-checking and test layers a change must clear, and the red-check-every-fix discipline. /reviewing-personhog-protocol by posthog](https://skilld.dev/gh/posthog/posthog/reviewing-personhog-protocol)
- [

  **/reviewing-with-coderabbit**40k

  Run a CodeRabbit review over the branch from the terminal, with the \`coderabbit\` CLI, and record the pass in the PR description. Use before \`gh pr create\`, and whenever a review of a branch is asked for: a local review, a self-review, a CodeRabbit review, or a pre-PR review. Run it once per branch. Checks the sign-in state before the review and asks the person whether to sign in or skip, because a signed-out review opens a browser tab on its own. When the CLI is unavailable, the PR opens without a local pass, and no agent review takes its place. Trigger terms: coderabbit, cr review, local review, self-review, review my branch, pre-PR review. /reviewing-with-coderabbit by posthog](https://skilld.dev/gh/posthog/posthog/reviewing-with-coderabbit)
- [

  **/run-posthog**40k

  Start, inspect, and drive the PostHog dev stack. Use for /run and /verify on this repo — when asked to launch PostHog, check whether the stack is healthy, inspect a running process, or verify a UI change against the live app. /run-posthog by posthog](https://skilld.dev/gh/posthog/posthog/run-posthog)
- [

  **/running-ci-preflight**40k

  Catch the deterministic CI failures reachable from your diff before pushing, with \`hogli ci:preflight\`. Use when the pre-push hook blocks a push, before reporting a task done, or after editing Python, serializers, migrations, workflows, or dependency manifests — to avoid burning a CI matrix on a failure you could catch locally (formatting, lint, broken lockfiles, OpenAPI drift, migration conflict, stale branch). Trigger terms: ci:preflight, preflight, pre-push checks, pre-push hook failed, "will this break CI". /running-ci-preflight by posthog](https://skilld.dev/gh/posthog/posthog/running-ci-preflight)
- [

  **/scanning-experiments-with-replay-vision**40k

  Provisions a Replay Vision scanner scoped to one experiment's exposed sessions: sets \`experiment\_targeting\` so the API derives the person-scoped exposure filter server-side, templates a prompt that stays comparable across variants, sizes credit spend against the experiment's own population, and creates the scanner disabled so its prompt can be previewed on real sessions before it sweeps. TRIGGER when: user wants Replay Vision to watch an experiment, asks to scan or analyze an experiment's recordings with AI, asks "what are users actually doing in the test variant", or wants a scanner scoped to an experiment's exposed sessions. DO NOT TRIGGER when: creating a general-purpose scanner not tied to an experiment (use creating-replay-vision-scanners), reading observations a scanner already produced (use exploring-replay-vision-observations), or manually browsing an experiment's recordings without AI analysis (use analyzing-experiment-session-replays). /scanning-experiments-with-replay-vision by posthog](https://skilld.dev/gh/posthog/posthog/scanning-experiments-with-replay-vision)
- [

  **/scene-menu-bar**40k

  Conventions for adding or editing the SceneMenuBar above a scene's \<SceneTitleSection>. Use when adding new menu items, moving items between menus, gating behind feature flags, building a new scene's menubar, or wiring rich inputs (tags, combobox) into the bar. /scene-menu-bar by posthog](https://skilld.dev/gh/posthog/posthog/scene-menu-bar)
- [

  **/security-audit**40k

  Focused security audit of code, calibrated to surface real exploitable bugs and suppress theoretical findings. Use when the user asks to "audit", "security-audit", "find vulnerabilities", "check for IDOR/SSRF/XSS/injection", or wants a security review of a file, directory, branch diff, or PR. Covers access control, injection, auth/secrets, sensitive data, business logic, web boundary, and AI agent/LLM trifecta risks. Produces calibrated findings with data flow, exploit request, fix, and confidence — no theoretical or defense-in-depth nits. /security-audit by posthog](https://skilld.dev/gh/posthog/posthog/security-audit)
- [

  **/sending-notifications**40k

  How to send real-time in-app notifications from PostHog backend code. Use when integrating notifications into a new feature, wiring up a notification source (alerts, comments, approvals, pipelines, issues), or choosing the right target type and priority for a notification. /sending-notifications by posthog](https://skilld.dev/gh/posthog/posthog/sending-notifications)
- [

  **/setting-feature-flags-in-storybook**40k

  Use when writing a Storybook story for a component gated on a feature flag — boolean flags or multivariate/experiment-arm variants. Covers the \`featureFlags\` story parameter and why imperatively setting flags renders the flag-off branch in visual-regression snapshots while passing in jest. /setting-feature-flags-in-storybook by posthog](https://skilld.dev/gh/posthog/posthog/setting-feature-flags-in-storybook)
- [

  **/setting-up-a-custom-rest-source**40k

  Connect an arbitrary REST API to the PostHog data warehouse as a Custom source by authoring a JSON manifest, with no per-source code. Use when the user points at an API that has no built-in PostHog connector — "import data from this REST API", "sync my internal API", "connect this API from its docs", "build a custom data warehouse source" — and gives a docs URL or a natural-language description of the endpoints. Walks through drafting the RESTAPIConfig manifest (auth — bearer, API key, HTTP basic, or OAuth2 client credentials / refresh token — pagination, record path, incremental cursor, parent/child fan-out), validating it, test-reading live rows to verify the field mappings, and creating the source. If the API already has a native PostHog connector, use setting-up-a-data-warehouse-source instead — this skill checks the connector registry first and only handles APIs with no native connector. /setting-up-a-custom-rest-source by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-a-custom-rest-source)
- [

  **/setting-up-a-data-warehouse-source**40k

  Guide the user through connecting a new data warehouse source — Postgres, MySQL, Stripe, Hubspot, MongoDB, Salesforce, BigQuery, Snowflake, and so on. Use when the user wants to "connect Stripe", "import data from Postgres", "add a new data source", "sync my warehouse tables", or wants to pick sync methods for each table. Walks through source-type discovery, credential validation, table discovery, per-table sync\_type selection, and the final create call. Also covers picking a good prefix and what to do right after creation. /setting-up-a-data-warehouse-source by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-a-data-warehouse-source)
- [

  **/setting-up-data-catalog**40k

  Populates and maintains a project's data catalog (semantic layer): canonical metrics, trust marks (certifications) on warehouse tables/views, and reviewed table relationships. Use when asked to set up / seed / bootstrap the data catalog or semantic layer, to catalog a project's metrics, to certify or deprecate data sources, to propose or review table joins, or to work through the proposal review queue. To \*use\* an existing catalog to answer a business-number question, see querying-posthog-data instead. Trigger terms: data catalog, semantic layer, canonical metric, certify table, deprecate source, relationship proposal, metric drift, review queue. /setting-up-data-catalog by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-data-catalog)
- [

  **/setting-up-devbox**40k

  Guide a PostHog engineer through spinning up, connecting to, running commands on, and mirroring local code to a remote devbox (a Coder workspace running the full PostHog stack). Use when asked to set up a devbox, start or connect to a devbox, configure remote dev, get gh CLI / Claude Code authed on a devbox, run a command on a devbox, sync a local checkout so you can edit locally while the stack runs remotely (devbox:sync), or diagnose why a devbox command fails. Covers the tailnet prerequisite, hogli devbox commands, Coder user secrets for auth, one-way local->remote sync via mutagen, and verifying with devbox:exec. How each dev personalizes their box is left to them. /setting-up-devbox by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-devbox)
- [

  **/setting-up-support-slack-locally**40k

  Connect a real Slack workspace to local PostHog Conversations (the SupportHog Slack app) so Slack messages become support tickets and replies post back. Use when the user wants to test the conversations Slack integration locally, hits "Support Slack OAuth client ID is not configured", gets a white screen or "Network error" on the OAuth callback, or asks how to set SUPPORT\_SLACK\_APP\_CLIENT\_ID / a tunnel for supporthog Slack events. Covers the Slack app + scopes, the SUPPORT\_SLACK\_\* dynamic settings, and the key split: localhost for OAuth and the UI, a public tunnel only for inbound events. /setting-up-support-slack-locally by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-support-slack-locally)
- [

  **/setting-up-warehouse-properties**40k

  Populate person or group properties from a data warehouse table or materialized view, so warehouse columns become properties usable in feature flags, cohorts, and insights. Use when the user wants to "sync my Postgres columns to person properties", "map a warehouse table to people", "replace our daily identify cron", "update person properties from the warehouse", or asks for reverse ETL into PostHog. Covers picking the table and the identifier column, proposing a whole-table column mapping in one call, excluding identity and reserved properties, checking collisions with properties that already exist, and running the first backfill. /setting-up-warehouse-properties by posthog](https://skilld.dev/gh/posthog/posthog/setting-up-warehouse-properties)
- [

  **/setup-web-tests**40k

  Set up Python test environment in Claude Code for web where flox is unavailable. Use when you need to run backend tests and \`uv sync\` fails due to Python version mismatch. /setup-web-tests by posthog](https://skilld.dev/gh/posthog/posthog/setup-web-tests)
- [

  **/signals**40k

  How to query the document\_embeddings table for raw signal data using HogQL. Use when you need to perform semantic search over signals, fetch every signal that contributed to a specific report, or list signal types. For browsing the curated report layer (the Inbox) — listing reports, filtering by status/source, drilling into a single report by ID — use the \`inbox-exploration\` skill first; drop into this skill afterwards if the user wants the underlying observations. /signals by posthog](https://skilld.dev/gh/posthog/posthog/signals)
- [

  **/signals-scout-ai-observability**40k

  Signals scout for PostHog AI observability. Watches LLM traces for cost, latency, error, volume, and eval-performance regressions. /signals-scout-ai-observability by posthog](https://skilld.dev/gh/posthog/posthog/signals-scout-ai-observability)
- [

  **/signals-scout-anomaly-detection**40k

  Signals scout that watches the project's most-viewed dashboards and insights for anomalies — bursts, drops, flat-lines, and trend breaks — against each insight's own seasonality-matched baseline. /signals-scout-anomaly-detection by posthog](https://skilld.dev/gh/posthog/posthog/signals-scout-anomaly-detection)
- [

  **/signals-scout-apm**40k

  Signals scout for PostHog distributed tracing (APM / OpenTelemetry spans). Watches per-service RED metrics for error-rate and latency regressions, new error signatures, and traffic cliffs. /signals-scout-apm by posthog](https://skilld.dev/gh/posthog/posthog/signals-scout-apm)
- [

  **/signals-scout-conversations**40k

  Signals scout for PostHog Conversations (support inbox). Watches \`$conversation\_\*\` ticket- lifecycle events for SLA breach steps, first-response latency blowouts, backlog imbalance, and channel or assignment concentration. /signals-scout-conversations by posthog](https://skilld.dev/gh/posthog/posthog/signals-scout-conversations)
- [

  **/signals-scout-csp-violations**40k

  Signals scout for Content Security Policy violations. Watches \`$csp\_violation\` events for blocked-URL clusters, per-directive bursts, post-deploy regressions, and suspicious third- party domains. /signals-scout-csp-violations by posthog](https://skilld.dev/gh/posthog/posthog/signals-scout-csp-violations)

Skills published by PostHog. Checked GitHub just now