CommunityCoding & Developmentgithub.com

Drakula1980/claude-skills

>- Закрытие параллельных сессий Claude Code в проекте и доводка хвостов: по каждой сессии проверить, что работа закончена, закоммичена, слита и записана; спасти материалы из временных папок; довести незавершённое; собрать список «за владельцем»; закрыть лишние сессии и оставить проект в законченном виде с одной страницей состояния. Используй, когда владелец говорит: «закрой лишние сессии», «вычисти сессии», «подбери хвосты», «убедись, что всё закоммичено и записано», «приведи всё в законченный вид», «переходим к следующему этапу — что осталось?», «куча сессий, я потерял нить», «собери всё в одну сессию», а также перед передачей проекта другой сессии, другому аккаунту или исполнителю. Не для закрытия одной своей сессии и не для обычного «закоммить».

What is claude-skills?

claude-skills is a Claude Code agent skill that >- Закрытие параллельных сессий Claude Code в проекте и доводка хвостов: по каждой сессии проверить, что работа закончена, закоммичена, слита и записана; спасти материалы из временных папок; довести незавершённое; собрать список «за владельцем»; закрыть лишние сессии и оставить проект в законченном виде с одной страницей состояния. Используй, когда владелец говорит: «закрой лишние сессии», «вычисти сессии», «подбери хвосты», «убедись, что всё закоммичено и записано», «приведи всё в законченный вид», «переходим к следующему этапу — что осталось?», «куча сессий, я потерял нить», «собери всё в одну сессию», а также перед передачей проекта другой сессии, другому аккаунту или исполнителю. Не для закрытия одной своей сессии и не для обычного «закоммить».

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Drakula1980/claude-skills/tree/HEAD/plugins/close-sessions/skills/close-sessions

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Закрытие сессий и доводка хвостов

В проекте накопились параллельные сессии: часть закончила, часть ждёт владельца, часть оставила незакоммиченное, ветки, рабочие копии и находки «на потом». Задача — привести это к виду, когда владелец может закрыть всё лишнее и ничего не потерять.

Ты — единственная сессия, которая этим занимается (оркестратор). С этого момента всё идёт через тебя: остальные сессии сдают работу тебе, вопросы владельцу задаёшь ты, в их окна он больше не заходит.

Что должно получиться

  1. Файл закрытия в проекте, первым разделом — страница «СЕЙЧАС» на один экран.
  2. Каждый результат в git (свой коммит, слит или назван неслитым) либо прямо назван «лежит вне git, копии нет».
  3. Список «за владельцем» — пронумерованный, по важности, с готовыми командами.
  4. Одна очередь находок вместо новых сессий и карточек.
  5. Лишние сессии в архиве; открытые перечислены поимённо с причиной и условием закрытия.
  6. Доска проекта, документы состояния и память соответствуют фактам.

Правила

Каждое появилось из настоящей ошибки; случаи — в references/lessons.md.

  1. Факт — это вывод команды. «Закоммичено», «слито», «выложено», «проверки прошли» берёшь из git и запусков, а не из отчёта сессии и не из собственной памяти о том, что было час назад. Число из отчёта сессии так и подписывай: «по отчёту сессии».
  2. Что можно без слова владельца, что — по слову.
    • Без слова: читать; вести файл закрытия; копировать нужное из временных папок в проект (ничего не затирая).
    • После первого доклада (шаг 3), в рамках исходной просьбы: править доску, документы состояния и память, приводя их к фактам.
    • Только по слову: коммит, слияние, удаление ветки, копии или метки, отправка на сервер, выкладка на стенд, архив сессии, перенос и переименование пакетов и сценариев там, откуда владелец их запускает. «Коммить» не значит «отправляй», «сливай» не значит «убирай копию».
    • Слово бывает стоящим — на вид действий: «сдавших закрывай по мере сдачи», «сданное коммить в её ветку». Запиши его дословно на страницу «СЕЙЧАС» и не расширяй на соседние действия.
  3. Слово владельца — то, что он написал в твоём окне. Его слова в пересказе соседней сессии — отчёт этой сессии: для неё это разрешение, для тебя нет.
  4. Сессии не плодятся. Закрываемые сессии почти всегда находят новые дефекты и выставляют карточки, а владелец их запускает — к концу уборки сессий больше, чем в начале. Договорись с владельцем сразу: карточки не запускаются, находки идут строкой в очередь. И скажи это сессиям (шаблон «Новый порядок»).
  5. Перед своим изменяющим действием перечитай состояние. Владелец часто даёт одно и то же слово и тебе, и сессии. Перед коммитом — git log -3, git status, индекс; перед правкой общего файла — не изменился ли он минуту назад.
  6. Чужие запреты не обходи. Запись на боевые серверы и всё, что остановила или остановила бы проверка прав, делает владелец. Не ищи обходной путь и не поручай это соседней сессии — это тот же обход.
  7. Значимый результат проверяет не тот, кто его сделал. Слияние, пакет выкладки, сценарий для боя — отдельным исполнителем, которому дан результат, а не твой вывод о нём.
  8. Расход согласуй. Проверка десятков сессий — это много исполнителей. Назови масштаб до запуска, если у владельца есть правило о расходах (смотри его CLAUDE.md).

