Вопрос «Ответь одним словом: работает» — 29 символов. Claude Code отправил на сервер запрос на 305 042 байта, сервер посчитал его как 113 460 токенов и положил в кэш. Ответ пришёл из четырёх токенов. По списочному прайсу API такой «привет» стоит как чашка кофе; на подписке этого не видно, но контекстное окно он съедает точно так же.

Чтобы увидеть тело запроса, автор поставил между агентом и сервером локальный прокси — сорок строк на Python. Прокси слушает локальный порт, принимает POST, сохраняет тело и заголовки в файл, пересылает дальше по HTTPS как есть и отдаёт ответ обратно. Оба агента умеют ходить на свой адрес: Claude Code — через переменную окружения ANTHROPIC_BASE_URL=http://127.0.0.1:8766, Codex CLI — через base_url = "http://127.0.0.1:8765/v1" в config.toml у провайдера. Схема http и локальный адрес ни одного из них не смутили. Токен авторизации прокси в файл не пишет, в сохранённых заголовках он заменён на <redacted>.

Часть запросаСимволовДоля
tools — 137 инструментов259 423~85%
из них 107 от MCP-сервера Figma138 477~45%
из них 30 встроенных120 672~40%
messages — служебное сообщение28 691~12%
system — системный промпт, четыре блока12 830~4%
messages — два system-reminder1 132меньше 1%
messages — вопрос290,01%

Условия замера. Claude Code 2.1.274 на ноутбуке, запущен через -p из окружения десктоп-приложения, с обычными настройками: один MCP-сервер (Figma), один плагин с хуком на старт сессии, модель с окном в миллион токенов. Codex CLI 0.154.0 на сервере, в изолированном CODEX_HOME без плагинов, модель попроще, reasoning low. Пара не идеальная, и соревнования тут нет — интересна анатомия запроса: из чего он состоит и какие части можно выкинуть.

107 инструментов MCP-сервера Figma дали 138 477 символов (~45%), ещё 30 встроенных — 120 672 символа (~40%).

Тело первого запроса Claude Code по частям. Описания инструментов — 137 штук, 259 423 символа, около 85% тела. Из них 107 инструментов MCP-сервера Figma дают 138 477 символов (~45%), ещё 30 встроенных — 120 672 символа (~40%). Служебное сообщение в messages — окружение, список скиллов, инструкции MCP, вывод хука плагина — 28 691 символ (~12%). Системный промпт из четырёх блоков — 12 830 символов (~4%). Два system-reminder в messages — почта аккаунта и правила подписи коммитов — 1 132 символа, меньше 1%. Сам вопрос — 29 символов, около 0,01%.

Первое наблюдение: системный промпт — далеко не главный расход. Четыре блока: строка с версией клиента для биллинга (81 символ), «You are a Claude agent…» (62), правила про честный отчёт о результате (907) и основной промпт (11 780). Итого 12,8 тысячи символов, четыре процента тела.

Второе: главный расход — описания инструментов, и большая их часть в этой сессии не нужна. 107 инструментов Figma на 138 тысяч символов уехали в запрос, где пользователь просит ответить одним словом. Самое длинное описание среди встроенных — у инструмента Artifact, 29 185 символов, больше всего системного промпта. Для сравнения: Bash — 2 666, Read — 1 629, Write — 663.

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

Практический вывод из разбора — список того, что стоит отключить. MCP-серверы, не используемые в текущей задаче, дают наибольший вклад в тело запроса: в этом замере один Figma добавил 138 тысяч символов. Плагины с хуками на старт сессии добавляют свой вывод в каждый запрос. Встроенные инструменты отключить сложнее, но их описания всё равно занимают около 40% тела. На подписке эти цифры не видны в счёте, но контекстное окно они расходуют так же, как при оплате по API.

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