
Автоматическое обнаружение и отслеживание фальшивой активности на GitHub — ежедневный CI, без инфраструктуры
Автоматическое обнаружение и отслеживание накрутки активности на GitHub
Проект JS Labs —
часть инициативы AI Slop Intelligence.
Запускается каждый день. Оценивает каждый подозрительный аккаунт. Обнаруживает скоординированные бот-кампании.
Открывает issues напрямую в скомпрометированных репозиториях, чтобы мейнтейнеры могли отреагировать.
Поддержите этот проект
BTC 3QjWqhQbHdHgWeYHTpmorP8Pe1wgDjJy54
ETH 0x5851e6145F4773d1585b8686095FB16E368a4dA1
ZEC t1KSR5YkNPbjqRSCoLKo5AddFWdm9Kzxh1B
Звёзды GitHub — это сигнал доверия. По ним разработчики решают, что оценивать, от чего зависеть и что рекомендовать. Этот сигнал систематически портится.
Во время ИИ-бума 2024–2026 годов появилась индустрия ферм ботов, создающих видимость надёжности для низкокачественных, часто вредоносных репозиториев. Проект с 800 звёздами за 48 часов выглядит легитимным для разработчика, просматривающего результаты поиска. В этом и смысл. Цель накрутки — не сами звёзды, а социальное доказательство, которое они создают, и последующие решения, на которые это доказательство влияет.
Закономерность легко распознать. Аккаунты, созданные на одной неделе, без био, без подписчиков, без собственных репозиториев, ставящие звёзды одним и тем же 15 репозиториям в течение двух часов. Не одна кампания, а десятки, работающие одновременно, каждый день, через тысячи аккаунтов. Данные показывают репозитории, где 185 из 185 вовлечённых — боты. 100% фальшивки. Целые позиции в трендах построены на пустоте.
phantomstars был создан, потому что эта задача решаема. Соотношение сигнала и шума в публичном API GitHub пока ещё достаточно высокое, чтобы скоординированные кампании оставляли чёткие отпечатки. Этот проект считывает эти отпечатки, публикует сырые данные и напрямую уведомляет мейнтейнеров затронутых репозиториев.
Это часть более широкой работы AI Slop Intelligence в JS Labs — продолжающегося исследования механизмов и измеримых последствий низкокачественного ИИ-контента, заполоняющего экосистему разработчиков. Накрутка — не периферийная проблема. Это механизм распространения, который доставляет мусорный контент реальным пользователям.
phantomstars запускает ежедневное задание GitHub Actions, которое:
r/osinttools и r/coolgithubprojects, извлекая ссылки на GitHub-репозитории за последние 2 дняНикаких серверов. Никаких баз данных. Никаких расходов на инфраструктуру.
Да. Когда доля накрутки репозитория превышает 40% или обнаружена скоординированная кампания, phantomstars открывает issue прямо в этом репозитории. Issue содержит полную таблицу подозреваемых, состав кампании, композитные оценки и даты создания аккаунтов: всё, что нужно мейнтейнеру для расследования и обращения в GitHub.
Если в целевом репозитории отключены issues, уведомление молча пропускается и фиксируется в журнале сканирования.
Да.
owner/repo и запустите таргетированное сканирование.Почему такое разделение:
Да. Если ваш аккаунт появился в data/suspects.jsonl и вы считаете классификацию неверной, откройте issue о ложном срабатывании, используя предоставленный шаблон. Сообщения проверяются вручную перед добавлением в список исключений. Список исключений хранится в data/allowlist.txt; аккаунты из него исключаются из всех будущих сканов и из журнала подозреваемых.
ID кампании (например, c-a3f9b2e1) — это детерминированный 8-символьный шестнадцатеричный отпечаток, полученный из SHA-256 хеша отсортированного набора логинов участников этой кампании. Одна и та же группа аккаунтов будет давать один и тот же ID кампании при независимых запусках сканирования, что позволяет отслеживать динамику. Это не имя репозитория, не имя пользователя и не внешний идентификатор.
Стабильность: ID стабилен, пока набор участников кампании не меняется. Если боты добавлены или заблокированы между сканами, ID меняется, потому что изменился состав. Это ожидаемо и отражает реальное изменение состава бот-ферм.
Да. Дата создания каждого аккаунта берётся из GitHub GraphQL API (поле createdAt) и сохраняется в каждой записи подозреваемого как account_created_at. Это также основной вход для оценки возраста аккаунта — самого сильного сигнала для фейковых аккаунтов. Аккаунты, созданные в течение 2 дней до вовлечённости, получают 1.0 только за возраст.