ИИ-агенты в команде: что показали 11 тысяч коммитов

За 2026 год агенты сделали больше половины коммитов в моих проектах. Что они делают хорошо, где ошибаются и что держит качество - в цифрах.

16 мин чтенияИИагентыкачествоцифры

Год назад в моих репозиториях не было ни одного коммита от ИИ-агента. В сентябре 2026-го агенты сделали 94% коммитов с кодом, а я сам - 45 коммитов и 611 слияний. Это не график для презентации, а смена работы внутри той же должности, и мне захотелось посмотреть на нее честно, по данным.

Как задача из Telegram попадает к агенту, я уже описал в статье про конвейер. Здесь - что из этого вышло: история 21 репозитория, ревью на GitHub и заметки, которые агенты пишут себе после моих поправок.

Как я считал

  • Коммиты из всех веток 21 репозитория, без дублей между форками: один хеш - один коммит. Боты обновления зависимостей не считаются.
  • Агент - автор с машинным именем. Под ним коммитит конвейер задач и агенты, которые чинят код по ревью. Я - коммиты под моим именем. Команда - все остальные люди.
  • Цифры - на 2 октября 2026 года. Тот же скрипт собирает счетчики на главную страницу сайта.

Что изменилось в цифрах

Год Я Команда Агенты Всего
2024 21 803 0 824
2025 774 1 210 0 1 984
2026, по 2 октября 2 043 1 864 4 453 8 360
Всего 2 838 3 877 4 453 11 168

За девять месяцев 2026-го коммитов втрое больше, чем за два предыдущих года вместе. Больше двух третей прироста дали агенты. Команда выросла умеренно: 1 864 против 1 210. Мои коммиты тоже выросли, но больше половины из них - слияния (972 из 2 043), то есть решения, а не код.

Поэтому дальше слияния убраны: они показывают, кто нажал кнопку, а не кто писал код. Последняя колонка добавляет к агентам коммиты людей, в которых ИИ указан соавтором.

Месяц Я Команда Агенты Доля агентов С подписью ИИ
октябрь 2025 14 100 0 0% 0%
ноябрь 236 71 0 0% 0%
декабрь 364 143 0 0% 0%
январь 2026 172 94 143 35% 35%
февраль 157 79 138 37% 72%
март 154 59 25 11% 11%
апрель 99 132 85 27% 31%
май 140 128 0 0% 47%
июнь 177 116 55 16% 80%
июль 83 263 191 36% 47%
август 16 295 1 421 82% 83%
сентябрь 45 89 2 011 94% 95%

В таблице три периода.

Январь-февраль. Первые агенты появились 2 января и брали в Sabtrans мелкие тикеты: поиск, фильтры, приведение типов. Около трети коммитов.

Март-июль. Провал в таблице, но не в работе. С февраля я все чаще работал с ИИ в своем редакторе и терминале, и коммиты уходили под моим именем с подписью соавтора. В мае подпись соавтора-ИИ стоит на 124 моих коммитах из 140, в июне - на всех 177. Поэтому в последней колонке май и июнь - 47% и 80%.

С середины июля у агентов свое имя в журнале и конвейер задач. Август - 82%, сентябрь - 94%.

Где агенты работают больше всего

Только коммиты 2026 года, без слияний:

Проект Коммитов Доля агентов
Sabtrans 3 349 58%
PokerBot Online 2 057 67%
Касса и приложение для заведения 423 94%
Projects Hub 295 99%
Бесплатный таймер и мелкие инструменты 25 100%

Закономерность простая: чем старше код и чем больше в проекте людей, тем ниже доля агентов. Sabtrans - это почти миллион строк, годы легаси, команда разработчиков и клиенты, у которых в системе их деньги. Там агентов чуть больше половины. Проекты, начатые с агентами с первого дня, написаны ими почти целиком.

Дело не в том, что агенты не справляются с легаси. В легаси дорого стоит знание, где лежит ловушка, а это знание живет в головах, пока его не запишут. В новом проекте записывать нечего: правила появляются вместе с кодом.

Что агенты делают хорошо

Чинят чаще, чем строят

У 2 984 коммитов агентов есть тип в начале сообщения. Из них fix - 1 537 (52%), feat - 1 111 (37%), дальше docs, perf, test и chore - по 50-110. У меня за тот же год feat чаще, чем fix: 305 против 264.

Часть этих исправлений - доработка собственного кода после ревью, о ней ниже. Остальное - обычный поток: ошибка в отчете, задвоение в списке, форма падает на пустом поле. Такие дела люди годами откладывают, потому что каждое по отдельности мелкое.

Пишут тесты

Число файлов с тестами в основной ветке:

Репозиторий 1 окт 2025 1 янв 2026 1 июл 2026 Сейчас
Sabtrans, бэкенд 21 28 94 815
PokerBot Online нет 1 65 487

За 2026 год во всех репозиториях появилось 1 533 новых файла с тестами, 1 137 из них (74%) добавили агенты. За всю историю до 2026 года - 51 файл. Тесты трогают 41% коммитов агентов, у команды - 35%, у меня - 12%.

Оговорка: число файлов - не качество. Ревьюер не раз писал, что новый тест проверяет обвязку, а ключевую ветку логики не покрывает. Но разница между «тестов нет» и «тесты есть, и их можно улучшить» огромная.

Переносят по образцу

В Sabtrans есть эталонный модуль, и в правилах для агентов прямо сказано: новый модуль строится как он - слои, чтение отдельно от записи, SQL не в контроллерах. «Сделай еще двадцать таких же» - лучшая задача для агента. Перенос экранов со старого фронтенда на новый, вынос запросов из контроллеров, выравнивание по одному образцу - то, что человек делает три дня со скукой и ошибками, агент делает за вечер ровно.

Ведут свои правила

Файлы правил для агентов теперь в основном пишут сами агенты. В хабе файл с правилами правили 109 раз, 108 из них - агент. В проекте кассы для заведения - 85 из 85. Схема такая: я поправляю агента, он записывает правило вместе с причиной, следующий агент его читает.

Проверяют друг друга

Ревьюер в Sabtrans - тоже агент. С июля он посмотрел 488 PR и оставил 2 141 ревью. Первое ревью в 431 случае из 488 (88%) просит изменений, сразу одобрены только 39 PR (8%). Медиана - четыре ревью на один PR.

Ценно не количество, а то, что именно он ловит. Об этом в следующем разделе.

Где агенты ошибаются

Ошибки в коде бывают, но их ловят тесты и статический анализ. Дорогие ошибки лежат в другом месте.

Понимание задачи. Три урока, которые я описал в статье про конвейер, за год только подтвердились: агент присылает SQL-запрос вместо ответа, переделывает экран целиком, когда просили поправить масштаб, и работает по устаревшей картине. Насколько устаревшей бывает картина: однажды я попросил взять все задачи из переписки и сделать то, что не сделано. Из 47 «открытых» пунктов примерно половина была уже закрыта мной прямо в чате, а хаб об этом не знал. Похожая история с тикетами: «три клиента с одной поломкой» после чтения переписки целиком развалились. Один клиент уже написал «заработало», второй тикет оказался дублем, третий был вообще не про ошибку, а про вопрос без ответа.

«Готово», которое не готово. Самый неприятный случай. После разрешения конфликта слияния в коммит попала одна версия файла, а в рабочей копии осталась другая. Линтер, статический анализ, тесты и проверки интерфейса - все четыре зеленые, потому что смотрели рабочую копию. В коммите при этом не оказалось целого обработчика: маршрут и запрос из интерфейса остались, а кода за ними нет. Поймал только ревьюер. С тех пор после конфликтов проверки гоняются по коммиту, выгруженному в чистую папку.

Слепое пятно вокруг диффа. Агент хорошо видит свои изменения и плохо видит то, что вокруг них. Типичные находки ревьюера:

  • PR обещает клиенту «введите новые ключи», а на странице их ввести негде: цепочка не доведена до интерфейса;
  • новое поле формы сделали обязательным, а старая страница присылает его пустым, и сохранение падает с ошибкой 500 у любого аккаунта, где поле не выбрано;
  • миграция дозаполняет данные без нижней границы по дате и молча меняет итоги прошлых, возможно уже выплаченных месяцев;
  • новые права выдаются только новым аккаунтам, и существующие пользователи после включения функции остаются за дверью;
  • исправление разбора помогает только новым записям, а уже лежащие в базе остаются сломанными;
  • первый проход фоновой задачи после выкатки обработает всю накопленную историю, а не «только новое», как обещает описание PR;
  • одна страница тянет код из другой в обход общего слоя - нарушение слоев, которое тесты не заметят.

