Recover Sessions — обработка pending breadcrumbs
SkillMonitoring & opsHandles 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.
No other account needed.
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.
| Категория | Условие | Действие |
|---|---|---|
current | session_id совпадает с текущей сессией | Пропустить, не трогать |
recoverable | Файл по transcript_path существует и непуст | Создать лог, затем удалить breadcrumb |
empty | Файл по transcript_path существует, но пуст (0 байт) | Создать лог с пометкой «сессия без содержимого», затем удалить breadcrumb |
orphan | transcript_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— из поляdateHH-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 удаляется только после того, как лог сессии создан и записан на диск. Порядок строго такой:
- Создать лог
- Убедиться, что файл
Cache/sessions/…mdсуществует и непуст - Только после этого удалить
.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