finding-replay-for-issue — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited finding-replay-for-issue (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 20This 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:
journey before the error, short enough to be practical to watch or summarize.
active_seconds to recording_duration. A 20-minuterecording 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:
user was browsing 3 pages before hitting it")
derived from the events query in step 2 (the 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.
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.
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.
posthog:vision-scanners-scan-session
{
"id": "<scanner_id>",
"session_id": "<best_recording_id>"
}vision-observations-list until succeeded.the page immediately. Note this — it's useful context even without a long replay.
what's available with a note about the small sample.
$session_id is null on many exception events, session replay may not be enabledfor the affected users. Mention this as a possible gap.
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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.