Все рецепты

Harness Engineering: среда для автономного агента

Хаб по harness-инженерии: среда из пяти слоёв, четыре фазы маршрута задачи, барьеры против конвенций и lessons-ledger как ядро автономности. С интерактивным эксплорером и картой серии — как настроить любой проект так, чтобы кодинг-агент вёл задачу от постановки до пуша почти без надзора.

ПродвинутыйDevOps с AI30 минClaude Code, AGENTS.md, ExecPlan, pre-commit, CI
1

Harness — это среда, а не промпт

Harness — это не промпт и не модель помощнее. Это среда вокруг агента: набор источников правды, которые он читает на старте и по ходу. Идея та же, что в уроке про harness-инженерию, но взгляд не на in-app цикл, а на саму разработку — как привести проект в состояние, где кодинг-агент ведёт задачу почти без надзора. Среда собирается из пяти слоёв — от глобального (как ты вообще работаешь с агентом) до проектного (правила именно этого репозитория) и кросс-сессионной памяти. Чем больше слоёв на месте, тем меньше агент додумывает и тем реже ломается на ровном месте.
Личный playbook (глобально)
Твои правила сотрудничества (R1..RN), грузятся в каждую сессию
Process skills / рецепты
Brainstorm, plan, TDD, verify — как делать повторяющиеся процедуры
Контракт проекта (AGENTS.md)
Working rules, Definition of Done, retrieve-правило для уроков
ADR + roadmap
Зафиксированные решения и где ты в построении харнеса
Кросс-сессионная память
Выученные предпочтения; частые → кандидаты в playbook/уроки
Слои собираются снизу вверх по стоимости внедрения, а не по важности. Личный playbook и ADR дёшевы и не вызывают сопротивления — с них и начинают; sensors и ledger дороже и идут позже.
2

4 фазы: как задача едет от постановки до пуша

Харнес превращает «задачу» в маршрут из четырёх фаз: A — постановка и рамки (одна нить = одна задача, проверка рецептов, при необходимости план); B — дизайн (эскиз до кода, ADR на решения, чтение уроков границы); C — цикл реализации (TDD, прогон sensors, live-update, /wrong, эскалация); D — закрытие (verify, ритуал, doc-sync, commit, handoff). Это не строгая линия 0→24. Человек подключается ровно в четырёх точках — дать задачу, апрувнуть эскиз, сказать «неправильно», сказать «коммить». Всё остальное агент ведёт сам. Покрутите эксплорер ниже: фильтруйте по фазам, открывайте детали шага и прогоняйте сценарии — большая фича, багфикс, docs-правка, коррекция, эскалация.

Agent Harness — универсальный шаблон

STACK- & AGENT-AGNOSTIC

Дай агенту не только задачу, но и среду, которая его направляет: контракт (что читать), живой план (что не забыть), sensors (что нельзя зашипить), уроки (что не повторять), ритуал закрытия. Каждый шаг либо читает источник правды, либо пишет артефакт. Человек подключается в 4 точках: дать задачу · апрувнуть эскиз · сказать «неправильно» · сказать «коммить».

R-коды в карточках шагов — это правила, которые Claude Code накопил коррекциями по разным проектам; я собрал их в один личный playbook и подключил глобально, поэтому они грузятся в каждую сессию. Расшифровка показана рядом с кодом.

🟥 БАРЬЕРфорсится механически (pre-commit/CI)🟦 КОНВЕНЦИЯдержится на дисциплине агента🟨 УСЛОВНЫЙсрабатывает только по триггеру
ФАЗА A · Постановка и рамки · шаг 1/24

Задача пришла

🟦 КОНВЕНЦИЯкто: 👤действиеправило: one thread = one task · R1
R1кратко: один фикс = 1–2 строки

Одна нить = одна задача; контекст не смешиваем.