Порядок

Шаг 0. Рамка

До чтения журналов сессий установи четыре вещи; запишешь их в раздел «Рамка» файла закрытия на шаге 3.

  • Что считается проектом. Папка проекта и все репозитории, где работали его сессии, включая лежащие в других папках. Найти их: repo_state.py <папка проекта> для папки без git печатает репозитории внутри; sessions.py list показывает по каждой сессии папки и репозитории, куда она ходила через git -C. Список подтверди у владельца одной строкой.
  • Где состояние. Доска или журнал оркестрации, документы состояния, память. Нет доски — ею станет файл закрытия. Большую доску целиком не читай: разделы правил и записи о нужных сессиях поиском по названию.
  • Какие сессии не трогать. Сессии расписаний и напоминаний (в list помечены «расписание»), сессии других проектов, сессия, нужная следующему этапу, ты сам.
  • Стоящие правила владельца: коммиты, отправка, бой, стенд, расход. Они в CLAUDE.md, на доске и в памяти — прочти, не пересказывай по памяти.

Шаг 1. Опись (только чтение)

Сценарии лежат в scripts/ этого навыка и только читают. Запускай из папки проекта (или с --root <папка проекта>). Путь к папке навыка в командах подставляет Claude Code: навык ставят по-разному (личная папка, папка проекта, плагин), так что путь не пиши по памяти. Если путь не подставился (в команде знак доллара с фигурными скобками), возьми папку из строки «Base directory for this skill» в начале навыка.

python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" list --days 14
python3 -B "${CLAUDE_SKILL_DIR}/scripts/repo_state.py" <репозиторий> <репозиторий>
python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" scratch
python3 -B "${CLAUDE_SKILL_DIR}/scripts/sessions.py" cards --days 14
  • Сессии по журналам — list: чем кончился журнал, когда писал владелец, в каких папках и репозиториях сессия работала. Журналы соседнего репозитория добавляет --project <путь или имя папки>. Журнал не знает, в архиве ли сессия и работает ли она.
  • Сессии в приложении — mcp__ccd_session_mgmt__list_sessions. Инструменты приложения бывают отложенными: загрузи их через ToolSearch (select:mcp__ccd_session_mgmt__list_sessions,mcp__ccd_session_mgmt__archive_session,SendMessage,ListAgents), иначе решишь, что их нет. Задай limit с запасом (по умолчанию 20), для счёта архива — include_archived: true. В ответе сессии всех проектов — отбирай по папке; текущей сессии в ответе нет. Номер сессии в приложении (local_…) не равен номеру журнала: сопоставляй по названию. Нет инструмента — попроси у владельца снимок списка.
  • Репозитории — repo_state.py: незакоммиченное, игнорируемое, неслитые ветки, рабочие копии и чисты ли они, отложенное, неотправленное, незавершённые операции.
  • Временные папки — scratch: что исчезнет, когда систему почистят (не в момент архива, но без предупреждения).
  • Карточки — cards: что сессии выставили и что из этого не запущено. Незапущенное — в очередь находок. «Запущена, но журнала нет» значит, что сессия ушла в другой проект: добавь его через --project.