Общее у них одно: проблема не в строках диффа, а в старых данных, старых страницах и порядке выкатки.

Достроить данные. Агент предложил заполнить пустое поле «источник» у нескольких тысяч записей правдоподобным значением - отчеты стали бы красивее. Пустое поле честно говорит «данных нет», а придуманное значение неотличимо от настоящего и тихо портит аналитику. Теперь правило: восстанавливать только из сохраненного сырья, иначе оставлять пусто и прямо говорить об этом.

Расширить смысл слова. Я сказал «сливай и раскатывай все», имея в виду изменение, которое мы обсуждали. В общей ветке лежало десять PR, и уехали все. Теперь перед раскаткой агент одной строкой перечисляет, что уходит, что увидят пользователи и что едет попутно.

Поверить своей проверке. В оболочке агента grep -q вернул ответ, противоположный настоящему grep. Агент чуть не «починил» верное условие в скрипте выкатки, опираясь на собственный прогон. Логику скриптов теперь проверяют там, где она будет работать.

Что держит качество

Ворота, которые не уговорить

В бэкенде Sabtrans перед каждым коммитом запускается полная проверка: линтеры, Psalm на самом строгом уровне, тесты PHPUnit трех видов и проверки интерфейса. CI повторяет это и добавляет строгий TypeScript, тесты фронтенда и контроль размера сборки. В мобильном приложении покера и его сервере - порог покрытия тестами 85-88%, на сервере еще и строгая проверка типов.

Честно о дырах. Архитектурные правила в deptrac описывают 13 слоев, но они строже реальной договоренности и краснеют на принятых шаблонах, поэтому в обязательные ворота не входят. Источник правды - эталонный модуль, а часть порядка держится на договоренностях и на том, что агент их соблюдает.

Ревьюер с арбитром

С конца июля после каждого круга ревью арбитр решает: продолжать, остановиться или позвать человека. Через такой цикл прошли 449 PR: 370 из них в итоге одобрены, в 51 закончился бюджет проверок, в 21 арбитр написал «нужно решение человека».

Пример такого решения: ревьюер сам раньше потребовал, чтобы уведомление клиенту можно было отправить повторно, а теперь заметил, что повтор шлет дубль. Выполнить оба требования без хранения статуса доставки нельзя. Это выбор продукта, а не еще один круг проверки, и арбитр честно отдает его мне.

Цена у этого есть: в Sabtrans с августа примерно каждый третий коммит агента (432 из 1 416) упоминает ревью в сообщении. Это дешевле, чем ошибка на бою.

Черновики, а не готовые PR

Агент из конвейера всегда открывает черновой PR с пометкой «[агент]» и ничего не сливает. Я смотрю работу у себя или на стенде и только потом перевожу PR в ревью или сливаю. Работа агента попадает на глаза, но не выглядит готовой, пока ее никто не смотрел.

Договоренность работает, пока черновики разбираются, а не копятся. Сейчас в двух главных репозиториях 50 открытых PR, из них 22 черновика, самый старый - с июля. Это мой долг, а не агентов.

Бой - только чтение, и это проверяется

Правила про боевые серверы описаны в статье про конвейер. За год к ним добавились правила уровня кода, и часть из них проверяется автоматически, а не держится на честном слове:

  • тесты работают на отдельной базе и падают, если ее адрес совпадает с рабочим;
  • правка схемы сначала прогоняется на копии боевой базы, а не на пустой;
  • удаление - это пометка: кто и когда удалил, сама строка остается;
  • каждое действие персонала пишется в журнал, и тест не пропустит новое действие без понятного человеку названия.

Это правила не про агентов, они полезны и людям. Но с агентами они перестали быть добрыми намерениями.

Правила с «почему»

Файлы правил для агентов выросли: в хабе почти 1 900 строк, в проекте кассы - около 1 600, в бэкенде Sabtrans - 400 строк плюс навыки еще на 800. У каждого правила есть причина.

