·
Last changedVersion:
This version passed the hardening gate. Hardening applied 1 targeted change and preserved all other text. Classified findings before hardening: 0. Classified findings closed: 0. Classified findings remaining: 0. Unclassified scanner findings remaining: 0. Review findings closed: 1. Review findings remaining: 12.
None
None
Expand | File | Group | Subtype | Severity | Status |
|---|
No findings available
0 findings
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 |
|---|---|
| Get issue details (fingerprint, status, volume) |
| Query exception events to find linked sessions |
| Fetch recording metadata for candidate sessions |
| Get full details for the selected recording |
| Check for an existing Replay Vision AI summary |
| Find summarizer scanners ( |
| Run a summarizer scanner on the recording (optional, slow) |
Fetch the error tracking issue to understand what you're looking for:
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:
This gives you up to 20 candidate sessions. More candidates means better selection.
Fetch recording metadata for the candidate sessions to rank them:
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:
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:
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:
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):
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.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 goneGet started with chainctlchainctl skill install public/posthog/finding-replay-for-issue:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/posthog/skills/omnibus/finding-replay-for-issue:latest
MIT
HARDENING.md
LICENSE
SKILL.md