Общие ресурсы (стенд, замки, тестовые данные) — отдельной строкой: свободен ли замок, не осталось ли чужих временных данных.

Шаг 2. Проверка каждой сессии

По каждой сессии ответь на одни и те же вопросы и занеси в таблицу (references/templates.md):

ВопросЧем подтверждается
Что делала и где результатрепозиторий, ветка, хеш, файлы
Закоммичено лиgit status её рабочей копии — пусто
Слито лиgit merge-base --is-ancestor <ветка> <главная>
Записан ли итогдокументы проекта, доска, память — прочитать
Что ждёт владельцаеё последние сообщения + не закрыто ли с тех пор
Есть ли обещание «сделаю после…»хвост журнала
Что в её временной папкеsessions.py scratch

Хвост журнала: sessions.py tail "<часть названия>" --last 40. Три последние реплики печатаются целиком, у остальных вырезана середина; целиком — --chars 0. Рабочую копию и ветку сессии бери из её итогового сообщения, из строк «папки» и «работала через git -C» и из хода работы (--tools): поле ветки в журнале часто пусто.

Метки: ВЛАДЕЛЕЦ — написано человеком в том окне; КАРТОЧКА — первое сообщение сессии, запущенной из карточки: текст писала другая сессия, а не владелец; СЕССИЯ — сообщение другой сессии; РАСПИСАНИЕ — автоматический запуск. Отсутствие слова владельца в выводе не доказывает, что его не было: после сжатия журнала слова даны в пересказе.

Вердикт один из пяти:

  • закрыть сейчас — сдано; результат в git либо назван «вне git, копии нет»; всё, что ждёт владельца, перенесено в список «за владельцем», и сама сессия для этого не нужна;
  • закрыть после действия — назови одно действие и чьё оно;
  • оставить — работает или нужна дальше; назови причину и условие закрытия;
  • не трогать — расписания и чужие проекты;
  • уже в архиве — проверь только её временную папку, рабочие копии и незакоммиченное.

Сессий больше десятка, есть инструмент Workflow и согласие владельца на параллельную проверку — запусти ${CLAUDE_SKILL_DIR}/references/audit-workflow.js (читатели по группам, отдельная сверка мест хранения, сводка; параметры описаны в начале файла, в skill передай ${CLAUDE_SKILL_DIR}). Иначе проверь сам тем же списком вопросов.

Ловушки этого шага:

  • Ветка без своих коммитов не значит «слита»: так же выглядит ветка, где работа осталась незакоммиченной, и свежая ветка сессии, которая только начала.
  • Ветки уже нет (git отвечает кодом 128) — это не «не слита»: проверяй хеш её вершины из хвоста журнала.
  • Сессия со словами «готово» в середине журнала могла позже найти изъян в своей же работе. Читай конец, а не первое «готово».
  • Диагноз сессии без контрольного опыта — предположение. Не переноси его в документы как причину.

Шаг 3. Файл закрытия и первый доклад

Файл — ЗАКРЫТИЕ_сессий_<ГГГГ-ММ-ДД>.md рядом с доской (скелет — в references/templates.md). Файл за эту дату уже есть — не создавай новый и не перезаписывай: прочти, перепиши только раздел «СЕЙЧАС», прежний перенеси в журнал ниже. В git-проекте файл остаётся незакоммиченным до слова владельца — назови его в разделе «Что не в git».

Первым разделом — страница «СЕЙЧАС»: зачем всё это и какой действует порядок, что сделано, что в git, какие сессии открыты, какие слова владельца получены и что по ним сделано, что ему запускать самому, очередь находок. Ниже — таблица и журнал.

Страницу переписывай после каждого события, а не дописывай снизу: владелец читает её, когда теряет нить. При каждой правке обнови время в заголовке, пересчитай числа по спискам и перечитай блок решений — «идёт» и «ждём» не должны оставаться после того, как дело сделано.

