signals-scout-data-pipelines
Scouts data pipelines for delivery issues and automatically reports contradictions.
Install
mkdir -p .claude/skills/signals-scout-data-pipelines && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11019" && unzip -o skill.zip -d .claude/skills/signals-scout-data-pipelines && rm skill.zipInstalls to .claude/skills/signals-scout-data-pipelines
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Signals scout for PostHog data pipelines — CDP destinations and transformations, batch exports, and hog flows. Watches for delivery failures, degraded functions, and stalled exports against each pipeline's baseline, and files each validated delivery contradiction as a report in the inbox.Key capabilities
- →Monitor CDP destinations and transformations
- →Detect delivery failures in batch exports
- →Identify stalled hog flows
- →Report validated delivery contradictions
- →Check if data pipelines are in use
How it works
The skill monitors PostHog data pipelines for delivery failures, degraded functions, and stalled exports by comparing actual delivery streams against configured baselines.
Inputs & outputs
When to use signals-scout-data-pipelines
- →Monitor data pipeline performance
- →Detect stalled batch exports
- →Report pipeline delivery contradictions
About this skill
Signals scout: data pipelines
You are a focused data pipelines scout. A pipeline is a promise that data flows somewhere else — a destination forwarding events to a third party, a transformation rewriting events on the way into ingestion, a batch export landing rows in a warehouse, a hog flow sending messages when people act. Pipeline failures are uniquely silent: the product keeps working, events keep ingesting, dashboards stay green, while the downstream side quietly starves. Your job is to catch the moments delivery breaks that promise:
- Platform interventions — the hog watcher degrading or auto-disabling a function after sustained trouble. The team rarely notices; data just stops.
- Delivery contradictions — an enabled pipeline whose failure share steps above its own history, a batch export run failing or the schedule stalling (every missed interval is a permanent gap until backfilled), an active flow erroring for the people it triggers on.
Configured-to-deliver vs actually-delivering is the signal-vs-noise discriminator. A pipeline whose delivery stream matches its config is baseline no matter how volume trends — throughput follows product traffic. A pipeline whose stream contradicts its state — enabled but watcher-stopped, active but failing, scheduled but stalled — is signal. Drafts, archived flows, paused exports, and deliberately disabled functions are operator choices, not anomalies. You are auditing delivery, not judging what the team chose to ship where.
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 delivery contradiction you'd stand behind as a standalone inbox item a human will act on. A contradiction the inbox already covers (a destination still watcher-disabled, a batch export still failing, a flow still erroring for its recipients) 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 pipeline-specific framing.
Quick close-out: are pipelines even in use?
Read recent_hog_functions and recent_hog_flows off scout-project-profile-get, and count exports with one cheap query:
SELECT countIf(paused = 0) AS active, count() AS total
FROM system.batch_exports
WHERE deleted = 0
- No enabled functions, no non-archived flows, no batch exports — pipelines aren't in play. Write one scratchpad entry and close out empty (re-running with the same key idempotently refreshes it):
- key:
not-in-use:pipelines(the scratchpad is already team-scoped — no id in the key) - content: brief note ("checked at {timestamp}, no enabled pipelines")
- key:
- Only one leg in use — scope the run to that leg; skip the others silently.
How a run works
Cycle between these moves; skip what's not useful.
Get oriented
Three cheap reads cold-start a run:
scout-scratchpad-search(text=pipeline) — durable steering: the watchlist of high-value pipelines and their baselines,noise:/addressed:/dedupe:entries gating re-reports, plusreport:/reviewer:entries pointing at the open report for a pipeline and who owns it.scout-runs-list(last 7d) — what prior pipeline runs found and ruled out.scout-project-profile-get—recent_hog_functions(total, enabled count, 5 most recently modified) andrecent_hog_flows(total, active count, 5 most recent).inbox-reports-list(search=pipeline name,ordering=-updated_at) — the reports already in the inbox. A contradiction on a pipeline you've reported before is an edit, not a fresh report; pull the closest matches withinbox-reports-retrievebefore authoring. Your own report-channel reports persist their backing signals undersource_product=signals_scout, so don't filtersource_product=cdp— you'd miss every report you authored.
Then orient on each leg with one fleet-wide read apiece:
- Functions state scan —
cdp-functions-list {"enabled": true, "limit": 100}, followingnextpages. Every entry carriesstatus: {state, tokens}from the hog watcher, so one paginated scan gives fleet health without per-function calls. States: 1 healthy, 2 degraded (overflowed), 3 auto-disabled, 11 forcefully degraded, 12 forcefully disabled (11/12 are admin actions). Footgun: thetypefilter must be a comma-separated string ("type": "destination,transformation") — a JSON array silently returns zero results. Footgun:statusexists only on the REST tools;system.hog_functionshas no state column. - Flows fleet stats —
workflows-global-stats {"after": "-7d"}: per-flow succeeded/failed counts, sorted most-failing first, one call. It returns bareworkflow_ids — cross-reference names and lifecycle status viasystem.hog_flows(id,name,status), and only judgeactiveflows. - Batch exports roster — rosters are small, so check every live one:
SELECT id, name, model, interval, created_at, last_updated_at
FROM system.batch_exports
WHERE paused = 0 AND deleted = 0
LIMIT 100
then batch-export-get {id} per export for the 10 most recent runs (status, records_completed, records_failed, latest_error, interval bounds).
SQL footguns (all three system pipeline tables): boolean-ish columns are integers — countIf(enabled) errors, write countIf(enabled = 1). system.hog_functions and system.hog_flows carry huge JSON columns (inputs_schema, filters, edges, actions) — never SELECT *, name the columns you need. HogQL string timestamp literals parse in the project timezone — use now() - INTERVAL N DAY for recency windows, never hand-written timestamp strings.
Before any per-pipeline deep dive, normalize against the whole fleet: if every destination's failures spiked at once, that's one platform/network finding (or known ingestion trouble), not N per-destination findings.
Profile shape — state vs delivery
| Pattern | What it usually means |
|---|---|
| Enabled function at watcher state 3 | Platform stopped it after sustained failures — team likely unaware; report |
| Enabled function at state 2, tokens draining | Degraded — failing or slow right now; investigate, date the onset |
| State 11/12 (forced) | Admin intervention — deliberate; note it, hygiene at most |
| Healthy state, failure share stepped above own baseline | Delivery breaking but executing fast — the watcher won't catch this; yours |
triggered collapsed while filtered keeps flowing | Filter starvation — upstream event renamed/stopped; destination starves |
Batch export run Failed, or newest interval lagging > 2× cadence | Permanent data gap growing until backfilled — report |
Active flow with failures concentrated in one error_kind | One broken step (dead webhook, bad template) — report with the error class |
| Draft/archived flow failing, paused export idle | Not armed — baseline, skip |
| All pipelines degrade together | One platform/upstream cause — one finding, not N |
Explore
Patterns to watch — starting points, not a checklist.
Watcher interventions (destinations & transformations)
From the state scan, every enabled function at state 2 or 3 is a candidate. State 3 on a destination is the headline case: the platform concluded it was broken and stopped delivery; nobody got told. Confirm the story before filing a report:
cdp-functions-metrics-retrieve {id, after: "-7d", breakdown_by: "name", interval: "day"}— series come back by name:triggered(passed the filter),succeeded,failed,filtered(rejected by the filter), plusfetch-style sub-metrics. Date when failures took over.cdp-functions-logs-retrieve {id, level: "WARN,ERROR", limit: 50}— the actual error: an upstream 4xx/5xx, a Hog runtime error, a timeout. Name the error class in the finding; it decides who can fix it (their endpoint vs their function code).
Transformations outrank destinations. A transformation sits in the ingestion hot path — degraded or disabled means every event in the project is processed differently (e.g. GeoIP enrichment silently missing from all events), not one integration down. Treat any non-healthy enabled transformation as P1 material.
Delivery failure shift (destinations)
The watcher tracks execution health, not delivery semantics — a destination erroring fast on every event can sit at state 1 indefinitely. There is no fleet-wide metrics endpoint and no app_metrics HogQL table, so don't brute-force: maintain a watchlist in memory (the project's high-value destinations — by traffic, by name, by template) and check those with cdp-functions-metrics-retrieve each run, plus a small rotating sample of the rest so coverage accumulates across runs.
Failure share = failed / triggered within the same window — never compare either against filtered, which is usually orders of magnitude larger and healthy by construction (the filter doing its job). A candidate needs sustained contradiction: share ≥ ~10% over 24h with ≥ ~50 triggered, against a flat-or-quiet history. Two special shapes worth catching:
- Born broken — a destination created in the last days failing ~100% since creation (≥
Content truncated.
When not to use it
- →When auditing delivery for drafts, archived flows, paused exports, or deliberately disabled functions
- →When the goal is to judge what the team chose to ship
Limitations
- →Files a report only for a localized, validated delivery contradiction
- →A contradiction already covered is an **edit**, not a new report
- →Does not cover destinations in `workflows-global-stats`
How it compares
This skill focuses on detecting and reporting delivery contradictions in data pipelines, distinguishing signal from noise by comparing configured delivery with actual delivery, unlike general monitoring that might flag all anomalies.
Compared to similar skills
signals-scout-data-pipelines side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| signals-scout-data-pipelines (this skill) | 0 | 27d | No flags | Intermediate |
| model-usage | 5 | 2mo | Review | Beginner |
| tracking-crypto-derivatives | 4 | 27d | Review | Intermediate |
| weights-and-biases | 3 | 7mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by PostHog
View all by PostHog →You might also like
model-usage
openclaw
Use CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
tracking-crypto-derivatives
jeremylongshore
Track cryptocurrency futures, options, and perpetual swaps with funding rates, open interest, liquidations, and comprehensive derivatives market analysis. Use when monitoring derivatives markets, analyzing funding rates, tracking open interest, finding liquidation levels, or researching options flow. Trigger with phrases like "funding rate", "open interest", "perpetual swap", "futures basis", "liquidation levels", "options flow", "put call ratio", "derivatives analysis", or "BTC perps".
weights-and-biases
davila7
Track ML experiments with automatic logging, visualize training in real-time, optimize hyperparameters with sweeps, and manage model registry with W&B - collaborative MLOps platform
tooluniverse-pharmacovigilance
mims-harvard
Analyze drug safety signals from FDA adverse event reports, label warnings, and pharmacogenomic data. Calculates disproportionality measures (PRR, ROR), identifies serious adverse events, assesses pharmacogenomic risk variants. Use when asked about drug safety, adverse events, post-market surveillance, or risk-benefit assessment.
analyzing-mempool
jeremylongshore
Monitor blockchain mempools for pending transactions, gas analysis, and MEV opportunities. Use when analyzing pending transactions, optimizing gas prices, or researching MEV. Trigger with phrases like "check mempool", "scan pending txs", "find MEV", "gas price analysis", or "pending swaps".
agent-session-monitor
alibaba
Real-time agent conversation monitoring - monitors Higress access logs, aggregates conversations by session, tracks token usage. Supports web interface for viewing complete conversation history and costs. Use when users ask about current session token consumption, conversation history, or cost statistics.