Eat the elephant one bite at a time: turn a large list-shaped job into a finite routine that chews a small batch every night, detects when it is done, switches itself off and reports. Triggers: /elephant, eat the elephant, split into bites, make it a routine, ten a day, backfill everything.
Installs into .claude/skills of the current project.
Are you the author of Elephant?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tonydzi-elephant)
---
name: elephant
description: "Eat the elephant one bite at a time: turn a large list-shaped job into a finite routine that chews a small batch every night, detects when it is done, switches itself off and reports. Triggers: /elephant, eat the elephant, split into bites, make it a routine, ten a day, backfill everything."
license: MIT
version: 1.0.0
---
# 🐘 Слон — большая работа как конечная рутина
## Зачем это существует
Приказ Антона 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, причём первый обязателен)
1. **Список однотипных кусков, и он длинный** — десятки, сотни, тысячи. Куски взаимозаменяемы: кусок №700 обрабатывается так же, как №3.
2. **Кусок механический** — его делает код или узкий вызов, а не размышление и не разговор.
3. **Список сам не кончится** — он пополняется (история браузера, новые диалоги) либо просто огромен.
4. ⭐ **Работа спотыкается о живое препятствие** — участие Антона, лимиты вендора, баны площадки, ночные окна. Это признак-фаворит: Антон назвал его первым, и он сильнее размера. Именно он превращает «героическую сессию на месяц» в спокойную рутину.
### Стоп-признаки — при любом ОДНОМ слона НЕ заводим
- 🚫 **Есть срок.** Слон медленный ПО ЗАМЫСЛУ (мы нарочно спим между кусками, чтобы не ловить бан). Дедлайн → обычная сессия, слон не успеет.
- 🚫 **Куски зависят друг от друга.** Нельзя сделать кусок №50, не держа в голове №49 → это глубокая работа, слон её искалечит.
- 🚫 **Каждый кусок требует суждения, вкуса или переписки с человеком.** Это не капельница, а разбивка на параллельные человеко-сессии.
- 🚫 **Список короче ~20.** Одна сессия съест за раз; конвейер ради трёх гвоздей — нарушение АК-47.
### Что сказать по итогам
Вердикт одной строкой, всегда явный:
- 🐘 **слон** — плюс какие признаки сошлись;
- ♾ **бесконечная рутина** — конца нет по природе (синк флота, сбор входящих). Это тоже рутина, но без `--quota` и без самовыключения;
- 👤 **не слон** — назвать, какой стоп-признак сработал, и предложить правильное лечение. **Честное «не слон» — это успех скилла, а не отказ.**
---
## Шаг 2. Назвать потребителя ДО стройки
Правило Connect: у слона обязан быть тот, кто съест результат. Слон, чей выход никто не читает, — это 186 дней работы в мусор.
Ответь письменно, до первой команды:
- **кто потребитель** — RAG-индекс, дашборд, CRM-поле, конкретный человек;
- **как поймём, что результат потребляется** — метрика, а не надежда;
- **что произойдёт, когда слон доест** — куда уходит финальный доклад.
Нет ответа → не заводить. Это гейт §3.5 «внедряю только критичное сейчас».
---
## Шаг 3. Собрать очередь (сырьё)
Собери список кусков в JSONL — по строке на кусок, с устойчивым ключом (`video_id`, `chat_id`, путь к файлу).
**Ключ обязан быть стабильным между прогонами.** Если ключ — это порядковый номер или что-то, что меняется при пересборке, слон будет жевать одно и то же и никогда не кончится.
Собирай **ретроспективу целиком сразу** — это дешёвая часть, и она даёт честное число кусков, то есть честную ETA. Ежедневный добор свежего — отдельная, бесконечная половина (см. Шаг 6).
---
## Шаг 4. Завести слона и накормить
```bash
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](https://github.com/tonydzi/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](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).
Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/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.