We stopped AI bot spam in our GitHub repo using Git’s –author flag

19.05.2026 · 5 мин

Знаете это чувство, когда открываешь репозиторий утром, а там — 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 ботов, и новых разработчиков одним махом. Ещё один делал коммит раньше? Нет доступа!

Поэтому они сделали ход конём:

  1. Пользователь открывает issue или PR
  2. Бот проверяет: это легитимный контрибьютор или первый раз?
  3. Если первый — кидает ссылку на процесс онбординга
  4. Пользователь проходит онбординг → получает доступ
ПРОЦЕСС ОНБОРДИНГА КОНТРИБЬЮТОРА
─────────────────────────────────
                                    
  ┌─────────┐     ┌──────────┐    
  │Открывает│     │ Проверка │    
  │   PR    │────▶│   прав   │    
  └─────────┘     └────┬─────┘    
                       │
         ┌─────────────┴──────────┐
         ▼                         ▼
  ┌──────────────┐         ┌───────────────┐
  │ Легитимный   │         │ Первый раз?   │
  │ контрибьютор│         │ Добро пожаловать│
  └──────┬───────┘         └───────┬───────┘
         ▼                         │
    Создаёт коммит                 ▼
    от имени пользователя    Проходит онбординг
    через git commit          через сайт/бот  
    --author                  └──▶ Получает доступ ✅
Схема процесса онбординга внешнего контрибьютора

А теперь самая хитрая часть — как создать коммит от имени пользователя без его SSH-ключа?

Используем GitHub API, находим ID пользователя по username:

GET /users/{username}

Получаем noreply email вида `+@users.noreply.github.com`

Теперь создаём коммит:

git commit --author="Name <email>" --allow-empty -m "chore: welcome contributor"

В Git каждый коммит хранит два поля автора: имя и email. Когда этот коммит пушится в GitHub, он связывается с профилем пользователя автоматически ✅

Весь процесс автоматизирован через GitHub Actions (автоматизация действий на GitHub):

Процесс полностью автоматический: никакого ручного одобрения администратором.

Элегантно? Да.

Три месяца работы с баунти показали: AI-спам — это новая реальность open source проектов любого масштаба. Но решать её дорогими enterprise-инструментами не обязательно.

GitHub + git commit --author + Actions = полноценный онбординг для внешних контрибьюторов без спама и без ручной модерации.

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.