Recover Sessions — обработка pending breadcrumbs

SkillMonitoring & ops

Handles uncommitted sessions — creating minimal logs, cleaning up breadcrumbs. Triggers: "recover-sessions", "process the sessions", "uncommitted sessions"

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Recover Sessions — обработка pending breadcrumbs skill

What this skill tells your AI

The instructions your AI receives, as published by alxyrgin/health-os in .claude/skills/recover-sessions/SKILL.md and read by ahel’s review.

Назначение

Обработать незавершённые сессии (прерванные без /wrap-up). Создать минимальные session logs, очистить breadcrumbs.

Запрос пользователя

$ARGUMENTS

Workflow

1. Сканирование pending

Через Glob прочитать все .claude/hooks/pending-sessions/*.json.

Для каждого файла извлечь:

  • session_id — ID сессии
  • date — дата (YYYY-MM-DD)
  • timestamp — момент последней записи breadcrumb, UTC. Источник HH-MM для имени лога: у breadcrumb, созданных до починки хука, start_time пуст
  • transcript_path — путь к транскрипту сессии. Главный признак непустоты
  • message_count — число строк транскрипта. Справочно: у старых breadcrumb всегда 0, опираться на это поле нельзя
  • elapsed_seconds — длительность. Ноль, если tmp-файла начала сессии не было
  • start_time — время начала. Может быть пустым

2. Классификация

Непустота сессии определяется наличием транскрипта, а НЕ значением message_count.

КатегорияУсловиеДействие
currentsession_id совпадает с текущей сессиейПропустить, не трогать
recoverableФайл по transcript_path существует и непустСоздать лог, затем удалить breadcrumb
emptyФайл по transcript_path существует, но пуст (0 байт)Создать лог с пометкой «сессия без содержимого», затем удалить breadcrumb
orphantranscript_path пуст или файл по нему не найденНичего не удалять. Вынести в список «требуют ручного решения» и показать пользователю

Запрещено определять пустую сессию по message_count: до починки .claude/hooks/session-save.sh это поле всегда равнялось нулю, и фильтр по нему удалил бы 100% сессий, не создав ни одного лога.

message_count использовать только как справочную величину в теле лога и только если он больше нуля.

3. Извлечение контекста

Для каждой сессии категории recoverable определить тему по её transcript_path.

Ограничения на чтение:

  • Читать не более первых 50 строк транскрипта — этого достаточно для темы
  • Транскрипт может весить десятки мегабайт. Никогда не загружать его целиком: head -n 50 "$transcript_path"
  • Если после 50 строк тема неясна — записать «не определена» и идти дальше

Невозможность определить тему не отменяет создание лога.

4. Создание session logs

Для каждой сессии категорий recoverable и empty создать Cache/sessions/YYYY-MM-DD_HH-MM.md:

  • YYYY-MM-DD — из поля date
  • HH-MM — из start_time, если оно непусто; иначе из timestamp (записан в UTC — отметить это в логе)
  • Если файл с таким именем уже существует — добавить суффикс _2, _3 и т.д. Существующий лог не перезаписывать
# Сессия YYYY-MM-DD HH:MM (recovered)

- **ID:** {session_id}
- **Длительность:** ~{elapsed} мин (если `elapsed_seconds` > 0, иначе «неизвестна»)
- **Сообщений:** ~{message_count} (если > 0, иначе строку не выводить)
- **Транскрипт:** {transcript_path}
- **Статус:** recovered (прервана без wrap-up)

## Тема

{тема или «не определена»}

## Примечание

Сессия восстановлена автоматически через `/recover-sessions`.
Контекст ограничен — полные данные в транскрипте по пути выше.

5. Очистка breadcrumb

Жёсткое правило: breadcrumb удаляется только после того, как лог сессии создан и записан на диск. Порядок строго такой:

  1. Создать лог
  2. Убедиться, что файл Cache/sessions/…md существует и непуст
  3. Только после этого удалить .claude/hooks/pending-sessions/{session_id}.json

Обратный порядок и удаление «заодно» запрещены. Если создание лога не удалось — breadcrumb остаётся на месте, сессия попадает в отчёт как необработанная.

Для сессий категории orphan breadcrumb не удалять ни при каких условиях — без транскрипта содержимое сессии восстановить неоткуда, и удаление breadcrumb уничтожит последний след о ней.

Сопутствующий .claude/hooks/session-start-{session_id}.tmp удалить, если он есть. Его отсутствие — нормальная ситуация, а не ошибка: хук создаёт его не всегда. Не выводить это как проблему.

6. Коммит

Только если что-то изменилось — новых логов может не быть вовсе (все breadcrumb оказались orphan или относились к текущей сессии).

git status --porcelain Cache/sessions/ .claude/hooks/pending-sessions/

Если вывод пуст — коммит не делать. Иначе:

git add Cache/sessions/ .claude/hooks/pending-sessions/
git commit -m "fix: recover N sessions"

7. Отчёт

✅ Обработано сессий: N
- [дата] — [тема] (recovered, лог создан, breadcrumb очищен)
- [дата] — сессия без содержимого (лог создан, breadcrumb очищен)

⚠️ Требуют ручного решения: M
- [дата] — {session_id}: транскрипт не найден ({transcript_path или «поле пусто»})
  Breadcrumb оставлен: .claude/hooks/pending-sessions/{session_id}.json

Что можно сделать с ними:
  1. Вспомнить содержание сессии и создать лог вручную
  2. Удалить breadcrumb, если сессия точно не важна — только по твоему решению

Логи: Cache/sessions/

Секцию «Требуют ручного решения» показывать всегда, когда M > 0. Не скрывать и не решать за пользователя.

Правила

  • Не трогать текущую сессию
  • Никогда не удалять breadcrumb, если лог сессии не создан. Порядок: лог → проверка существования файла → удаление
  • Непустоту определять по транскрипту, а не по message_count
  • Сессии без транскрипта (orphan) не удалять — выносить пользователю на ручное решение
  • Не блокировать работу — если тему определить не удалось, создать лог без темы
  • Транскрипты читать частично (первые 50 строк), никогда не загружать целиком
  • Отсутствие session-start-*.tmp — не ошибка, не сообщать о нём
  • Коммит только если были изменения

Критерий завершения: каждый breadcrumb отнесён к одной из четырёх категорий; для всех recoverable и empty созданы файлы логов и их существование проверено; удалены только те breadcrumbs, для которых лог подтверждён на диске; все orphan остались на месте и перечислены в отчёте.

Signals

GitHub stars
38
Forks
6
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
recover-sessions
Source
github.com/alxyrgin/health-os