🐘 Слон — большая работа как конечная рутина
Зачем это существует
Приказ Антона 23.08.2026, голосом, дважды: «рутина может съесть слона за 100 или за 1000 присестов, потихонечку… поняла, что задачу выполнила — выключилась и сказала».
Повод был конкретный: он месяц руками вытаскивал тысячи своих YouTube-видео и получил бан от площадки. Та же работа по 12 штук за ночь не банится вообще и не требует его присутствия ни разу.
До 23.08 у нас было ~49 app-рутин и ~160 OS-рутин, и все до одной бесконечные — крон по расписанию, живут вечно, конца не предусмотрено. Класса «рутина с концом» не существовало, поэтому большие списочные работы делались героическими сессиями, которые выдыхались на середине.
Движок: $USERPROFILE/.claude/scripts/elephant.py (0 LLM, чистый SQLite). Этот скилл — решение «слон или нет» и рецепт сборки.
Шаг 1. Судить: слон это или нет
Тут скилл зарабатывает своё существование. Соблазн ответить «да» на всё крупное — главная ошибка, потому что слон, натравленный не на ту работу, режет её на куски, каждый из которых бессмыслен без остальных.
Различай две разные крупности:
| что это | признак | лечение |
|---|
| ШИРОКАЯ | N одинаковых кусков, N велико | «список из 2241 видео» | 🐘 слон |
| ГЛУБОКАЯ | одна трудная вещь | «спроектировать архитектуру», «написать лонгрид», «провести переговоры» | 👤 сессия или разбивка на параллельные сессии (CLAUDE.md §9.2 ②) |
Слон ест только ШИРОКОЕ. Размер сам по себе ничего не решает.
Признаки ЗА (нужно ≥2, причём первый обязателен)
- Список однотипных кусков, и он длинный — десятки, сотни, тысячи. Куски взаимозаменяемы: кусок №700 обрабатывается так же, как №3.
- Кусок механический — его делает код или узкий вызов, а не размышление и не разговор.
- Список сам не кончится — он пополняется (история браузера, новые диалоги) либо просто огромен.
- ⭐ Работа спотыкается о живое препятствие — участие Антона, лимиты вендора, баны площадки, ночные окна. Это признак-фаворит: Антон назвал его первым, и он сильнее размера. Именно он превращает «героическую сессию на месяц» в спокойную рутину.
Стоп-признаки — при любом ОДНОМ слона НЕ заводим
- 🚫 Есть срок. Слон медленный ПО ЗАМЫСЛУ (мы нарочно спим между кусками, чтобы не ловить бан). Дедлайн → обычная сессия, слон не успеет.
- 🚫 Куски зависят друг от друга. Нельзя сделать кусок №50, не держа в голове №49 → это глубокая работа, слон её искалечит.
- 🚫 Каждый кусок требует суждения, вкуса или переписки с человеком. Это не капельница, а разбивка на параллельные человеко-сессии.
- 🚫 Список короче ~20. Одна сессия съест за раз; конвейер ради трёх гвоздей — нарушение АК-47.
Что сказать по итогам
Вердикт одной строкой, всегда явный:
- 🐘 слон — плюс какие признаки сошлись;
- ♾ бесконечная рутина — конца нет по природе (синк флота, сбор входящих). Это тоже рутина, но без
--quota и без самовыключения;
- 👤 не слон — назвать, какой стоп-признак сработал, и предложить правильное лечение. Честное «не слон» — это успех скилла, а не отказ.
Шаг 2. Назвать потребителя ДО стройки
Правило Connect: у слона обязан быть тот, кто съест результат. Слон, чей выход никто не читает, — это 186 дней работы в мусор.
Ответь письменно, до первой команды:
- кто потребитель — RAG-индекс, дашборд, CRM-поле, конкретный человек;
- как поймём, что результат потребляется — метрика, а не надежда;
- что произойдёт, когда слон доест — куда уходит финальный доклад.
Нет ответа → не заводить. Это гейт §3.5 «внедряю только критичное сейчас».
Шаг 3. Собрать очередь (сырьё)
Собери список кусков в JSONL — по строке на кусок, с устойчивым ключом (video_id, chat_id, путь к файлу).
Ключ обязан быть стабильным между прогонами. Если ключ — это порядковый номер или что-то, что меняется при пересборке, слон будет жевать одно и то же и никогда не кончится.
Собирай ретроспективу целиком сразу — это дешёвая часть, и она даёт честное число кусков, то есть честную ETA. Ежедневный добор свежего — отдельная, бесконечная половина (см. Шаг 6).
Шаг 4. Завести слона и накормить
python "$USERPROFILE/.claude/scripts/elephant.py" new <slug> \
--title "<человеческое название>" \
--quota <кусков за прогон> \
--os-task "<ИмяЗадачиWindows>" \
--vault-note "<папка/заметка потребителя>"
python "$USERPROFILE/.claude/scripts/elephant.py" feed <slug> \
--jsonl <путь к очереди> --key-field <имя поля ключа>
--os-task — это имя задачи планировщика, которую слон сам выключит, когда доест. Без него он не умеет закончиться и превращается в бесконечную рутину.
Подбирая --quota, считай вслух: кусков ÷ (quota × прогонов за ночь) = дней. Если получается больше пары месяцев — либо поднимай quota, либо честно скажи Антону, что работа растянется до такой-то даты, и пусть решает он.
Шаг 5. Рабочий скрипт: ровно четыре движения
На каждом прогоне:
next --n <quota> → работа над куском → mark --key K --state ok|fail|skip → tick --ok N --fail M
tick — сердце. Он считает прогресс, ловит конец (todo == 0 → статус done → выключает OS-задачу → доклад в TG-03) и ловит затык (5 прогонов подряд без единого куска → blocked + доклад, но задачу НЕ выключает — это беда, а не финиш).
- Кусок, упавший 3 раза, выбывает из очереди. Без этого слон не кончится никогда: одна битая ссылка держит рутину вечно.
stop / resume — приостановить и вернуть слона, не теряя прогресса.
Скрипт обязан честно падать. Если elephant next вернул не то, что ждали, — выходи ненулевым кодом и пробрасывай его наружу (в .cmd — через %ERRORLEVEL%). Иначе получится прибор, который врёт зелёным.
Шаг 6. Две половины в одном прогоне (если список пополняется)
Часто работа состоит из конечной ретро-очереди и бесконечного добора свежего:
python worker.py harvest --fresh-only # бесконечная половина: добрать новое
python worker.py run --n 12 # конечная половина: порция ретро-очереди
Конечная половина кончится и выключит себя; бесконечная останется. Так и задумано — скажи это Антону прямо, чтобы «слон доел, а задача всё ещё в планировщике» не выглядело поломкой.
Шаг 7. Грабли, оплаченные кровью
Каждая строка ниже — реальный замер, а не осторожность.
- ⛔ Журнал прогресса НИКОГДА не кладём в синкаемую папку. Замер 23.08: предшественник
YT-Transcript-Trickle-Hub держал журнал в [шина]\_transit\ — 453 прогона за 19 суток дали 39 строк. Синк непрерывно затирал файл, рутина 19 суток жевала одни и те же первые куски, а логи бодро писали «RUN DONE +3 ok». Дом журнала — строго локальный: %LOCALAPPDATA%\claude-elephants\.
- ⛔ Зелёный код возврата ≠ работа сделана. Замер 26.08: строка слона пропала из реестра,
yt_drip.py глотал exit 2, .cmd не пробрасывал ERRORLEVEL — задача трое суток отдавала LastTaskResult=0, не сделав ничего. Проверяй таблицу runs, а не код возврата.
- ⛔ Порция обязана отдавать РАЗНЫЕ незанятые куски. Замер 27.08: первый прогон съел 12, каждый следующий по 1, сумма прогонов 21 при 14 готовых кусках → часть выдач повторные. Это тот же почерк, что убил предшественника. Поставь красный тест на «
next --n N возвращает N разных кусков, ни один из которых не взят».
- ⛔ Не суди слона по первой ночи. Смотри
status через сутки и сверяй фактический темп с обещанным. Расхождение — это поломка, а не «ну оно медленно».
- ⚠️ Старая задача-предшественник может остаться жить. Перед заведением нового слона проверь, не крутится ли ещё прежняя рутина по той же работе, и погаси её (иногда нужно админское окно Антона).
Шаг 8. Канарейка и доклад
Перед тем как отдать слона в ночь, прогони один полный цикл руками и покажи результат: next → работа → mark → tick, затем status. Один зелёный цикл дешевле недели тихого простоя.
Доложи Антону коротко:
- вердикт (🐘 / ♾ / 👤) и по каким признакам;
- сколько кусков, сколько за прогон, к какой дате доест;
- кто потребитель результата;
- что произойдёт, когда доест.
Дашборд по §2.4 строй, если фактов больше одного экрана; elephant.py status уже даёт таблицу — не дублируй её стеной текста.
Когда этот скилл обязан сработать САМ
Канон — reglament-dolguyu-rabotu-srazu-sudim-na-rutinu (anton 10.09.2026, голосом): вердикт выносится НА ВХОДЕ, пока работа идёт, а не на разборе в конце.
Четыре повода, любого одного достаточно: работа тянется долго · Антон сказал «занимался месяц» / «по 10 в день» / «ретроспективно вытащить всё» · вижу кучу однотипных шагов · работа спотыкается о его участие, лимиты вендора или баны.
⛔ Ждать вопроса «а это не рутина?» запрещено — этот вопрос от Антона означает, что правило уже не сработало. Автоматическую подсказку даёт хук ~/.claude/hooks/skill_suggest_hook.py, но он лишь страхует: судить обязан я.
Границы
- Слон не отменяет Tier-2: если куски делают что-то необратимое, наружу или за деньги — это пауза и спрос Антона, сколько бы их ни было.
- Слон не место для суждения. Если внутри куска нужен вкус или голос Антона — это сессия, а слон в лучшем случае готовит для неё сырьё.
- Ночное окно (23:00–06:00 Лиссабон) — дом тяжёлых слонов; лёгкие могут идти чаще, если площадка не банит.
Родня
- CLAUDE.md §4.5-бис (конечные рутины), §4.5 (повтор → рутина), §4.6 (ночное окно), §5.5 (сторож проверяет выход)
- память
finite-routines-eat-the-elephant, yt-watch-history-drip, deterministic-script-gotchas
/retro Шаг 4★ — ловит слонов задним числом, на разборе сессии; этот скилл ловит их на входе
<!--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.