Коротко · ШІ-агенти
Claude Code уперся в ліміт посеред задачі. Не починайте з нуля
Підсумок запуску може казати, що нічого не зроблено, а в робочій папці лежить більша частина роботи. За дванадцять днів у мене було п’ять збоїв. Тепер я перевіряю папку до перезапуску й запускаю знову лише те, що впало.
4 жовтня о 00:42 Claude Code зупинив одразу три мої запуски з кількома агентами. Це були задачі з моєї роботи: по два агенти на запуск, один робить, другий перевіряє. П’ять агентів із шести впали з однаковим повідомленням: вичерпано п’ятигодинний ліміт сесії, він оновиться о 01:10.
О 01:18 я попросив агента підхопити все. За три хвилини він доповів, на якому етапі кожен запуск: одне виправлення закомічене й чекає на перевірку, одне завдання готове на чотири п’ятих, новий етап здебільшого написаний. Кожен запуск продовжив із правок, які його агенти лишили у своїх папках, здебільшого ще не закомічених. Нічого не починали з нуля.
Я знав, куди дивитися, завдяки вересню. Коли запуск із кількома агентами падає через ліміт, через кредити, що скінчилися, чи через збій сервісу, підсумок може казати, що нічого не зроблено. А в робочій папці часто лежить більша частина роботи.
Як виглядало «нічого не зроблено»
23 вересня запуск із трьох агентів раз у раз зависав. Спроба вважається завислою, коли три хвилини немає жодного прогресу. Кожен агент отримав шість спроб, усього 18, і зависли всі. Це забрало 4,4 години й 1,16 мільйона токенів. Підсумок — три порожні місця: {"built":[null,null,null]}. Одразу після того, як запуск закінчився, інші запити до сервісу теж не отримували відповіді вчасно. Найімовірніше, збій був у сервісі, а не в задачі.
Потім я подивився в папку. Кожна спроба починає заново в тій самій папці, і кожна встигла щось записати, перш ніж зависнути. Разом вони лишили 1 354 нові рядки в семи файлах. Жодну функцію не визначено двічі, нові правила справді викликалися, і всі 666 тестів проходили. Бракувало лише нових тестів, заміру й звіту. Перевірка тривала близько півтори хвилини.
Перезапуск із нуля викинув би все це й спалив би ще стільки ж токенів. Натомість поверх папки пішов запуск «довершити»: шість агентів, 81 хвилина, 1,49 мільйона токенів. Його замір на справжніх даних показав, що три нові правила, які лишилися в папці, були аж надто суворі: вони викидали 187 записів. Після виправлення вони позначають 9. Знайдена робота однаково потребує всіх перевірок, які проходить завершена.
Перевірте папку, перш ніж перезапускати
Після будь-якого збою мій агент проходить цей список:
- Що змінилося і скільки.
git statusіgit diff --statу папці запуску. Чи є що рятувати? - Дублі. Кожна з кількох спроб може написати ту саму функцію. Якщо назву визначено двічі, спроби зіткнулися.
- Підключення. Новий код викликається чи лише оголошений? Правило, яке ніхто не викликає, нічого не робить, а тести все одно проходять.
- Якщо все цільне, довершіть. Перезапустіть ту саму задачу з одним доданим абзацом: «Код у папці — це робота твого попередника. Допиши тести, які спершу падають, зроби замір, напиши звіт».
- Якщо там каша, збережіть, а тоді відкотіть. Спершу збережіть зміни патчем поза папкою. Ніколи їх не видаляйте: патч може бути єдиною копією.
Перезапускайте лише те, що впало
Claude Code уміє відновити зупинений запуск. Завершені агенти повертають збережені результати, решта запускається знову. Пастка — у черговості. Як пояснює документація Anthropic, агент, що впав, запускається знову, а з ним і кожен агент, який стартував після нього, завершений чи ні.
Перший запуск
Відновлення
Лише той, що впав
25 вересня ліміт зупинив запуск із десяти агентів: п’ятеро робили роботу, п’ятеро її перевіряли. Дві перевірки впали. Я відновив запуск, і всі п’ять робочих агентів повернулися з кешу. Але першою в черзі стояла перевірка, що впала, тож три вже завершені перевірки пішли наново, майже по 200 тисяч токенів кожна. Це майже 600 тисяч із приблизно мільйона токенів, які забрало відновлення. Я побачив, що готові перевірки знову працюють, і спитав агента, чи правильно він усе перезапустив. Ні, неправильно.
Тепер правило таке: якщо агенти, що впали, стоять перед завершеними, не відновлюйте запуск. Запустіть окрему маленьку задачу лише для тих, що впали, а готові результати візьміть із журналу запуску.
Коли збій у самому кінці, відновлення — саме те, що треба. 28 вересня о 00:26 скінчилися кредити посеред довгого запуску. Дев’ять агентів уже завершили роботу. Десятий збирав дизайн-прототип приблизно на 120 станів екрана. Підсумок казав, що прототип не зібрався, але в папці він був майже готовий: на чотирьох екранах на ширині телефону одне слово висіло самотнім рядком, і останні перевірки ще не запускали. Я змінив лише промпт цього агента: «Це продовження: ось файли й лог, довершуй», — і додав свої найсвіжіші нотатки щодо дизайну. Агент стояв останнім у черзі, тож усі дев’ять завершених узялися з кешу.
Тієї ж ночі інший агент упав, нічого не закомітивши. Його правки лишилися в папці, тож ми зберегли їх патчем на 151 рядок, і новий запуск застосував його першим кроком. Відтоді кожен агент, який пише код, комітить після кожного логічного кроку. Повторний запуск тієї задачі закінчився десятьма комітами.
Усі п’ять збоїв поруч:
| Збій | Що лишилося в папці | Що ми зробили |
|---|---|---|
| 23 вересня · збій сервісу, впали 3 агенти з 3 | 1 354 нові рядки, без дублів, 666 тестів проходять. Немає нових тестів, заміру й звіту. | Запуск «довершити» поверх папки. Усі шість його агентів завершили роботу. |
| 25 вересня · ліміт, впали 2 агенти з 10 | Вісім готових результатів у журналі запуску. | Відновили запуск. Три готові перевірки пішли наново, майже 600 тисяч токенів. Тепер ті, що впали, запускаємо окремо. |
| 28 вересня · скінчилися кредити, впав десятий агент, дев’ять уже завершили | Прототип приблизно на 120 станів. На чотирьох екранах слово висіло самотнім рядком, останні перевірки ще не запускали. | Змінили лише промпт агента, що впав, на «продовжуй». Дев’ять агентів узялися з кешу. |
| 28 вересня · агент упав без коміту | Його незакомічені правки: патч на 151 рядок. | Зберегли патч, новий запуск застосував його першим. Нове правило: коміт після кожного кроку. |
| 4 жовтня · ліміт сесії, впали 5 агентів із 6 у трьох запусках | Одне закомічене виправлення, одне завдання, готове на чотири п’ятих, один етап здебільшого написаний. | Кожен запуск продовжив зі своєї папки. Нічого не починали з нуля. |
Щоб наступний збій коштував менше
- Комітити після кожного логічного кроку. Тоді збій коштує один крок, а не всю задачу.
- Називати кількість агентів і оцінку токенів до запуску. Для happymonday.ua, української кар’єрної платформи, я оцінив дослідження на 9 агентів у 1,2–1,4 мільйона токенів і 30–40 хвилин. Пішло 2,29 мільйона токенів і близько 70 хвилин. Тепер я закладаю 250–300 тисяч токенів на агента.
Тисяч токенів на агента: моя оцінка і фактичний запуск
Дослідження на 9 агентів. Я оцінив 133–156 тисяч токенів на агента. Фактично пішло близько 255 тисяч на агента.
- Знати, до якого ліміту ви близько. П’ятигодинне вікно й тижневий ліміт — різні речі: від тижневого ліміту може лишатися ще багато, а вікно вже вичерпане. Settings › Usage показує обидва. 30 вересня, за дванадцять хвилин після того, як я запустив одну перевірку, вона встигла викликати десять агентів і витратити близько 1,2 мільйона токенів. З такою швидкістю п’ятигодинного вікна не вистачило б на весь запуск. Я зупинив його і працював в один потік, доки вікно не оновилося.
Новіші версії Claude Code уміють ставити запуск на паузу, коли вичерпано ліміт, і продовжувати після оновлення. Для цього сесія має лишатися відкритою, а ліміт — оновитися протягом 24 годин. Тижневий ліміт може оновитися набагато пізніше, а збій сервісу — це взагалі не ліміт. Тож перевірка папки лишається.
Скільки агентів потрібно задачі — окреме питання. Я писав про це в розділі Коли 50 субагентів — неправильна відповідь.