Medium · ИИ-инженерия, разработка программного обеспечения · Черновик
Паттерн четырёх циклов: как вести автономных агентов-программистов без дрейфа
Как сохранить дисциплину в ИИ-инженерии, когда агенты работают быстрее, чем вы успеваете проверять, — в том числе когда от дисциплины отклоняется её автор.
Впервые опубликовано на Medium 12 мая 2026 года; последняя правка 13 мая 2026 года. Читать на Medium. Время чтения: 17 минут.
Как сохранить дисциплину в ИИ-инженерии, когда агенты работают быстрее, чем вы успеваете проверять, — в том числе когда от дисциплины отклоняется её автор.
Это поисковая статья, а не рецепт. Её ценность не в том, что паттерн четырёх циклов уже доказан, а в том, что он даёт язык для реального сбоя: автономные агенты могут быть заняты, локально правы и всё равно не двигать продукт вперёд.
Если вы больше недели запускали агентов для кода на настоящей кодовой базе, вы, скорее всего, упёрлись в ту же стену, что и я. Агенты продуктивны: делают коммиты, проходят CI, обновляют документацию. Репозиторий растёт. Тесты добавляются. Новые механизмы строятся.

А потом вы отступаете на шаг, смотрите на продукт и понимаете: на самом деле ничего лучше не стало.
Агенты заняты. Результат настоящий. Но то, что видит пользователь, примерно там же, где было месяц назад. Кодовая база больше, доктрина толще, метаархитектура изящнее, а нужная вам функция по-прежнему не работает от начала до конца.
Эта статья описывает паттерн, к которому я пришёл в работе с автономными агентами для кода, чтобы они действительно двигали продукт вперёд. Это не волшебная палочка. Это дисциплина. И, что важно, это дисциплина, которую я сам нарушал несколько раз в той же сессии, в которой писалась эта статья. Об этом тоже здесь: о сбоях, которые переживают даже записанные правила.
Режим сбоя
У этой патологии есть название: нейтральные запуски с дрейфом (drifting-neutral fires). «Запуск» (fire) — это одно выполнение цикла агента. Нейтральный запуск с дрейфом — тот, в котором агент работает, делает коммиты, проходит CI и не меняет ничего, что пользователь мог бы увидеть или измерить.
Типичные разновидности:
- Инфляция доктрины. Агент пишет новый стайлгайд, новое архитектурное правило, новое соглашение об именовании. Кодовая база не меняется, зато растёт доктрина, которую предстоит читать будущим агентам. Через несколько недель каждая новая сессия тратит 20% окна контекста на чтение правил, которые не служат ни одной функции напрямую.
- Размножение заглушек. Агент выкатывает «функцию»: новый экран, тип сущности, конечную точку API. Форма верна (файл существует, схема валидна, CI зелёный). Поведение пустое: на экране нет данных, у сущности нет методов, конечная точка отвечает 404 на реальные входные данные. Поверхность продукта растёт вширь и остаётся мелкой.
- Механизм без измерения. Агент строит фреймворк тестирования, слой наблюдаемости, гейт в CI. Фреймворк работает. Ничего из того, что он мог бы поймать, не срабатывает. Результат фреймворка: зелёная галочка, каждый раз, на сломанном продукте.
- Буксовка планов. Агент правит дорожную карту, переклассифицирует приоритеты, добавляет новые пункты в бэклог. Дорожная карта растёт. Работы, выпущенной по ней, остаётся немного.
Каждый из этих сценариев кажется продуктивным, потому что агент ДЕЙСТВИТЕЛЬНО делает коммиты. Запуск «успешен» в тривиальном смысле: не упал, CI зелёный, дифф слит. Но измеримое состояние платформы не изменилось. Умножьте на 50 запусков в неделю — и получите дорогую беговую дорожку.

