К основному содержанию
скилл CX Codex

diagnosing-missing-recordings — скилл для Claude Code: обзор

Помогает понять, почему PostHog не записал сессию пользователя. Скилл проверяет SDK-сигналы через SQL и находит точную причину неполадки.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add PostHog/skills --skill diagnosing-missing-recordings -a claude-code
Открыть на GitHub

Что делает diagnosing-missing-recordings

Скилл проверяет наличие реплея сессии через инструмент posthog:session-recording-get. Если запись не найдена, агент отправляет SQL-запрос через posthog:execute-sql к таблице events. Запрос считывает диагностические сигналы SDK: статус записи, причину старта, факт блокировки скрипта расширениями браузера и процент сэмплирования.

На основе собранных свойств скилл определяет вердикт. Среди возможных исходов выделяются блокировка rrweb адблокером, отключение Session Replay в настройках проекта, несработавший триггер или отсев сессии правилом сэмплирования. Для диагностики по всему проекту агент анализирует срез последних событий $pageview.

Любая ошибка доступа к проекту блокирует дальнейший анализ, поэтому перед запуском проверки требуются настроенные права на чтение данных в PostHog.

Какие задачи решает

  • выяснить причину потери реплея по конкретному идентификатору сессии
  • выявить блокировку скрипта записи расширениями браузера
  • проверить срабатывание триггеров и правил сэмплирования PostHog
  • обнаружить отключение записи сессий в общих настройках проекта

Примеры запросов агенту

  • Почему нет записи для сессии abc-123?
  • Проверь, почему перестали сохраняться реплеи в проекте.
  • Разбери диагностические сигналы PostHog для недавней сессии.

Как установить diagnosing-missing-recordings

1Через Skills CLI (Vercel)

npx skills add PostHog/skills --skill diagnosing-missing-recordings -a claude-code

2Вручную: положить файлы

~/.claude/skills/diagnosing-missing-recordings/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/diagnosing-missing-recordings/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о diagnosing-missing-recordings

Как установить diagnosing-missing-recordings в Claude Code?

Выполните команду npx skills add PostHog/skills --skill diagnosing-missing-recordings -a claude-code. Конфигурация запишется в файл ~/.claude/skills/diagnosing-missing-recordings/SKILL.md.

Какие инструменты PostHog нужны скиллу?

Для работы требуются инструменты posthog:session-recording-get для проверки файлов реплея и posthog:execute-sql для чтения системных полей событий.

Что происходит при ошибке доступа к проекту?

Анализ останавливается, так как сетевая ошибка или нехватка прав в PostHog не служат доказательством проблем с самой записью.

Исходный текст

SKILL.md · MIT
---
name: diagnosing-missing-recordings
description: >
  Diagnoses why a session recording is missing or was not captured.
  Use when a user asks why a session has no replay, why recordings aren't appearing,
  or wants to troubleshoot session replay capture issues for a specific session ID
  or across their project. Covers SDK diagnostic signals, project settings,
  sampling, triggers, ad blockers, and quota/billing scenarios.
---

# Diagnosing missing session recordings

When a user asks "why wasn't this session recorded?" or "why don't I have any recordings?",
follow this workflow to systematically diagnose the cause.

## Available tools

| Tool                                    | Purpose                                               |
| --------------------------------------- | ----------------------------------------------------- |
| `posthog:execute-sql`                   | Query session event properties for diagnostic signals |
| `posthog:session-recording-get`         | Check if a recording actually exists for the session  |
| `posthog:query-session-recordings-list` | Search for recordings matching criteria               |

## Diagnostic signals

The PostHog SDK emits diagnostic properties on every event that explain the recording state.
See the [diagnostic signals reference](./references/diagnostic-signals.md) for the full list.

The key signals are:

- `$has_recording` — whether PostHog has a stored recording for this session
- `$recording_status` — SDK state: `active`, `buffering`, `disabled`, `sampled`, `paused`
- `$session_recording_start_reason` — why recording started or didn't
- `$sdk_debug_recording_script_not_loaded` — recorder script blocked (ad blocker)
- `$sdk_debug_replay_*_trigger_status` — trigger states (URL, event, linked flag)
- `$replay_sample_rate` — configured sample rate at capture time

