Цикли програмування агентів: від однорядкової команди Bash до /goal, перевірки та жорсткі зупинки.
Цикли агентного кодування крок за кроком: однорядковий скрипт у bash, Claude Code /goal та /loop, перевірка ззовні, три ліміти витрат та навички, які варто зберігати.
Джерела: WTF Is a Agentic Coding Loop? And How to Build One.
Одне речення від Пітера Штайнбергера стало центральним у дискусіях про кодування за допомогою ШІ у червні 2026 року та набрало два мільйони переглядів: агентам для кодування більше не слід давати вказівки вручну, замість цього потрібно розробляти цикли, які самі надаватимуть їм вказівки. Відповіді перетворилися на суперечку щодо того, що це означає. Коли хтось запитав, як це виглядає на практиці, найчастіше цитована відповідь жартувала, що це знають лише дві людини. Це смішно та неправдиво. Ця ідея не є містичною, а спосіб її реалізації — один командний запит.
Замість того, щоб сперечатися про те, чи мертва наука про створення вказівок, корисніше будувати її, починаючи з рядка, який можна скопіювати протягом п’яти хвилин.
Три моменти пояснюють решту:
- Цикл — це скрипт, який надсилає запит агенту, перевіряє результат, визначає, чи виконано завдання, і повторює процес у разі негативного результату. Людина більше не сидить усередині цього циклу та не вводить інструкції вручну. Цикл створюється лише один раз, а модель виступає у ньому як підфункція.
- Найпростішим корисним циклом є один рядок коду bash, а найкориснішим — команда з одним слешем. Для запуску не потрібна жодна система оркестрації, і починати з неї — це помилка.
- Те, що відрізняє ефективний цикл від того, який споживає бюджет, зводиться до двох аспектів: засобу для перевірки власного результату проти зовнішньої істини та чітких умов зупинки, які змушують його припинитися.
Визначення та структура
Борис Черни створив Claude Code, і, за його словами, протягом останнього місяця Claude Code самостійно написав усі його власні зміни — 259 pull requests, — тоді як його IDE було видалено ще у листопаді. Він просто пояснює цей метод: він більше не запитує Claude, цикли виконуються та самі вирішують, що робити далі, а його завдання — писати ці цикли.
Його драбина з трьох сходинок утілює цю ідею в реальність. Рік тому це був вручну написаний код із функцією автодоповнення. Потім з’явилися кілька сеансів агента одночасно, кожен з яких запускався вручну. Тепер це програма, яка запускає агента, а інженер може займатися чимось іншим. Рівень роботи піднявся – від написання коду до створення того, що пише код. Він чітко зазначає, що це не призведе до звільнення інженерів. Хтось все одно вирішує, що будувати; хороші інженери залишаються важливими, а перевірка результатів завжди має значення. Натискання клавіш залишилося, а оцінка – також.
Найменший цикл: один рядок bash
Уся концепція поміщається в один рядок, і її виконання один раз дає уявлення про неї. Її називають циклом Ральфа – на честь Ральфа Віггума, а Джеффрі Хантлі популяризував її у 2025 році.
while :; do cat PROMPT.md | claude -p --dangerously-skip-permissions; done
Ось і все. Той самий файл з запитом подається до Claude Code у безголовому режимі, агент працює доти, доки не зупиниться, після чого цикл починається знову з ідентичним запитом. Кожен проходження ніколи не пам’ятає попереднього, тому воно отримує необхідну інформацію з файлів, списку перевірок та комітів, залишених попередніми проходженнями. Тут немає жодних фреймворків чи машин станів — лише безкінечний цикл виконання команд агентом з кодування.
Будьте обережні перед тим, як скопіювати цей код: флаг, який ігнорує запити на дозвіл, діє саме так, як це описано, і агент буде виконувати команди без запитань. Підходящим місцем є тимчасова робоча структура git або контейнер на гілці, яку можна втратити, ніколи не на основній гілці.
Розумність полягає у звичці, а не у коді. Замість того, щоб дозволяти одній величезній розмові ставати застарілою, кожна ітерація починається з фіксованого набору базових файлів. Файл інструкцій щоразу містить ті самі кілька документів — зазвичай специфікацію та чек-лист, які агент позначає та зберігає під час роботи. Таким чином кожен новий етап починається з чіткого орієнтування, а фіксація прогресу на кожному кроці запобігає тому, щоб агент відхилявся від курсу чи переробляв вже виконану роботу.
Чи варта така примітивна техніка результатів? Команда на хакатоні Y Combinator створила шість репозиторіїв за одну ніч, використовуючи цей механізм, та витратила близько 297 доларів на API-запити, що, на їхню думку, еквівалентно приблизно п’ятдесяти тисячам доларів у вигляді оплати праці фахівців. Хантлі таким же способом створив цілу невелику мову програмування. Як іграшка, цей простий підхід швидко виявляється недостатнім, проте він дозволяє зрозуміти основні принципи за півхвилини.
Проблема полягає у тому, чому ті, хто найбільше знайомий із цим підходом, вважають його застарілим. Цикл Ralph припускає, що термінал залишається відкритим, і ніколи не перевіряє, чи виконано завдання. Він просто працює без кінця, і наступні два розділи присвятовані саме цьому.
Один командний запит: /goal та /loop
Не обов’язково писати bash вручну. Claude Code містить дві команди, які безпечніше організовують той самий цикл.
Команда /goal змушує агента працювати доти, доки не буде досягнута вказана умова, і саме в цій умові полягає суть рішення.
/goal all tests in test/auth pass and the lint step is clean,
or stop after 20 turns
Те, що відрізняє цей підхід від простого while-true, — це наступний крок. Коли закінчується кожен етап, Claude Code передає умову та хід розмови окремій невеликій, швидкій моделі — за замовчуванням Haiku, — яка відповідає «так» або «ні» та наводить причину. У випадку «ні» ця причина використовується як керівництво для наступного етапу. Модель-виконавець ніколи не може оголосити про завершення роботи.
Найважливішою обмеженням є те, що суддя не проводить тестів та не переглядає репозиторій. Він бачить лише стенограму, тому умову потрібно довести за допомогою власних результатів агента. Перевірка тестів у папці auth вважається достатньою, оскільки агент їх запустив, а результат знаходиться у розмові. Твердження про надійність механізму автентифікації не є достатнім, адже ніщо у стенограмі не може це підтвердити. Суддя читає підтвердження виконання завдань та не перевіряє код, тому справжньою перевіркою залишається реальне виконання команди агентом, при цьому суддя вирішує, чи підтвердження свідчить про успішне виконання.
Умова якості описує один вимірюваний кінцевий стан та вказує, як агент буде його демонструвати у результаті. Покращення автентифікації не є умовою. Умовою є проходження тестів автентифікації, вихід з команди тесту з кодом zero та статус git, який відображає зміни лише у файлах автентифікації, адже кожен з цих пунктів з’являється у записі як команда, яку виконав агент. Додайте обмеження, наприклад, зупинку після 20 ходів, а також прапорець максимальної кількості ходів як надійний захист, щоб автономний запуск не тривав нескінченно.
Автономний одноразовий запуск використовує режим без терміналу з цим прапорцем та метою у лапках. Процес має залишатися активним під час роботи, тому йому потрібен відкритий термінал або сервер, а не закритий ноутбук. Щоб закрити кришку, краще використовувати Claude Code в хмарі. Ctrl+C призводить до передчасного завершення локального запуску.
Короткий запуск на практиці — дві ходи та приблизно сорок секунд — виглядає ось так.
> /goal all tests in test/auth pass, npm test exits 0, or stop after 15 turns
◎ /goal active · turn 1
ran: npm test
✗ 2 failing in test/auth/login.test.ts
judge: not done, expired-token case still throws◎ /goal active · turn 2
edited src/auth/token.ts
ran: npm test
✓ 41 passing, exit 0
judge: done, npm test exits 0 and only auth files changed✓ goal achieved · 2 turns · ~$0.40
Усе там видно: агент виконує перевірку, результат потрапляє до протоколу, а суддя його читає та вирішує, чи продовжувати, чи зупинитися.
Команда /loop — це її запланований „родич“, який стежить за процесом. Власний приклад від Cherny варто скопіювати, змінивши іменники.
/loop babysit all my PRs. Auto-fix build issues, and when
comments come in, use a worktree agent to fix them.
Він повторюється з певним інтервалом, обробляє все нове з моменту попереднього проходження та продовжує роботу, поки хтось його не зупинить або він не визнає завершення роботи. Це є методом опитування, а не обробки подій, що достатньо для стеження за запитами на зміни та виправлення проблем. Записується лише намір та правила зупинки, а кроки залишаються без уваги.
Самоперевірка робить його надійним
Цикл, який записує код та ніколи його не перевіряє, поступово створює все більш серйозні помилки. Він мусить перевіряти свій результат проти чогось зовнішнього та об’єктивного, а не проти власної думки.
Люди, які керують цими процесами, дотримуються одного принципу: завершення визначається зовнішньою перевіркою, а не власною оцінкою моделі. Цикл триває доти, доки процес docker build не завершиться успішно, контейнер не запуститься та перевірка стану не пройде; у такому разі сигнал агента про те, що все гаразд, не має значення. Об’єктивні критерії замінюють собою суб’єктивні відчуття. У псевдокоді структура міцного циклу виглядає ось так.
loop:
agent: make progress on the task
run: npm test (or the build, or the linter)
if check passes: done, exit
if check fails: feed the failure back, try again
if no progress in N tries, or budget hit: stop and ping me
Користувачі, які займаються виробництвом, вносять два вдосконалення. Перше — це те, щоб код переглядав інший модель, ніж той, хто його написав, адже кожен модель має свої слабкі місця, а новий переглядач може помітити те, що пропустив автор. Ден Корнас створив roborev саме для цього: він переглядає кожну зміну на фоні та надсилає результати агенту, поки інформація ще свіжа. Друге — це проведення принаймні двох етапів перегляду навіть у разі, якщо перший пройшов без проблем, а також обмеження кількості етапів п’ятьма-шістьма, щоб цикл не міг безкінечно повторюватися.
Сам цикл — не те, що створює ефект магії. Справжній ефект дає зворотний зв’язок всередині нього. З справжньою перевіркою він функціонує як двигун, а без неї лише створює рахунок.
Механізми, які зберігають бюджет недоторканим
Оскільки генерація коду майже безкоштовна, витрати переносяться на цикл, який його виконує, а цикл без меж становить справжню фінансову небезпеку. Uber обмежив кожного інженера 1 500 доларами на місяць на кожен інструмент — Claude Code та Cursor — після того, як протягом чотирьох місяців витратив усій свій щорічний бюджет на ШІ. Ті команди, що працюють у продакшені, бояться циклів, які ніколи не закінчуються, коли забута термінал стає рахунком на чотири цифри до ранку.
Кожен серйозний цикл має три однакові механізми зупинки, і всі три мають бути встановлені перед тим, як його можна буде запустити без нагляду.
max_iterations: stop after N turns (the runaway cap)
no_progress: stop if M turns change nothing (the stuck cap)
budget_ceiling: stop at $X or T tokens (the wallet cap)
on_stop: ping me with the state and the reason
Команда /goal майже безкоштовно дозволяє перевищити ліміт, оскільки додає умову зупинки після 20 ходів та передає флаг ходу. Решту два елементи доводиться додавати вручну. Функція виявлення відсутності прогресу не вбудована, тож найпростішим рішенням є використання хука Stop або невеликого обгортка, який порівнює результати git diff --stat між ходами та зупиняється після кількох незмінених ітерацій. Ліміт бюджету має бути частиною контролю витрат провайдера — це жорсткий грошовий ліміт для робочого простору, який налаштовується один раз у консолі ще до початку будь-якого циклу. Це звучить як опис створення циклів, поки тисяча агентів будують компанію за одну ніч, але на практиці більшість інженерних зусиль спрямовані на забезпечення їхньої зупинки.
Актив усередині — це навичка
Цикл — це лише інфраструктура, а цінним є те, що він виконує.
Штайнбергер повторює ще одну пораду, яка має довготривалий ефект. Усе, що робиться двічі, стає навичкою, яку можна використовувати знову, а все складне, як тільки його вирішують, також стає навичкою, що дозволяє працювати без зусиль у наступних спробах. Люп, який з кожною ітерацією знову знаходить способи проведення тестів, пошуку конфігурації та форматування результатів, змушує модель постійно переучуватися для роботи з проектом. Люп, який використовує невелику бібліотеку перевірених, названих навичок — наприклад, запуск набору тестів, створення запиту на зміни у стилі команди чи розгортання в проміжному середовищі — розвивається сам по собі, оскільки кожна ітерація починається з вже наявних знань. Це коштує менше та призводить до менших відхилень. Навички є джерелом цінності, а люп просто послідовно їх використовує.
Люпи, які керують іншими люпами
На межі, а також у тому сенсі, який насправді мають Стайнбергер та Черни, цикли стежать один за одним. Керівний цикл одночасно призначає завдання багатьом агентам, контролює їх та обирає наступний крок, зберігаючи стабільний стан, підтримуваний Git, щоб збій не зруйнував усе. Відкритий проект Gas Town Стіва Єгге ілюструє це: двадцять–тридцять інстанцій Claude Code керуються агентом-мером, тоді як патрульні агенти постійно виконують свої обов’язки. Динамічні робочі процеси в Claude Code є упакованою формою, де агент пише скрипт оркестрації та керує флотом підагентів.
Ніхто не починає з цього. Порядок такий: спочатку /ціль, потім самоперевірка, потім три обмеження, а оркестрація використовується лише тоді, коли один цикл не може впоратися з роботою, що відбувається пізніше, ніж припускає популярна думка.
Перший цикл цього тижня
- Перевірте цей контроль вручну на тимчасовій гілці. Створіть гілку на кшталт loop-test та самостійно запустіть команду тестування, переконуючись у тому, що вихідний код не буде мати значення zero у разі виникнення проблем. Там, де агент не може відрізнити успішний виконання від невдалиого, суддя також не зможе цього зробити.
- Виберіть одну завдання з чітко визначеною межею та кінцевою точкою. Підійде нестабільний тест, невелика міграція чи очищення коду. Пропустіть все те, де завершення є справою смаку.
- Сформулюйте це як /goal з обмеженням. Використовуйте реальну команду, а не розпливчасту структуру — наприклад, безголовий виклик із верхньою межею у 15 кроків, умовою, що вказує на тести автентифікації, вихідним кодом zero від команди тестування та зупинкою після 15 кроків.
До кінця тижня вже є справжня робота, яку ніхто не вводив вручну, цикл, який сам перевіряє та коригує себе, та обмеження, яке запобігає його виходу за межі. Це і є вся практика у скороченому вигляді.
Відповідь на питання, що таке цикл, не має нічого спільного зі зникненням інженерії запитів. Це означає залишитися всередині циклу: написати його один раз, додати справжню перевірку та навички, які можна використовувати знову, поставити обмеження, щоб він зупинився, та присвятити звільнену увагу вирішенню питання, що будувати. Штайнбергер та Черни описують одну й ту саму концепцію з двох точок зору, а сьогодні «вхідні двері» — це одна команда з слешем.
Пов’язана література
- Практичні нотатки: 21 шаблон проектування з агентами пояснений просто — Детальний огляд Практичних нотаток: 21 шаблон проектування з агентами пояснений просто: контракти, перевірки та готові фрагменти коду для команд, які використовують ці шаблони.
- Сандбокс для Claude Code: ізольовані середовища агентів на ноутбуці — Як локальний сандбокс Kubernetes забезпечує кодувальним агентам власну машину, обмежені облікові дані, список дозволених виходів та можливість перегляду всіх агентів, разом із перевагами та недоліками використання власних рішень порівняно з купованими.