Дисциплина, описанная ниже, нужна для того, чтобы этот сбой нельзя было скрыть.
Архитектура четырёх циклов
Откажитесь от схемы «одного большого агента». Один цикл, пытающийся делать всё (реализацию, ревью, мониторинг, пользовательское тестирование), уходит в дрейф: приоритеты конкурируют, а разделения ответственности, которое могло бы это сдержать, нет.
Четыре цикла, у каждого своя замкнутая зона ответственности:
- Цикл-исполнитель — запускается каждые 60 минут. Берёт пункт из бэклога; выпускает код, тесты и документацию в одном PR. Не может: проверять собственный PR; обходить гейты CI.
- Цикл-ревьюер — запускается каждые 30 минут. Бот проверяет каждый PR по правилам дисциплины; одобряет или запрашивает изменения. Не может: начинать новую функциональную работу; менять правила, которые сам применяет.
- Цикл-аналитик — запускается каждые 90 минут. Обнаружение дрейфа, аудит документации, отраслевые исследования, предложения для бэклога. Не может: писать продакшен-код; напрямую менять дорожную карту.
- Цикл-тестировщик в роли пользователя — запускается каждые 4 часа. Проходит по развёрнутому продукту как пользователь предметной области без знаний разработчика; ставит оценки; заводит замечания. Не может: исправлять найденное; проверять собственные замечания.
Каждый цикл работает в отдельной сессии. Общаются они через файловую систему (git для общего состояния; отдельные файлы директив у каждого цикла для передачи дел). Друг друга напрямую они не вызывают.
Ортогональность здесь принципиальна. Исполнитель не может одобрить сам себя; ревьюер не может сам что-то реализовать; аналитик не может выкатить предложенные им изменения; тестировщик не может исправить то, что оценивает. Каждому циклу приходится опираться на результаты других циклов.

Это то же разделение, что и в здоровой команде инженеров-людей — разработчик, ревьюер, QA, эксплуатация, — только закреплённое для агентов в явном виде. Циклы не «гибче» людей. Они жёстче. В этом и смысл.
Закон сходимости
Параллельность без прогресса хуже, чем отсутствие агентов вообще. Чтобы прогресс был, нужно жёсткое правило:
Каждый запуск заканчивается одним из трёх состояний: СХОДЯЩИЙСЯ (выпустил измеримое улучшение платформы с доказательствами «до/после»), ЯВНО НЕЙТРАЛЬНЫЙ (сознательно ничего не делал, причина названа) или РЕГРЕССИВНЫЙ (что-то ухудшил — требуется немедленный откат и письменный урок). Запуск, который отработал, что-то делал, но не дал измеримых изменений, — это ДРЕЙФУЮЩЕ-НЕЙТРАЛЬНЫЙ и режим сбоя, который цикл-ревьюер отмечает как нарушение дисциплины.
«Измеримое» — несущее слово. Для него нужна эталонная матрица состояния, которую каждый цикл читает при холодном старте: оценки областей функциональности, доля успехов, глубина очередей, задержка развёртывания — какие бы ни были главные оси вашего продукта. Запуск считается сходящимся, если какая-то ячейка матрицы улучшилась И ни одна не ухудшилась. Улучшение должно подтверждаться доказательствами «до/после» в теле PR.

На практике:
- Пример сходящегося запуска. «Рабочее пространство X поднялось с оценки F до B (до: нет списка, нет кнопки создания; после: видны 93 сущности и работает кнопка создания). Скриншот «до» приложен; скриншот «после» приложен. Матрица состояния обновлена.»
- Пример явно нейтрального запуска. «Только исследование — первопричина пока неизвестна; исправить в этом запуске невозможно. Результаты записаны в analysis/…»
- Пример регрессивного запуска. «Попробовал Y; сломал Z. Откатил коммит ABC. Урок записан.»
Цикл-ревьюер применяет это правило к каждому PR. PR, не подпадающие ни под одно из трёх состояний, получают REQUEST_CHANGES. Автор должен либо найти измеримое улучшение, либо переклассифицировать PR как нейтральный с указанием причины, либо откатить.
Одно это правило отлавливает примерно 80% проблемы дрейфа. Для остального нужно больше.
Правило погашения
Правила накапливаются. Каждое новое правило, которое придётся читать будущему агенту, — налог на контекстный бюджет каждого будущего запуска. Поэтому:
Добавление нового документа доктрины, определения агента, пункта бэклога или шага процесса ТРЕБУЕТ вывести из обращения хотя бы один существующий (удалить, влить в другой или архивировать). Чистая сложность не может расти без явного одобрения оператора. Исключение: если новый пункт заменяет собой несколько старых за счёт сходимости, это чистое уменьшение и оно допустимо.
Это правило я нарушаю чаще всех. Трудно удалять то, что написал сам. Но альтернатива — документ доктрины, на чтение которого уходит 30 минут в начале каждой сессии, из-за чего агенты читают по диагонали, а значит, не следуют ему, а значит, уходят в дрейф.