ПРИМЕР: AGENTS.md «One thread = one task»
Что не даёт забыть
Контекст-файл агента
AGENTS.md (+ addendum: CLAUDE.md / .cursorrules / system prompt)
Контракт: читается на старте каждой сессии.
Личный playbook
global rules, loaded every session
Твой стиль сотрудничества (R1..RN), не про конкретный проект.
Живой план
plans/YYYY-MM-DD-*.md
Progress / Decisions / Surprises — по ходу.
ADR-каталог
decisions/NNNN-*.md
Почему так решили.
Lessons-ledger
harness/lessons/<boundary>/
Что НЕ повторять; зреет → sensor.
Sensors (гейты)
boundary-linter · lint · types · size · test-integrity
Барьеры на каждый commit/CI.
Skills / рецепты
reusable procedure recipes
Как делать повторяющуюся задачу.
Roadmap / rollout
HARNESS_ROLLOUT.md
Где ты в построении харнеса.
Кросс-сессионная память
agent memory store + index
Выученный контекст; частое → в playbook/уроки.
Doc-freshness check
doc-drift check script
Доки не отстают от кода.

Прогулка по флоу: как движется задача

шаг 1/21: 1 Задача пришла · 👤 · 🟦 КОНВЕНЦИЯ
почти весь маршрут; /wrong и эскалация — событийные, тут не сработали.
Постановка и рамки
1Задача пришла
2Проверка рецептов / скиллов
3Брейншторм / уточнение интента
4Plan mode (или plan-only)
Дизайн и план
5Эскиз до нетривиального кода
6План для задач > 1 дня
7ADR на значимое решение
8Изоляция работы
9Чтение уроков границы
10Декомпозиция ≤ 1–2 дня
Цикл реализации
11TDD: падающий тест первым
12Реализация
13Прогон sensors
14Verify сборки / рантайма
15Live-update плана
16«Неправильно» → /wrong
17Эскалация при сомнении
18Не коммитить во время дебага
Закрытие и пуш
19Verification before completion
20Ритуал закрытия
21Doc + code sync + freshness
22Атомарный commit + push
23Handoff на след. сессию
24Память: предпочтения

Честно про этот флоу: это не строгая линия. Фаза C — петля; /wrong, эскалация и commit — событийные; условные шаги срабатывают по триггеру и часто пропускаются. Реально принудительны только 🟥-барьеры — остальное держится на дисциплине агента.

Лучший способ понять харнес — гонять сценарий «коррекция по ходу»: видно, как «неправильно» не убивает задачу, а возвращает её в цикл C петлёй, а не откатом к началу.
3

Барьеры против конвенций: что реально форсится

Самый частый провал харнеса — спутать «записано в правилах» с «реально соблюдается». Барьер форсится механически: pre-commit и CI не дадут зашипить код, не прошедший проверку. Конвенция держится только на дисциплине агента — описана в AGENTS.md, но никто не проверит. Условный шаг срабатывает по триггеру и часто пропускается. Хорошая новость: барьеры — готовые кросс-стековые инструменты. Границы импортов держат dependency-cruiser / import-linter, мёртвый код — knip / ts-prune, циклы — madge, вложенность и размер — eslint (max-depth, max-lines). Что не покрыто — добавляешь своим скриптом-проверкой в pre-commit. На что нельзя поставить барьер, на то нельзя положиться надолго.

🟥 Барьер

  • Форсится механически: pre-commit / CI
  • Напр. JS/TS: dependency-cruiser, knip, madge, tsc
  • Не покрыто? Свой скрипт-проверка

🟦 Конвенция

  • Держится на дисциплине агента
  • Описана в AGENTS.md, но не проверяется
  • Стиль кода, «не переписывай попутно»

🟨 Условный

  • Срабатывает только по триггеру
  • ExecPlan, worktree, эскалация, /wrong
  • Часто и правильно пропускается
Не превращайте метрику в цель. «Покрытие 100%» как мандат рождает фиктивные тесты — это Goodhart. Барьер должен ловить реальный класс ошибок, а не радовать дашборд.
4

Lessons-ledger: коррекции как код