## Workflow

### Step 1 — Check if the recording exists

If the user provides a session ID, first check whether a recording actually exists:

```json
posthog:session-recording-get
{
  "id": "<session_id>"
}
```

If it returns `found: false` with reason `recording_not_found`, no recording exists for this session in the active project.
Proceed to Step 2 to diagnose why.
If it returns recording metadata, the recording exists — the issue is likely UI/filtering, not capture.
Any other error (for example, a missing project or a permission error) is not evidence about the recording.
Fix that error first.

### Step 2 — Query diagnostic signals from events

Query the most recent event for the session to get SDK diagnostic properties:

```sql
posthog:execute-sql
SELECT
    properties.$has_recording AS has_recording,
    properties.$recording_status AS recording_status,
    properties.$session_recording_start_reason AS start_reason,
    properties.$sdk_debug_recording_script_not_loaded AS script_not_loaded,
    properties.$sdk_debug_replay_url_trigger_status AS url_trigger,
    properties.$sdk_debug_replay_event_trigger_status AS event_trigger,
    properties.$sdk_debug_replay_linked_flag_trigger_status AS flag_trigger,
    properties.$replay_sample_rate AS sample_rate,
    properties.$sdk_debug_replay_internal_buffer_length AS buffer_length,
    properties.$sdk_debug_replay_flushed_size AS flushed_size,
    properties.$lib AS sdk_library,
    properties.$lib_version AS sdk_version
FROM events
WHERE $session_id = '<session_id>'
ORDER BY timestamp DESC
LIMIT 1
```

### Step 3 — Diagnose the verdict

Use the [diagnosis logic reference](./references/diagnosis-logic.md) to interpret the signals.
The verdicts in priority order:

1. **Recording exists** (`$has_recording = true`) — recording is captured, issue is elsewhere
2. **Ad blocked (script)** (`$sdk_debug_recording_script_not_loaded = true`) — browser extension blocking the recorder script from loading
3. **Disabled** (`$recording_status = 'disabled'`) — replay turned off in settings or SDK config
4. **Trigger pending** (trigger statuses are `trigger_pending`, none matched) — recording gated on trigger that never fired
5. **Sampled out** (`$session_recording_start_reason = 'sampled_out'`) — excluded by sample rate
6. **Buffering empty** (`$recording_status = 'buffering'`, buffer length = 0, nothing flushed) — initialized but no snapshots produced
7. **Flush blocked** (buffer length climbs across events while `flushed_size` stays at 0) — snapshots are produced but the `/s/` ingestion endpoint is blocked by an ad blocker or misconfigured reverse proxy. Detecting this requires querying the trend across the session's events — see [example 3 in examples.md](./references/examples.md)
8. **Unknown** — signals don't match a known pattern

### Step 4 — Check project-level settings (if no session ID)

When the user asks about recordings missing project-wide (no specific session),
query for recent sessions to check the pattern:

```sql
posthog:execute-sql
SELECT
    $session_id,
    properties.$recording_status AS recording_status,
    properties.$session_recording_start_reason AS start_reason,
    properties.$sdk_debug_recording_script_not_loaded AS script_not_loaded,
    properties.$replay_sample_rate AS sample_rate
FROM events
WHERE event = '$pageview'
    AND timestamp > now() - INTERVAL 1 DAY
GROUP BY
    $session_id,
    recording_status,
    start_reason,
    script_not_loaded,
    sample_rate
ORDER BY max(timestamp) DESC
LIMIT 10
```

Look for patterns:

- All `disabled` → replay is turned off in project settings
- All `sampled_out` with low sample rate → sample rate too aggressive
- All `script_not_loaded` → likely a CSP or deployment issue, not just one user's ad blocker
- Mix of statuses → per-session issue, dig into specifics

### Step 5 — Provide actionable recommendations

Based on the verdict, recommend specific actions:

