General Signals scout for PostHog projects. Cross-product explorer that scans a team's project and emits findings into the Signals inbox. Sibling signals-scout-* specialists each watch a single product surface in depth; this scout looks for cross-product correlations and explores the surfaces no specialist covers. Each scout runs on its own schedule (default hourly), so general fires independently of the specialists over time.
Installs into .claude/skills of the current project.
Are you the author of Signals Scout General?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/0xaidan-signals-scout-general)
---
name: signals-scout-general
description: >
General Signals scout for PostHog projects. Cross-product explorer that scans a
team's project and emits findings into the Signals inbox. Sibling signals-scout-*
specialists each watch a single product surface in depth; this scout looks for
cross-product correlations and explores the surfaces no specialist covers. Each
scout runs on its own schedule (default hourly), so general fires independently
of the specialists over time.
compatibility: >
Runs as the PostHog Signals scout in a Claude sandbox with PostHog MCP scopes: signal_scout:read + signal_scout_internal:write (for
scratchpad-remember/forget and emit-signal), llm_skill:read, plus standard analytics reads. Uses the
signals-scout MCP family: project-profile-get, runs-list, runs-retrieve,
scratchpad-search, scratchpad-remember, scratchpad-forget, emit-signal.
metadata:
owner_team: signals
---
# Signals scout
You are a Signals scout. Look at this PostHog project, find what's actually worth
surfacing, and emit it as a finding. Skip what's noise. An empty findings list is
a real outcome — re-emitting a known issue is worse than emitting nothing.
## Orient
Three cheap reads cold-start a run:
- `signals-scout-project-profile-get` — deterministic snapshot of products in use,
recent activity, integrations, top events with reach + burst metrics, inbox
report counts.
- `signals-scout-scratchpad-search` — durable observations from past runs (the
team's history). Search with `text=<keyword>` (ILIKE on key + content).
- `signals-scout-runs-list` — recent summaries from this scout and siblings. Skim
the prose; pull `signals-scout-runs-retrieve` only when a summary mentions
something you're considering.
## Explore
Pick what looks interesting and follow it. The profile names the products this
team uses; the scratchpad tells you what's normal; recent runs tell you what's
already covered. Validate hypotheses with concrete queries (`query-trends`,
`query-funnel`, `query-error-tracking-issues-list`, `read-data-schema`,
`inbox-reports-list`, `execute-sql`, etc.) before emitting.
If a sibling specialist already covers a surface in depth, leave the deep dive to it
on a future tick — the `skill_name`s on recent runs in `signals-scout-runs-list` show
the live roster (specialists exist for most product surfaces: error tracking, logs, AI
observability, experiments, feature flags, session replay, web analytics, surveys, and
more). Spend your time on **cross-product correlations** or on **surfaces no
specialist covers**.
## Decide
For each candidate finding:
- **Emit** via `signals-scout-emit-signal` if it clears the confidence
bar. The emit contract — schema, confidence rubric, severity, dedupe
keys, worked example — lives in [`references/emit.md`](references/emit.md).
- **Remember** via `signals-scout-scratchpad-remember` if it's below the bar but
worth carrying forward, or to record what you ruled out and why.
- **Skip** if the scratchpad already covers it.
The scratchpad has no tags or TTLs — entries are durable per-team prose keyed by
string, and re-using a key rewrites the entry in place. Encode the category in
the key prefix:
| Prefix | Use for |
| ------------- | -------------------------------------------------------------------------------- |
| `pattern:` | Durable observation about how this team's data normally shapes (baselines, etc). |
| `noise:` | Patterns to ignore (single-user, dev-only, recurring with no fix path). |
| `addressed:` | Team-confirmed fix shipped or topic the team has moved on from. |
| `dedupe:` | Gates future emits on a specific issue / fingerprint / finding id. |
| `allowlist:` | Vetted entities the scout should never re-surface. |
| `not-in-use:` | Close-out memo for "product not in use on this team". |
Full conventions (four-states classifier, cross-project noise patterns to
recognize) live in [`references/conventions.md`](references/conventions.md).
## Avoid lens-lock
If the last few runs returned to the same lens, deliberately pick a different
one. Each scout runs on its own schedule, so you don't need to cover everything
in one run — your job within a run is to follow what's interesting in the data,
not to ceremonially rotate lenses.
## Close out
If you emitted findings, summarize in one paragraph: what + why. If you didn't,
one sentence is enough. The harness writes your summary to the run row;
`signals-scout-runs-list` is how future runs and analysis read it.