~/VibeHandbook

AI-сервисы

github.com

AI Coding Harness

Что это такое

AI coding harness — это каркас для контроля и проверки, который вы выстраиваете вокруг кодирующего агента, чтобы он мог работать автономно, ничего не ломая. Если guardrail — это привычка, о которой вы должны помнить (запустить тесты, прочитать diff), то harness — это машина, которая помнит за вас: она стоит между намерением агента и реальным миром и на каждом опасном шаге записывает, предупреждает или блокирует. dancinlab/harness — это эталонный движок, не зависящий от конкретного проекта: общее ядро на TypeScript, где каждый репозиторий отличается лишь файлом harness.config.json и несколькими файлами данных .harness/*.json.

Сильные стороны

  • Превращает ваши guardrail'ы из необязательных привычек в правила, которые принудительно соблюдаются кодом — агент не может их пропустить.
  • Контролирует весь жизненный цикл инструментов: перед запуском команды, перед записью файла, на промпте, при коммите и при push.
  • Журналы JSONL, доступные только для добавления, дают защищённую от подделки запись всего, что делал агент, — дёшево писать, тривиально проверять.
  • Встраивается в любой репозиторий: поведение задаётся конфигом и данными, а не форком кода.
  • Спроектирован так, чтобы молчать, когда всё в порядке, чтобы предупреждения по-прежнему что-то значили.

Компромиссы

  • Это сантехника, а не магия: harness делает ошибки дешёвыми для обнаружения, но не делает ИИ правильным.
  • Требует первоначальной настройки и конфига, подстроенного под опасные зоны вашего проекта.
  • Чрезмерно строгие правила создают трения; дисциплина «bitter-gate» (вывести из строя спящее правило, прежде чем добавлять новое) существует именно для борьбы с этим.
  • Наиболее ценен на реальных проектах с реальными пользователями — избыточен для одноразового прототипа.

Лучше всего подходит для

Серьёзного vibe coding, когда вы позволяете агенту вносить многофайловые изменения и запускать команды почти без присмотра, и вам нужно, чтобы цена плохого действия оставалась близкой к нулю.

Пять принципов (H1–H5)

  • H1 Успех тихий, провал громкий — никакого шума, который вы научитесь игнорировать.
  • H2 Никогда не исправлять автоматически — предлагать, блокировать или предупреждать; решает человек или информированный агент.
  • H3 Bitter-gate — вывести из строя спящее правило, прежде чем добавлять новое.
  • H4 Управление через конфиг — один движок, свой harness.config.json на каждый проект.
  • H5 AI-native — журналы JSONL только для добавления, невозможно незаметно переписать.

Как это выглядит

Минимальный набросок конфига:

// harness.config.json
{
  "lockedPaths": ["src/auth/**", "infra/**", ".github/**"],
  "blockCommands": ["rm -rf", "git push --force", "curl * | sh"],
  "verify": ["npm run lint", "npm run typecheck", "npm test"],
  "ledger": ".harness/ledger.jsonl"
}

И поток pre/post-хуков вокруг одного действия агента:

agent intends an action
        │
   ┌────▼─────────────┐
   │ pre  (PreToolUse) │  block dangerous? warn? → else allow
   └────┬─────────────┘
        │  command runs / file is written
   ┌────▼──────────────┐
   │ post (PostToolUse) │  record to JSONL · warn if a locked file was touched
   └────┬──────────────┘
        │  at commit / push
   ┌────▼─────┐
   │  verify  │  lint · typecheck · tests (parallel) → green or stop
   └──────────┘

Агент никогда не может обойти эту преграду — в этом весь смысл.