505

Loop engineering

Loop engineering это работа, в которой вы перестаёте подталкивать агента каждым сообщением. Вы один раз задаёте цикл: что агент делает, чем проверяется результат и когда работа заканчивается. Дальше агент идёт ход за ходом сам, пока проверка не скажет «готово» или не кончится лимит.

Ход это один ответ агента: он получил сообщение, поработал инструментами и ответил. Внутри хода агент и так ходит по кругу, а когда остановиться, решает сама модель, об этом глава «Что такое агент». Цикл из этой главы стоит над ходами. Решение «готово» в нём принимает проверка, которую вы задали заранее: тест, сборка, другая модель.

Цикл агента до проверяемого условия Четыре шага слева направо: условие, ход агента, проверка, стоп. Условие задаёте вы: что значит готово и чем это проверить. Агент делает ход: правит файлы и запускает команды. Проверку делает не тот, кто делал работу: тест или другая модель. Если условие не выполнено, причина уходит агенту, и он делает следующий ход. Если условие выполнено, невозможно или кончился лимит, цикл останавливается, и вам приходит отчёт. вы агент не тот, кто делал отчёт вам Условие Ход агента Проверка Стоп и чем проверить правки, команды тест или модель готово или лимит не выполнено: причина уходит в следующий ход
Вы задаёте условие и чем его проверить. Агент делает ход, проверка смотрит на результат. Не выполнено: причина уходит в следующий ход. Выполнено, невозможно или кончился лимит: цикл останавливается.

Когда нужен цикл

На седьмом уроке третьего потока Personal Corp автор показывал цикл, в котором агенты строят софт почти без его участия. Участник спросил, похоже ли это на команду goal, которой он раньше пользовался. Автор ответил, что похоже: goal замыкает модель в цикл, из которого она не выходит, пока не выполнит критерии задачи. И напомнил жалобу другого участника с начала того же урока: тот перешёл на Codex, и агент сдавался на полпути. Источник: урок 7 третьего потока Personal Corp, 03.11, 0:55:24–0:55:33.

Признак, что задаче нужен цикл: после каждого ответа агента вы пишете одно и то же. «Продолжай», «попробуй следующее исправление», «запусти тесты ещё раз», «доведи до конца». Так этот признак описывает руководство OpenAI по целям в Codex. Документация Hermes уточняет: если «продолжай» приходится писать трижды, это работа для цели.

Задачи, для которых документация Claude Code и Codex советует цель, похожи:

У этих задач известен финиш и есть чем его проверить, а дорогу к финишу заранее не знает никто.

Перед циклом работу стоит разбить на самостоятельные задачи. На Office Hours второго потока участник рассказал про десять карточек с ошибками: агенту сказано работать, пока не сделает, а он прерывается и задачи не закрывает. Команду goal участник запускать боялся: съест все лимиты и ничего не доделает. Автор посоветовал Codex в режиме goal, чтобы агент работал, пока всё не починит. Но первым шагом назвал другое: в каждой задаче одна задача. Агент любит складывать в одну задачу список из нескольких, и тогда что-то забывает. Пример с уроком, который так разваливался, есть в главе «Оркестрация агентов». Источник: Office Hours второго потока Personal Corp, 21.08.

Откуда термин

По пересказу Osmani и обзора на arXiv, 2 июня 2026 года Boris Cherny, создатель Claude Code, сказал в интервью, что больше не пишет Claude промпты: промпты пишут запущенные им циклы, а его работа писать циклы. 7 июня Peter Steinberger, автор OpenClaw, написал в X, что пора перестать промптить агентов и проектировать циклы, которые будут промптить их сами. Само интервью и пост в X для этой главы не открывались. В тот же день Addy Osmani опубликовал пост «Loop Engineering» и дал практике имя. Его определение: вы заменяете себя в роли того, кто промптит агента, и проектируете систему, которая делает это за вас.

Сама техника старше термина. В июле 2025 года Geoffrey Huntley описал приём Ralph Wiggum. В чистом виде это цикл в Bash, который снова и снова отдаёт агенту один и тот же файл с промптом:

while :; do cat PROMPT.md | claude-code ; done

Так в оригинале, сейчас команда Claude Code называется claude. Каждый круг агент начинает с чистым контекстом, а то, что уже сделано, лежит в файлах. Потом циклы вошли в харнесы. /loop появился в Claude Code в версии 2.1.71 в марте 2026 года, цели в Codex в версии 0.128.0 в конце апреля, /goal в Claude Code в версии 2.1.139 в мае. Hermes называет свою команду /goal прямо: их версия цикла Ralph по мотивам /goal из Codex 0.128.0. Gergely Orosz в рассылке The Pragmatic Engineer подвёл итог: к маю цикл до цели запускался одной командой во всех крупных харнесах, а в OpenCode и Pi /goal добавляют плагином или пакетом.

