# Что такое харнес AI-агента

Модель умеет только писать текст. Как харнес превращает этот текст в действия, чем он отличается от интерфейса и почему один харнес работает в разных приложениях.

- Автор: Guide DAO
- Опубликовано: 2026-10-24
- Теги: AI-агенты, Claude
- Страница: https://www.guidedao.xyz/blog/chto-takoe-harnes

23 октября 2026 года Тео Браун, автор T3 Code, опубликовал в X [статью](https://x.com/theo/status/2113424203345265053) о том, что такое харнес. Он признался, что устал объяснять это слово каждый раз заново, а единого понятного объяснения так и не нашёл. Слово звучит всё чаще: харнес Claude Code, харнес Codex, «модель хорошая, но харнес слабый».

Короткий ответ есть в [документации Claude Code](https://code.claude.com/docs/en/how-claude-code-works). Модель рассуждает, тулы действуют, а Claude Code служит слоем вокруг модели, который даёт ей тулы и управляет тем, что она видит в контексте. Этот слой и называют харнесом. Модель вместе с харнесом и есть агент.

## Модель умеет только писать текст

Языковая модель получает на вход текст и выдаёт текст. Она не может открыть файл, запустить тесты или отправить запрос в интернет. Если попросить её прочитать `README.md`, она может только написать что-то вроде «прочитай мне README.md». Пока этот текст никто не обработал, ничего не происходит. Тео сравнивает это с тем, как печатать на клавиатуре выключенного компьютера.

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

## Из чего состоит харнес

Первое: сами тулы. Это код, который выполняет действия: читает файл, редактирует его, запускает команду в терминале, ищет в интернете. У Claude Code такие тулы называются `Read`, `Edit`, `Bash`, `Grep`, `WebFetch` и так далее.

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

Третье: синтаксис вызова. Модели нужно как-то сказать «запусти вот это». Формат можно описать прямо в промпте, как в примере Тео с тегом `<read_file>`. Но современные модели обучены работать с тулами, и API Claude сам добавляет служебный системный промпт про них. В [документации Claude API](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) это 286 токенов для Claude Opus 5.5. Ответ с вызовом тула выглядит так:

```json
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "get_weather",
  "input": { "location": "New York, NY" }
}
```

Четвёртое: исполнитель. Харнес находит в ответе модели блок `tool_use`, проверяет, можно ли его выполнять, и запускает соответствующий код. Модель только просит, решение и исполнение остаются за харнесом.

Пятое: возврат результата. Вывод тула харнес отправляет модели следующим сообщением, в блоке `tool_result` с тем же `id`, чтобы модель понимала, на какой вызов это ответ.

Шестое: цикл. Получив результат, модель снова решает, что делать: вызвать ещё тул или ответить. Харнес повторяет круг, пока модель не выдаст ответ без вызовов. В [описании цикла Agent SDK](https://code.claude.com/docs/en/agent-sdk/agent-loop) каждый такой круг называется ходом. Простой вопрос занимает один-два хода, а починка упавших тестов складывается из запуска тестов, чтения файлов, правки и повторного запуска. Число ходов и бюджет в долларах можно ограничить, иначе на открытой задаче цикл может крутиться долго.

## Что ещё делает хороший харнес

Учебный харнес занимает немного кода: в примере из документации Claude API это два запроса к модели и разбор одного блока `tool_use`. Claude Code и Codex отличаются от такого цикла тем, что происходит вокруг этих шести частей.

Контекст. Всё, что прошло через цикл, копится в контекстном окне: системный промпт, описания тулов, история, вывод каждой команды. Когда окно подходит к пределу, харнес выполняет компактинг: сжимает старую историю в саммари и оставляет свежие шаги. Ранние инструкции при этом могут потеряться, поэтому постоянные правила хранят в `CLAUDE.md`, который харнес добавляет в каждый запрос. Схемы MCP-тулов Claude Code по умолчанию не грузит заранее, а находит поиском, когда они понадобились. Подробно о том, из чего складывается контекст, мы писали в статье [о контексте и памяти](https://www.guidedao.xyz/blog/kontekst-i-pamyat-v-claude-code).

Права. Харнес решает, какие вызовы выполнять сразу, какие показать человеку, а какие запретить. В Claude Code это режимы разрешений, правила вроде `Bash(npm *)` и [хуки](https://www.guidedao.xyz/blog/huki-v-claude-code): хук `PreToolUse` может отклонить вызов, и модель получит отказ вместо результата.

Сэндбокс. Разрешение на команду не защищает от того, что команда сделает внутри. Поэтому харнесы ограничивают процессы на уровне операционной системы. [Сэндбокс Claude Code](https://code.claude.com/docs/en/sandboxing) на macOS использует Seatbelt, на Linux bubblewrap: команды пишут в рабочую папку и временный каталог, а в сеть ходят через прокси со списком разрешённых доменов. [Ядро Codex](https://github.com/openai/codex/blob/main/codex-rs/core/README.md) на macOS тоже рассчитывает на Seatbelt.

Параллельность. Если модель попросила сразу несколько вызовов, харнес решает, как их выполнить. Agent SDK запускает читающие тулы одновременно, а правки и команды по очереди, чтобы они не мешали друг другу.

## Интерфейс и харнес

Человек работает с интерфейсом: терминалом, окном приложения, расширением в редакторе. Модель работает с харнесом. Тео делит Claude Code на эти две части. Команда `claude` в терминале открывает TUI, вкладка Code в десктопном приложении открывает GUI, и ни то ни другое не харнес. Документация Claude Code говорит то же: интерфейс определяет, как вы видите Claude, а агентный цикл под ним одинаковый в терминале, приложении, IDE и вебе.

Этот цикл можно взять отдельно. [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/overview) даёт те же тулы, агентный цикл и управление контекстом, на которых работает Claude Code, как библиотеку для Python и TypeScript. Тео пишет, что Claude Code работает поверх Agent SDK. По документации связь обратная: SDK поставляется с бинарником Claude Code и запускает его. Для понимания разница небольшая, харнес у них общий.

У OpenAI похожая схема. Логика Codex живёт в отдельном ядре, которое используют разные интерфейсы, а [Codex App Server](https://learn.chatgpt.com/docs/app-server) открывает его клиентам через JSON-RPC. На нём работает, например, расширение Codex для VS Code. Разговор там делится на треды, треды на ходы, ходы на элементы: сообщения, команды, правки файлов, вызовы тулов.

## Один харнес в разных приложениях

Раз харнес отделён от интерфейса, его можно встроить в чужое приложение. Сам T3 Code использует Agent SDK и Codex App Server: интерфейс свой, харнесы чужие. Тео приводит и другие пары, например харнес Pi внутри OpenClaw. В его метафоре модель работает поваром, харнес кухней, а приложение рестораном, который может арендовать любую кухню.

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

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

## Что из этого следует на практике

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

Ваши настройки тоже работают на уровне харнеса. `CLAUDE.md`, скилы, хуки, MCP-серверы и правила разрешений ничего не меняют в модели. Они меняют то, что харнес показывает ей и что позволяет сделать.

Если хотите понять механику, напишите минимальный цикл сами: один тул, разбор `tool_use`, возврат `tool_result`, повтор до ответа без вызовов. После этого становится понятно, за что отвечает каждая часть Claude Code. Для рабочего агента цикл с нуля писать не обязательно: Agent SDK и Codex App Server дают готовый харнес с правами, сэндбоксом и компактингом.

Как устроены тулы, контекст, скилы и хуки Claude Code и как настроить их под свой проект, разбираем на курсе по Claude Code.

Курс Guide DAO: [Основы Claude Code](https://www.guidedao.xyz/claude)
