Вопрос «Ответь одним словом: работает» — 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-сервера Figma | 138 477 | ~45% |
| из них 30 встроенных | 120 672 | ~40% |
| messages — служебное сообщение | 28 691 | ~12% |
| system — системный промпт, четыре блока | 12 830 | ~4% |
| messages — два system-reminder | 1 132 | меньше 1% |
| messages — вопрос | 29 | 0,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/.

