skills/finding-replay-for-issue/SKILL.md
Finds the most informative session recording linked to an error tracking issue. Use when a user has an error tracking issue ID and wants to watch a replay showing what the user was doing when the error occurred. Ranks linked sessions by recency, activity score, and journey completeness, then summarizes the pre-error context. Replaces blind session picking from potentially hundreds of linked recordings.
npx skillsauth add posthog/ai-plugin finding-replay-for-issueInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When a user says "show me a replay for this error" or "find a recording for issue X", the goal isn't just any linked session — it's the one that best shows what led to the error. Popular issues can have hundreds of linked sessions, and most are crash-only fragments or duplicate occurrences. This skill picks the most useful one.
| Tool | Purpose |
| --------------------------------------- | ----------------------------------------------------- |
| posthog:query-error-tracking-issue | Get issue details (fingerprint, status, volume) |
| posthog:execute-sql | Query exception events to find linked sessions |
| posthog:query-session-recordings-list | Fetch recording metadata for candidate sessions |
| posthog:session-recording-get | Get full details for the selected recording |
| posthog:session-recording-summarize | AI summary of the selected recording (optional, slow) |
Fetch the error tracking issue to understand what you're looking for:
posthog:query-error-tracking-issue
{
"issueId": "<issue_id>"
}
Note the issue's fingerprint, name, and description — you'll need the fingerprint
to find linked sessions.
Query exception events to get session IDs where this error occurred. Order by recency and include basic context:
posthog:execute-sql
SELECT
$session_id AS session_id,
count() AS occurrences,
min(timestamp) AS first_seen,
max(timestamp) AS last_seen,
any(properties.$current_url) AS url
FROM events
WHERE event = '$exception'
AND properties.$exception_fingerprint = '<fingerprint>'
AND $session_id IS NOT NULL
AND timestamp > now() - INTERVAL 30 DAY
GROUP BY session_id
ORDER BY last_seen DESC
LIMIT 20
This gives you up to 20 candidate sessions. More candidates means better selection.
Fetch recording metadata for the candidate sessions to rank them:
posthog:query-session-recordings-list
{
"session_ids": ["<id1>", "<id2>", "<id3>", ...],
"date_from": "-30d"
}
Pick the best recording by filtering out bad candidates, then ranking what's left:
Filter out:
Rank by:
active_seconds to recording_duration. A 20-minute
recording with 10 seconds of activity is mostly idle tabs — the user walked away.
Prefer sessions where active_seconds / recording_duration is above 0.3 (30%).activity_score means the user was actively interacting,
not idle. More interesting to watch.Fetch full details for the selected recording:
posthog:session-recording-get
{
"id": "<best_recording_id>"
}
Present to the user:
url and first_seen columns)If the user wants a narrative summary without watching:
posthog:session-recording-summarize
{
"session_ids": ["<best_recording_id>"],
"focus_area": "<error description or type>"
}
Warn that this takes ~5 minutes for first-time summaries.
$session_id is null on many exception events, session replay may not be enabled
for the affected users. Mention this as a possible gap.focus_area parameter on session-recording-summarize is powerful here —
pass the exception type or message so the summary focuses on the error context
rather than the entire session.testing
Focused Signals scout for PostHog projects running surveys. Watches active surveys for score regressions (NPS / CSAT / rating drops), response-volume drops, abandonment spikes, and targeting drift, AND aggregates open-text responses into recurring themes the team should know about (clusters of complaints, praise, feature requests). Emits findings only when a theme or anomaly clears the confidence bar; otherwise writes durable memory and closes out empty. Self-contained peer in the signals-scout-* fleet — no dependencies on other skills. Picked uniformly at random by the coordinator alongside `signals-scout-general` and other specialists.
development
Focused Signals scout for PostHog projects using revenue analytics. Watches the derived revenue product for upstream failures (Stripe sync stalls, capture regressions), config drift (missing subscription property, currency mix surprises, broken Stripe↔person joins, deferred-revenue gaps), and goal-miss escalations. Emits findings only when they clear the confidence bar; otherwise writes durable memory and closes out empty. Self-contained peer in the signals-scout-* fleet — no dependencies on other skills. Picked uniformly at random by the coordinator alongside `signals-scout-general` and other specialists.
testing
Focused Signals scout for finding observability gaps in PostHog itself — significant event volumes the team isn't tracking, custom events with no insight or dashboard coverage, insights pointing at events that have stopped firing, dashboards missing related context, critical events with no alerts. Watches the event-stream-vs-saved- inventory delta as the team's product evolves and emits findings recommending new insights, dashboard additions, or alerts when gaps clear the confidence bar. Self-contained peer in the signals-scout-* fleet — picked uniformly at random by the coordinator alongside `signals-scout-general` and other specialists.
testing
Focused Signals scout for PostHog projects using logs. Watches for volume bursts, severity-distribution shifts, service silence, fresh message patterns, and trace-correlated bursts via the logs ingestion pipeline. Emits findings only when they clear the confidence bar; otherwise writes durable memory and closes out empty. Self-contained peer in the signals-scout-* fleet — no dependencies on other skills. Picked uniformly at random by the coordinator alongside `signals-scout-general` and other specialists.