Ядро автономности — lessons-ledger: механизм, который превращает твои коррекции в код, а не в забытый чат. Сказал агенту «неправильно» → команда /wrong запускает normalize, которая разводит развилку. Computational-урок (ошибку можно поймать машиной) → правка сенсора: новое правило линтера, проверка типа. Inferential-урок (нужно суждение) → markdown-файл, который агент читает перед задачей на этой границе. Отдельный шаг maintain промоутит созревшие inferential-уроки в сенсоры. Метрика здоровья — сколько уроков выпущено в барьеры, а не размер тетрадки: цель — чтобы знание затвердевало в машинные проверки, а не копилось текстом.
«Неправильно» → /wrong
normalize
ловится машиной
Computational → сенсор
нужно суждение
Inferential → урок
созрел
maintain: промоушн в сенсор
/wrong "<mistake>"
  → normalize:
      machine-catchable? → sensor       # computational (barrier)
      needs judgement?   → lessons/<boundary>/  # inferential (nudge)
  → maintain: matured inferential → promote → sensor
health metric = lessons promoted to sensors, NOT notebook size
Урок пишется только после твоего «ок» — не в момент раздражения. Коррекция в горячке часто оказывается твоей же ошибкой в постановке, а не виной агента.
5

Карта серии: 9 фаз rollout

Этот рецепт — хаб. За ним идёт серия, где каждая фаза rollout-плана разворачивается в отдельный рецепт с копируемыми промптами. Входная дверь — «четыре режима разработки с ИИ» (A/B/B+/C): мета-решение, сколько ИИ вообще нужно проекту. Не всем нужен полный agent-first — харнес обязателен для режимов B+/C и почти не нужен для A/B. Ниже — карта серии: от выбора режима и аудита до тиражирования. Каждая строка — отдельный рецепт; идите по фазам по порядку или сразу к нужной.
ФазаЧтоРецепт
ВходВыбор режима: A / B / B+ / Cdev-modes-with-ai — готово ✓
0Аудит существующего проекта: baseline + environmentproject-audit — готово ✓
1Контекст-инжиниринг: AGENTS.md, ADRagents-md-setup — готово ✓
2ExecPlan для многочасовых задачexecplan-long-tasks — готово ✓
3Архитектурные барьеры, строгие типыarchitectural-constraints — готово ✓
5Сборка мусора: дрейф, долгharness-garbage-collection — готово ✓
5.5Lessons-ledger: коррекции как кодlessons-ledger — готово ✓
6Skills: переиспользуемые SKILL.mdagent-skills-library — готово ✓
7Workflow: один тред, worktrees, субагентыagent-workflow-worktrees — готово ✓
8Тиражирование: template-репо, golden pathharness-template-golden-path — готово ✓
Инструмент: стек → инструменты, DoD, артефактыharness-configurator — готово ✓
Если не уверены, нужен ли полный харнес, начните с входной двери — режимов. Команда на режиме B (человек ведёт, ИИ ускоряет печать) потратит время впустую, строя инфраструктуру для агента, который ей не нужен.
6

С чего начать: дёшево → спорно

С чего начать, чтобы не утонуть? Порядок — от дешёвого и бесспорного к дорогому и спорному. Сначала ADR: зафиксировать выбор инструментов — это для людей, без сопротивления. Потом Definition of Done — один чек-лист, что значит «готово». Потом sensors — превратить DoD в машинные барьеры (pre-commit + CI). И только потом lessons-ledger — он окупается, когда барьеры уже есть и есть что в них промоутить. Каждый слой полезен сам по себе. Не нужно строить всё сразу: один реальный барьер сегодня ценнее идеального плана на квартал.

Порядок внедрения (рекомендация)

1. ADR на выбор инструментов — дёшево, для людей
2. Definition of Done — один чек-лист
3. Sensors — DoD как машинные барьеры
4. Lessons-ledger — когда барьеры уже есть
Строить всё сразу до первого барьера
Покрытие 80/100% как мандат (Goodhart)
«Машина важнее текста»: один работающий pre-commit hook дисциплинирует агента сильнее, чем абзац правил в AGENTS.md, который легко проигнорировать.

Результат

Хаб harness-инженерии: понятно, что harness — это среда из пяти слоёв, как задача проходит четыре фазы, почему форсятся только барьеры (а не текст) и как lessons-ledger превращает коррекции в код. Дальше — серия рецептов по фазам rollout и вход через выбор режима разработки.