Abide — принуждение кодящего агента к правилам проекта
📂 Исходный код на GitHubИнструмент, который проверяет каждое редактирование кодинг-агента на соответствие правилам проекта и заставляет агента чинить нарушения
Abide — open-source инструмент, который проверяет каждое изменение кодинг-агента против правил из ваших инструкций проекта (AGENTS.md, CLAUDE.md и им подобных) и заставляет агента исправлять нарушение прямо в той же сессии, без участия человека. Он работает как набор хуков для Claude Code и Codex и как плагин для OpenCode.
Главная идея проекта сформулирована в README так: кодинг-агенты начинают нарушать правила с самого первого редактирования. Линтеры такие правила поймать не могут — «не выводи сырую ошибку пользователю» или «не создавай преждевременные абстракции» невозможно проверить статически. По данным авторов, в 93 реальных сессиях агент нарушал одно из таких правил на каждые 13 ходов, начиная с первого же редактирования.
Как это работает
На каждом редактировании (или ходу, в зависимости от правила) Abide отправляет в Jev — decision model от TypeSafe — по одному вопросу на правило и получает обратно калиброванную вероятность нарушения. Jev видит только правило и diff, но не переписку, поэтому двухсотое редактирование проверяется так же, как первое.
Если агент нарушил правило, ему сообщают, какое именно правило нарушено, и требуют исправить его в текущем ходу. Агент чинит код и продолжает задачу — человек в цикл не встраивается. Пример вывода из README:
Abide: This edit appears to break a rule from this repository's instructions.
- Rule "api-validation-uses-yup" from ~/.codex/AGENTS.md line 65: "When writing API endpoints, do NOT write input validations manually. Use Yup (with clear validation messages) + early return in the API handler". (0.86)
Repair apps/web/src/pages/api/logout.ts now, then continue with the task.
Ключевые свойства подхода:
- Один вызов на редактирование, около 300 мс и тысячные доли цента.
- Правила, которые мог бы проверить линтер, отправляются линтеру, а не модели.
- Нет встроенных правил и отдельных instruction-файлов — enforcement целиком опирается на ваши существующие инструкции.
- Используется ваш API-ключ и ваши данные; серверов авторов Abide в пути запроса нет.
Почему раньше такого не было
Проверять каждое редактирование против каждого правила обычной LLM экономически и по латентности было невыгодно: один чек — около 2500 токенов, то есть цент и больше и несколько секунд на редактирование, плюс ответ приходит прозой, которую нужно парсить и которой нельзя полностью доверять. Двести редактирований в день делали такой вариант неприемлемым.
Jev меняет арифметику. Как decision model он отвечает на типизированный вопрос калиброванной вероятностью и ничем больше: свободного текста нет, выдумывать нечего. Он до 100 раз дешевле типичной LLM и отвечает примерно за 300 мс. Это делает разумной проверку каждого редактирования, каждый раз.
Установка и первый catch
Полная настройка занимает несколько минут:
- Получите API-ключ TypeSafe на typesafe.ai или используйте уже имеющийся ключ Vercel AI Gateway.
- Выполните
npx @coldtea/abide login, выберите тип ключа и куда его положить, и вставьте значение. Ключ попадает в~/.abide/.env(для всех репозиториев машины) или в.env.localтекущего репозитория — в обоих случаях доступ только у владельца файла. Уже существующий.envв корне репозитория тоже подойдёт. - Выполните
npx @coldtea/abide initв репозитории. - Запустите агента. На первом ходу он скомпилирует ваши правила в
.abide/rubric.jsonи сообщит, что нашёл. - Попросите сделать что-то запрещённое — агент получит сообщение о нарушении и исправит его до продолжения работы.
Поддерживаемые агенты
| Агент | Установка | Куда ставится |
|---|---|---|
| Claude Code | npx @coldtea/abide init claude |
~/.claude/settings.json |
| Codex | npx @coldtea/abide init codex |
~/.codex/hooks.json |
| OpenCode | npx @coldtea/abide init opencode |
~/.config/opencode/plugins/abide.js |
init без имени устанавливает хуки во все найденные агенты. Флаг --project ставит их в репозиторий, чтобы коллеги получили их вместе с клоном.
Нюансы по агентам: Codex после установки один раз спросит про новые хуки — нужно запустить codex, набрать /hooks и принять четыре записи abide. Codex редактирует код через apply_patch, а abide читает patch и судит каждый файл в нём. У OpenCode нет hook-процессов, поэтому abide работает как плагин: запрос на исправление дописывается в tool result редактирования, а ход, закончившийся нарушением, получает одно follow-up сообщение.
Аудит существующего кода
Команда abide audit src/ проверяет файлы так, будто их только что написали, и выдаёт таблицу по правилам и список по файлам. На 33 API-маршрутах реального Next.js-приложения, по данным авторов, уходит 12 секунд примерно в цент.
Команды CLI
| Команда | Что делает |
|---|---|
abide login |
сохраняет ключ TypeSafe или Vercel AI Gateway |
abide init [agent] |
устанавливает хуки (claude, codex, opencode или все найденные) |
abide audit [paths] |
судит существующие файлы, отчёт по правилам и файлам |
abide check [paths] |
проверяет незакоммиченные изменения так же, как хуки |
abide report |
ваши правила, что срабатывало, что никогда не срабатывает |
abide replay <agent> |
судит прошлые сессии репозитория в одном из трёх агентов |
abide compile |
компилирует рубрику сейчас, а не при следующем запуске |
abide calibrate |
оценивает каждое правило на вашей недавней git-истории |
abide tune |
переписывает правила, которые никогда не срабатывают |
abide bench |
латентность и расходы, измеренные на вашей машине |
abide uninstall [agent] |
удаляет хуки |
report, check, audit, bench и calibrate принимают флаг --json.
Рубрика принадлежит вам
.abide/rubric.json — коммитируемый читаемый файл. Каждый вердикт называет правило из него, а каждое правило цитирует строку вашего instruction-файла, из которой оно появилось. Ошибочный вердикт — это правило, которое можно переписать.
- Каждое правило выполняется в один из двух моментов:
editпосле каждого редактирования илиturnодин раз в конце против всего diff. Вопрос «добавлено больше, чем просили» не имеет ответа после первого из двенадцати редактирований. - У правила может быть
scopeиз glob-паттернов, чтобы API-маршрут и stylesheet получали разные вопросы. - Вердикты пороговые: от 0.8 агенту велено чинить; от 0.5 до 0.8 вы видите заметку, а агент нет; ниже 0.5 — ничего.
- Плохо сформулированное правило набирает 0.4 на всём и никогда не срабатывает.
calibrateнаходит такие правила по двадцати реальным hunks из вашей истории и выключает их, аtuneпросит агента переписать их.
Стоимость, приватность, безопасность
- Изменённые строки уходят в TypeSafe под вашим ключом и больше никуда; серверов авторов в пути нет.
- Retention — вопрос между вами и TypeSafe: их API не принимает per-request флаг retention, а zero data retention (docs.typesafe.ai/legal) — договорённость уровня аккаунта на enterprise-тарифе. Они заявляют, что Jev не обучается на запросах и ответах клиентов. С ключом шлюза запрос несёт
zeroDataRetention: true, что просит Vercel AI Gateway маршрутизировать только к провайдерам с zero-retention соглашением. - Порядок поиска ключа: окружение, затем
.env.localи.envв корне репозитория, затем~/.abide/.env. Никогда через флаг, никогда не логируется. Вместо ключа TypeSafe можно задатьAI_GATEWAY_API_KEYи идти через Vercel AI Gateway. - Проверка на 13 правилах этого репозитория — от 1000 до 1600 input-токенов, $0.00004–$0.00007, около 300 мс на Jev и около 1 с на весь хук с учётом старта Node. Ход из 15 редактирований стоит десятую часть цента. Замеры от 2026-09-18, напрямую в TypeSafe;
abide benchизмерит ваши. - Хуки не могут сломать сессию: каждый путь завершается с кодом 0, имеет жёсткий дедлайн и печатает только то, что ждёт хост.
- Нет ключа или сети — редактирование проходит без проверки, а пропуск логируется в
.abide/events.jsonl, гдеreportего подсчитывает.
Как хуки встраиваются
Четыре хука на агента. На старте сессии — хэшируются instruction-файлы, агенту предлагается скомпилировать рубрику, если они изменились. На старте хода — снимается снапшот рабочего дерева через git. После каждого редактирования — выполняются edit-phase правила на этом hunk. В конце хода — diff всего хода против снапшота, turn-phase правила плюс edit-phase правила для всего, что записала shell-команда.
Удаление
abide uninstall # из всех агентов, куда ставилось
abide uninstall codex # один агент; --project для установки в репозиторий
Удаляются только записи abide; рубрики и ~/.abide/.env остаются, пока вы не удалите их сами.
Структура репозитория
packages/schema— рубрика, payload-ы хуков, вердикты и события как zod-схемы.packages/cli— командаabide, скрипт хука и плагин OpenCode.skills/abide-compile— процедура, по которой агент компилирует рубрику.
Подробности методики бенчмарка, таблица по правилам и разбор ошибок — в benchmarks/replay. Лицензия — MIT.
Источник: https://github.com/coldteadotai/abide