Агентное программирование из новинки превратилось в стандарт индустрии. Модели становятся лучше, и автономные агенты-программисты — те, что работают без участия человека, — уже перешли из разряда возможного в разряд реального.
Minions — собственные агенты-программисты Stripe. Они полностью автономны и рассчитаны на то, чтобы решать задачу за один подход. Каждую неделю в Stripe вливается больше тысячи пулл-реквестов, созданных целиком minion'ами: люди их ревьюят, но не пишут в них ни строчки кода.
Разработчики по-прежнему планируют задачи и работают с агентами вроде Claude и Cursor. Но внимание инженера — один из самых дефицитных ресурсов, и автономные агенты позволяют распараллелить работу.
Типичный запуск minion'а начинается с сообщения в Slack, а заканчивается пулл-реквестом, который прошёл CI и готов к ревью — без единого промежуточного взаимодействия с человеком. Инженеры нередко запускают несколько minion'ов параллельно, чтобы продвигать сразу несколько задач. Особенно это помогает на дежурстве, когда нужно разобраться с множеством мелких проблем.
Жизненный цикл minion'а
В первой части мини-серии расскажем, как инженеры Stripe используют minion'ов и на что они способны. Во второй части разберём внутреннее устройство и подходы к реализации.
Почему мы сделали это сами?
Вайб-кодинг прототипа с нуля — совершенно не то же самое, что работа с кодовой базой Stripe.
Кодовая база Stripe — сотни миллионов строк кода в нескольких крупных репозиториях. Бэкенд по большей части написан на Ruby (не Rails) с типизацией Sorbet — стек достаточно редкий. Повсюду используются внутренние библиотеки, которые LLM изначально не знают.
Ставки высоки: через этот код в продакшене проходит больше триллиона долларов платежей в год. При этом Stripe связан множеством обязательств перед финансовыми институтами, регуляторами и комплаенсом, которые код обязан соблюдать.
LLM-агенты отлично строят ПО с нуля, когда ограничений мало. Но работать с кодовой базой масштаба, сложности и зрелости Stripe — задача принципиально иная. Люди выстраивают сложные ментальные модели, чтобы вносить изменения в наши репозитории. Научить агентов вырабатывать верные интуиции и использовать правильные инструменты в рамках контекстного окна — задача нетривиальная.
За годы Stripe выстроил фундамент продуктивности разработчиков, который поддерживает уникальные ограничения на всех этапах цикла разработки — контроль исходного кода, среды, кодогенерация, CI и многое другое. Обвязка minion'ов тесно интегрирована с этим инструментарием. Minion'ы работают с теми же инструментами, что и живые инженеры Stripe: что хорошо для людей, то хорошо и для LLM.
Как выглядит работа с minion?
У minion'ов несколько точек входа, спроектированных так, чтобы вписаться в повседневную работу инженеров. Мы предоставляем CLI и веб-интерфейс, но чаще всего minion'а запускают прямо из Slack. Достаточно тегнуть наше Slack-приложение в треде, где обсуждается задача, — и minion получит доступ ко всей переписке и ссылкам в качестве контекста.
Если вы работаете над внутренними инструментами, запуск minion'а может выглядеть так:
Сообщение в Slack, запускающее minion
Запустить minion'а можно и из других внутренних приложений Stripe. Внутренняя документация, платформа фича-флагов и система тикетов — все интегрированы с minion'ами. Например, когда CI обнаруживает нестабильные тесты, автоматически создаётся тикет с предложением исправить проблему через minion.
Тикет нестабильного теста с кнопкой запуска minion'а для исправления
Пока minion работает — или после завершения — инженер видит все решения и действия в веб-интерфейсе.
Веб-интерфейс управления запусками minion'ов
Завершив задачу, minion создаёт ветку, отправляет её в CI и готовит пулл-реквест по шаблону Stripe. Если код в порядке, инженер открывает PR и отправляет на ревью коллеге. Если нет — можно дать minion'у дополнительные указания, и он запушит обновлённый код в ветку.
Инженер также может доработать результат вручную. Наша цель — пулл-реквест без единой строчки человеческого кода. Но даже неидеальный результат minion'а часто оказывается отличной отправной точкой.
Как устроены minion'ы?
В работе minion'а много этапов. Подробности — во второй части мини-серии. Многие детали специфичны для Stripe, но есть и универсальные уроки. Чтобы разжечь интерес — краткий обзор.
Запуск minion'а начинается в изолированной среде разработки — devbox. Это машины того же типа, на которых работают инженеры Stripe. Devbox'ы прогреты заранее: новый поднимается за 10 секунд с предзагруженным кодом и сервисами. Они изолированы от продакшена и интернета, поэтому minion'ов можно запускать без подтверждения человеком. Вдобавок это даёт параллелизацию без накладных расходов вроде git worktrees, которые при масштабах Stripe не работают.
Ядро агентского цикла — форк goose от Block, одного из первых широко используемых агентов-программистов, который мы форкнули на ранних этапах. Мы перестроили оркестрацию: агентские циклы чередуются с детерминированным кодом — для git-операций, линтеров, тестирования и т. д. Так minion сочетает творческую свободу агента с гарантией выполнения обязательных шагов вроде линтинга.
Minion'ы читают те же файлы правил для агентов, что и Cursor с Claude Code, поддерживая несколько форматов. Но при масштабах Stripe иметь множество безусловных правил непрактично, поэтому почти все правила привязаны к конкретным поддиректориям.
Minion'ы подключены к MCP — протоколу, который задаёт единый язык для сетевого вызова функций LLM. Через него они получают контекст: внутреннюю документацию, детали тикетов, статусы сборок, навигацию по коду через Sourcegraph и многое другое. Мы детерминированно вызываем релевантные MCP-инструменты по найденным ссылкам ещё до старта minion'а, чтобы заранее наполнить контекст.
MCP — общий язык для всех агентов Stripe, не только minion'ов. Поэтому мы построили центральный MCP-сервер Toolshed, в котором собрано более 400 инструментов для внутренних систем и SaaS-платформ. Minion'ы и другие агенты подключаются к настраиваемым, но тщательно отобранным подмножествам этих инструментов.
Minion'ы рассчитаны на решение задачи за один подход. Но если с первого раза не получилось, агенту важно дать обратную связь. Для этого мы используем несколько автоматических уровней тестирования, по которым minion итерирует. Первый рубеж — автоматический локальный запуск: эвристики отбирают нужные линтеры и прогоняют их при каждом git push. Занимает меньше пяти секунд.
В вопросах продуктивности мы придерживаемся принципа «shift left» — сдвигаем обратную связь как можно ближе к моменту написания кода. Любая проверка, которая упала бы в CI, должна срабатывать в IDE или при git push и показываться инженеру сразу.
Если локальные проверки ничего не нашли, при пуше CI выборочно запускает тесты из батареи Stripe — а в ней больше трёх миллионов. У многих тестов есть автоматические исправления, которые мы применяем сразу. Если автоисправления нет, ошибку отправляем обратно minion'у.
CI-прогоны стоят токенов, вычислительных ресурсов и времени, поэтому мы ограничиваемся максимум двумя раундами. Если тесты падают после первого пуша, minion пытается их исправить и пушит второй раз — на этом всё. У LLM убывающая отдача от множества раундов полного цикла CI. Правило «обычно один, максимум два прогона CI — и только после локального исправления всего, что можно» мы считаем хорошим компромиссом.
Итого: minion'ы работают с теми же инструментами, что и живые инженеры, и получают контекст для следования лучшим практикам Stripe. А инженеры запускают их легко и привычно — как часть повседневной работы.
Канал в телеграм:
Что дальше?
Minion'ы уже изменили то, как пишется код в Stripe. Индустрия ещё ищет, каким будет будущее агентного программирования, но мы уверены: автономные агенты-программисты останутся одним из самых перспективных применений агентов.
Во второй части подробно разберём реализацию minion'ов.
Автор: Alistair Gray. Дата: 9 февраля 2026 года.
Оригинал статьи: https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents