本文へ移動
cccskills
無料GitHub で公開

slot

РЕЕСТР ПЕРЕИСПОЛЬЗУЕМЫХ СЕССИЙ + выдача слота: породить ВИДИМУЮ Антону фоновую сессию БЕЗ апрув-окна, переиспользовав… Триггеры: /slot, /слот, «дай слот», «покажи слоты», «реестр сессий», «какие сессии можно переиспользовать», «запусти сессию в фоне», «нужна отдельная сессия», «сколько слотов осталось», «верни рутину назад», «slot», «reuse a session».

インストール方法を見る

含まれるファイル(1)

  • SKILL.md21.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

/slot — реестр переиспользуемых сессий

⭐⭐⭐ ГЛАВНОЕ СВЕРХУ (24.08.2026): ПЕРЕИСПОЛЬЗОВАНИЕ — ПЕРВЫЙ выбор, create — второй

Приказ Антона 24.08 голосом: «нужно переиспользовать сессии, чтобы они как можно реже запрашивали аппрувы». Порядок 31.07 («сначала create») отменён, потому что премиса, на которой он стоял, опровергнута замером в тот же вечер.

Что замерено 24.08 18:42 на хабе (живой прогон, не рассуждение):

  1. update_scheduled_task(слот, description + prompt + fireAt) прошёл молча.
  2. Сессия поднялась мгновенно (у разовой задачи задержки диспетчера нет).
  3. Сессия переименовала себя сама первым ходом через mcp__ccd_session_mgmt__set_session_title и в list_sessions видна как «ПРОБА переиспользования слота 1842» (titleSource=tool), а НЕ под чужим taskId. Старое утверждение «список title сессии не читает» — мертво.
  4. Приложение само называет цену холодного create (текст ответа инструмента): «Tool approvals granted during a run are stored on the task and auto-applied to future runs» — апрувы живут НА ЗАДАЧЕ. Новая задача = пустая история апрувов = сессия встанет на первом коннекторе, и окно будет ждать Антона. Прогретая — не встанет.

Процедура (единственная):

python ~/.claude/scripts/session_slot.py --claim "<суть сессии>"     # даст taskId слота
update_scheduled_task(
  taskId="<слот>",
  description="<человеческое имя, видно в разделе Scheduled>",
  fireAt="<ТОЛЬКО из двери: `python ~/.claude/scripts/_shared/fireat_now.py --in 15`>", notifyOnCompletion=true,
  prompt="ПЕРВЫМ ДЕЛОМ переименуй эту сессию: вызови mcp__ccd_session_mgmt__set_session_title
          с title \"<суть>\". Затем: <сид>")

⛔ Строка про set_session_title обязательна — без неё сессия висит под чужим именем, и это ровно та невидимость, из-за которой канон переворачивали в июле.

create_scheduled_task остаётся честным путём только когда пул пуст — гейт spawn_slot_guard.py теперь сам отбивает create при непустом пуле и печатает готовый вызов update. Пул не посчитался — гейт пускает create, но кричит в stderr (fail-open обязан быть громким, урок 29.07).

Здоровье рельсы одной командой: python ~/.claude/scripts/session_approvals_doctor.py (0 LLM, 0 сети): рычаги · живость хука · объединение сторов · размер пула · режим прав у порождённых сессий · оценка «создано против переиспользовано» за 7 дней.

Зачем это существует (история: почему строили обход)

Антон 29.07: «УБЕРИ ЭТИ АПРУВЫ» и «запрещено запускать любые сессии в чёрную». Два требования сразу, и они тянут в разные стороны:

  • сессия обязана быть видимой в списке приложения — иначе Антон не может её открыть, дотолкать после лимита и ответить на её вопрос. Невидимый claude -p не считается (замер: 29 таких сессий, в списке — ноль);
  • но create_scheduled_task поднимает апрув-окно даже при bypassPermissions + allow-list + auto-allow хуке: он захардкожен выше всех трёх рычагов (замер 29.07 — хук отстрелялся 5 раз за минуту, окно всё равно вылезло).

Выход один: update_scheduled_task проходит молча. Значит новую видимую сессию мы не создаём, а переиспользуем задачу, которая уже отработала. Пул таких задач и есть реестр.

⚠️ Сколько слотов ты РЕАЛЬНО видишь (поправка 2026-08-20, замер [машина флота])

Прежде чем поверить числу из --list: движок берёт один стор — max(files, key=os.path.getmtime) (session_slot.py:108), а задачи приложения лежат в нескольких сторах разными наборами. Замер на [машина флота] 20.08: свежий по mtime стор — 6 задач, второй — 73, объединение — 79. Классификация по одному стору: 5 свободных, по объединению: 61. То есть --list может показать пустой пул там, где слотов десятки, и ты без нужды уйдёшь в create_scheduled_task.

Что делать сейчас: увидел «слотов нет / мало» — не верь, пересчитай объединением:

python ~/.claude/scripts/routine_registry_collect.py   # читает ВСЕ сторы, дедуп по lastRunAt

и сверься с [шина]/routine-registry/<узел>.jsonl (поле schedule/last7). Починка самого движка — задача task-2026-08-20-session-slot-store-union. Канон: память task-registrations-live-in-disk-stores, 00-System/Session-Slots-Passport.md §Поправка 20.08.

Реестр — что в пуле

Три группы, и разница между ними существенная:

что этоможно брать
🟢 свободныеразовые задачи (fireAt в прошлом, выключены) — отстрелялись и никому не нужныда, первыми
🔵 конвертируемыевыключенные рутины (cron, enabled=false, месяцами не запускались)да, но конверсия ломает рутину → обратима через --restore
⛔ занятыеживые рутины (enabled=true) и армированные задачи, ждущие своего часаникогда

⚠️ Пул ПЕР-МАШИННЫЙ. У каждого узла свой scheduled-tasks.json: задача, отработавшая на ноуте, для хаба не существует. Поэтому карточка реестра тоже пер-машинная — 00-System/Task-Slots-Registry-<ИМЯ-УЗЛА>.md. Общий файл Task-Slots-Registry.md оставлен как указатель: он один раз уже соврал, показав пул случайной машины (замер 29.07 23:49 — ноут записал «свободно 1», хаб тем же прогоном переписал на «20»).

Смотреть реестр (0 токенов, ничего не меняет):

python ~/.claude/scripts/session_slot.py --list

Обновить карточку в волте:

python ~/.claude/scripts/session_slot.py --registry

Снимок на 29.07.2026 (хаб): 🟢 20 свободных · 🔵 10 конвертируемых · ⛔ 32 занятых. Цифры живут своей жизнью — верь --list, не этой строке.

Как выполнять

Шаг 1. Взять слот. Одна команда: сперва отдаёт свободные разовые, и только когда они кончились — мёртвые рутины (перед этим сама копирует их SKILL.md в _config-backup\slot-originals\ и пишет cron в ledger, чтобы конверсия была обратимой).

python ~/.claude/scripts/session_slot.py --claim "<суть сессии>"

Слот бронируется атомарно (файл с O_EXCL) — два одновременных --claim не получат один и тот же слот. Пул пуст → exit 3: тогда честный путь — один create с диалогом, и гейт сам его пропустит.

Не трогать выключенные рутины вовсе: --no-convert.

Шаг 2. Придумать имя. Обязательный формат (Антон 29.07: «называй ВСЕ ТАКИЕ сессии по особенному, так мне понятнее»): AUTO-<узел>-<ГГММДД>-<суть>. Готовое имя:

python ~/.claude/scripts/auto_session_name.py "<суть>"

⛔ ВРЕМЯ ДЛЯ fireAt РУКАМИ НЕ ПИШЕТСЯ НИКОГДА (forever-fix 10.09.2026, класс из 6 случаев 11.08-09.09, узлы HP17/[машина флота]/хаб). Причина доказана: fireAt судят часы ПРИЛОЖЕНИЯ, а шелл врал то на 73 мин (HP17 31.08), то на 11 ч ([машина флота] 08.09), то на 7 ч (ноут спал между ходами 09.09) — приложение было право ВСЕ 6 раз. Дверь читает самую свежую метку, которую записало САМО приложение, и считает от неё:

python ~/.claude/scripts/_shared/fireat_now.py --in 15      # -> 2026-09-10T10:30:00Z, готово к вставке

Отбило «fireAt must be in the future» → зови дверь ЗАНОВО (каждый отказ делает её ответ точнее), время руками не правь. Полные аргументы разом: python ~/.claude/scripts/routine_rights_census.py spawn-args --in 15 (там уже эта дверь внутри).

Шаг 3. Занять слот через update (тот самый молчаливый вызов):

update_scheduled_task(taskId="<выданный слот>", description="<имя из шага 2>",
                      prompt="<self-contained сид>", fireAt="<из `fireat_now.py --in 15`>",
                      notifyOnCompletion=true)

Промпт — самодостаточный сид: Outcome · Контекст из recall · Scope · Deliverable · DoD · не-цели · куда эскалировать. Сессия стартует с нуля и контекста этой не увидит.

📛 И блок STOP-DUP в КАЖДЫЙ сид (сводный вердикт 07.08, «+» Антона 14.08): cat $OBSIDIAN_VAULT/08-Templates/seed-stop-dup-block.md → вставь блок ЦЕЛИКОМ и ДОСЛОВНО (на 30.08 там 6 строк: 📛 ON AIR · 👤 консолидатор · 🔁 RECALL ЛЕТЯЩЕЙ · 🪫 бак · 🔍 улика · ⏳ премисса с ранним выходом; число строк смотри В ФАЙЛЕ, не здесь — счётчик в пяти местах расходится). Один источник — правится только тот файл, копий здесь нет.

Шаг 3-бис. ⛔ ПРОЧИТАЙ ФАКТ ОБРАТНО — вызов прошёл ≠ промпт заменился. update_scheduled_task отвечает бодрым «updated» и на частичный апдейт: забыл поле prompt — расписание переставится, а слот поедет со СТАРЫМ приказом и молча выполнит чужую работу. Замер 25.08.2026 (хаб): два слота перепрофилированы «на глазок», mtime их SKILL.md остались вчерашними, в 16:00 повторно отработал робот старых постов (соседняя сессия потом разгребала дубли), в 16:20 повторно поехал уже закрытый DR-заказ, а обе новые задачи не случились вовсе. Это 3-й датированный случай класса «отчитался о записи, не прочитав факт» (Breakage-Journal). Поэтому сразу после Шага 3, ДО доклада Антону:

f="$USERPROFILE/.claude/scheduled-tasks/<taskId>/SKILL.md"
ls -l --time-style=+%d_%H:%M "$f"        # mtime обязан быть СЕЙЧАС, не вчерашним
grep -ci "<слово из нового промпта>" "$f" # >0
grep -ci "<слово из СТАРОГО промпта>" "$f" # 0 — иначе слот не переписан

Не сошлось — слот НЕ занят: повтори update с полем prompt и проверь снова. Докладывать «сессия поставлена» можно только после этой проверки.

Шаг 4. ⛔ ПЕРЕИМЕНОВАНИЕ НЕ РАБОТАЕТ — не тратить на него время (замер 30.07). Сайдбар приложения в разделе Routines рисует taskId включённой задачи, а не title сессии и не её description. Отсюда два факта, опрокинувших вчерашнюю рельсу:

  • переиспользованный слот несёт чужой taskId (напр. sess-public-repo-hygiene-dr), и Антон не узнаёт в нём свою сессию. set_session_title этого не меняет: 18 переименований 29.07 не изменили в списке ничего;
  • разовая задача после срабатывания уходит в enabled=false и исчезает из списка совсем (вернуть без нового fireAt нельзя, API отказывает). Именно поэтому Антон 30.07 сказал «я вообще НЕ ВИЖУ ТВОИХ СЕССИЙ» — они отработали и пропали.

Что делать вместо этого (уточнено 31.07 замером). Гейт spawn_slot_guard пропускает create_scheduled_task, когда taskId совпадает с AUTO_TASKID = ^auto-<узел>-<ГГММДД>-<суть>$ (строчными). Тогда, 29.07, мы думали, что платим за это «одним апрувом». Замер 31.07 показал: апрува нет вовсе — четыре create подряд прошли молча. То есть у пути create с правильным именем НЕТ минусов против слота, а плюс есть (верное имя сразу) → см. блок «ГЛАВНОЕ СВЕРХУ». Слот через update — для фона, где узнаваемость строки не нужна.

⚠️ Развилка живёт в коде гейта. Если поведение сайдбара изменится — правь AUTO_TASKID в spawn_slot_guard.py, а не этот текст в трёх местах.

Шаг 5. Записать в журнал задач (10-Tasks/task-*.md) — сессия И запись в реестре, никогда одно вместо другого.

Шаг 6. Вернуть рутину, если съели.

python ~/.claude/scripts/session_slot.py --restore <id>

Печатает, чем именно вернуть: cron из ledger + путь к сохранённому SKILL.md.

Границы

  • ⛔ Живые рутины (enabled=true) под слот не идут никогда — проверяется тестом.
  • ⛔ Чип spawn_task вместо сессии — только когда нужны физические руки Антона или другая машина, с маркером ТРЕБУЕТ РУК АНТОНА: / ДРУГАЯ МАШИНА: и немедленным пингом (замер: 107 из 346 чипов не нажаты никогда). Держит chip_guard.py.
  • ⛔ Голый claude -p — только на узлах без приложения (Якорь/headless) с флагом --headless-node; остальное отбивает blackbox_session_guard.py.
  • Tier-2 внутри порождённой сессии не ослабляется: деньги/исходящее/необратимое — к Антону.