Затем доложи владельцу: сколько сессий можно закрыть сразу, сколько после действия, что не в git, что ждёт его. В первом же докладе спроси о стоящих словах — иначе придётся спрашивать по каждой сессии:

  • закрывать ли сдавшие работу сессии по мере сдачи;
  • коммитить ли сданную работу в её ветку без отдельного вопроса;
  • подтверждает ли он, что карточки закрываемых сессий не запускаются.

Форма вопросов — в разделе «Разговор с владельцем».

Шаг 4. Доводка хвостов

Порядок такой, чтобы ничего не потерять: сохранить → закоммитить → (архив сессии, шаг 5) → слить → убрать.

  1. Сохрани материалы временных папок в проект: протоколы проверок, снимки «до», репетиции. Клади рядом с результатом. Если папка назначения под .gitignore (её покажет repo_state.py, строка «игнорируется») — занеси её в «Что не в git»: сохранено в проект ещё не значит сохранено в git.
  2. Закоммить готовое — каждую работу в её ветку, только явными путями. Перед коммитом просмотри добавляемое на ключи, пароли и личные данные. Файл, в котором куски нескольких сессий, раскладывай по сессиям через индекс, не трогая рабочий файл. Коммит проверяй на отдельном клоне. Рецепты — references/git-recipes.md.
  3. Слей — по слову владельца, записав перед слиянием хеш прежней вершины. Проверки гони на результате слияния, а не на ветках по отдельности: три ветки, зелёные поодиночке, вместе могут дать провал.
  4. Убери копии и ветки — только после сверки: в истории главной есть коммиты ветки с её работой; копия чиста; её игнорируемые папки с протоколами разобраны; ни одна открытая сессия в этой копии не работает. git branch -d откажет для неслитой ветки, но ветку без своих коммитов — в том числе свежую ветку живой сессии — удалит молча. Ветки и копии сессий соседнего проекта не убирай: пометка «решает тот проект».
  5. Выложи на стенд, если владелец сказал, — по правилам стенда (замок, соседи, проверки соседей до и после).
  6. Для боя — только подготовь. Сценарий с планом, применением и возвратом, независимо проверенный, и строка в списке «за владельцем» с точной командой. Прежний вариант пакета или сценария, лежащий там, откуда владелец запускает, опасен: сразу напиши владельцу «прежний не запускайте» и по его слову перенеси его в подпапку «УСТАРЕЛО — не запускать» с запиской. Нашёл изъян в команде, уже названной владельцу, — первой строкой напиши ему «не запускайте до моего сообщения».
  7. Исправь документы и память. Версии, вершины веток, «не слито», «ждёт» — привести к фактам. В память — только устойчивое (правила, капканы, где что лежит); состояние дня — в файлы проекта.
  8. Находки — в очередь. Одна запись: что, где, чем подтверждено, чем грозит, что нужно для исправления.

Пока сессия ещё открыта и правит те же файлы, напиши ей «подожди» и дождись ответа: доставка не значит, что сообщение прочитано. После своего коммита — «дерево свободно». Если проверяешь пакет, который сессия может пересобрать, попроси его не трогать и сверь контрольную сумму до и после проверки.

Шаг 5. Закрытие сессий

Сдавшую сессию архивируют, как только её материалы сохранены и работа закоммичена в её ветку, — слияния и уборки копий она не ждёт. Архив обратим (unarchive_session), удаление — нет; используй архив.

Перед архивом каждой сессии:

  • её рабочая копия чиста, игнорируемые папки с протоколами разобраны. По описанию инструмента, архив по умолчанию убирает рабочую копию, которую приложение создало для сессии; копии, сделанные сессией самой через git worktree add, остаются — их убираешь ты (шаг 4, п. 4);
  • её временная папка разобрана — отметь это в таблице;
  • в хвосте журнала нет обещаний и неотвеченных вопросов;
  • вердикт перепроверен сейчас, а не взят из утренней таблицы;
  • у неё нет побочных сессий, о которых владелец не знает: они уйдут в архив вместе с ней. Связанные сессии видны в list_sessions по полю startedBy; о прочих спроси владельца.

