Все статьи

Harness ИИ-агента: почему одна и та же модель работает по-разному

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

СА

Сам Решу

23 августа 2026 г. · 9 мин чтения

Содержание

Есть цифра, которую стоит подержать в голове минуту.

Harness-Bench: одну и ту же модель прогнали по 106 задачам внутри разных агентских обвязок. Разброс — от 52.4 до 76.2. Почти двадцать четыре пункта. Модель не менялась ни разу. Менялось то, что вокруг неё.

Ещё одна: OpenAI на ARC-AGI-3 подняла результат с 13.3% до 38.3%, не тронув веса — только тем, как хранится и сжимается рассуждение между ходами.

Мы полтора года строим агента для российского бизнеса и можем подтвердить: это самая недооценённая цифра в индустрии. Когда клиент говорит «поставьте мне модель поумнее», он почти всегда просит не то. Между «умной моделью» и работающим агентом лежит слой, у которого до недавнего времени даже не было общего названия.

Теперь есть. Его называют harness — обвязкой агента.

ПоколениеКогдаЧто стояло снаружи моделиЧем кончилось
1.0 — леса, приколоченные снаружиоктябрь 2022 — 2024цикл ReAct приёмом в промпте, AutoGPT, BabyAGIцикл усилил ненадёжность модели; человека вернули в каждый шаг
2.0 — модель и обвязка растут вместес февраля 2025, Claude Codeсборка системного промпта, реестр инструментов, сжатие истории, evalsмодель всасывает обвязку в веса: Anthropic сняла 80% системного промпта Claude Code
3.0 — интерфейс вниманиясейчасправа, личность, доверие, читаемостьв веса не всасывается: это про человека, а не про модель

Что такое harness

Определение простое: всё, кроме весов модели, что заставляет агента работать. Окружение, инструменты, контекст, границы.

Метафора, которая мне нравится: harness даёт разуму модели тело. Чем воспринимать. Чем действовать. Где помнить. И — где остановиться.

Если считать по нашему коду, это:

  • реестр примерно из девяноста инструментов;
  • 111 описаний коннекторов к российским системам — 1С, МойСклад, Битрикс, Ozon, Авито, Диадок, Контур и дальше по списку;
  • сборщик системного промпта из двенадцати секций;
  • слой, который ужимает историю переписки, когда она перестаёт влезать в модель;
  • четыре разных способа дотянуться до чужой машины;
  • подсистема, которая решает, можно ли агенту прямо сейчас что-то записать.

Ни одна строчка из этого не является моделью. И именно это определяет, работает продукт или нет.

Harness 1.0: леса, приколоченные снаружи

Октябрь 2022, ReAct. Идея агентного цикла в чистом виде: рассуждает → действует → наблюдает → повторяет. Как приём в промпте.

Весна 2023, AutoGPT и BabyAGI. Все помнят звёзды на гитхабе и то, как ничего не работало. Причина сформулирована лучше всего так:

Цикл не добавляет модели способностей. Цикл усиливает те, что у неё уже есть.

Модели 2023 года были ненадёжны на длинной дистанции. Цикл усилил ненадёжность. Агент бодро уходил в стену и продолжал идти.

Отсюда откат: Cursor и Copilot вернули человека в цикл на каждом шаге. Это было правильно тогда — и это загнало ожидания от harness ниже, чем модели уже могли. Целый год индустрия строила автодополнение, потому что обожглась на автономии.

Harness 2.0: модель и обвязка растут вместе

Февраль 2025, Claude Code. Первый, кто попал в момент: модель дозрела до автономного исполнения ровно тогда, когда кто-то решился её отпустить.

Дальше начинается то, что происходит прямо сейчас и что важнее любого релиза модели. Модель и harness тренируются друг об друга. Лаборатория обучает модель внутри окружения с инструментами — модель всасывает поведение окружения в веса — инженеры удаляют леса, которые стали лишними. Anthropic выкинула 80% системного промпта Claude Code не потому, что он был плохой, а потому что модель научилась делать это сама.

Это неприятный для разработчика цикл. Ты пишешь инструкцию, она работает полгода, а потом становится мусором — и хуже: активно мешает, потому что модель тратит внимание на её выполнение вместо того, чтобы решать задачу.

Как это выглядит у нас. Системный промпт — не файл, а сборка. Двенадцать секций, которые включаются от фактов текущего хода: есть ли у агента руки на машине пользователя, есть ли постоянная песочница, работает ли он координатором или подчинённым. Подчинённые агенты вообще собираются из другого набора — три роли, explore / execute / verify, у каждой свой промпт и свой список инструментов.

Секцию, которая перестала быть нужной, теперь можно снять, не сломав одиннадцать остальных. Это скучная инженерия. Но без неё удалить 80% промпта физически невозможно — ты не знаешь, что именно держит систему.

И второе, что мы поняли про 2.0: harness надо мерить. У нас на это стоит отдельный набор evals — два с лишним десятка сценариев, где агент делает реальную работу: сверяет договоры, собирает коммерческое предложение, чинит код после падения теста, вытаскивает данные из 1С. Прогоняются в двух режимах — на моках и на живой модели.

Это меряет не модель. Это меряет наш harness. Когда выходит новая модель, мы не спрашиваем «стало ли лучше» — мы смотрим, какие сценарии сдвинулись, и это почти всегда история про то, какие наши костыли устарели.

Побочный сюжет: четыре разных «локально»

Здесь я на минуту отвлекусь, потому что это лучшая иллюстрация того, из чего harness реально состоит — и её нет ни в одной статье про агентов.

В нашем коде слово «локально» означает четыре разные вещи:

  1. Машина, на которой крутится сервер.
  2. Машина, которую пользователь попросил использовать в этом треде — это пожелание, а не факт.
  3. То, что этому клиенту вообще разрешено просить: у браузера, десктопного приложения и фонового задания права разные.
  4. Машина, на которую вызов реально приземлится на этом ходу.

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