Цикл-ревьюер проверяет каждый PR: добавил ли он новые файлы доктрины или пункты бэклога? Если да, вывел ли он что-то равного веса? Если нет, REQUEST_CHANGES с таким текстом: «дисциплина сходимости: этот PR добавляет N новых элементов доктрины, но выводит 0. Либо выведите один, либо задокументируйте, почему чистое добавление оправдано измеримым улучшением, вошедшим в этот PR.»
Правило запрета заглушек
Дисциплина сходимости ловит дрейф на уровне запуска. Дрейф на уровне артефакта она не ловит. За один запуск можно выпустить 10 артефактов, из которых 3 работают, а 7 — заглушки; в сумме запуск посчитается «сходящимся», а число заглушек на платформе тихо вырастет.
Правило для каждого артефакта:
Каждый выпускаемый артефакт — конечная точка, экран, виджет, возможность, определение агента, раздел руководства, что угодно — ДОЛЖЕН находиться в одном из трёх состояний: РАБОТАЕТ(проверено от начала до конца тестом, выводом смоук-теста или скриншотом в теле PR), ГОТОВО К РАБОТЕ(пробел назван явно, пункт для завершения поставлен в очередь в том же PR) или ЗАГЛУШКА С ОЧЕРЕДЬЮ(явная пометка status:stub, ссылка на пункт для завершения и понятное оператору объяснение при обращении к ней). ЗАГЛУШКА БЕЗ ОЧЕРЕДИ— нарушение дисциплины.
Классическое нарушение: выпустить экран с виджетом «Очередь недоступна — Повторить». Форма виджета в порядке; данных за ним не существует; пункта на завершение в очереди нет. Пользователь упирается в стену без объяснений и без пути вперёд.

Более тонкое нарушение: выпустить файл документации со ссылками markdown на соседние файлы, которых не существует. Цель ссылки должна была быть заглушкой с очередью, но это даже не она, а пустота. Проверка ссылок у ревьюера роняет CI; гейт развёртывания отказывает; платформа встаёт. Именно этот сбой я выпустил в сессии, в которой писалась эта статья, и цикл-аналитик поймал его за несколько часов. Подробнее об этом ниже.
Универсальный протокол холодного старта
Каждый цикл при каждом запуске, прежде чем браться за работу, выполняет одни и те же шесть проверок:
- Синхронизироваться с текущим trunk. Выполнить pull. Посмотреть, что попало туда с прошлого запуска.
- Прочитать эталонную матрицу состояния. Каково измеримое состояние платформы прямо сейчас?
- Проверить задержку развёртывания. Какой SHA в продакшене и какой в trunk? Самое частое узкое место — именно здесь.
- Проверить здоровье гейта развёртывания. Успешны ли недавние развёртывания? Или тестовый гейт отклоняет выкатки?
- Проверить очередь ревью. Сколько открытых PR? Насколько они старые?
- Проверить сигнал CI. Зелёные ли недавние прогоны на trunk?
Плюс седьмая проверка в цикле мониторинга:
- Проверить запас по лимитам. Какая доля текущего расчётного окна израсходована? Какова скорость расхода?
После проверок каждый цикл применяет свои правила реагирования в порядке приоритета, обоснованном причинами: доступность прежде корректности, гейт развёртывания прежде содержимого, CI основной ветки прежде бэклога, бэклог прежде новой работы, метрика платформы прежде доктрины.

