Harness вокруг LLM: что я понял за полтора года ежедневной работы

от автора

Полтора года в Claude Code, несколько релизов моделей, десятки экспериментов с командой в Kaiten. Всё это время я ждал, что главным рычагом качества будет очередной релиз модели. Оказалось, ровно наоборот: смена модели даёт заметный, но ограниченный прирост, а каждый новый слой обвязки вокруг неё — кратный.

Англоязычные инженеры называют эту обвязку harness. Это контур, в котором живёт модель: системный промпт, инструменты, контекст, скиллы, хуки, разрешения и память. Без него даже флагманский Claude или Codex работает как экскаватор без рычагов — мощность есть, использовать нечем. У русского аналога одного короткого слова пока нет, поэтому ниже — harness и обвязка вперемешку.

Формула, которая всё ставит на место

Лучше всех тезис свёл Эдди Османи из Google в апрельском посте Agent Harness Engineering: Agent = Model + Harness. Его сопроводительная мысль звучит так: «A decent model with a great harness beats a great model with a bad harness». Зрелая обвязка вокруг средней модели бьёт сырую обвязку вокруг топовой.

Эту картину независимо подтверждает Gabriel Chua из OpenAI в февральской рассылке Симона Уиллисона: «Codex-модели обучаются в присутствии harness. Tool use, execution loops, компакция, итеративная верификация — это не накладное поведение, а часть того, как модель учится работать». Если читать прямо, модель и обвязка формируют друг друга двунаправленно, и граница между ними со временем размывается.

Из чего конкретно состоит harness, удобнее всего показывает практический гайд корейского инженера Youngju Kim от марта 2026-го: семь блоков — system-prompt, tools, context, skills, hooks, permissions, memory. Если у вас в Claude Code есть CLAUDE.md, пара slash-команд, скилл с триггер-описанием и pre-commit-хуки — у вас уже зрелый harness, просто называется иначе.

Почему все приходят к одному и тому же

Когда независимые инженеры из Google, OpenAI, Anthropic, Answer.AI за полгода описывают одно и то же место, велик соблазн назвать это сходимостью индустрии. Мне эта рамка кажется слабее, чем она выглядит. За ней стоит другая, более точная: нормальная фаза взросления любого, кто прошёл с LLM достаточный путь — пользователя или команды.

Я заметил это на себе. Чем выше мой собственный грейд работы с LLM, тем меньше радости от очередного релиза модели и больше дисциплины в том, как я строю контур вокруг неё. Глубина использования всегда упирается в один и тот же потолок — потолок предсказуемости, который модель сама не пробивает.

Самый чистый кейс из Kaiten — наш внутренний AI-редактор документов. Системный промпт там подробный: чётко описано, что делать с текстом и как. На этом промпте одинаково хорошо отрабатывают YandexGPT, open-source-Llama, Claude и GPT — разница в моделях растворяется. Большая задача, разложенная на маленькие с чёткими инструкциями, даёт предсказуемый результат и без флагманской модели.

Что я вижу изнутри Kaiten

Сейчас два моих собственных проекта внутри Kaiten — это в чистом виде проектирование обвязки.

→ Лендинги по входящему ТЗ. Я строю harness так, чтобы любой человек в компании — не только маркетолог — по тексту ТЗ собрал брендированный лендинг, неотличимый от нашей дизайн-системы и стандартов вёрстки. На входе — JSON-бриф с продуктом и аудиторией; на выходе — готовый TSX-компонент, который мержится в основной репозиторий как обычный PR. Цепочку маркетолог → копирайтер → дизайнер → фронтенд закрывает harness: скилл под конверсионный лендинг с awareness-уровнями аудитории, registry разрешённых компонентов из дизайн-системы — LLM физически не может вставить чужой блок, — валидаторы бренда, бизнес-правил и SVG-иллюстраций с repair-loop до трёх попыток на feedback модели, и visual regression перед approval. Десятки страниц в бэклоге; рассчитываем делать каждую быстрее и дешевле.

Перепроектирование тарифной сетки. Это огромный legacy: около 100 md-файлов с разными типами документов, расчётами, версиями нынешних и будущих тарифов. Без обвязки агент в таком объёме тонет; с обвязкой у него появляется карта навигации по проекту. Индекс файлов с короткими описаниями, отдельные скиллы под навигацию по legacy, сборку сводок и сравнение версий — агент подтягивает релевантное по запросу, а не читает всё подряд.

