Автономный агент, который раз в неделю сам заходит в репозиторий и что-то там делает, звучит как вопрос про модель: достаточно ли она умная, чтобы ей доверять. На практике это вопрос про другое — можно ли оставить её одну. И ответ почти не зависит от модели. Он зависит от ограничителей, которые стоят вокруг неё.
У меня уже какое-то время крутились такие агенты: ночной, который берёт задачу из трекера и открывает pull request; разметчик недоделанных дел. Но все они были невидимыми процессами. Нигде не записано, что это за агент, с каким бюджетом он бегает, насколько он автономен и куда пишет результат. Пока один — держишь в голове. На третьем перестаёшь.
Разбирая чужую методологию про такие «лупы», я забрал из неё не инструменты, а одну дисциплину: каждый повторяющийся агент должен быть объявлен, а репозиторий — иметь численную оценку готовности к автономии. Не «есть автоматизация», а «вот этот луп, паттерн такой-то, уровень такой-то, потолок трат три доллара за прогон, отчитывается туда-то». Невидимый луп — самый дорогой: он жжёт токены и пишет в код, а никто не следит за его ритмом и радиусом поражения.
Три уровня, и где стоит человек
Автономность лупа — это не «включён или выключен». Это лестница, и на каждой ступени человек стоит в другом месте.
Уровень нельзя просто заявить. Оценка готовности репозитория — потолок: пока она низкая, репозиторию нельзя давать луп, который сам мёржит. Число становится воротами не только для человека, но и для того, насколько глубоко пускают агента.
Первый луп: читает, но не трогает
Пилотом я взял самый скучный и безопасный паттерн — еженедельный обход зависимостей. Раз в неделю он снимает бесплатный отчёт о просроченных и уязвимых пакетах, разбирает его и заводит одну живую задачу с триажем. И ничего не пишет в сам репозиторий — уровень L1, только чтение.
Скучный снаружи, он держится на трёх ограничителях, и они важнее, чем сам агент.
Первый — бесплатный ранний выход. Прежде чем звать модель, скрипт делает даровой машинный скан. Если обновлять нечего и уязвимостей нет — прогон завершается, не потратив ни цента. Луп, который платит за то, чтобы подумать о пустоте, разоряет незаметно.
Второй — жёсткий потолок трат. У каждого прогона стоит предел в долларах. Даже если что-то пойдёт вкривь, счёт за неделю ограничен сверху числом, которое я назначил заранее, а не аппетитом агента.
Третий — и он мне дороже всех — проверяй, не доверяй. «Только чтение» это не инструкция агенту в промпте. Это то, что я вынуждаю после него. Когда агент отработал, скрипт смотрит на рабочее дерево: если там появилась хоть одна правка — оно жёстко откатывается к чистому состоянию, а факт нарушения пишется в телеметрию. Обещание агента ничего не трогать — не гарантия. Гарантия — это ворота, которые стоят после него и не верят ему на слово.
Что он поймал в первый же раз
За первый прогон, ценой чуть больше доллара, обход сделал ровно то, ради чего
он есть — не свалку из npm outdated, а разбор. Он нашёл критическую дыру в
библиотеке генерации PDF, сходил в код и увидел, что уязвимые вызовы там не
используются — но патч всё равно советует взять. Он предложил обновление
фреймворка, закрывающее два десятка уязвимостей, и проверил, что оно не мажорное
и не рвёт зафиксированную пару версий.
А ещё он поймал ловушку, на которой я бы сам споткнулся при беглом взгляде: у одной библиотеки аутентификации тег «latest» в реестре указывает на старую стабильную ветку, тогда как проект намеренно сидит на новой бете. Совет «просто обнови до latest» здесь означал бы откат назад. Агент это увидел и написал явно.
Вот в этом и смысл. Ценность не в том, что автономный агент делает работу за меня. Ценность в том, что я могу уйти и не смотреть — потому что вокруг него стоят бесплатный выход при пустоте, потолок трат и проверка, которая не верит ему на слово. Умную модель дают. Право оставить её одну — зарабатывают ограничителями.