Агент открыл пул-реквест, проверка на нём упала. Дальше кто-то должен вернуться к работе: открыть журнал сборки, понять причину, дописать коммит. Cursor замыкает эту петлю на самого агента - облачные агенты сами берутся чинить упавшие проверки в тех пул-реквестах, которые создали. Поддерживается сейчас GitHub Actions, и это не отдельный режим, который включают под задачу, а поведение по умолчанию, у которого есть выключатель.
Первое желание - разрешить автоматике чинить всё красное. Оно естественно, потому что красная проверка выглядит одинаково независимо от причины: интерфейс показывает крест, и по кресту не видно, сломал ли его этот пул-реквест, чужой коммит или подвисший исполнитель. Раз внешне результат один и тот же, кажется логичным и реакцию сделать одну и ту же, а разбираться уже по ходу починки.
Ломается это на источнике падения. Заметная доля красных проверок не имеет отношения к изменению: та же проверка уже падала на базовом коммите, тест оказался нестабильным, внешний сервис не ответил. Агент, который берётся за такое падение, пишет коммиты в никуда, а иногда и подгоняет код под чужую поломку. Второй источник хуже: в ветку мог запушить человек, и тогда автоматика начнёт править поверх живой работы, замысел которой она не видит целиком.
Поэтому контур описан не столько через то, что он делает, сколько через то, чего он не трогает. Он молчит, если в ветку пришёл новый человеческий коммит - падения на человеческих коммитах агент не чинит. Он молчит, если человек дописал агенту сообщение вдогонку. Он молчит, если та же проверка уже падает на базовом коммите пул-реквеста. И он молчит, если по этому пул-реквесту уже было десять продолжений по падениям сборки. Ниже такой перечень целиком:
Предел продолжений стоит отдельно от остальных условий, потому что он ограничивает не источник, а объём. Все прочие правила отвечают на вопрос, чьё это падение; десятое продолжение отвечает на вопрос, сколько попыток разумно. Автоматическая починка проверки - это петля с обратной связью: коммит запускает сборку, сборка даёт результат, результат запускает агента. Петля без счётчика способна крутиться, пока кто-нибудь не заметит, и предел здесь не мелочь настроек, а условие безопасности всей конструкции.
| Событие |
|---|
| Поведение контура |
|---|
| Причина |
|---|
| Упала проверка GitHub Actions в пул-реквесте агента | Агент берётся чинить сам | Падение относится к его собственному изменению |
|---|---|---|
| В ветку пришёл человеческий коммит | Контур молчит | На человеческих коммитах автоматика не срабатывает |
| Человек дописал агенту сообщение вдогонку | Контур молчит | Работой снова управляет человек |
| Та же проверка падает на базовом коммите | Контур молчит | Падение вызвано не этим пул-реквестом |
| По пул-реквесту уже было десять продолжений по падениям | Контур молчит | Предел продолжений исчерпан |
| Просьба в комментарии починить падения | Агент чинит по запросу | Явная команда человека, в том числе про конкретную проверку |
| Комментарий @cursor autofix off | Контур выключен для этого пул-реквеста | Точечное отключение без правки общих настроек |
Ручной вызов при этом остаётся. Агента зовут комментарием в пул-реквесте и просят починить падения, а можно назвать конкретную проверку, например упавший линтер. Разница практическая, а не косметическая: адресная просьба сужает область, и агент не начинает разбираться со всей матрицей сборки ради одной строки. Тот же путь выручает, когда автоматика промолчала по одному из своих условий, а починка всё-таки нужна.
Выключается всё это на двух уровнях. Целиком для своих облачных агентов - в панели управления Cursor, в разделе облачных агентов, в личных настройках, где снимается опция автоматической починки падений сборки. Точечно для одного пул-реквеста - комментарием @cursor autofix off, обратно включается комментарием @cursor autofix on. Второй уровень на практике важнее первого: он позволяет не отключать полезный контур насовсем ради одного пул-реквеста, где автоматика мешает.
Цена складывается из трёх частей. Каждое продолжение - это прогон агента и следом полный прогон сборки, то есть минуты и деньги; десять продолжений на один пул-реквест уже заметная величина, особенно на длинных матрицах. Дальше идёт шум в истории ветки: серия правочных коммитов поверх осмысленного изменения читается хуже, чем одно. И главное - риск подгонки: агент, у которого критерий успеха сформулирован как зелёная проверка, вправе сделать её зелёной любым способом, включая ослабление самой проверки.
Оправдан контур там, где падения массовые и механические: формат, линтер, типы, забытый снимок, несобранный сгенерированный файл. На таких падениях он экономит ровно тот вид внимания, который тратится зря. В проектах, где сборка нестабильна сама по себе, включать его до починки нестабильности бессмысленно - он будет чинить погоду. Проверяют результат не по цвету значка, а по содержимому правочных коммитов: смотрят, что именно изменилось после автоматической починки, и отдельно смотрят, не тронуты ли сами тесты, пороги покрытия и конфигурация линтера.
Отдельно стоит помнить про доступность: контур раскатан на командные аккаунты, для остальных он заявлен как готовящийся, и планировать на него процесс до этого не стоит. Типичные провалы предсказуемы. Включить автоматику на проекте с нестабильными тестами и получить серию продолжений на каждом пул-реквесте. Принять зелёный значок за доказательство, не прочитав правочные коммиты. Запушить свой коммит в ветку агента и ждать, что он продолжит чинить, - после человеческого коммита контур молчит по правилу, а не по ошибке. Выключить механизм целиком из-за одного шумного пул-реквеста вместо точечного комментария. И оставить агенту право править конфигурацию проверок, а потом удивляться, что упавший тест исчез вместо того, чтобы пройти.