Пример из Sabtrans. Режим автоисправления статического анализатора однажды сузил тип параметра по видимым ему вызовам, а проверка внутри функции осталась. Ручной откат не держался: следующий прогон автоисправления возвращал сужение. В правилах про это не строчка «так не делать», а полстраницы о том, почему так вышло и что не работает как защита. Правило без причины агент рано или поздно «упростит обратно», как только оно ему помешает.

Комментарии в коде - по тому же принципу: объясняют «почему», а не «что».

Память: файл на один факт

В памяти агентов 238 заметок, 18 из них помечены как прямые поправки от меня. В каждой: что случилось, почему это важно и как применять. Один факт на файл, чтобы заметку можно было найти, обновить или удалить, не задев соседние, и чтобы память не превратилась во второй файл правил, который никто не дочитывает.

Машинное имя в журнале

Агент коммитит под своим именем, и по журналу видно, какой коммит машинный. Без этого статьи бы не было. Исключение - Sabtrans: там правило репозитория запрещает подписи ИИ в коммитах, и работа агентов в сессиях людей в статистике не видна.

Как изменилась моя роль

С 1 августа у меня 89 собственных коммитов и 915 слияний от моего имени, из них 890 - слияния PR. Только за сентябрь - 45 и 611.

При этом проекты живут в двух разных режимах:

PokerBot Online Sabtrans
Кто в проекте почти только я и агенты команда, клиенты, агенты
Где проверка в разговоре с агентом и на стенде, до PR ревьюер с арбитром, потом я
PR с августа 612 499
От открытия PR до слияния, медиана 4 минуты 2 ч 41 мин

В покере PR - запись уже принятого решения: я вижу результат в разговоре и на стенде, потом говорю «сливай и раскатывай». В Sabtrans с середины августа агенту разрешено сливать самому, если ревьюер одобрил и CI зеленый. Слияние там означает выкатку на бой, поэтому рискованное - миграции на бою, смена контрактов мобильного приложения - все равно идет через меня. Так что часть «моих» слияний нажал агент, но по моему правилу.

С августа треть коммитов агентов (31%) приходится на время с полуночи до восьми утра по Москве, 15% - на выходные, агенты коммитили 62 дня из 63. Но не стоит представлять роботов в пустом офисе. Я и раньше часто работал за полночь - пятая часть моих коммитов сделана с полуночи до восьми утра. Теперь ночью работаем вместе.

Что я делаю теперь:

  • формулирую задачу так, чтобы результат можно было проверить;
  • решаю то, что ревью решить не может;
  • смотрю результат своими глазами, а не отчет о нем;
  • сливаю и раскатываю;
  • записываю урок, чтобы следующий агент не наступил туда же.

Руками пишу редко, и в основном то, что быстрее сделать, чем объяснить.

Чего эти цифры не видят

  • Коммит - не единица работы. Агенты коммитят мелко и часто, плюс круги ревью. 94% коммитов не равно 94% работы. Сравнение по годам - это сравнение стилей не меньше, чем объемов.
  • Авторство дает нижнюю границу. 595 моих коммитов и 55 коммитов команды подписаны ИИ-соавтором, а в Sabtrans подписи запрещены правилом. За 2026 год без слияний доля агентов по авторству - 64%, вместе с подписями - 74%. Настоящая доля где-то выше.
  • Слияния устроены по-разному. В части репозиториев код вливается одним коммитом или пушится напрямую. Число PR посчитано только там, где есть коммиты слияния.
  • Тесты посчитаны файлами, а не смыслом.
  • Статистика ревью - только по Sabtrans. В покере ревьюер пока не подключен.

Что дальше

Ревьюер в покер. Сейчас качество там держится на тестах и моих глазах, а медианный PR живет четыре минуты. Код один на все клубы, и ошибка уезжает ко всем сразу. Ревьюер с арбитром уже показал, что ловит то, чего не видят тесты.

Черновики - так же регулярно, как готовое. Черновик, который лежит неделями, либо оживает, либо закрывается. Иначе договоренность о черновиках превращается в кладбище веток.

Мерить задачи, а не коммиты. Когда 94% коммитов делает тот, кто коммитит после каждого шага, их число перестает что-то говорить. Интереснее, сколько задач закрыто с первого раза и сколько вернулось.

Агенты не сделали меня лишним. Они сделали дорогим другое: ясную постановку задачи, правила с причинами и привычку проверять результат, а не рассказ о нем.

Esc

↑↓ выбор Enter открыть