| name | looper |
| description | Use BEFORE launching any loop — /loop, a background agent, or an autonomous run. Триггеры (RU) — «спроектируй цикл», «зациклить задачу», «автономный прогон», «крути пока не готово», «запусти в цикле». Also triggers on "design a loop", "loop harness", "run until done". Do NOT use for a single re-run of a command — only for recurring/autonomous execution. Plain `/loop` runs a loop; `looper` designs it first. |
| license | MIT |
LOOPER — проектирование цикла до запуска
Плохо спроектированный цикл жжёт токены и копит мусор. Дешевле потратить пять минут на harness, чем полмиллиона токенов на разъехавшийся прогон. Это слой проектирования перед /loop, фоновым агентом или автономным /goal.
Принцип: цикл без критерия «готово» — это while(true) с биллингом.
Когда применять
- Перед
/loop с самопейсингом (модель сама решает, когда остановиться).
- Перед фоновым агентом /
Workflow, который крутит итерации.
- Перед автономным
/goal (в т.ч. автономные task-раннеры, self-improve cron).
- Когда задача — «делай X, пока не станет Y».
Если это разовое действие без повтора — LOOPER не нужен, просто сделай.
Процесс (по шагам)
- Уловить замысел. Одна фраза: что зацикливаем и как выглядит результат. Если размыто — уточнить, иначе цикл не сойдётся.
- Критика по антипаттернам (ниже). Назвать конкретные дыры в черновом цикле.
- Собрать harness-спеку — заполнить
template.md (рядом в этой папке). Все поля обязательны; «н/д» — осознанный выбор, а не пропуск.
- Нарисовать ASCII-диаграмму цикла (шаблон ниже).
- Выдать команду запуска + путь к сохранённому артефакту.
Антипаттерны — что критиковать в черновике
- Нет критерия готовности → крутится вечно или встаёт рано. Чинится
done_rubric.
- Нет стоп-условий → разъезд. Нужны и
max_iters, и no_progress_rounds (loop-until-dry: K раундов без нового прогресса).
- Нет бюджета токенов → сжигает счёт. Hard cap или soft с порогом; цикл должен видеть остаток.
- Самооценка исполнителя → исполнитель всегда ставит себе «зачёт». Нужен независимый судья.
- Нет состояния между итерациями → повтор по кругу. Где пишется «сделано / осталось».
- Слишком широкий шаг → одна итерация делает слишком много, нечего проверять. Сузить
iteration_unit.
- Нет реальной верификации → «должно работать». Связка с
verify-done: гонять настоящую команду, читать вывод.
Harness-спека — поля артефакта
| поле | смысл |
|---|
goal | одна фраза: что и зачем |
iteration_unit | что делает РОВНО одна итерация (узко) |
done_rubric | список проверяемых критериев (булевы/измеримые), все → «готово» |
stop.max_iters | жёсткий потолок числа итераций |
stop.no_progress_rounds | K раундов без нового прогресса → стоп (loop-until-dry) |
stop.wall_budget | лимит по времени/проходам, опц. |
token_budget.mode | hard (потолок, дальше throw) или soft (порог-предупреждение) |
token_budget.cap | сам лимит (напр. +300k); цикл сворачивается по remaining() |
judge.who | self / codex / other-model — независимость от исполнителя |
judge.how | как судит: оценка по рубрике, голосование N скептиков, refute-mode |
judge.pass_threshold | порог «принято» (напр. ≥2 из 3 за) |
state.where | где живёт прогресс (файл/память/inbox), переживает итерацию |
state.write | что именно писать после каждого прохода |
verify_cmd | реальная команда проверки результата (не предположение) |
escalation | что делать при застревании (сменить тактику/судью/спросить Сашу) |
artifact_path | куда сохранить эту спеку (повторяемо, версионируемо) |
Поля кладутся в YAML-блок артефакта (см. template.md) — машиночитаемо и переносимо.
ASCII-диаграмма (шаблон)
┌───────────────────────────────────────────┐
│ STATE (state.where): сделано / осталось │
└───────────────┬───────────────────────────┘
│ читать
▼
┌──────────────┐ iteration_unit ┌──────────────────┐
│ ИСПОЛНИТЕЛЬ │ ─────────────────► │ результат шага │
└──────────────┘ └────────┬─────────┘
▲ │ verify_cmd
│ не готово / правки ▼
┌──────┴───────────┐ judge.how ┌──────────────────┐
│ СУДЬЯ (who) │ ◄────────────── │ оценка по rubric │
└──────┬───────────┘ └──────────────────┘
│ pass_threshold достигнут?
│ да → СТОП (готово)
│ нет → следующая итерация
▼
стоп-условия: max_iters | no_progress_rounds (K) | token_budget исчерпан
Запуск (после проектирования)
- /loop —
/loop <interval> для опроса/интервала, или /loop без интервала для самопейсинга; в промпт вшить путь к артефакту.
- Workflow — для детерминированной фан-аут/пайплайн-оркестрации с реальным бюджетом (
budget.remaining()), судьёй-агентом и loop-until-dry.
- Фоновый агент / autonomous /goal — передать артефакт как контракт цикла.
- Судья отдельным вызовом — Codex/не-Claude как независимая проверка (через доступный CLI/MCP), либо subagent с rubric. Никогда не давать исполнителю самому ставить финальный «зачёт».
Связь с принципами
- Бюджет токенов — жёсткое ограничение, не совет (мировоззрение: не жечь впустую).
verify-done — никакого «готово» без свежего доказательства; verify_cmd это формализует.
- YAGNI — harness ровно под задачу, не золотить. Спека короткая.
- Артефакт переносим и правится — «написанное живёт».