Install
$ agentstack add skill-rocketmandrey-claude-recall-skill ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
session-orchestrator — найти сессию, погрузиться, продолжить
CLI: recall (см. recall help). Данные: ~/.claude/session-recaps/ — карточка на сессию + единый INDEX.md (строка на сессию). Это первичная точка касания; запасной полнотекст — recall grep.
Шаг 1 — Поиск по индексу (ВСЕГДА сначала здесь)
recall find ...
- Ищи по ОСНОВЕ слова, не по словоформе: «Ивановой» →
иванов, «выгрузку» →выгрузк. - Несколько вариантов сразу:
recall find иванов выгрузк постоянн. Выдача уже
отранжирована: совпадение в задаче > в #тегах/{сущностях} > в проекте, свежее выше.
- Строка индекса:
T [status] #теги {сущности}. [new]= сессия ещё без LLM-рекапа (свежая или умершая грязно; строка = её первый
запрос). Это НОРМАЛЬНЫЙ кандидат — часто именно та самая последняя сессия.
⚡LIVEв конце строки = сессия ОТКРЫТА ПРЯМО СЕЙЧАС. НЕ resume и НЕrecall open
(раздвоит контекст) — работай адресно: recall ps → recall peek/send .
(meta)/#meta= сессия-искатель (сама искала другие сессии) — почти никогда
не то, что нужно; ранжируется вниз автоматически.
- Можно искать прямо по тегу:
recall find #rosperevozki(словарь:recall tags). - Текущую сессию игнорируй. Если индекс молчит — fallback:
recall grep
(полнотекст по сырым транскриптам; строка: … сниппет …), затем шаг 2 по найденному id.
- При «подними последнюю/вчерашнюю сессию» сверяй ВРЕМЯ в строке: одинаковых сессий
одного проекта много, нужна самая свежая по T, не первая попавшаяся.
Несколько кандидатов → селектор
Если уверенного победителя нет (2+ правдоподобных строки) — НЕ выбирай сам. Построй селектор через AskUserQuestion: один вопрос «Какая сессия?», вариант на кандидата (максимум 4 самых свежих/релевантных):
- label — папка проекта + дата (
my-crm · 11.06); - description — контекст из строки индекса: задача, статус, ключевые сущности;
- последним вариантом всегда — «Копнуть глубже»: по выбору открой карточки
(recall show) всех кандидатов, при нужде recall grep или сырые transcripts (~/.claude/projects/), и покажи расширенное сравнение.
Шаг 2 — Погружение
recall show # карточка: task, status, method, entities, artifacts, next
Карточки часто достаточно: в artifacts лежат URL готовых таблиц/страниц, в method — какой скилл/скрипт использовался, в next — на чём остановились. Если нужна полная глубина — сырой transcript: ~/.claude/projects//.jsonl (полный id есть в карточке). Оттуда вытаскивай параметры, пути, чем кончилось.
Шаг 3 — Действие: ТРИ режима
- finish — доделать здесь. «Сделай ещё раз как тогда, но по Z» / «доделай»:
из карточки возьми проект (cwd) и метод (скилл + параметры), выполни задачу в ТЕКУЩЕЙ сессии с новыми параметрами, работая из папки того проекта. Если там вызывался скилл — вызови его же через Skill с новым аргументом.
- handoff — дать команду. Пользователь хочет сам:
recall cmd→ выдай ему
готовую строку cd "" && claude --resume .
- spawn — открыть окно самому. «Открой её», «переключи меня», «дай окошко»:
recall open — откроется новое окно терминала с восстановленной сессией (iTerm: RECALL_TERMINAL=iTerm recall open ; «открой табом» → --tab, при RECALL_TAB=1 табы и так по умолчанию, разово окном — --window). Это живой контекст той сессии — пользователь продолжает там, ты в своём окне свободен. Восстановленная сессия автоматически получает свой handoff (SessionStart-хук): последнее состояние, что в полёте, следующие шаги. Если у старой сессии карточки нет — recall open сам сгенерит её перед открытием (~30 сек, один вызов haiku); предупреди пользователя об этой паузе, торопится — --fast.
Режим выбирай по формулировке: задача → finish; «дай команду» → handoff; «открой/переключи/восстанови окно» → spawn. Вопрос «как/что было» — просто ответь из карточки (с артефактами и id сессии). Непонятно — покажи топ-кандидатов одной строкой каждый и спроси.
Живые сессии — адресная работа (iTerm2 bridge)
Помимо ПРОШЛЫХ сессий (find/open) recall адресно рулит ЖИВЫМИ открытыми Claude-сессиями через мост к iTerm2 Python API (демон в AutoLaunch держит соединение, CLI общается с ним через очередь 0700 — без проблем с авторизацией). Установка один раз: recall iterm-install → iTerm2 Settings → General → Magic → ✅ Enable Python API → перезапустить iTerm2.
recall ps— открытые сессии: tty (s034), бежит лиclaude, его session-id, папка, тайтл.recall peek s034 [строк]— прочитать текущий экран сессии (что она сейчас делает).recall send s034 "текст"— промпт В ОДНУ сессию. Гарантии: никогда не broadcast,
адрес однозначен, claude на tty реально бежит, сессия открыта; каждая отправка → audit-лог (~/.claude/recall/iterm-audit.log).
recall wait s034 [сек]— заблокироваться, пока сессия не «утихнет» (экран стабилизировался).
Петля оркестрации: ps → нужный tty → send задачу → wait → peek результат. Адрес сессии s0NN виден в статус-строке каждого таба. Демона нет / API выключен → команды честно скажут «bridge not responding» (не молча висят).
Codex-сессии
recall индексирует не только Claude Code — интерактивные сессии Codex CLI (originator: codex-tui) попадают в тот же индекс. Механика и живые правила (pgrep/tty/инжект) — подробно в docs/CODEX.md, здесь только то, что нужно оркестратору по ходу дела.
Находить: recall find #codex (или просто по словам задачи — Codex-строки ранжируются вместе с Claude-строками). Строка индекса такая же, как у Claude, но id длиннее — id13 (первые 13 символов uuid, например 019f2adc-c5cc) — это и есть сигнал «это Codex, не Claude». ⚡LIVE значит то же самое: живой codex-процесс + свежий mtime роллаута.
Поднимать: recall cmd → cd && codex resume . Важно (контр-интуитивно для тех, кто привык к Claude): codex resume дописывает В ТОТ ЖЕ файл тем же id — новой сессии не создаётся, «цепочек» файлов нет. Резюмить нужно всегда тот же id, что и был.
Батчи codex_exec (аналог субагента, разовый вызов без TUI) в реестр не попадают — это норма, не пропущенная сессия.
Транзишн-ритуал: «собери контекст → передай Codex»
Когда оркестратор (текущая Claude-сессия) должен передать задачу в Codex — например, юзер просит «дальше пусть доделывает codex» — по шагам:
- Написать бриф-файл по шаблону recap-карточки: Задача / Сделано /
В работе / Дальше / Гочи, плюс пути к репозиторию и ключевым файлам (шаблон CODEX_HANDOFF.md — в docs/CODEX.md).
- Передать его командой:
``bash recall to-codex --brief --spawn ` Она пишет /CODEX_HANDOFF.md, при отсутствии AGENTS.md создаёт минимальный (существующий не трогает), и поднимает codex` новым окном.
- Верифицировать по окну: найти tty поднятого codex-процесса
(ps -eo pid,tty,command | grep codex), peek это окно — убедиться, что codex реально стартовал и читает handoff (а не завис/не упал на старте).
- Дальше — юзер работает прямо в окне codex; оркестратор туда не пишет
вслепую, а действует по правилам docs/CODEX.md (живость только через pgrep, окно ищется по tty процесса, инжект текста в TUI не сабмитится сам — нужен настоящий key-event или руки юзера).
Защита от потери транскриптов
Транскрипты ~/.claude/projects/**/.jsonl бывают удаляются извне. Защита: Stop-хук (бэкап после КАЖДОГО хода — грязная смерть теряет максимум последний ход), SessionEnd/PreCompact-хуки и recall sweep (LaunchAgent, 30 мин) копируют каждый в ~/backups/claude-transcripts (append-only). recall open на удалённой сессии не открывает пустой resume — рапортует выжившие артефакты и архивную копию; на ЖИВОЙ сессии отказывается (не раздваивать контекст; --force — осознанный override). Плюс cleanupPeriodDays: 999999 в settings.json глушит возрастную чистку Claude Code.
Пример (реальный)
«Сделайте ещё выгрузку по постоянным Светланы Ивановой»:
recall find иванов выгрузк→
c2631a96 2026-06-11 my-crm [done] Выгрузка сделок уволенного логиста Ивановой…
recall show c2631a96→ method: скилл export-dismissed,
artifacts: URL готовой таблицы, project: ~/Documents/Cursor/my-crm.
- finish: вызвать тот же скилл с новым аргументом из папки проекта.
(Или просто отдать ссылку на готовую таблицу, если она уже отвечает на запрос.)
Удаление из индекса
«Убери эту сессию из индекса», «забудь её», «стереть тему»: recall remove — удаляет карточку, строку индекса и ставит tombstone (хук/backfill её больше не воскресят; вернуть: recall recap --force). Перед удалением покажи строку индекса и подтверди, что это та самая сессия.
Как наполняется индекс
Два контура, потому что сессии обычно умирают ГРЯЗНО (ноут вырубили — SessionEnd не сработал):
- SessionEnd-хук (
recall hook) рекапит каждую чисто завершённую сессию ≥15
событий через haiku.
recall sweep(LaunchAgent, каждые 30 мин) — страховка от грязных смертей:
бэкапит транскрипты, даёт КАЖДОЙ неучтённой сессии дешёвую [new]-строку в индексе без LLM (сессия находима через ≤30 мин после появления, даже если никогда не завершится), и докарточивает/дохэндоффивает устаревшие (кап 8 haiku-вызовов за проход).
Старые сессии: recall backfill. Пересборка индекса из карточек (после правки тегов/карточек, без LLM): recall reindex. Словарь тегов: recall tags (~/.claude/session-recaps/TAGS.md — recap-промпт сам предпочитает эти теги). Диагностика: recall doctor (в т.ч. покрытие индекса за 7 дней и живость LaunchAgent; permissions: установщик прописывает Bash(recall *) в allow — recall работает в любой сессии без промптов).
Заодно сессии называют себя сами: каждый recap/handoff даёт сессии имя папка/проект · задача (механизмом /rename) — пикер claude --resume читаем. Ручные имена не перезаписываются; «назови ту сессию X» → recall rename X.
Handoff-слой (непрерывность; опционален)
Петля включается при установке (./install.sh --with-handoff; recall doctor покажет её статус). Если включена: перед каждым автокомпактом PreCompact-хук пишет handoff-карточку сессии (~/.claude/session-recaps/handoffs/.md: task now / done / in flight / next / gotchas), а SessionStart-хук (compact|resume) вливает её обратно в контекст. Значит: после компакта и при recall open сессия сама знает, на чём остановилась — не пересказывай ей контекст вручную. Карточка свежее компакта быть не может — если видишь handoff в начале контекста, доверяй ему как ground truth. Посмотреть руками: cat ~/.claude/session-recaps/handoffs/.md.
Старые сессии (закончились до установки петли) карточек не имеют. Точечно карточку сгенерит сам recall open; если пользователь хочет переобход («сделай handoff'ы всем недавним»), предложи recall handoff --all --days 14 — честно назови цену (один вызов haiku на сессию) и запусти в фоне.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: rocketmandrey
- Source: rocketmandrey/claude-recall
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.