Автономный агент-багфиксер. У нас появился агент, замыкающий цикл починки без человека. Работает он именно благодаря обвязке: правилам репозитория, доступам, проверкам качества перед мерджем. Работа, которая раньше требовала ротации разработчиков на дежурство, понемногу переходит к нему.

Свой личный сайд-проект — внутренняя SaaS-ка, которая когда-то начиналась как Google-таблица с картой рабочих гипотез, — за полгода превратилась в полноценный продукт. Сразу при старте у проекта были база данных, правила репозитория, скиллы под SEO-статьи, под интерфейс, под архитектуру, под вызовы агентов и под тесты. Каждый новый мой проект сейчас стартует с одного и того же — CLAUDE.md, в который месяцами доливаются правила.

Эту же тропу протаптывают другие

Anthropic Engineering за полгода выпустили две статьи именно про обвязку. В сентябре 2025-го — Effective context engineering for AI agents с понятием «context rot»: чем больше контекста, тем хуже модель его удерживает, и курировать его надо как конечный ресурс. В октябре 2025-го — Equipping agents with Agent Skills и принцип «progressive disclosure»: метаданные триггерят релевантность, полная документация подгружается только при необходимости. Универсальный агент становится специалистом по PDF или Excel без смены самой модели.

Идею собственного индекса для LLM стандартизировал Джереми Ховард из Answer.AI. 3 сентября 2024-го он предложил формат llms.txt — компактный индекс в корне проекта, по которому LLM сама находит релевантные куски документации. Целиком документацию в запрос больше тащить не надо: за год формат поддержали Anthropic, Cursor и масса docs-сайтов.

Концептуально это в линии Карпати про «LLM Wiki» — персистентную вики, которую LLM ведёт сама: один раз компилирует знания из сырых источников и держит индексы и сводки актуальными.

Никто из этих людей не сговаривался. Они независимо описывают одно и то же место, потому что приходят к нему по одной и той же лестнице.

Где harness ломается

Любая красивая идея ломается, если не назвать её границу. У обвязки она простая.

Harness работает там, где есть повторяемость и желание получить предсказуемый результат. Системные процессы, регулярные задачи, известный класс работы — это его родная среда. Каждая зафиксированная ошибка превращается в новое правило в AGENTS.md, и систему реже бьёт по тем же граблям. Османи называет это Ratchet Principle — накопление по «храповику».

Зато когда вы протаптываете новую тропинку, делаете что-то впервые, разбираетесь с новой технологией или незнакомым доменом, harness ещё неоткуда взяться. Сначала нужно пройти руками, понять, на что натыкаешься, и только потом систематизировать в обвязку. Попытка построить контур до того, как сам понял процесс, — частая причина того, почему очередная AI-инициатива не взлетела.

Здесь же ответ на знаменитую цифру MIT NANDA про 95% корпоративных AI-пилотов без измеримого эффекта. Это во многом про то, что команды строят обвязку вокруг процесса, который сами ещё не прошли. У нас в Kaiten на это нарвались тоже — было много инициатив, выстрелили немногие. Пока разбирались с технологией, какое-то время путали хайп с реальностью. Сейчас отделили: AI — это инструмент автоматизации внутри бизнеса. Ценность даёт понятный бизнес-процесс, в который этот инструмент встаёт; сама технология вторична.

Что делать сейчас

Если из всего сказанного брать одно конкретное действие, оно такое.

Найти у себя системные, повторяющиеся запросы. Тот класс работы, который вы делаете снова и снова с похожим ожидаемым результатом. У разработчика это работа с legacy, у продакта — спецификации, у маркетолога — лендинги по ТЗ, у саппорта — типовые ответы.

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

Накапливать по «храповику». Каждая ошибка агента становится правилом в AGENTS.md или скилле. Идеальной система не становится: агенты всё равно путаются и ошибаются по-новому. Но накопленная обвязка — это конкурентное преимущество, которое не отчуждается со сменой провайдера модели.

Финал

Главное, что я понял за последний год: в зрелом использовании LLM рычаг качества постепенно уходит выше самой модели — в системный промпт, скиллы, хуки, контекст и память. Модель по-прежнему важна, и её обвязка теперь определяет результат не меньше, чем её свежесть.

А у вас сейчас рост качества AI-агента больше зависит от смены модели, или от того, что вы доращиваете в обвязке вокруг неё?

Живите и процветайте 🖖

ссылка на оригинал статьи https://habr.com/ru/articles/1035812/