We stopped AI bot spam in our GitHub repo using Git’s –author flag
Знаете это чувство, когда открываешь репозиторий утром, а там — 47 новых pull request’ов (PR — запрос на внесение изменений в код)? И все они от ботов с именами вроде `ai-pr-generator-x742`? Мне кажется, это новая реальность open source.
Команда Archestra столкнулась с этим лицом к лицу. И нашла элегантное решение — без enterprise-планов и навороченных модераторов.
Кнопка баунти обернулась кошмаром
Всё началось невинно. Разработчики добавили баунти ($900) на задачу по интеграции MCP Apps. Хотелось привлечь community к проекту.
Реакция не заставила себя ждать — но не та, которую ожидали.
Сначала пришли нормальные люди: предлагали планы, задавали вопросы, делали попытки реализации. А потом хлынул поток от ботов, которые генерировали текст без кода.
AI боты захватили issue (задача или обсуждение в GitHub) так, что он разросся до 253 комментариев. Большинство из них — пустой noise: «Here’s my implementation plan», «I’ll work on this». Без единой строки кода.
БАУНТИ $900 НА ISSUE
─────────────────────
Легитимные ████████░░░░░░░░░░░ ~20%
контрибьюторы
AI боты ████████████████████ ~80%
↑
весь шум тут
История повторилась с другими issue. Для добавления x.ai провайдера (поставщик — интеграция с внешним сервисом) пришло 27 pull request’ов. Большинство авторов даже не запускали код локально.
Один из членов команды тратил полдня каждую неделю на уборку этого мусора: закрытие непроверенных PR, удаление issues от ботов.
Пропустили чистку? Репозиторий (хранилище кода проекта) мгновенно становился негостеприимным для реальных разработчиков.
Что только не пробовали
Первая попытка — London-Cat. Маленький бот, который считал «репутацию» контрибьютора по количеству принятых и объединённых с основным кодом PR и другим сигналам.
Не помогло остановить спам, но хотя бы помогло понять «кто есть кто».
Вторая попытка — AI Sheriff (по сути auto-moderator). Закрывал подозрительные PR автоматически.
Проблема: он умудрился закрыть несколько легитимных pull request’ов 🤦
Команда всерьёз задумалась: может ну его, эти баунти? Может перестать давать тестовые задания кандидатам?
Настоящее решение оказалось простым
Решили действовать радикально: ограничить доступ к репозиторию тем, кто прошёл онбординг (процесс регистрации нового участника).
Звучит как enterprise-план за $20k/месяц? Ан нет.
GitHub позволяет ограничить активность до «prior contributors» — тех, кто уже делал коммиты (сохранённые изменения в коде) в main ветку (основная рабочая версия кода).
Но есть нюанс: эта настройка блокирует и AI ботов, и новых разработчиков одним махом. Ещё один делал коммит раньше? Нет доступа!
Поэтому они сделали ход конём:
- Пользователь открывает issue или PR
- Бот проверяет: это легитимный контрибьютор или первый раз?
- Если первый — кидает ссылку на процесс онбординга
- Пользователь проходит онбординг → получает доступ
ПРОЦЕСС ОНБОРДИНГА КОНТРИБЬЮТОРА
─────────────────────────────────
┌─────────┐ ┌──────────┐
│Открывает│ │ Проверка │
│ PR │────▶│ прав │
└─────────┘ └────┬─────┘
│
┌─────────────┴──────────┐
▼ ▼
┌──────────────┐ ┌───────────────┐
│ Легитимный │ │ Первый раз? │
│ контрибьютор│ │ Добро пожаловать│
└──────┬───────┘ └───────┬───────┘
▼ │
Создаёт коммит ▼
от имени пользователя Проходит онбординг
через git commit через сайт/бот
--author └──▶ Получает доступ ✅
А теперь самая хитрая часть — как создать коммит от имени пользователя без его SSH-ключа?
Используем GitHub API, находим ID пользователя по username:
GET /users/{username}
Получаем noreply email вида `
Теперь создаём коммит:
git commit --author="Name <email>" --allow-empty -m "chore: welcome contributor"
В Git каждый коммит хранит два поля автора: имя и email. Когда этот коммит пушится в GitHub, он связывается с профилем пользователя автоматически ✅
Весь процесс автоматизирован через GitHub Actions (автоматизация действий на GitHub):
- Пользователь открывает issue или PR → триггерится workflow
- Проверяем историю коммитов через API
- Если это новый человек → оставляем comment со ссылкой на процесс онбординга
Процесс полностью автоматический: никакого ручного одобрения администратором.
Элегантно? Да.
Три месяца работы с баунти показали: AI-спам — это новая реальность open source проектов любого масштаба. Но решать её дорогими enterprise-инструментами не обязательно.
GitHub + git commit --author + Actions = полноценный онбординг для внешних контрибьюторов без спама и без ручной модерации.
Ссылки
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.