Это звучит бюрократично. На деле наоборот: протокол лишает агента свободы выбирать плохо. Циклу, который видит «гейт развёртывания отказал, четыре PR не проверены, CI красный, бэклог растёт, самая слабая область функциональности — на F», больше не нужно думать о приоритете. Протокол решает: сначала гейт развёртывания.
Тринадцать инвариантов надёжности
Протоколы проверки состояния по умолчанию хрупки. Проверки зависают по тайм-ауту, файлов не оказывается на месте, сеть отказывает. Поэтому:
- I-1. У каждой проверки есть жёсткий тайм-аут (по умолчанию 10 секунд, для SSH — 30 секунд).
- I-2. У каждой проверки есть деградированный запасной вариант (сбой проверки не означает сбой запуска).
- I-3. Конфликты разрешаются по приоритету с обоснованием, а не по первому совпадению.
- I-4. Обнаружение устаревшего состояния (старше 24 часов — повод заново всё обойти).
- I-5. Восстановление после сбоя при холодном старте (брошенные ветки, истёкшие блокировки, незакоммиченное состояние).
- I-6. Конкурентность на основе аренды. У каждого типа цикла свой файл блокировки. Два одновременных запуска одного и того же цикла столкнуться не могут.
- I-7. Действие по умолчанию «ничего не делать» равно явной нейтральности с сообщением об этом. Тихих пустых запусков быть не может.
- I-8. Журнал аудита по каждому запуску. Результаты проверок, решение, действие, верификация — всё записывается.
- I-9. Верификация после действия обязательна. Провалившаяся верификация означает ОТКАТ, а не повтор.
- I-10. Потолок затрат на запуск (200 000 токенов). Убегающие циклы ограничены.
- I-11. Корректная уступка по сигналу оператора. Файл STOP в середине запуска означает чистый выход без полусостояния.
- I-12. Безопасность при начальной загрузке. Работает при самом первом запуске, когда файлов состояния ещё нет.
- I-13. Изоляция через worktree. Каждый цикл работает в собственном git worktree — отдельный рабочий каталог, общий репозиторий
.git. Без этого два цикла в общем рабочем дереве сталкиваются при каждом checkout и pull. Не добывайте этот урок на собственной шкуре; настройте это с самого начала.

I-13 я добавил уже после этой сессии. Остальные двенадцать были у меня правильными. Схема столкновений, которую предотвращает I-13, описана ниже в разделе «Что всё ещё ломает этот паттерн».
Матрица моделей и режимов размышления
Современные платформы для агентов-программистов позволяют выбирать и размер модели, И режим размышления (обычный или расширенный с явным бюджетом на рассуждения). Разброс стоимости между самым дешёвым и самым дорогим вариантом — примерно 60 раз. Если для всех задач по умолчанию брать «самую умную модель с самым глубоким размышлением», вы будете тратить деньги на рутину, которой глубина не нужна.
Соответствие задач и моделей:
- Рутинное ревью PR ботом — меньшая модель, обычное размышление. Сопоставление с правилами; нового рассуждения не требуется.
- Ревью существенного изменения — самая крупная модель, расширенное размышление (16k+ токенов). Тонкая корректность требует глубины.
- Проверка состояния при холодном старте — меньшая модель, обычное размышление. Механическая работа; глубина тратится впустую.
- Синтез на стыке областей, например обнаружение дрейфа, — меньшая модель, расширенное размышление (~8k токенов). Сравнение нескольких источников выигрывает от чуть более глубоких рассуждений.
- Первопричина застопорившейся сходимости — самая крупная модель, расширенное размышление (16k токенов). Диагностика системных сбоев.
- Архитектурное решение, которое затвердеет, — самая крупная модель, расширенное размышление (16k+ токенов). Неверная архитектура стоит недель; платите за глубину.
- Рутинная отладка по известным шаблонам — меньшая модель, обычное размышление. Задача вида «найти по образцу».
- Новая отладка дольше 30 минут — самая крупная модель, расширенное размышление (16k+ токенов). Глубина окупается.
- Аудит безопасности — самая крупная модель, расширенное размышление (16k+ токенов). Тонкие рассуждения о модели угроз.