В августе 2026 года на arXiv вышел обзор практики, «Loop Engineering: Building Blocks, Adoption, and Impact». Авторы разобрали посты, статьи и репозитории практиков о циклах и свели их в определение. Цикл запускает агента по расписанию или по событию, а каждый прогон ограничен условием остановки, которое проверяет машина. Хорошо устроенный цикл:

Доказательств пользы в этих источниках авторы не нашли: громкие цифры там рассказывают сами практики. Работающие циклы агентов нашлись в 217 из 36 710 открытых репозиториев.

По пересказу обзора на arXiv, через месяц после первого поста Osmani разложил циклы на четыре ступени по тому, что вы отдаёте агенту. Этот его пост в LinkedIn, «Loop engineering, one month on», для главы не открывался. Третья колонка показывает, где ступени в книге:

ЦиклЧто вы отдаётеГде в книге
По ходамничего, каждый ход смотрите выСессия с агентом
С цельюрешение, когда остановитьсяэта глава
По времениещё и момент запускаАвтоматизация
Проактивныйещё и сам промптпродюсер в главе «Оркестрация агентов»

Чем запустить цикл

В Claude Code цикл запускают тремя способами. Они отличаются тем, что начинает следующий ход и что его останавливает:

СпособСледующий ходОстановка
/goalсразу после предыдущегопроверка сказала «выполнено» или «невозможно», ошибка, которую чинить вам, или /goal clear
/loopчерез интервалвы остановили, Claude решил, что работа сделана, или прошло семь дней
Stop hookсразу после предыдущегорешает ваш скрипт или промпт

/goal в Claude Code

Команда задаёт условие готовности и сразу начинает первый ход. После каждого хода отдельная небольшая модель читает условие и разговор и выносит вердикт: не выполнено, выполнено или невозможно. Не выполнено: причина уходит Claude подсказкой к следующему ходу. Выполнено или невозможно: цель снимается, итог остаётся в разговоре. Так «готово» решает свежая модель, которая работу не делала.

Проверяющая модель сама команды не запускает и файлы не читает. Она судит только по тому, что Claude показал в разговоре. Поэтому условие пишут так, чтобы его доказывал вывод самого Claude: «все тесты в test/auth проходят» работает, потому что Claude запустит тесты, и их результат окажется в разговоре.

цель в Claude Code
/goal Все тесты в test/auth проходят: npm test завершается с кодом 0, npm run lint без ошибок. Файлы в test/ не меняй, чинить нужно код. Если за 20 ходов не вышло, остановись и напиши, что мешает.

Источник: новый промпт книги. Основа — пример «all tests in test/auth pass and the lint step is clean» из документации Claude Code. По советам той же страницы к нему добавлены команда проверки, ограничение и лимит ходов.

Агент

Цель выполнена за 6 ходов.
npm test завершился с кодом 0, линтер без ошибок.
Файлы в test/ не менял, исправления только в коде.

Источник ответа: пример ответа, написан для главы.

Одна сессия держит одну цель, условие умещается в 4000 символов. /goal без слов показывает условие, сколько цель идёт, сколько ходов проверено, сколько потрачено токенов и последнюю причину проверяющей модели. /goal clear снимает цель. Режим разрешений цель не меняет: чтобы ходы шли без вас, /goal запускают в авто-режиме. В ручном режиме Claude по-прежнему спрашивает разрешение на вызовы, которые не разрешены в настройках.

Цель работает и без окна: claude -p "/goal в CHANGELOG.md есть запись о каждом pull request, влитом на этой неделе" доводит цикл до конца за один запуск. Такой запуск можно поставить в системный планировщик из главы «Автоматизация».

Stop hook тоже срабатывает после каждого хода, но живёт в файле настроек и работает во всех сессиях, к которым относится. Он может запускать скрипт: тогда «готово» решает код выхода команды, без модели. Как его написать, рассказывает руководство по хукам.

/loop в Claude Code

/loop повторяет промпт по времени, пока открыта сессия. /loop 5m проверь, закончился ли деплой, и расскажи, что случилось запускается каждые пять минут. Без интервала Claude сам выбирает паузу между прогонами, от минуты до часа: короче, пока идёт сборка, длиннее, когда ничего не происходит.

