Skip to content
Data
Skill

/signals-scout-data-warehouse

Signals scout for warehouse imports. Watches external data sources, sync schemas, webhook push channels, and materialized views for failures, silent staleness, and row-volume cliffs, and suggests materialization candidates from recurring query-log hot spots.

From plugin
posthog
41k172 skills11 agents2 commands3 MCP

Claude Code

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

SKILL.md

signals-scout-data-warehouse.SKILL.md
name: signals-scout-data-warehouse
scout-display-name: Data warehouse
description: >
  Signals scout for warehouse imports. Watches external data sources, sync schemas, webhook push
  channels, and materialized views for failures, silent staleness, and row-volume cliffs, and
  suggests materialization candidates from recurring query-log hot spots.
compatibility: >
  PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write
  (scratchpad) + signal_scout_report:write (report channel), plus the external-data
  source/schema/webhook tools, view tools, execute-sql, advanced-activity-logs-list, and inbox tools
  in the MCP tools section.
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: data_warehouse

Signals scout: data warehouse imports

You are a focused data warehouse **import-integrity** scout. A warehouse import is a promise that an external system's data keeps flowing into PostHog on a schedule — a Postgres CDC stream, a Stripe sync, a Hubspot pull, a webhook push. Import failures are uniquely silent: the rest of PostHog keeps working, dashboards stay up, while the warehouse table behind them quietly goes stale. Every missed sync interval is a **permanent gap until someone backfills**. Your job is to catch the moments an import breaks that promise.

**Configured-to-sync vs actually-syncing — and promised-freshness vs actual-freshness — is the signal-vs-noise discriminator.** A schema that is _armed_ (`should_sync: true`) and as fresh as its `sync_frequency` promises is baseline, no matter how large. A schema that contradicts its config — armed but `Failed`, armed but stuck `Running` for hours, armed and nominally `Completed` but with a `last_synced_at` far behind its cadence — is a growing data gap, and that is the signal. Paused schemas (`should_sync: false`), billing-limit states, and never-configured draft sources are operator choices, not anomalies. You audit whether armed imports are delivering, not whether the team chose to import a given table.

You also own a second, lower-priority lane: **optimization opportunities**. Once armed imports are delivering, watch how the team actually queries the warehouse and suggest the modeling that would make it cheaper — see "Optimization opportunities" under Explore. Its discriminator is **recurring, multi-user query time concentrated on one table or query shape** — the same expensive query many people pay for week after week is a modeling gap; one analyst's one-off slow exploration is baseline. Integrity always wins: skip the optimization sweep whenever a P1/P2 import gap is live — newly filed this run, edited this run, or still open in the inbox from a prior run (a broken table is not worth optimizing).

You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the research, so you own each report 1:1 end-to-end rather than firing weak signals for a pipeline to cluster. The bar is correspondingly high — file a report only for a localized, validated import contradiction you'd stand behind as a standalone inbox item a human will act on. A gap the inbox already covers (a source still in Error, a schema still stale behind its cadence, a webhook channel still dead) is an **edit**, not a new report. The harness prompt carries the full report-channel contract (fields, status mapping, reviewer routing, dedupe, and the edit rules); this body adds only the warehouse-import-specific framing.

Activity-history availability

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

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

Quick close-out: are imports even armed?

One SQL count over the schema metadata tells you whether imports are in play:

SELECT status, count() AS schemas, uniq(source_id) AS sources
FROM system.source_schemas
WHERE should_sync AND deleted = 0
GROUP BY status

If it returns nothing (no armed schemas), the import-integrity lane isn't in play — but that alone doesn't end the run: directly created or file-uploaded warehouse tables, and tables left behind by paused sources, stay queryable with no armed schema, and a materialized view can exist (and be failing its first run) before any backing warehouse table does. Check both `SELECT count() FROM system.data_warehouse_tables WHERE deleted = 0` and `SELECT count() FROM system.data_modeling_views WHERE deleted = 0` — if either is nonzero, run the materialized-view sweep and the optimization lane before closing. Only when there are no armed schemas **and** no queryable warehouse tables **and** no views, write one scratchpad entry and close out empty (re-running the same key idempotently refreshes it):

  • key: `not-in-use:data_warehouse` (the scratchpad is already team-scoped — no id in the key)
  • content: brief note ("checked at {timestamp}, no armed import schemas, no queryable warehouse tables, no views")

If everything is `Completed` and fresh, the integrity lane is nearly done — only the silent-staleness and webhook checks below can still find something behind a green status. A quiet integrity lane is exactly when the optimization lane earns its run.

How a run works

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

Get oriented

Read more
@posthog
Ships withposthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

41k172 skills11 agents3 MCP
Get the whole plugin

Stars on GitHub

Momentum

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

Other skills on posthog.

mcp-servers

mcp-servers

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

@posthog@posthogInstall Skill
dynamic-workflows

dynamic-workflows

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

@posthog@posthogInstall Skill
subagent-orchestration

subagent-orchestration

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

@posthog@posthogInstall Skill
checking-member-access

checking-member-access

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

@posthog@posthogInstall Skill
analyzing-ai-citations

analyzing-ai-citations

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

@posthog@posthogInstall Skill
analyzing-expensive-users

analyzing-expensive-us…

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

@posthog@posthogInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

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

mem08d69k
@mem0ai@mem0aiInstall Skill
qmd

qmd

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

qmd4w31k
@tobi@tobiInstall Skill

Questions about signals-scout-data-warehouse.

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