Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Investigates a session recording by gathering metadata, person profile, same-session events, and linked error tracking issues in one pass. Use when a user provides a recording or session ID and wants to understand what happened — who the user was, what they did, what errors occurred, and whether there are related error tracking issues. Replaces the manual chain of session-recording-get, persons-re
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-08 | ✓→✗ | ▼ Worse | -3% | 0% |
When a user asks "what happened in this session?" or provides a recording/session ID to investigate, gather all relevant context in parallel rather than making them ask for each piece.
| Tool | Purpose | | ------------------------------------------ | ------------------------------------------------ | | posthog:session-recording-get | Recording metadata (duration, counts, status) | | posthog:persons-retrieve | Person profile (properties, distinct IDs) | | posthog:execute-sql | Query events, errors, and page views in session | | posthog:query-error-tracking-issues-list | Find error tracking issues linked to the session | | posthog:session-recording-summarize | AI-generated summary (slow, ~5 min, optional) |
Start with the recording to get metadata and the person's distinct ID:
jsonposthog:session-recording-get { "id": "<recording_id>" }
The response includes distinct_id, person, duration, interaction counts, console error counts, and viewing status. Use the distinct_id to fetch the full person profile:
jsonposthog:persons-retrieve { "id": "<person_uuid_from_recording>" }
Get the timeline of what the user did during the session:
sqlposthog:execute-sql SELECT timestamp, event, properties.$current_url AS url, properties.$browser AS browser, properties.$os AS os, properties.$device_type AS device_type, properties.$screen_width AS screen_width FROM events WHERE $session_id = '<session_id>' ORDER BY timestamp ASC LIMIT 200
For sessions with many events, focus on the most informative ones:
sqlposthog:execute-sql SELECT timestamp, event, properties.$current_url AS url, if(event = '$exception', properties.$exception_message, null) AS exception_message, if(event = '$exception', properties.$exception_type, null) AS exception_type FROM events WHERE $session_id = '<session_id>' AND event IN ('$pageview', '$pageleave', '$autocapture', '$exception', '$rageclick') ORDER BY timestamp ASC LIMIT 100
If the recording has console errors or exceptions, find related error tracking issues:
sqlposthog:execute-sql SELECT DISTINCT properties.$exception_fingerprint AS fingerprint, properties.$exception_type AS type, properties.$exception_message AS message, count() AS occurrences FROM events WHERE $session_id = '<session_id>' AND event = '$exception' GROUP BY fingerprint, type, message ORDER BY occurrences DESC LIMIT 10
If fingerprints are found, search for the corresponding error tracking issues to provide links and status:
jsonposthog:query-error-tracking-issues-list { "searchQuery": "<exception_type or message>" }
Present the findings as a coherent narrative:
If the user wants a deeper analysis without reading through events manually, offer session-recording-summarize. Warn that first-time summaries take ~5 minutes:
jsonposthog:session-recording-summarize { "session_ids": ["<session_id>"] }
Note this rather than suggesting something is broken.
to dig into exceptions. If it's 0, skip step 3.
start_url from the recording tells you where the user's journey began —use this to frame the narrative.
person is null on the recording, the user was anonymous.Person properties won't be available, but events still are.
Other measured skills in the registry, with their headline benchmark lift.