Лечится это одним правилом, которое мы держим как закон:

Ни один текст, который читает модель, и ни один указатель, который ей передан, не имеет права называть инструмент или путь, недоступный на текущем ходу.

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

Вот из такого harness и состоит. Не из архитектурных схем.

Harness 3.0: интерфейс внимания

Теперь главное — и то, ради чего я вообще сел писать.

Если модели продолжат всасывать harness в веса, что останется снаружи?

Останется то, что моделью не всасывается в принципе. Не потому что сложно, а потому что это не про модель:

Права — что агенту можно. Личность — от чьего имени он действует. Доверие — сколько он делает без спроса. Читаемость — видно ли человеку, что произошло.

Harness перестаёт быть средством управления моделью и становится интерфейсом управления вниманием человека. Когда агенту позволено тебя прервать. Когда он должен молча продолжать. Какие решения он принимает один.

Прогноз автора исходной статьи: в течение года такую поверхность отгрузят все — аналог AGENTS.md, только не про то, как писать код, а про то, когда дёргать человека. Потому что внимание человека — единственный по-настоящему дефицитный ресурс во всей конструкции.

Мы начали строить это до того, как прочитали формулировку. Расскажу, что получилось, включая то, что пока не включено.

Каждая запись — объект, а не строка. Прежде чем агент что-то изменит, собирается намерение записи: какую систему трогаем, что за действие, как это показать человеку, какие поля меняются с чего на что, и — обязательно — план отката. Один объект кормит собой всё: карточку согласия, решение гейта, строку в аудите, откат. Записать что-то агент может тремя разными путями — сам, из кода в песочнице, через внешний инструмент по MCP. Все три описывают запись одинаково, потому что объект один.

Классификатор, а не регулярка. Вызов классифицируется как чтение / изменение / необратимое. Никакого разбора командной строки регулярными выражениями — это путь, на котором рано или поздно rm внутри кавычек проходит как безобидный.

Пресеты автономии. Два: «только чтение» и «сам правит». Второй автоматически пропускает низкорисковые записи на хосте и в браузере — но никогда исходящие вызовы к внешним системам. Отправить в 1С, опубликовать в Ozon, запостить в мессенджер — спрашивает всегда, при любом пресете. Браузер при этом считается низкорисковым: водить мышкой по сайту — человеческий эквивалент чтения.

Правило по умолчанию — спросить. Если ни одно правило не подошло, ответ «спрашивай». Безопасность живёт в отсутствии правила, а не во флаге, который каждая дверь обязана помнить.

«Всегда разрешать» — с ограничениями, которые важнее самой кнопки. Сохранённое разрешение может только ослабить «спроси» до «можно», и никогда не воскресит запрещённое. Оно привязано к организации, в которой выдано. Его нельзя выдать на необратимое действие, на управление компьютером и на командную строку основной машины — потому что у всех команд там один и тот же адрес, и человек, нажимая «всегда», думает про эту команду, а разрешает командную строку целиком. И кнопка «всегда» физически не включается отдельно от экрана, где это разрешение можно отозвать. Право, которое выдаётся и не отзывается, хуже, чем отсутствие права.

Журнал, который умеет только дописывать. Одна строка на каждое выполненное изменение: кто, что, какое решение приняли, чем кончилось, был ли гейт включён. Приложение эту таблицу никогда не правит и не чистит. Именно ею проверяется главное обещание: молчаливых записей не бывает.

Откат всегда вперёд. План отката для коммита прибит к конкретному sha и делает git revert, а не reset --hard — потому что репозиторий может быть настоящим и уже отправленным. Если этот коммит не находится, план отката просто выбрасывается: лучше остаться без отката, чем с опасным.

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

Общий рубильник сейчас выключен. Всё это работает в теневом режиме: система разбирает вызов, принимает решение, пишет строку в журнал — и никого не останавливает. Записи, прошедшие мимо проверки, мы считаем, но не запрещаем. Включить проверку по-настоящему пользователь может сам, одним переключателем в настройках.

Почему так. У включённой проверки есть цена, о которой не пишут в анонсах: у фонового задания и у подагента, которому делегировали работу, спросить некого. Вызов, требующий согласия, там просто не выполнится — он ляжет в очередь на одобрение и вернёт «одобрить некому». Это правильное поведение. Но выкатывать его надо тогда, когда очередь одобрений — нормальная часть рабочего дня клиента, а не сюрприз в три часа ночи.

Что из этого следует

Три вещи, за которые я готов отвечать.

Первое: сравнивая агентов, вы почти никогда не сравниваете модели. Двадцать четыре пункта разброса на одной модели — это больше, чем разница между поколениями. Вопрос «какая у вас модель» гораздо менее содержателен, чем «что у вас вокруг неё».

Второе: половина работы в агенте — это своевременное удаление. Инструкции, которые модель переросла, не нейтральны. Они конкурируют за внимание с задачей. Harness, из которого нельзя ничего вынуть, не переживёт двух смен модели.

Третье, и оно про ближайший год. Автономия перестала быть техническим вопросом раньше, чем стала технически возможной. Как только агент по-настоящему пишет в вашу учётную систему, остаются ровно три вопроса: кто это разрешил, видно ли это, и можно ли откатить. Мы к этому шли от обратного: сначала построили леджер и откат, потом гейт, и только в конце — экран, объясняющий человеку, что происходит.

Внимание человека — действительно единственный дефицитный ресурс в этой конструкции. Всё остальное дешевеет каждые полгода.

Применить на практике

Подключите свои сервисы и поручите эту задачу ИИ-агенту — без ручной рутины и таблиц.