/loop без слов запускает встроенный промпт обслуживания: доделать начатое в разговоре, разобрать pull request текущей ветки, то есть замечания, упавшие проверки и конфликты, а если больше нечего, искать баги и упрощать. Свой промпт по умолчанию кладут в .claude/loop.md. Цикл без интервала останавливает Esc. Цикл с интервалом останавливают просьбой, например «отмени проверку деплоя». Любой /loop, с интервалом или без, сам заканчивается через семь дней.

Расписание, которое живёт без открытой сессии, описано в главе «Автоматизация».

Цели в Codex и Hermes

В Codex команда тоже называется /goal, она есть с версии 0.128.0. /goal показывает текущую цель, /goal pause ставит её на паузу, /goal resume продолжает, /goal clear снимает. Codex продолжает работу, только когда тред свободен: предыдущий ход закончен, и вы ничего не написали. Остановиться цикл может по успеху, паузе, сбросу, прерыванию, исчерпанному бюджету или препятствию, которое без вас не снять.

Закрывает цель в Codex сама рабочая модель. По правилам инструмента она может сделать это только после сверки с доказательствами: изменёнными файлами, выводом команд, тестами, бенчмарком. Конец бюджета выполнением цели не считается: Codex должен остановиться, описать, что сделано и что мешает, и назвать следующий шаг.

цель в Codex
/goal Снизь p95 задержки оформления заказа ниже 120 мс по бенчмарку checkout, тесты корректности остаются зелёными. Работай только в сервисе checkout, его фикстурах бенчмарка и связанных тестах. После каждой попытки записывай, что поменял, что показал бенчмарк и какой следующий эксперимент. Если бенчмарк не запускается или вариантов не осталось, остановись и перечисли, что пробовал, что выяснил, что мешает и что нужно от меня.

Источник: руководство OpenAI «Using Goals in Codex», 09.05.2026, пример переведён на русский.

В Hermes после каждого хода цель проверяет модель-судья: она читает цель и последний ответ агента и решает, готово, продолжать, невозможно или ждать фоновый процесс. По умолчанию у цели бюджет 20 ходов, его меняет goals.max_turns в config.yaml. Когда бюджет кончился, Hermes ставит цель на паузу. Если судья сам сломался, например пропала сеть, Hermes работает дальше, и последней защитой остаётся бюджет ходов. Строже судьи работают ворота: /goal gate add <команда> добавляет команду, которая должна завершиться с кодом 0, иначе цель не закроется. Ворота запускаются до судьи. Источник: документация Hermes о целях.

Как написать условие

Документация всех трёх харнесов сходится: условие это маленький договор. В нём есть:

Руководство Codex показывает разницу на одной задаче. Слабое условие: /goal Улучши производительность. Сильное: /goal Снизь p95 ниже 120 мс на бенчмарке checkout, тесты корректности зелёные. У сильного понятно, когда не останавливаться. Задержка упала со 180 до 135 мс: цель не выполнена. Упала ниже 120, но тесты красные: тоже не выполнена. Бенчмарк не запускается: Codex должен сообщить о препятствии, объявлять успех ему нельзя.

Ограничения важнее, чем кажется. На восьмом уроке второго потока автор советовал записывать в задачу, что делать нельзя: агент по умолчанию добавляет лишнее. Автор просил агента просто обновить материал, а тот сверх задачи написал пять проверок кода, которые проверяли что-то эфемерное. Источник: урок 8 второго потока Personal Corp, 25.08. В цикле агент работает без вас, поэтому границы лучше записать в условие сразу.

Условие не обязательно писать с нуля. Руководство Codex советует попросить агента превратить описание задачи в черновик цели, а потом самому ужесточить результат, проверку, ограничения и остановку. В Hermes для этого есть /goal draft.

черновик цели
Помоги превратить это в хорошую /goal: хочу, чтобы ты работал над нестабильным тестом checkout, пока не починишь его с доказательствами или не объяснишь, что мешает.

Источник: руководство OpenAI «Using Goals in Codex», пример переведён на русский.

Агент

Черновик цели:
/goal Тест checkout_flow проходит 20 запусков подряд, остальные тесты зелёные. Сам тест не меняй, пока не найдёшь причину. После каждой попытки записывай гипотезу и результат. Если причина вне репозитория, остановись и опиши её.
Проверьте число запусков и ограничение, потом запускайте.

Источник ответа: пример ответа, написан для главы.

Когда цикл вредит

Цикл работает без вас, поэтому и ошибается без вас. Обзор на arXiv собрал типичные провалы: расходы без тормоза, бесконечные круги починки, проверки, которые одобряют без настоящей проверки, и поток уведомлений, который никто не читает.

Нет финиша

