no-mistakes — git-гейт, который проверяет ветку агентом и открывает чистый PR

· 6 мин чтения
git ai-agents code-review automation ci
📂 Исходный код на GitHub

Локальный git-гейт на Go: пуш в no-mistakes вместо origin запускает AI-конвейер проверок (ревью, тесты, документация, линт) в одноразовом worktree и открывает чистый PR только после прохождения всех шагов.

no-mistakes — git-гейт, который проверяет ветку агентом и открывает чистый PR

no-mistakes — это открытый инструмент на Go, который ставит локальный git-прокси перед вашим настоящим удалённым репозиторием. Вместо привычного git push origin вы отправляете ветку в remote с именем no-mistakes. Инструмент принимает пуш, разворачивает одноразовый worktree и прогоняет ветку через конвейер проверок с участием ИИ-агента. Только когда все шаги пройдены, ветка уходит в настоящий remote, а pull request открывается автоматически. Проект распространяется по лицензии MIT и собрал около 9 000 звёзд на GitHub. Автор — инженер Kun Chen (ник kunchenguid).

Девиз проекта короткий: «Kill all the slop. Raise clean PR». В переводе — убить мусорный код, открывать чистые PR.

Зачем нужен гейт перед пушем

Когда код пишет агент, быстрые пуши легко превращают репозиторий в свалку: недописанные ветки, пустые описания PR, красный CI, отставшая документация. no-mistakes закрывает эту проблему на самом входе — на этапе git push.

Инструмент авторы называют гейтом. Гейт — это локальный bare-репозиторий, который принимает ваши пуши раньше настоящего remote и пропускает их дальше только после проверок. Вы продолжаете работать как обычно: origin остаётся нетронутым, и в любой момент можно обойти гейт обычным git push origin <branch>.

Как это устроено

Команда no-mistakes init выполняется один раз в репозитории. Она делает несколько вещей:

  • создаёт локальный bare-репозиторий гейта в ~/.no-mistakes/repos/<id>.git;
  • добавляет в ваш проект git-remote с именем no-mistakes;
  • ставит managed-хуки pre-receive и post-receive;
  • убеждается, что фоновый демон запущен;
  • устанавливает скилл /no-mistakes для ваших агентов на уровне пользователя — он доступен во всех репозиториях.

Дальше рабочий цикл выглядит так:

git push no-mistakes
    |
    v
одноразовый worktree — ваша рабочая копия не трогается
review -> test -> docs -> lint -> push -> PR -> CI
    |
    v
все проверки зелёные -> чистый PR открыт за вас

Пуш попадает в локальный bare-репозиторий, хук будит демона, и демон запускает конвейер в отдельном worktree. Ваша текущая работа не прерывается — конвейер идёт в фоне. Каждая ветка получает свои проверки.

Гейт привязан к пути репозитория. Если вы переименовали или перенесли каталог проекта, зайдите в новое расположение и снова выполните no-mistakes init — инструмент подхватит существующий гейт вместе с историей прогонов. Проверку no-mistakes init можно безопасно запускать повторно в любой момент: она обновляет привязку гейта и переустанавливает скилл /no-mistakes после обновления инструмента.

Девять шагов конвейера

Пайплайн состоит из девяти шагов:

Шаг Что делает
Intent Берёт формулировку задачи от агента или восстанавливает намерение из локальных расшифровок ваших сессий с агентом.
Rebase Ребейзит ветку на свежий upstream и целевую ветку.
Review Прогоняет AI-ревью вашего диффа.
Test Запускает базовые тесты, а при известном намерении — дополнительные проверки по задаче.
Document Обновляет документацию и сообщает о незакрытых пробелах.
Lint Запускает ваши линтеры: настроенную команду или автоматически выбранные агентом.
Push Отправляет ветку в заданный целевой репозиторий.
PR Создаёт или обновляет pull request с описанием.
CI Следит за CI и сливаемостью PR, автоматически чинит падения.

Замечания вместо падений

