본문으로 건너뛰기
cccskills
무료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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Telegram
설치 방법 보기

포함된 파일(1)

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

⚠️ Пул ≠ достижимость: 👻 НЕДОСТИЖИМЫЕ слоты (поправка 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.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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-kit92026년 10월 20일 업데이트

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-kit92026년 10월 20일 업데이트

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-kit92026년 10월 20일 업데이트

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-kit92026년 10월 20일 업데이트

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-kit92026년 10월 20일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

tonydzi의 스킬 모두 보기

이 스킬의 문제 신고