Не запускайте цикл, если финиш размыт. «Сделай лучше» не даёт проверке, за что зацепиться. Цикл не нужен и правке в одну строку, короткому объяснению или быстрому ревью: руководство Codex советует для них обычное сообщение.

Круглосуточный цикл на графе задач автор на седьмом уроке третьего потока назвал последней ступенью. В начале он его не советует, на простых проектах сам перестал им пользоваться: больше чем в половине проектов такая сложность не нужна. Нужна она там, где работа идёт круглосуточно, как у студии роликов на сервере: новости, исследование, сюжет, сценарий, редактура, ролик. Источник: урок 7 третьего потока Personal Corp, 03.11, 0:58:19.

Лимиты

Каждый ход стоит токенов, и цикл тратит их, пока вы не смотрите. По пересказу обзора на arXiv, в одном отчёте из каталога провалов цикл, который чинил CI, за 48 часов съел около восьми миллионов токенов. Сам отчёт для главы не открывался. Если в цикле работают субагенты, нужен ещё и потолок на их число: без правил оркестрации агент, как говорил автор на седьмом уроке третьего потока, может запустить сорок субагентов. Как ставить потолок, рассказывает глава «Оркестрация агентов».

Тормоза в харнесах есть. Одни срабатывают сами, другие нужно задать:

Критерий, который модель подгоняет

Цикл заканчивается, когда проверка говорит «готово». Если проверку можно пройти без настоящей работы, цикл может на этом и закончиться. Чаще всего так бывает с тестами. На Office Hours второго потока автор предупреждал: агент склонен писать тесты, которые просто проходят и не проверяют, что может пойти не так. Поэтому тесты лучше планировать сильной моделью, а писать другой. Источник: Office Hours второго потока Personal Corp, 21.08.

С проверяющей моделью то же самое. Модель делает то, о чём её попросили: попросите поругать код, она поругает, попросите похвалить, похвалит. Поэтому проверяющий должен работать в своём контексте, и его нужно прямо просить критиковать. Источник: урок 7 третьего потока Personal Corp, 03.11, 0:24:11–0:25:28.

Что помогает:

Цикл, который никто не читает

Чем быстрее цикл выпускает код, который вы не писали, тем больше разрыв между тем, что лежит в репозитории, и тем, что вы о нём знаете. Osmani называет это долгом понимания. На седьмом уроке третьего потока автор говорил то же о коде: агенты любят писать лишнее, и через десять итераций получается монстр, которого трудно поддерживать, а баги рождаются один за другим. Поэтому у автора ревьюер проверяет каждое изменение по принципам: без повторов, один источник истины. Источник: урок 7 третьего потока Personal Corp, 03.11, 0:26:50.

Источники обзора на arXiv советуют вводить цикл ступенями. Сначала цикл только докладывает, а без вас работает, только когда проверка доказала, что ей можно верить. Доказательств пользы обзор не нашёл, но начинать с отчёта дёшево.

Цикл ревью у автора книги

На том же седьмом уроке автор показал цикл, через который проходят pull request этой книги. Агент-менеджер ведёт задачи и даёт их исполнителю. Исполнитель делает работу и открывает pull request. Ревьюер в своей сессии проверяет его по принципам из скилла и пишет замечания, исполнитель чинит, ревьюер проверяет заново. С каждым кругом замечаний меньше. Когда ревьюер говорит, что всё закрыто, автору приходит уведомление на телефон, и он вливает pull request одной кнопкой. Источник: урок 7 третьего потока Personal Corp, 03.11, 2:02:39–2:04:11.

В этом цикле есть всё из главы: условие остановки (у ревьюера нет замечаний), проверка не тем, кто делал, и человек, который принимает результат.

цикл ревью до вливания
Веди этот pull request до вливания. Ревьюер в отдельной сессии проверяет его по правилам проекта и пишет замечания, сам ничего не чинит. Исполнитель исправляет, ревьюер проверяет заново. Цикл закончен, когда у ревьюера нет замечаний и проверки GitHub зелёные. Не больше пяти кругов: если замечания не кончились, остановись и пришли мне список. Вливаю я сам.

Источник: новый промпт книги по циклу ревью, который автор показал на уроке 7 третьего потока Personal Corp, 03.11.

Агент

Ревьюер оставил замечания, исполнитель исправил, ревьюер проверил заново.
С каждым кругом замечаний меньше. Осталось одно.
Все замечания закрыты, проверки зелёные. Pull request готов, вливаете вы.

Источник ответа: тот же урок, 2:02:39–2:03:50: автор листает круги ревью на экране и пересказывает их.

Условие готовности, ограничения и чем проверять, проще всего достать из вас до старта. Это делает гриллинг, о нём следующая глава.

Источники