По умолчанию: меньшая модель и обычное размышление. Повышайте, когда глубина действительно помогает. Никогда не берите «самую большую и глубокую на всякий случай»: самая большая статья расходов в любой агентной системе — субагенты, которые наследуют модель родителя, хотя должны были переопределить её на более дешёвую.
Граница между агентом и оператором
Самое важное правило: агенты не перекладывают работу на оператора-человека молча.
Когда автономная система разработки чего-то не может — предметной экспертизы, позиционирования на рынке, тестирования на реальных пользователях, решений по бизнес-модели, — возникает соблазн вписать в документы «оператору следует…». Это нечестно. Так трудные части сбрасываются именно тогда, когда оператор менее всего готов их принять (на раннем этапе жизни продукта, когда MVP ещё нет).
Что агенты СДЕЛАЮТ: поднимут оценки функциональности со «сломано» до «работает»; отполируют дизайн; подготовят конкурентные разборы по открытым источникам; углубят интеграции; проведут UX-тестирование до появления клиентов (через цикл-тестировщик в роли пользователя); сделают сценарии онбординга; сделают функции отчётности.
Что может решить только оператор: стратегический приоритет (какая функция важнее всего для рынка, который он знает); бизнес-модель; окончательный эстетический выбор между двумя допустимыми дизайнами; явное разрешение на обход (когда агент говорит «этот тест нестабилен, можно обойти?»); пересмотр уровней приоритета.
Тестирование на реальных клиентах ОТЛОЖЕНО, а не переложено. Приводить реальных пользователей до MVP значит растрачивать их доброжелательность на сломанный продукт. Цикл-тестировщик в роли пользователя заменяет их, пока не будет достигнут порог MVP. После этого реальные пользователи приходят искать то, что упустил имитационный тестировщик.

Эту границу операторам нужнее всего отстаивать. Без неё агентная система превращается в нечто, что требует внимания оператора, вместо того чтобы делать работу.
Единый эталонный файл состояния
Все четыре цикла, все правила дисциплины, все протоколы — всё это бесполезно, если нет общего определения того, «каково состояние платформы прямо сейчас».
Один файл. Таблица трендов, в которую только добавляют. Каждая строка — снимок на момент времени. Столбцы — метрики, важные для продукта: оценки функциональности по областям, доля успехов, число блокеров, глубина очередей.
Каждый цикл читает этот файл при холодном старте. Сходящиеся запуски обновляют его. Нейтральные с дрейфом — нет. Через неделю-две тренд в этом файле И ЕСТЬ ответ на вопрос «приводят ли агенты к сходимости».

