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:vision-observations-list | Check for an existing Replay Vision AI summary |
| posthog:vision-scanners-list | Find summarizer scanners (scanner_type=summarizer) |
| posthog:vision-scanners-scan-session | Run a summarizer scanner on the 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, use Replay Vision — "check-then-scan", since a scanner can only observe a given session once.
Check for an existing summary on the selected recording:
posthog:vision-observations-list
{
"session_id": "<best_recording_id>"
}
If an observation has scanner_snapshot.scanner_type summarizer and
status succeeded, read scanner_result.model_output (title, summary,
intent, outcome, friction_points, keywords) — done.
Find a summarizer scanner if none exists:
posthog:vision-scanners-list
{
"scanner_type": "summarizer"
}
One → use it. More than one → ask the user which (show name + prompt). None →
offer to create one via the creating-replay-vision-scanners skill.
Scan the recording with the chosen scanner (async, several minutes):
posthog:vision-scanners-scan-session
{
"id": "<scanner_id>",
"session_id": "<best_recording_id>"
}
Retrieve by polling vision-observations-list until succeeded.
$session_id is null on many exception events, session replay may not be enabled
for the affected users. Mention this as a possible gap.data-ai
Signals scout for PostHog Tasks, the agent work items a project runs. Two lenses: delivery health (runs failing, clustered by repository and error class, and retry storms) every run, and on a slower rotation demand (recurring asks across human-authored tasks that point at a product gap). Skips the scout fleet's own run rows.
devops
Signals scout for the PostHog Conversations (support inbox) product. Watches the `$conversation_*` ticket-lifecycle events for support-delivery regressions — SLA breach-rate steps, first-response latency blowouts, backlog inflow-vs-resolution imbalance, and channel / assignment concentration — and files each dated regression as a report. Complements the per-ticket product-feedback signals the emission pipeline already fires; does not re-surface individual ticket content.
development
Populates and maintains a project's data catalog (semantic layer): canonical metrics, trust marks (certifications) on warehouse tables/views, and reviewed table relationships. Use when asked to set up / seed / bootstrap the data catalog or semantic layer, to catalog a project's metrics, to certify or deprecate data sources, to propose or review table joins, or to work through the proposal review queue. To *use* an existing catalog to answer a business-number question, see querying-posthog-data instead. Trigger terms: data catalog, semantic layer, canonical metric, certify table, deprecate source, relationship proposal, metric drift, review queue.
tools
Investigate logs in a PostHog project: verify a service or deployment is healthy, explain an error spike, triage an incident, or understand what a log stream is saying. Use when the user asks to "check the logs", asks whether a service, deploy, release, or change is working or broke anything, asks why errors are up or what changed, or wants the root cause of failures visible in logs. Routes the logs MCP tools (services overview, pattern mining, before/after pattern diffing, bucketed counts, facets, raw rows) so investigations start from summaries instead of raw rows or hand-written SQL over the logs table.