Вместе с растущей AI-индустрией приходят и её побочки. Я мейнтейнер библиотеки react-native-tdlib и довольно быстро заметил: все больше PR выглядят как чистый вывод агента. Сначала я честно реагировал — писал в каждый такой PR вопросы: тестировали ли вы это, что именно меняет ваш код, зачем вот эта строчка. В какой-то момент понял, что трачу время на переписку с людьми, которые сами не знают, что написали.
Первая мысль была — написать большой README или CONTRIBUTING и прямым текстом сказать: «сгенерированный код не принимаю». Но тут же упёрся в вопрос: а как доказать, что код сгенерирован? Аргумент «чую, тут пахнет Claude Code» — так себе позиция для публичного спора в комментариях к PR.
Решение оказалось довольно простым — AGENTS.md. Он конечно не доказывает, что PR сгенерирован, но отлично ловит самые очевидные автоматические PR, где автор, кажется, вообще не участвовал в процессе.
Как работает AGENTS.md и для чего он сделан
AGENTS.md — это, по сути, README, но не для людей, а для агентов. Немного истории. Формат придумал OpenAI для своего Codex CLI летом 2025-го, а в конце 2025-го стандарт передали под нейтральное управление в Linux Foundation. На момент написания статьи его используют десятки тысяч open-source проектов, и читают практически все основные инструменты: Codex, Claude Code, Cursor, Copilot, Gemini CLI, и прочие. Смысл в том, что это один файл на все агенты и не надо плодить для каждого по отдельности.
Ключевой момент в нашем случае: агент читает AGENTS.md ещё до того, как начинает планировать изменения. То есть любой инструмент, которым кто-то натравливает агента на твой репозиторий, сначала проглатывает твои инструкции, а уже потом лезет в код.
Обычный, «честный» AGENTS.md выглядит примерно так:
# AGENTS.md## Dev environment- Package manager: yarn- Build: yarn build- Test: yarn test- Lint: yarn lint## Conventions- TypeScript strict mode, no `any`- Native-модули трогаем только с явным обоснованием в описании PR
Полезно само по себе, так как агенту не приходится сильно углубляться в контекст, чтобы понять основные правила проекта. Но раз уж агент гарантированно читает этот файл — почему бы не положить туда кое-что ещё.
Клеймо для PR «maybe automated»
Я перестал пытаться ловить агента и начал просить его представиться. Идея в том, что определять сгенерированный код не нужно — достаточно попросить раскрыть факт его использования в том самом файле, который агент гарантированно читает первым.
Работает это в три шага.
Шаг 1. Самораскрытие через AGENTS.md. В этом простом файле лежит прямая инструкция: если PR делается полностью AI-агентом, то пусть он отметит пункт в шаблоне PR. В самом шаблоне этот пункт выглядит примерно так:
## Disclosure- [ ] This PR was written with meaningful AI agent assistance (see AGENTS.md)
Фокус в том, что агент, читающий AGENTS.md, эту галочку честно ставит, а человек, писавший код руками, оставляет её пустой. То есть чекбокс сам по себе неплохо разделяет потоки, и ничего «доказывать» не приходится.
Шаг 2. Бот вешает лейбл и ставит таймер. Дальше срабатывает обычный GitHub Action. Поймав отмеченный пункт, он вешает на PR лейбл maybe automated, пишет комментарий и запускает таймер: PR автоматически закроется через 3 дня, если не подтвердите свое авторство.
Шаг 3. Проверка, которую нельзя сгенерировать. Бот в том же комментарии требует не «честное слово», а логи прогона изменённого метода в example/приложении на живой TDLib-сессии, отдельно на iOS и Android.
Это ключевой момент именно для моей библиотеки. react-native-tdlib — это нативный мост (ios/, android/), и сгенерированный PR обычно «проходит тесты» именно потому, что тесты ничего нативного не трогают. А вот device-логи реального прогона на двух платформах, для них придется собрать пример, поднять TDLib-сессию и реально прогнать методы.
Реальный пример
К примеру вот в этом PR агент ровно так и сделал как прописано в AGENTS.md. То есть человек, скорее всего, в процесс толком и не вникал, иначе заметил бы эту галочку. Бот тут же повесил maybe automated и попросил device-логи с обеих платформ. Дальше показательнее всего повёл себя автор и как только PR попал под лейбл, он закрыл его сам — видимо, понял, что спалился. Таким образом я сэкономил себе время на ревью кода и бесполезные вопросы.
Итог
AGENTS.md задумывался как способ сделать агентов полезнее, а для меня в итоге стал способом как легко вычислить агента. Ирония в том, что файл для агентов лучше всего ловит тех, кто за этими агентами прячется.
Чем самостоятельнее с каждым днём становится AI, тем чаще люди используют его в своих гадких целях. Накидать PR-ов по чужим репозиториям, набить профиль на гитхабе, собрать мнимую репутацию — а завтра, может, и устроиться на работу «на основе вклада в open source», которого по факту не было. Мне не жалко, что люди пользуются агентами — я сам активно их использую, но напрягает когда за коммитом нет человека, который понимает, что там написано, и готов взять ответственность. AGENTS.md всего этого не лечит, но хотя бы диктует простое правило: хочешь, чтобы твой вклад засчитали — покажи, что ты запускал собственный код.
ссылка на оригинал статьи https://habr.com/ru/articles/1038786/