| Verdict         | Recommendation                                                                                                                        |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Ad blocked      | User's browser extension is blocking rrweb. Suggest trying without ad blocker, or using a proxy/custom domain for the recorder script |
| Disabled        | Check project replay settings — recording may be turned off. Link to Settings > Session replay                                        |
| Trigger pending | The configured trigger (URL pattern, event, or feature flag) never matched. Review trigger configuration                              |
| Sampled out     | Increase the sample rate in project settings, or use a trigger to guarantee capture for important sessions                            |
| Buffering empty | Page closed before first snapshot. Common with very short sessions or single-page navigations. Consider lowering minimum duration     |
| Unknown         | Direct user to troubleshooting docs: https://posthog.com/docs/session-replay/troubleshooting                                          |

## Examples

See [real-world diagnostic examples](./references/examples.md) showing how signal combinations
map to verdicts. Use these to calibrate your interpretation of query results.

## Tips

- If `$lib_version` is very old, some diagnostic signals won't be present.
  Note this to the user — upgrading the SDK will provide better diagnostics.
- A session might have events but no recording if the recording was deleted due to retention.
  Check the session's timestamp against the project's retention period.
- If `$has_recording` is true but the user can't find it, check if it's filtered out
  by duration, activity threshold, or playlist filters.

## Related skills

- **`diagnosing-sdk-health`** — an outdated SDK is a common root cause and blunts the diagnostic signals
- **`finding-sessions-to-watch`** — once capture works, pick the sessions worth watching
- **`investigating-replay`** — analyze the recording once it exists

© PostHog · MIT · PostHog/skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
posthog-analytics alinaqi Скилл для внедрения продуктовой аналитики PostHog: события, идентификация пользователей, фича-флаги и дашборды. Пригодится, когда нужно добавить трекинг в проект. CX Codex +1 809установок adding-analytics spencerpauly Помогает ассистенту внедрить PostHog в веб-приложение: от настройки провайдера до трекинга событий, веб-аналитики и флагов фич. CX Codex +1 371установок subtext fullstorydev Плагин подключает к агенту записанные сессии вашего приложения: агент смотрит, что делал пользователь, и находит поломки. ★ 79звёзд репо logrocket LogRocket Подключает Claude к LogRocket: агент сам находит сессии, разбирает сетевые запросы и ищет причины ошибок по вашим данным. ★ 2звёзд репо fullstory Fullstory Подключает MCP-сервер Fullstory к Claude, чтобы спрашивать про сессии, события и воронки прямо в диалоге с агентом. ★ 11звёзд репо PostHog MCP Server PostHog Подключает PostHog к ИИ-клиентам для аналитики событий и управления флагами функциональности. CX Codex +1 ★ 40 459звёзд репо

Из того же набора48

exploring-llm-traces Скилл помогает разбирать трейсы и сессии ИИ-агентов через инструменты PostHog MCP. Полезен для отладки вызовов моделей, поиска ошибок и анализа расхода токенов. CX Codex +1 408установок exploring-llm-clusters Скилл для работы с кластерами AI-трафика в PostHog: находит прогоны кластеризации, сравнивает группы и считает стоимость и задержки. CX Codex +1 407установок signals Скилл учит агента писать HogQL-запросы к таблице document_embeddings в PostHog для поиска сырых сигналов продукта и их векторных эмбеддингов. CX Codex +1 398установок creating-experiments Ведёт агента через создание A/B-теста: читает настройки проекта, формулирует гипотезу, выбирает раскатку и метрики, а в отчёте помечает догадки. CX Codex +1 398установок configuring-experiment-analytics Настраивает метрики и критерии экспозиции в экспериментах PostHog. Пригодится, когда нужно понять, кто попал в анализ и как измерять эффект. CX Codex +1 394установок investigating-replay Скилл собирает метаданные записи сессии PostHog, профиль пользователя, события и ошибки в один связный отчёт. Пригодится при расследовании сбоев по идентификатору сессии. CX Codex +1 389установок configuring-experiment-rollout Скилл помогает агенту настроить разбивку вариантов и процент роллаута в экспериментах PostHog, а также разобрать неоднозначные запросы вроде «раскатить на 25%». CX Codex +1 389установок exploring-llm-costs Скилл разбирает траты на LLM в PostHog: общую сумму, разбивку по моделям, пользователям и трейсам, экономику кэша. CX Codex +1 385установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой