Skip to content
cccskills
FreePublished on GitHub

slot

Registry of reusable agent sessions and slot allocation: claim a free scheduled-task slot instead of creating a new session, set its prompt and fire time, and release it when done. Use when you need to spawn or reuse a visible background session.

The English summary is being prepared. Showing the original description.

Works withTelegram
See how to install

Files included (1)

  • SKILL.md23.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

/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 проходит молча. Значит новую видимую сессию мы не создаём, а переиспользуем задачу, которая уже отработала. Пул таких задач и есть реестр.

⚠️ Пул ≠ достижимость: 👻 НЕДОСТИЖИМЫЕ слоты (поправка 08.10.2026)

Этот раздел переписан дважды, и оба прежних совета мертвы. Для ясности — что когда:

  • 20.08.2026 движок брал ОДИН стор по mtime и показывал пустой пул там, где слотов десятки. Починено в тот же день (_shared/task_store.py, объединение всех сторов). Прежний совет «пересчитай объединением руками через routine_registry_collect.py» больше не нужен: --list уже читает объединение.
  • 08.10.2026 вскрылась ВТОРАЯ половина, из-за которой семья slot-registry-points-to-deleted-tasks набрала шесть случаев (26.08 · 08.09 · 30.09 · 01.10 · 03.10 · 07.10). Объединение отвечает на вопрос «что вообще зарегистрировано», а update_scheduled_task достаёт только стор ОТКРЫТОГО профиля. Замер 08.10 на Mac16: объединение 110 задач из 7 сторов, активный стор — 85, значит 25 ПРИЗРАКОВ: папка scheduled-tasks/<id>/SKILL.md на диске жива, записи в реестре активного профиля НЕТ. По такому id update отвечает not found.

Что делать сейчас: ничего руками. Фильтрует код, а не глаз (починка 05.10 печатала тег стора — и 07.10 призрака всё равно взял БЕЗЛЮДНЫЙ прогон, глаз там нет).

--list теперь всегда печатает две строки поля зрения:

активный стор: d1376d09/7f07033b (достижимо для update: 85 задач)
НЕДОСТИЖИМЫХ слотов: 24 (чужие профили приложения; update -> 'not found', в пул --claim не идут)

и отдельный блок 👻 НЕДОСТИЖИМЫЕ с их именами. В пул --claim они не попадают.

Коды выхода --claim:

rcчто значитчто делать
0слот выдан и ДОСТИЖИМupdate_scheduled_task
3пул пустодин create с диалогом, гейт пропустит
3 + pool_empty_active_storeсвободное есть, но всё — призраки чужих профилейодин create, не угадывать
4активный стор определить не смог (рядом нет local_*.json)открыть приложение и повторить, либо create, либо осознанно --any-store

Осознанный обход: --any-store — выдаст слот из чужого стора и прямо напечатает, что not found ожидаем. Нужен, чтобы обход оставался в журнале заявок, а не делался руками.

Как определяется активный стор: сперва аккаунт, который приложение объявило само (config.json:lastKnownAccountUuid), затем org — по свежести local_*.json рядом со стором. mtime самого стора не используется: он отвечает «куда писали последним».

Сторож: python3 ~/.claude/scripts/_test_session_slot_active_store.py (16 проверок). Канон: память task-registrations-live-in-disk-stores, дверь семьи в prior_art.py (FAMILY_DOORS["slot-registry-points-to-deleted-tasks"]), 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 с диалогом, и гейт сам его пропустит. exit 4 → активный профиль неопределим, слот НЕ выдан (см. таблицу кодов выше): это отказ по делу, а не поломка.

⛔ Выданный слот всегда из активного стора — призраки чужих профилей в пул не идут (поправка 08.10 выше). Увидел not found на свежем --claim — это не «как обычно», а новый дефект: прогони --list и сторож _test_session_slot_active_store.py.

Не трогать выключенные рутины вовсе: --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/Mac16/хаб). Причина доказана: fireAt судят часы ПРИЛОЖЕНИЯ, а шелл врал то на 73 мин (HP17 31.08), то на 11 ч (Mac16 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 part of 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.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

03

Free

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.

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

1

Free

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".

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

agenda

Free

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".

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

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.

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

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".

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

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

The English summary is being prepared. Showing the original description.

tonydzi/second-brain-starter-kit12Updated Oct 20, 2026

See all skills by tonydzi

Report a problem with this skill