Вспомни, как выглядели первые восторженные попытки доверить ИИ-агенту разработку фичи целиком. Ты даешь модели доступ к терминалу, пишешь пространный промпт в духе «создай модуль авторизации, напиши тесты и сделай коммит», запускаешь цикл ReAct... А через десять минут обнаруживаешь, что агент намертво завис. Он споткнулся о мелкую ошибку линтера, попытался исправить ее, сломал соседний импорт, запаниковал, стер половину рабочего каталога и зациклился на установке несуществующего npm-пакета.
Долгое время сообщество пыталось лечить эту болезнь «промпт-инжинирингом» — добавлением очередных строчек «пожалуйста, будь внимателен» и «не трогай системные файлы». Но попытка обуздать недетерминированную вероятностную модель одними лишь текстовыми уговорами обречена на провал.
Осенью 2026 года в инженерной среде окончательно оформилась новая парадигма: харнес-инжиниринг (Harness Engineering). Ее суть проста, как все гениальное: вместо того чтобы надеяться на безупречный разум модели, мы заключаем ее в жесткий испытательный стенд (тестовый харнес), который направляет каждый шаг алгоритма по детерминированным рельсам. Яркими флагманами этого движения стали открытый фреймворк Archon от разработчика Коула Медина (Cole Medin) и исследовательская платформа Google Harness².
Анатомия Archon: почему графы и git worktrees побеждают хаос
Проект Archon начинался как эксперимент на Python, но к осени 2026 года пережил фундаментальный рефакторинг: кодовую базу полностью переписали на TypeScript под легковесный рантайм Bun. Архитектура фреймворка держится на трех китах, кардинально отличающих его от классических библиотек оркестрации:

- Ориентированные ациклические графы (DAG): Разработка фичи больше не является бесконечным диалогом. Процесс строго декомпозируется в YAML-манифест, где каждый шаг — это либо вызов детерминированной системной команды (линтер, сборщик, запуск тестов), либо изолированный вызов агента с узкой задачей.
- Изолированные рабочие деревья (Git Worktrees): Агент никогда не работает в основной рабочей ветке твоего репозитория. Для каждого прогона создается отдельное виртуальное дерево (
git worktree add). Это позволяет безопасно параллелить работу десятков агентов: даже если один из них сломает сборку, основной код останется абсолютно чистым. О том, как развивались среды взаимодействия агентов с файловой системой, мы говорили в статье Эволюция интерфейсов ИИ-агентов: от диалоговых окон к автономной работе на компьютере. - Механизм динамического извлечения уроков (Learned Lessons): Это главное ноу-хау харнеса. Когда агент запускает тесты и получает падение сборки, система не просто просит его «попробовать еще раз». Специальный агент-супервизор анализирует лог ошибки и формулирует строгое правило — «урок». Этот урок сохраняется в персистентную базу знаний в файле
.archon/lessons.jsonи автоматически инжектируется в контекст при всех последующих итерациях.
Вот как выглядит лаконичный манифест задачи в Archon:
version: "2.0"
name: "autonomous-feature-development"
steps:
- id: prepare-environment
type: command
run: "git worktree add -b feature/auth ../worktrees/auth"
- id: generate-implementation
type: agent
model: "claude-sonnet-5-5"
prompt: "Реализуй JWT аутентификацию в src/auth.ts с учетом правил из .archon/lessons.json"
workdir: "../worktrees/auth"
- id: run-harness-tests
type: command
run: "bun test src/auth.test.ts"
workdir: "../worktrees/auth"
on_failure:
action: "trigger-reflection"
feedback_agent: "archon-evaluator"
save_lesson_to: ".archon/lessons.json"
Когда компилятор bun test возвращает ненулевой код выхода, харнес перехватывает управление, изолирует вывод ошибки и передает его независимому оценщику. На практике это снижает число циклических сбоев агента более чем на 40%.
Программная фиксация уроков: самообучение без переобучения весов
Как устроен сам процесс формализации опыта? Модели не требуется дообучать веса через дорогостоящий LoRA или RLHF. Опыт фиксируется на уровне контекстного управления.
Взгляни на внутреннюю логику извлечения урока в коде Archon на TypeScript:
interface Lesson {
id: string;
triggerError: string;
rule: string;
confidenceScore: number;
}
export async function recordLesson(errorLog: string): Promise<Lesson> {
// Агент-аналитик препарирует технический лог
const lesson = await llm.extractLesson({
prompt: `Проанализируй лог падения тестов и сформулируй лаконичное запрещающее или предписывающее правило:
${errorLog}`
});
// Сохранение правила в локальную базу данных проекта
await db.lessons.insert({
...lesson,
createdAt: new Date().toISOString()
});
return lesson;
}
Если агент попытался импортировать библиотеку, несовместимую с рантаймом Bun, в базе появляется запись: «Запрещено использовать пакет X, вызывающий сбой нативного event loop; используйте встроенный модуль bun:ffi». В следующем цикле модель физически не сможет совершить ту же глупость, потому что это правило встречает ее в системном промпте.
Параллельно Google развивает систему Google Harness², которая делает шаг еще дальше: она автоматически генерирует стресс-тесты и мутационные тесты кода. Прежде чем отправить pull request на ревью человеку, Harness² намеренно подменяет возвращаемые значения функций и проверяет, способен ли агент обнаружить подвох и защитить архитектуру от регрессий.
Archon нативно поддерживает вебхуки Slack и Discord. Ты можешь написать в ветку обсуждения задачи команду /archon build feature-profile, и оркестратор запустит изолированный контейнер, выполнит граф задач и пришлет в чат готовый diff со ссылкой на Pull Request на GitHub.
Если оставить сбор уроков без присмотра на несколько недель, база .archon/lessons.json может раздуться до сотен противоречивых записей, забивая контекстное окно модели мусором. Раз в спринт ведущий разработчик обязан проводить аудит накопленных правил, удаляя устаревшие предписания и объединяя схожие тезисы.
Эра наивных агентов, блуждающих по коду вслепую, стремительно уходит в прошлое. Харнес-инжиниринг превращает ИИ из непредсказуемой игрушки в строгий станочный инструмент, где каждый шаг алгоритма ограничен надежными инженерными тисками.
