ИИ-агенты в команде: что показали 11 тысяч коммитов
За 2026 год агенты сделали больше половины коммитов в моих проектах. Что они делают хорошо, где ошибаются и что держит качество - в цифрах.
Год назад в моих репозиториях не было ни одного коммита от ИИ-агента. В сентябре 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% коммитов делает тот, кто коммитит после каждого шага, их число перестает что-то говорить. Интереснее, сколько задач закрыто с первого раза и сколько вернулось.
Агенты не сделали меня лишним. Они сделали дорогим другое: ясную постановку задачи, правила с причинами и привычку проверять результат, а не рассказ о нем.