Если 7 снимков подряд не показывают движения, цикл-ревьюер выдаёт «сходимость остановилась — приостановить циклы, нужен метаразговор». Файл — это предохранительный клапан, который ловит случай, когда каждый отдельный запуск заявляет о продуктивности, а в сумме её нет.
Что всё ещё ломает этот паттерн
Этого раздела не было в первом наброске статьи. Чтобы его добавить, мне пришлось заплатить сессией дрейфа.
Дрейф автора
Тот, кто пишет правило (человек или агент), как правило, нарушает его, пока чернила не высохли. Я выпустил дисциплину для каждого артефакта: «каждый артефакт выходит как РАБОТАЕТ, ГОТОВО К РАБОТЕ или ЗАГЛУШКА С ОЧЕРЕДЬЮ» — и в той же сессии выпустил дерево документации с 16 висящими ссылками markdown, не подпадавшими ни под одно из этих состояний. Цикл-аналитик поймал это за несколько часов. Я был автором правила, которое отметило моё же нарушение.
Вывод: самоконтроль дисциплины не работает. Циклы-ревьюер и -аналитик — не приятное дополнение; только они ловят дрейф автора. Стройте их первыми. Правила, которые вы пишете сами, вас не свяжут без внешнего принуждения.
Столкновения в общем рабочем дереве
Если запускать все четыре цикла из одного физического каталога, они будут сталкиваться при каждой операции git. Один цикл делает git checkout <branch>, и у другого цикла git status вдруг показывает другую реальность. Наполовину слитые коммиты приписываются не той сессии. Неотслеживаемые файлы то появляются, то исчезают в зависимости от того, какую ветку последним переключил очередной цикл.
Исправление — инвариант I-13 выше: каждый цикл работает в собственном git worktree. Отдельный рабочий каталог, общая база .git. Команда git worktree add — одна строка, и она раз и навсегда устраняет весь этот класс сбоев.
Я усвоил это, раз за разом сталкиваясь с собственным циклом-аналитиком, пока вёл основную сессию в режиме прямого управления оператора в том же каталоге.
Ловушки запуска
Три ловушки, в которые вы попадёте ещё до того, как циклы начнут запускаться.
- Ловушка 1: многострочные промпты обрезаются. Передача аргументов процессу в Windows обрывается на первом переводе строки. Бриф на 3300 символов, переданный как позиционный аргумент исполняемому файлу агента, доходит до него как первые 70 символов. Используйте флаг ввода из файла (
--append-system-prompt-file <path>или аналог) либо передавайте через stdin — любым способом, при котором в argv нет переводов строки. - Ловушка 2: слэш-команды существуют только в интерфейсе. Если ваш бриф велит агенту первым действием вызвать
/rename "Dev /loop", он этого не сможет. Слэш-команды обрабатывает пользовательский интерфейс, а не агент. Задайте имя сессии при запуске (на большинстве платформ для этого есть флаг-nили--name) и вовсе уберите эту директиву. - Ловушка 3: передача нативных аргументов в PowerShell 5.1 ненадёжна. Пробелы, апострофы и косые черты в значениях аргументов могут искажаться, когда PS 5.1 передаёт их нативному exe в режиме
-File. Диагностика однозначна: тот же exe, запущенный вручную из интерактивного PowerShell, работает; запущенный через cmd → powershell -File script.ps1 -Param "value" — нет. Решение: убрать слой PowerShell и вызывать нативный exe прямо из cmd.
Со всеми тремя я столкнулся в одной сессии. Ни одна из них не экзотика — они критичны для любой настройки на хосте с Windows. Ни одна не описана в README платформ для агентов. Заложите день, чтобы их найти.
Разрыв между затратами и ценностью
Сессия, породившая эту статью, обошлась примерно в 157 долларов в пересчёте на вычисления по тарифам API (реальная подписка фиксирована; сумма в долларах — это то, сколько стоила бы та же работа при оплате по факту). В ней было слито девять pull request с доктриной, инфраструктурой и процессами. Ни одного улучшения продукта, видимого пользователю, она не дала. Исправление продукта, которое я закоммитил в начале сессии, так и не дошло до продакшена, потому что гейт развёртывания отказал — из-за 15 падающих тестов и 16 висящих ссылок markdown, которые я выпустил.
Это и есть разрыв между затратами и ценностью, названный прямо. Дисциплина, которую я описываю в этой статье, была выстроена именно в той сессии. Измеримое состояние платформы не улучшилось. Зато теперь существует инфраструктура, с помощью которой будущие сессии смогут его улучшить, — и нужно быть честным с собой (и со своим оператором), если именно на такой обмен вы пошли.

Правило дисциплины сходимости, применённое задним числом, пометило бы всю сессию как ДРЕЙФУЮЩЕ-НЕЙТРАЛЬНУЮ. Это правило работает как задумано. И оно говорит кое-что неприятное: сессия, затеянная ради статьи о дисциплине, вряд ли способна одновременно двигать продукт вперёд, ведь каждая минута, потраченная на доктрину, — это минута, не потраченная на функцию. Планируйте с учётом этого.
Чего это НЕ сделает
Честные границы того, что дисциплина может и чего не может дать:
- Она поднимет каждую область функциональности со «сломано» до «работает». Но до наивысшей оценки не доведёт без методов работы на уровне предметной области и проверки изменений состояния.
- Она обеспечит готовый для продакшена внешний вид через гейт системы дизайна. Но не создаст эстетическую основу с нуля — язык дизайна выбирает оператор.
- Она соберёт конкурентные разборы функциональной паритетности по открытым источникам. Но не определит стратегическое позиционирование относительно крупных игроков — это знание рынка, которое есть у оператора.
- Она проведёт UX-тестирование до появления клиентов с помощью агента, имитирующего неопытного пользователя. Но не найдёт настоящих болей клиентов — реальные пользователи приходят после MVP.
- Она будет поддерживать сходимость при известных затратах. Но не доведёт вас от MVP до «лучшего на рынке» — для этого нужны входные данные, которых у циклов нет.

