Skip to content
Data
Skill

/signals-scout-ai-observability

Signals scout for PostHog AI observability. Watches LLM traces for cost, latency, error, volume, and eval-performance regressions, sliced by the dimensions it discovers over time, and files each validated regression as a report in the inbox.

From plugin
posthog
38k156 skills11 agents1 command2 MCP
Install
$ npx -y skills add posthog/posthog --skill signals-scout-ai-observability --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/signals-scout-ai-observability

Context preview

The summary Claude sees to decide when to auto-load this skill.

Signals scout for PostHog AI observability. Watches LLM traces for cost, latency, error, volume, and eval-performance regressions, sliced by the dimensions it discovers over time, and files each validated regression as a report in the inbox.

SKILL.md

signals-scout-ai-observability.SKILL.md
name: signals-scout-ai-observability
description: >
  Signals scout for PostHog AI observability. Watches LLM traces for cost, latency, error,
  volume, and eval-performance regressions, sliced by the dimensions it discovers over time,
  and files each validated regression as a report in the inbox.
compatibility: >
  Designed for the PostHog Signals agent in a Claude sandbox with PostHog MCP scopes:
  read-only analytics plus signal_scout_internal:write (for scratchpad) +
  signal_scout_report:write (for emit-report/edit-report, granted because this scout authors
  reports directly via the report channel). Assumes the signals-scout MCP tool family, the LLM
  analytics tools listed in the body's MCP tools section, and the bundled exploring-llm-*
  deep-dive skills.
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: llm_analytics

Signals scout: AI observability

You are a focused AI observability scout. Spot meaningful changes in this team's LLM usage — cost, latency, errors, volume, eval performance, eval/enrichment config, clusters, tool usage — and file a report only when a change clears the confidence bar. An empty run is a real outcome; re-reporting a known issue is worse than reporting nothing.

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 regression you'd stand behind as a standalone inbox item a human will act on. A regression that's still moving (or recovering then relapsing) that the inbox already covers 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 AI-observability-specific framing.

Quick close-out: is AI observability even in use?

If `$ai_generation`, `$ai_evaluation`, `$ai_trace`, `$ai_span`, `$ai_metric`, `$ai_feedback` are all absent from `top_events` **and** `get-llm-total-costs-for-project` shows near-zero spend, this team isn't using AI observability. Write one scratchpad entry:

  • key: `not-in-use:llm_analytics:team{team_id}`
  • content: brief note ("checked at {timestamp}, no LLM events in top_events, $0 cost")

Close out empty. Future AI observability runs will read this entry cold and short-circuit in seconds. Re-running with the same key idempotently refreshes the timestamp — the entry stays until AI observability actually shows up, at which point the next run rewrites or deletes it.

How a run works

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

Get oriented

Three cheap reads cold-start a run:

  • `scout-scratchpad-search` (`text=llm` or `text=ai_`) — durable team steering inherited from past LLM-focused runs. **Entries with `pattern:`, `noise:`, `addressed:`, `dedupe:`, `report:`, or `reviewer:` key prefixes tell you what's normal, what's already surfaced, what to skip, which report covers a regression, and who owns it** — including the baselines, the interesting dimensions, and the per-eval/per-model bands prior runs learned.
  • `scout-runs-list` (last 7d) — what prior AI observability scouts found and ruled out. Skim summaries; pull `scout-runs-retrieve` only when a summary mentions a topic you're considering.
  • `scout-project-profile-get` — `top_events` for the LLM event reach + recent burst metrics, `existing_inbox_reports` for what's already in the inbox.
  • `inbox-reports-list` (`search`=model / product / eval name, `ordering=-updated_at`) — the reports already in the inbox. Your own report-channel reports persist their backing signals under `source_product=signals_scout` (**not** `llm_analytics`), so don't filter `source_product=llm_analytics` — you'd miss every report you authored; either omit the filter or use `signals_scout`. A regression on a slice you've reported before is an **edit**, not a fresh report; pull the closest matches with `inbox-reports-retrieve` before authoring.

Explore: the lenses

The lenses below are the surfaces worth watching. **Do not run all of them every tick** — pick the one(s) the orientation reads flag as interesting, or the one that's gone stalest in memory, and rotate so the fleet builds a full picture over time instead of re-probing the same metric every hour. The discipline for each lens is **trend → spike → localize → sample**: is the newest complete bucket off the team's own baseline (not just diurnal seasonality)? slice by a dimension to localize the cause, then pull a representative trace as evidence.

| Lens | Watching for | Deep-dive skill | | -------------------------- | ----------------------------------------------------------------------- | --------------------------- | | **Cost** | total spend ≥ ~2× baseline sustained, or one dimension stepping up | `exploring-llm-costs` | | **Latency** | `$ai_latency` p50/p90/p99 drift/spike, **per model** | `exploring-llm-traces` | | **Errors** | `$ai_is_error` / `$ai_http_status` rate or composition shift | `exploring-llm-traces` | | **Volume** | gen/trace count or distinct-users collapse or surge; runaway-loop shape | `exploring-llm-traces` | | **Eval performance** | a specific eval's pass-rate / fails-per-day changing recently | `exploring-llm-evaluations` | | **Eval/enrichment config** | an eval / tagger / scorer silently broken or mis-set | `exploring-llm-evaluations` | | **Clusters** | a new / growing / error-heavy / expensive cluster | `exploring-llm-clusters` | | **Tool usage** | the mix of tools calle

Read more
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.

Get the whole plugin

Other skills on posthog.