
finding-replay-for-issue
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.
- Installs
- 203
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/posthog/ai-plugin --skill finding-replay-for-issue- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads finding-replay-for-issue automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Finding the best replay for an error tracking issue
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.
Available tools
| 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) |
Workflow
Step 1 — Get the issue details
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.
Step 2 — Find sessions with this error
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.
Step 3 — Rank the candidates
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:
- Sessions under 10 seconds (crash-only fragments, no pre-error context)
- Sessions over 1 hour (too much data to load, error is a needle in a haystack)
Rank by:
- Sweet-spot duration — 2-15 minutes is ideal. Long enough to show the user's journey before the error, short enough to be practical to watch or summarize.
- Active time ratio — compare
active_secondstorecording_duration. A 20-minute recording with 10 seconds of activity is mostly idle tabs — the user walked away. Prefer sessions whereactive_seconds / recording_durationis above 0.3 (30%). - Activity score — higher
activity_scoremeans the user was actively interacting, not idle. More interesting to watch. - Recency — more recent sessions reflect current app behavior.
Step 4 — Present the finding
Fetch full details for the selected recording:
posthog:session-recording-get
{
"id": "<best_recording_id>"
}
Present to the user:
- The recording with a link to watch it
- Why this one — briefly explain the selection ("longest session with the error, user was browsing 3 pages before hitting it")
- Pre-error context — what pages the user visited and key actions before the exception,
derived from the events query in step 2 (the
urlandfirst_seencolumns) - Error frequency — how many times the error occurred in this session
Optional: AI summary via Replay Vision
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_typesummarizerandstatussucceeded, readscanner_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-scannersskill. -
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-listuntilsucceeded.
Tips
- If all candidate sessions are very short (<10 seconds), the error likely crashes the page immediately. Note this — it's useful context even without a long replay.
- When the issue has very few linked sessions (<3), skip the ranking and just present what's available with a note about the small sample.
- If
$session_idis null on many exception events, session replay may not be enabled for the affected users. Mention this as a possible gap. - Replay Vision has no per-call focus parameter — a summarizer scanner's focus comes from its own prompt. For error-focused summaries, prefer (or create) a summarizer scanner whose prompt targets error/exception context rather than the whole session.
Related skills
investigating-error-issue— the quantitative side: volume, breakdowns, and stack traces for the same issueinvestigating-replay— deep-dive one of the linked sessionsdiagnosing-missing-recordings— when exception events have no $session_id or the linked recordings are gone
FAQ
What does the finding-replay-for-issue skill do?
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.
How do I install finding-replay-for-issue?
Run npx skills add https://github.com/posthog/ai-plugin --skill finding-replay-for-issue in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/finding-replay-for-issue/ (personal) or .claude/skills/finding-replay-for-issue/ (project).
Which AI agents can use finding-replay-for-issue?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is finding-replay-for-issue safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains finding-replay-for-issue?
It is published by posthog in posthog/ai-plugin, and it is an official skill from the maker of the technology it covers. It has 203 recorded installs.
More from posthog/ai-plugin
instrument-product-analytics
posthog/ai-plugin
Add PostHog product analytics events to track user behavior. Use after implementing new features or reviewing PRs to ensure meaningful user actions are captured. Also handles initial PostHog SDK setup if not yet installed.
instrument-feature-flags
posthog/ai-plugin
Add PostHog feature flags to gate new functionality. Use after implementing features or reviewing PRs to ensure safe rollouts with feature flag controls. Also handles initial PostHog SDK setup if not yet installed.
cleaning-up-stale-feature-flags
posthog/ai-plugin
Identify stale feature flags in a PostHog project and clean up the code that checks them. Use when the user wants to find, audit, or remove unused, fully rolled out, or abandoned feature flags, run a feature flag hygiene review or a weekly cleanup, reduce feature flag tech debt, or asks "which flags can I remove?". When the agent can read and edit a repository it performs the code cleanup itself: tested local changes, and one draft PR per flag when the user authorizes publishing. Agents without repository access generate a tailored cleanup prompt instead. Covers staleness detection, dependency checking, retained-path rules, and the code-first ordering. This skill does not archive or otherwise change a flag in PostHog.
auditing-experiments-flags
posthog/ai-plugin
Audit PostHog experiments and feature flags for configuration issues, staleness, and best-practice violations. Read when the user asks to audit, health-check, or review experiments or feature flags, check flag hygiene, or verify experiment setup.
querying-posthog-data
posthog/ai-plugin
Explains how to query PostHog data, defaulting to typed runners for supported product analytics. Read it before you write HogQL/SQL. Also read it before you call execute-sql against PostHog. Use it to find or aggregate PostHog entities. These entities include insights, dashboards, cohorts, feature flags, experiments, surveys, hog flows, warehouse data, and persons. Use it for trends, funnels, retention, lifecycle, paths, stickiness, web analytics, error tracking, logs, sessions, and LLM traces. Before you calculate a governed business or telemetry measure, check system.informationschema.metrics for an approved definition. Examples include MRR, activation, billable usage, active organizations, and failure rates. Use the approved definition before you derive a measure from raw events or use a typed domain tool. It also covers HogQL differences, system table schemas, functions, query examples, and schema discovery.
creating-experiments
posthog/ai-plugin
Guides agents through experiment creation: reading the project's setup with experiment-setup-context, defining the hypothesis, configuring rollout and bucketing, setting up analytics and running time, and reporting which choices are guesses. Delegates rollout decisions to configuring-experiment-rollout and metric setup to configuring-experiment-analytics. TRIGGER when: user asks to create a new experiment or A/B test, OR when you are about to call experiment-create. DO NOT TRIGGER when: user is updating an existing experiment, managing lifecycle, or only browsing experiments.
Popular other skills
hyperframes-cli
heygen-com/hyperframes
The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.
triage
mattpocock/skills
Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.
ask-matt
mattpocock/skills
Ask which skill or flow fits your situation. A router over the skills in this repo.
to-questionnaire
mattpocock/skills
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
loop-me
mattpocock/skills
Grill me about specs for the workflows I want to build, within this workspace.