Называть то, чего не случится, — часть дисциплины. Без этого операторы ждут от системы большего, чем она способна дать, и теряют доверие, когда получают меньше.
Во сколько это обходится
Сессия четырёх циклов, работающая по 8 часов в день в темпе, соответствующем матрице, стоит примерно как месячный бюджет инструментов для одного инженера среднего уровня. Реальная подписка фиксирована; ограничением служат лимиты на расчётное окно, а не доллары.
А если для всего брать самую крупную модель с самым глубоким размышлением? Примерно в 5–7 раз больше. Дисциплина матрицы — это разница между устойчивой автономной разработкой и счётом, вышедшим из-под контроля.
Стоимость отдельной сессии колеблется сильнее. Сессия, которая выдаёт чистую доктрину, как та, что породила эту статью, сжигает бюджет и не улучшает продукт. Это не потери, если доктрина окупится сходимостью в будущих сессиях, но ЭТО потери, если доктрина лежит без применения.

Именно цикл-ревьюер заставляет доктрину окупаться. Без него доктрина копится мёртвым грузом.
Урок, который я усваиваю снова и снова
Каждый раз, добавляя в эту систему новое правило, агента или процесс, я добавляю нагрузку на будущее. Правило дисциплины сходимости — единственное, которое уменьшает нагрузку: оно заставляет любое другое добавление окупаться измеримым улучшением.
Патология, описанная в начале этой статьи, — «агенты продуктивны, а продукт не движется» — это сбой дисциплины, а не инструментов. Агенты делают именно то, что вы им сказали: делают коммиты, проходят CI, обновляют документацию. Им просто не сказали, что коммиты должны сдвигать измеримую ось.
Скажите им это — с явными правилами для каждого запуска и каждого артефакта, с единым эталонным файлом состояния, с разделением ответственности между четырьмя циклами, с честной границей того, что могут делать только люди, и с изоляцией через worktree, чтобы они не сталкивались, — и агенты становятся полезными.
Не волшебными. Полезными. Иногда.
Это «иногда» — то, чего не хватало в первом наброске статьи. Дисциплина — это цель. Даже когда она записана, даже когда правила явные, даже когда цикл-ревьюер работает, вы (и ваши агенты) всё равно будете дрейфовать. Дрейф ловят — для этого и нужен цикл-аналитик, — но не предотвращают. Механизм самокорректирующийся, а не самопредотвращающий.
Это различие важно. Литература об инструментах ИИ-инженерии полна «волшебных» обещаний. Реальность такова: небольшой набор дисциплинированных паттернов, жёстко обеспечиваемых другими агентами (а не самодисциплиной), которые заставляют автономных агентов выполнять настоящую работу большую часть времени, а в остальное время дрейф ловится и исправляется. Всё остальное — театр.

Если вы запускаете агентов для кода на настоящей кодовой базе и видите описанные мной режимы сбоя, приведённые выше паттерны могут помочь. Они не новы; в большинстве своём это записанное то, что хорошие инженерные команды и так делают. Новизна в том, чтобы сделать их несущими для автономных циклов, где в непосредственной близости нет человека, который бы неявно их обеспечивал, — и в том, чтобы назвать режимы сбоя, которые переживают даже дисциплину.
Дополнение. Шпаргалка

Эта страница — полная копия истории в том виде, в каком она опубликована на Medium. Читать на Medium. Иллюстрации созданы с помощью ИИ.