adding-warehouse-perso…
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
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
$ npx -y skills add PostHog/ai-plugin --skill finding-replay-for-issue --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/finding-replay-for-issueContext preview
The summary Claude sees to decide when to auto-load this skill.
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
name: finding-replay-for-issue description: > 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.
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:**
1. **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. 2. **Active time ratio** — compare `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%). 3. **Activity score** — higher `activity_score` means the user was actively interacting, not idle. More interesting to watch. 4. **Recency** — more recent sessions reflect current app behavior.
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.
1. **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.
2. **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.
3. **Scan the recording** with the chosen scanner (async, several minutes):
posthog:vision-scanners-scan-session
{
"id": "<scanner_id>",
"session_id": "<best_recording_id>"
}4. **Retrieve** by polling `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 abo
Official PostHog plugin for AI clients. Access PostHog products directly from your AI coding tool.
Repo: PostHog/ai-plugin
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user…
Analyze session replay patterns across experiment variants to understand user behavior differences. Use when the user wants to see how users interact with…
Split a completed PostHog task run into activity records — what the agent tried, whether it worked, what blocked it — and record each one through the…
Assesses what a page's heatmap is telling you and recommends concrete changes. Pulls click / rageclick / scroll-depth data for a URL, names the hot elements by…
Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks "what endpoints can…