session-orchestrator
Skill5 starsChanged 4 months agoMITView on GitHub
Session orchestrator on top of the recall index of all Claude Code sessions: finds a past session by task description, dives in (context, project, skill, artifacts) and acts in one of three modes — finish here, hand off the resume command, or open the session in a new terminal window. Use when user asks: "find the session where I did X", "we already did this", "do it again like back then", "resume/open that session", "what did we decide about…" / «найди сессию где я делал X», «мы же это уже делали», «сделай ещё раз как тогда», «восстанови проект Z», «открой сессию про…», «что мы решили насчёт…» / "找到我做过X的会话", "继续那个会话", "打开那个项目". Not for brand-new tasks with no past session.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- matos-ed/skillstheir own version, first seen Oct 11, 2026
- justinwojo/claude-skillstheir own version, first seen Mar 30, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- justinwojo/claude-skills★ 1same name
- matos-ed/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Files
session-orchestrator — найти сессию, погрузиться, продолжить
CLI: recall (см. recall help). Данные: ~/.claude/session-recaps/ —
карточка на сессию + единый INDEX.md (строка на сессию). Это первичная точка
касания; запасной полнотекст — recall grep.
Шаг 1 — Поиск по индексу (ВСЕГДА сначала здесь)
recall find <основа1> <основа2> ...- Ищи по ОСНОВЕ слова, не по словоформе: «Ивановой» →
иванов, «выгрузку» →выгрузк. - Несколько вариантов сразу:
recall find иванов выгрузк постоянн. Выдача уже отранжирована: совпадение в задаче > в #тегах/{сущностях} > в проекте, свежее выше. - Строка индекса:
<id8> <дата>T<чч:мм> <проект> [status] <задача> #теги {сущности}. [new]= сессия ещё без LLM-рекапа (свежая или умершая грязно; строка = её первый запрос). Это НОРМАЛЬНЫЙ кандидат — часто именно та самая последняя сессия.⚡LIVEв конце строки = сессия ОТКРЫТА ПРЯМО СЕЙЧАС. НЕ resume и НЕrecall open(раздвоит контекст) — работай адресно:recall ps→recall peek/send <tty>.(meta)/#meta= сессия-искатель (сама искала другие сессии) — почти никогда не то, что нужно; ранжируется вниз автоматически.- Можно искать прямо по тегу:
recall find #rosperevozki(словарь:recall tags). - Текущую сессию игнорируй. Если индекс молчит — fallback:
recall grep <основы...>(полнотекст по сырым транскриптам; строка:<id8> <дата> <проект> … сниппет …), затем шаг 2 по найденному id. - При «подними последнюю/вчерашнюю сессию» сверяй ВРЕМЯ в строке: одинаковых сессий
одного проекта много, нужна самая свежая по
<дата>T<чч:мм>, не первая попавшаяся.
Несколько кандидатов → селектор
Если уверенного победителя нет (2+ правдоподобных строки) — НЕ выбирай сам. Построй селектор через AskUserQuestion: один вопрос «Какая сессия?», вариант на кандидата (максимум 4 самых свежих/релевантных):
- label — папка проекта + дата (
my-crm · 11.06); - description — контекст из строки индекса: задача, статус, ключевые сущности;
- последним вариантом всегда — «Копнуть глубже»: по выбору открой карточки
(
recall show) всех кандидатов, при нуждеrecall grepили сырые transcripts (~/.claude/projects/), и покажи расширенное сравнение.
Шаг 2 — Погружение
recall show <id8> # карточка: task, status, method, entities, artifacts, nextКарточки часто достаточно: в artifacts лежат URL готовых таблиц/страниц, в method —
какой скилл/скрипт использовался, в next — на чём остановились. Если нужна полная
глубина — сырой transcript: ~/.claude/projects/<папка>/<session-id>.jsonl
(полный id есть в карточке). Оттуда вытаскивай параметры, пути, чем кончилось.
Шаг 3 — Действие: ТРИ режима
- finish — доделать здесь. «Сделай ещё раз как тогда, но по Z» / «доделай»: из карточки возьми проект (cwd) и метод (скилл + параметры), выполни задачу в ТЕКУЩЕЙ сессии с новыми параметрами, работая из папки того проекта. Если там вызывался скилл — вызови его же через Skill с новым аргументом.
- handoff — дать команду. Пользователь хочет сам:
recall cmd <id8>→ выдай ему готовую строкуcd "<проект>" && claude --resume <id>. - spawn — открыть окно самому. «Открой её», «переключи меня», «дай окошко»:
recall open <id8>— откроется новое окно терминала с восстановленной сессией (iTerm:RECALL_TERMINAL=iTerm recall open <id8>; «открой табом» →--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 <id13> → cd <cwd> && codex resume <полный-id>.
Важно (контр-интуитивно для тех, кто привык к Claude): codex resume
дописывает В ТОТ ЖЕ файл тем же id — новой сессии не создаётся, «цепочек»
файлов нет. Резюмить нужно всегда тот же id, что и был.
Батчи codex_exec (аналог субагента, разовый вызов без TUI) в реестр не
попадают — это норма, не пропущенная сессия.
Транзишн-ритуал: «собери контекст → передай Codex»
Когда оркестратор (текущая Claude-сессия) должен передать задачу в Codex — например, юзер просит «дальше пусть доделывает codex» — по шагам:
- Написать бриф-файл по шаблону recap-карточки: Задача / Сделано /
В работе / Дальше / Гочи, плюс пути к репозиторию и ключевым файлам
(шаблон
CODEX_HANDOFF.md— вdocs/CODEX.md). - Передать его командой:
Она пишетrecall to-codex <dir> --brief <файл-брифа> --spawn<dir>/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/**/<id>.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 <id8> — удаляет карточку, строку индекса и ставит tombstone
(хук/backfill её больше не воскресят; вернуть: recall recap <transcript> --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 <id8> X.
Handoff-слой (непрерывность; опционален)
Петля включается при установке (./install.sh --with-handoff; recall doctor
покажет её статус). Если включена: перед каждым автокомпактом PreCompact-хук
пишет handoff-карточку сессии
(~/.claude/session-recaps/handoffs/<id>.md: task now / done / in flight / next /
gotchas), а SessionStart-хук (compact|resume) вливает её обратно в контекст. Значит:
после компакта и при recall open сессия сама знает, на чём остановилась — не
пересказывай ей контекст вручную. Карточка свежее компакта быть не может — если
видишь handoff в начале контекста, доверяй ему как ground truth. Посмотреть руками:
cat ~/.claude/session-recaps/handoffs/<полный-id>.md.
Старые сессии (закончились до установки петли) карточек не имеют. Точечно карточку
сгенерит сам recall open; если пользователь хочет переобход («сделай handoff'ы
всем недавним»), предложи recall handoff --all --days 14 — честно назови цену
(один вызов haiku на сессию) и запусти в фоне.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

