Abide — принуждение кодящего агента к правилам проекта

· 2 мин чтения
ai-agents rule-enforcement claude-code hooks ai-coding
📂 Исходный код на GitHub

Инструмент, который проверяет каждое редактирование кодинг-агента на соответствие правилам проекта и заставляет агента чинить нарушения

Abide — принуждение кодящего агента к правилам проекта

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

Полная настройка занимает несколько минут:

  1. Получите API-ключ TypeSafe на typesafe.ai или используйте уже имеющийся ключ Vercel AI Gateway.
  2. Выполните npx @coldtea/abide login, выберите тип ключа и куда его положить, и вставьте значение. Ключ попадает в ~/.abide/.env (для всех репозиториев машины) или в .env.local текущего репозитория — в обоих случаях доступ только у владельца файла. Уже существующий .env в корне репозитория тоже подойдёт.
  3. Выполните npx @coldtea/abide init в репозитории.
  4. Запустите агента. На первом ходу он скомпилирует ваши правила в .abide/rubric.json и сообщит, что нашёл.
  5. Попросите сделать что-то запрещённое — агент получит сообщение о нарушении и исправит его до продолжения работы.

Поддерживаемые агенты

Агент Установка Куда ставится
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