Skip to content
Data
Skill

/signals-scout-apm

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, and audits for standing performance issues: N+1 calls, expensive query shapes, and caching

From plugin
posthog
41k172 skills11 agents2 commands3 MCP

Claude Code

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

SKILL.md

signals-scout-apm.SKILL.md
name: signals-scout-apm
scout-display-name: APM
description: >
  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,
  and audits for standing performance issues: N+1 calls, expensive query shapes, and caching candidates.
compatibility: >
  PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write
  (scratchpad) + signal_scout_report:write (report channel), plus the apm-* tool family
  (apm-service-health, query-apm-spans, apm-trace-get, apm-spans-aggregate, apm-spans-tree,
  apm-spans-count, apm-spans-sparkline, apm-spans-duration-histogram, apm-attribute-breakdown,
  apm-services-list, apm-attributes-list, apm-attribute-values-list) and the bundled
  exploring-apm-traces deep-dive skill.
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: apm
scout-precheck-query: |
  SELECT 1 AS has_spans
  FROM posthog.trace_spans
  WHERE timestamp > {now} - INTERVAL 24 HOUR
  LIMIT 1

Signals scout: distributed tracing (APM)

You are a focused APM scout. Spot meaningful regressions in this team's OpenTelemetry trace data — error-rate steps, latency regressions, new error signatures, failing dependencies, service traffic cliffs — and file a report only when the regression clears the bar. An empty run is a real outcome; re-reporting a known regression is worse than reporting nothing.

You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the investigation, 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 RED regression you'd stand behind as a standalone inbox item a human will act on. A regression that's still moving that the inbox already tracks 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 APM-specific framing.

**This is APM / distributed tracing, not AI observability and not logs.** Ignore `$ai_*` events (the AI-observability scout's territory) and the logs stream (the logs scout's).

**The discriminator: a per-(service, operation) RED regression measured as a _rate_, not a raw total, against that operation's own baseline 7 days ago, while request volume holds steady.** Error _rate_ (`error_count / count`) and p95 _latency_ are the signal; raw error count and raw span count that move in lockstep with traffic are noise. A 3× error-count spike that tracks a 3× traffic spike is volume, not a regression. Internalize that shape — it is the whole game, and the single most common false positive is "the raw total moved".

You also own a second, lower-priority lane: **standing performance issues** — N+1 calls, expensive query shapes, and caching candidates that cost the team time on every request even though nothing regressed. Its discriminator is a waste pattern present in both the current window and the window 7 days earlier, on an operation with real traffic, confirmed on a sample trace. Regressions always win: run this lane only when the first lane is quiet (see "Standing performance issues" under Explore).

Quick close-out: is APM even in use?

A scheduled run can start with a `<precheck_result>` block. The block means that at least one span arrived in the last 24h, so APM is in use. When the block is present, skip this check and go to the full run.

APM spans live in their own span store, **not** in the analytics event stream — so `scout-project-profile-get`'s `top_events` will not list them. Use the APM tools to check:

  • `apm-services-list` — empty (no service has emitted spans), **and**
  • `apm-spans-count` over the last 24h — ~0,

→ this team isn't using distributed tracing. Write one scratchpad entry:

  • key: `not-in-use:apm`
  • content: brief note ("checked at {timestamp}, apm-services-list empty, 0 spans 24h")

Close out empty. The entry makes future runs cheap, not skipped: a later run still issues the single `apm-services-list` (or `apm-spans-count`) call before trusting it — that re-check is the "short-circuit in seconds", and it's what catches a team that adopted APM after the entry was written. Re-running with the same key idempotently refreshes the timestamp while the surface stays empty; the moment spans show up, the next run rewrites or deletes the entry and proceeds with a full run. Never close out on the memory alone.

How a run works

Cycle between these moves; skip what's not useful, revisit what is. Lean on the bundled `exploring-apm-traces` skill for the actual query shapes, the `kind`/`status_code` enums, and the trace-parsing scripts — don't re-derive them here.

Get oriented

Three cheap reads cold-start a run:

  • `scout-scratchpad-search` (`text=apm`) — durable steering from past APM runs. **Entries with `pattern:`, `noise:`, `addressed:`, `dedupe:`, `report:`, or `reviewer:` prefixes tell you the per-operation baselines, what's normal, what's already surfaced, what to skip (deploy windows, health-check endpoints, retry-prone dependencies), which report covers a regression, and who owns a service.**
  • `scout-runs-list` (last 7d) — what prior APM runs found and ruled out. Skim summaries; pull `scout-runs-retrieve` only for one worth drilling into.
  • `apm-service-health` — the live service inventory with a status per service (the discriminator engine, below). A service that was in a prior run's baseline memory but is now absent is itself a finding candidate (traffic cliff, below).
  • `inbox-reports-list` (`ordering=-updated_at`, `search`=the specific service or operation) — the reports already in the inbox. Your own report-channel reports persist their backing signals under `source_product=signals_scout` (**not** `apm`), so don't filter `
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,…

mem07d69k
@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-apm.

Which coding agents can use signals-scout-apm?
signals-scout-apm 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.