Как понять, что работает

python ~/.claude/scripts/_test_session_slot.py      # ждём "ВСЁ ЗЕЛЕНО"

Сетка проверяет и движок (три группы, живая рутина не съедается, реестр пер-машинный, выбран самый свежий файл, а не бэкап), и гейт (create при непустом пуле = отбить).

Слой видимости: каждая попытка create пишется в ~/.claude/logs/_spawn_slot_guard.log — иначе не отличить «гейт молчал» от «гейт ни разу не сработал».

Что уже ломалось (чтобы не наступить снова)

  • 29.07: v2 движка стала отдавать три группы вместо двух → free, _busy = classify(...) упало ValueError и в тесте, и в самом гейте; except Exception в гейте превратил поломку в тихое ALLOW, и апрув-окна снова шли к Антону. Лечение: распаковка по индексу, а не по фиксированному числу имён, плюс крик в stderr при fail-open. Урок: гейт, который глотает свою поломку молча, хуже отсутствующего.
  • 29.07: карточка реестра была общим синкаемым файлом при пер-машинном пуле → два писателя, показывала пул случайной машины. Лечение: имя узла в имени файла.
  • Реестр приложения живёт в памяти: прямая запись в scheduled-tasks.json не действует, приложение перезатрёт (замер 29.07 08:25). Только через update_scheduled_task.

Родня

/sessions — что работает сейчас (read-only, телефонный формат). Этот скилл про другое: где взять место под новую сессию. Паспорт детали: 00-System/Session-Slots-Passport.md.

<!--kit-footer-->

Like this skill? It is one of 100 in second-brain-starter-kit: the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with npx skills add tonydzi/second-brain-starter-kit. Everything is open source and free, so take what you need.

Flagships worth a look on their own: secondop-panel (a second opinion from a panel of external models), claude-memory-tidy (stop your agent's memory from rotting), telegram-mcp-kit (your own Telegram over MCP in about 15 minutes).

Author: Anton Dziatkovskii, Palo Alto AI Research Lab. Telegram @tonydzi - WhatsApp +1 341 222 9178 - X @Tony_Stef_

Engineers: want to test-drive this setup? Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

03

無料

Run an autonomous consensus round between agent peers on several machines: they negotiate a decision over a shared channel and execute it without a human relaying messages. Use when multiple machines must agree on a change. Triggers: "/03", "work it out among yourselves", "find consensus". Wakes the human only for irreversible actions or a deadlock.

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

1

無料

Recover a session after a hard crash (app died, machine rebooted, context lost mid-work): replay the turn-state ledger for the last requests, files and decisions, run a green/red health ping over the system map, file sync and MCP connectors, then rebuild the previous session history for pickup. Triggers: "/1", "resume after crash", "wake".

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

agenda

無料

Show the operator's day: today's calendar plus what needs them personally (leads due, people awaiting a reply, deadlines), pulled from Calendar and Telegram and ranked. Read-only: sends and commits nothing. Triggers: "/agenda", "what's on today", "my agenda".

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

ai-slop

無料

Rewrite machine-written text so it reads like a busy human wrote it: cut 50-70%, break the even rhythm, drop AI-tell words and filler, keep facts and protected terms. Use before publishing any post, reply or email drafted by a model. Triggers: /ai-slop, /slop, humanize, anti-slop, make it shorter and alive.

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

Decision protocol for strategic work: recall the knowledge vault, run a gap analysis, emit a deep-research prompt for external tools, then synthesize the returned reports into a decision memo. Use before any new product, feature, market, pricing, GTM or architecture call, where local recall alone is not enough. Triggers: "/alfa-search-recall-deepresearch", "alpha protocol", "R+DR".

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

- КРЕДИТ АВТОРУ ИДЕИ: совет из комментария (TG @ClawRus / @ClawInga, комменты под постами Антона в FB, треды и issue на… Триггеры: “/alpha-credit“, “/credit“, “кто нам это посоветовал“, “запиши совет“, “поблагодари советчиков“, “кому мы должны спасибо“, “кредит автору“, “чей это был совет“, “credit the author“

日本語の概要は準備中です。原文の説明を表示しています。

tonydzi/second-brain-starter-kit82026年10月12日 更新

tonydzi のスキルをすべて見る

このスキルの問題を報告する