Что нужно знать об archive_session:

  • Вызывай только для сессий, которые владелец согласился закрыть: названных им или покрытых стоящим словом. «Закрой все, кроме нужных» покрывает тех, кого ты назвал ему лишними.
  • Нужен номер сессии из list_sessions, не номер журнала.
  • Каждый вызов приложение даёт владельцу на подтверждение (кроме режимов без подтверждений) — предупреди о числе подтверждений заранее.
  • Сессию, у которой идёт ход или живёт фоновая работа, приложение не заархивирует. Закреплённую — тоже. Открытую на экране — только если владелец разрешит вызов на карточке приложения; иначе он закроет её сам из боковой панели.

Работающей сессии напиши через SendMessage (адрес и «занята / простаивает» — из ListAgents) шаблон «Сдать работу». Сообщение будит сессию: архив сразу следом будет отклонён. Отправляй с notify_when_idle: true и архивируй по уведомлению о простое; подписка одноразовая, работает из основного разговора и для сессий этой машины, может истечь — тогда повтори. Получив «сдано», проверь командами.

Нет инструментов приложения — дай владельцу список «закрыть» с названиями. Нет SendMessage — отдай владельцу текст сообщения, он вставит его в окно сессии.

Шаг 6. Итог

Перепиши страницу «СЕЙЧАС» в последний раз и сверь с фактами: repo_state.py заново, список сессий заново. Доложи владельцу коротко:

  1. что закрыто и что осталось открытым (поимённо, с причиной);
  2. что теперь в git и что лежит вне git;
  3. что за ним — нумерованный список, деньги и безопасность первыми;
  4. очередь находок;
  5. чего ты не проверил и почему.

Если после закрытия начинается новый этап — оставь документ передачи для новой сессии, которая ничего не знает: что готово, что читать и в каком порядке, первый шаг, правила, текст первого сообщения.

Разговор с владельцем

Владелец в этот момент устал от количества сессий. Экономь его внимание.

  • Один вопрос — одно решение. Форма: что решается; «да» значит то-то; «нет» значит то-то; что советуешь и почему. Не складывай два вопроса в один пункт: на «1 — да» ты не поймёшь, на что ответили.
  • Сначала состояние, потом подробности. Первой строкой — что изменилось и что от него нужно. Ход работы — только по просьбе.
  • Готовые слова. Называй короткие фразы, которыми он может ответить: «коммить <что>», «сливай <что>», «убирай копии».
  • «На твоё усмотрение». Выбери обратимый путь; боевые системы и общие ресурсы усмотрение не открывает. Скажи заранее, что выбрал, и после — что сделано и что осталось за ним.
  • Свои ошибки называй сразу: сказал «можно закрывать», а сессия нашла изъян — скажи это первой строкой, не прячь в журнале.

Когда работа закончена

  • от закрытых сессий не осталось незакоммиченного; чужие изменения и работа оставленных сессий перечислены в файле закрытия с указанием, чьи они. В соседнем репозитории сверяй только свои пути: git status --porcelain -- <пути>;
  • неслитые ветки перечислены в файле закрытия с причиной;
  • в списке сессий остались только названные «оставить» и «не трогать»;
  • у каждой закрытой сессии в таблице стоит отметка о временной папке: «сохранено в <путь>» или «нечего сохранять»;
  • список «за владельцем» и очередь находок лежат в файле проекта, а не в переписке;
  • страница «СЕЙЧАС» совпадает с тем, что показывают команды.

Чего не удалось проверить — названо владельцу прямо.

Что лежит рядом

ФайлЗачем
scripts/sessions.pyсессии по журналам, хвост журнала, карточки, временные папки
scripts/repo_state.pyсостояние репозиториев: ветки, копии, незакоммиченное, игнорируемое
references/templates.mdскелет файла закрытия, страница «СЕЙЧАС», вопрос владельцу, сообщения сессиям
references/git-recipes.mdпроверка «слито», коммит, общий файл по сессиям, клон, слияние, уборка копий
references/lessons.mdкапканы: что случилось и какое из этого правило
references/audit-workflow.jsсценарий параллельной проверки сессий

Related Skills