Каждый шаг либо проходит сам, либо останавливается с замечанием. У замечаний два типа:

  • auto-fix — безопасные механические правки. Конвейер применяет их сам, и работа продолжается.
  • ask-user — всё, что затрагивает смысл ваших изменений. Здесь решение за вами: approve, fix или skip.

Так конвейер чинит мелочи сам, а ключевые решения оставляет человеку.

Отдельно устроен ремонт упавшего CI. Конвейер чинит падение и публикует фикс через защищённый force-push — но только если может доказать, что фикс построен на том коммите, который вы уже ревьюили. Если доказать это нельзя, фикс отправляется обратно через Review, чтобы чужая история не заменила проверенный коммит. Правки merge-конфликтов переписывают историю, поэтому всегда идут через ревью. Если хотите ревьюить каждый починенный CI-прогон, включите настройку ci.revalidate_repairs: true — ценой ещё одного полного прохода по изменению.

Установка и первый запуск

macOS и Linux — одной командой:

curl -fsSL https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/docs/install.sh | sh

Установщик кладёт бинарник в ~/.no-mistakes/bin, добавляет ссылку в ~/.local/bin или /usr/local/bin и перезапускает фоновый демон. Официальные сборки отправляют телеметрию; отключить её можно переменной NO_MISTAKES_TELEMETRY=0. Для Windows, Go-установки, Nix и сборки из исходников есть отдельное руководство.

Перед началом работы проверьте окружение:

no-mistakes doctor

Для работы нужны три вещи:

  • git;
  • хотя бы один поддержанный агент-раннер: claude, codex, grok, opencode, copilot и другие;
  • для PR и CI — утилита вашей платформы: gh (GitHub), glab (GitLab), az (Azure DevOps) и другие.

Дальше — no-mistakes init в репозитории с remote origin и рабочий цикл:

git checkout -b feature/login-fix
# работаем, коммитим
git push no-mistakes
no-mistakes   # открыть TUI активного прогона

Для контрибуций в чужой репозиторий через форк держите origin на родительском репозитории и инициализируйте командой no-mistakes init --fork-url <url-вашего-форка>. Гейт будет пушить проверенные ветки в форк, а PR открывать в родительский репозиторий.

Три способа запустить проверку

Каждое изменение проходит через один и тот же конвейер. Выбирается только вход:

  • git push no-mistakes — явный git-путь. Коммитите ветку и пушите её в гейт вместо origin.
  • no-mistakes — TUI. Запуск без коммита: мастер проведёт вас через создание ветки, коммит и пуш через гейт, затем покажет прогресс прогона. Команда no-mistakes -y делает всё это автоматически.
  • /no-mistakes — скилл для агента. Вариант /no-mistakes <task> даёт агенту задачу: он сам коммитит только нужные изменения и прогоняет их через конвейер. Вариант без аргументов проверяет уже закоммиченную работу.

Под капотом скилл управляет гейтом через no-mistakes axi — неинтерактивный командный интерфейс, который принимает только флаги и печатает результаты в формате TOON. Тот же поток согласований, что и в TUI, но для автоматизации.

Работает с любым агентом

Инструмент не привязан к конкретному агенту. Поддерживаются claude, codex, grok, rovodev, opencode, pi, copilot, antigravity, а также cursor, devin и другие ACP-раннеры через acpx. Для каждого шага можно задать несколько агентов с порядком отката: если первый недоступен, конвейер пробует следующий. Каждая проверка требует настроенного и запускаемого агента — без него гейт падает до первого шага.

Платформы для PR и CI: GitHub (gh), GitLab (glab), Forgejo, Bitbucket Cloud, Azure DevOps (az), Gitea (tea) и подключаемые плагины провайдеров.

Кому пригодится

no-mistakes для тех, кто генерирует много кода агентами и не хочет вручную разгребать ветки, писать описания PR и следить за красным CI. Вы пушите в гейт и занимаетесь следующей задачей, пока конвейер доводит изменение до чистого PR. Полная документация с описанием каждого шага — на сайте проекта.

Источник: https://github.com/kunchenguid/no-mistakes