Когда вы отправляете агенту одно слово «hi», Codex тратит 14 534 токена — 6% контекстного окна — ещё до начала работы. Antigravity с Gemini уходит ещё дальше: 19 900 токенов. В обоих случаях основной виновник — не ваш промпт и не ответ модели, а схемы подключённых инструментов: от 17 до 79 тулов, которые загружены в каждое обращение, хотя 98% из них за всю сессию не будут вызваны ни разу.
Разработчик Mohammed Reschreiter (m-reschreiter.at, 28.08.2026) замерил эту проблему на реальных агентах и решил двумя приёмами: объединение CRUD-операций в интентные тулы и динамическая загрузка инструментов по demand. Результат — на нулевом ходе тратится 3 600 токенов вместо 14 500–19 900, а за 417-ходовую сессию агент не отправляет 5,4 млн неиспользуемых токенов схем. Тред на Hacker News вызвал дискуссию про кеш промптов — разберём и её.

Сколько токенов сжирает «привет»: бенчмарки нулевого хода
Reschreiter отправил одну команду — «hi» — четырём агентным средам и посмотрел, сколько токенов потрачено до начала реальной работы.
Codex: 79 тулов, 14 534 токена
Автор отключил все внешние плагины и MCP-серверы в Codex, оставив только два кастомных навыка и встроенные тулы. После приветствия телеметрия показала 14 534 токена израсходованными. При этом модель имела доступ к 79 активным инструментам: от apply_patch и exec_command до mcp__codex_apps__sites_deploy_site_version и multi_agent_v1__spawn_agent. Стоит подключить пару плагинов — список перешагивает за 100.
Antigravity (Gemini 3.7 Flash): 17 тулов, 19 900 токенов
Казалось бы, меньше тулов — меньше накладных расходов. Antigravity CLI показал обратное: при 17 инструментах (среди них run_command, manage_task, define_subagent, search_web, generate_image) на схемы тулов ушло 13 800 токенов. Общий расход на нулевом ходе — 19 900. Причина — избыточность: зачем отдельный list_dir, grep_search и find_by_name, если агент и так имеет run_command с доступом к bash?
Claude Code: от 3 500 до 14 000+ токенов
Anthropic частично решила проблему механизмом Deferred Tool Loading: встроенные тулы делятся на «всегда загруженные» (Bash, Read, Edit, Write, Glob, Grep, Agent, ToolSearch, Skill — 9 штук) и «отложенные» (WebSearch, NotebookEdit, MCP-серверы — подгружаются по запросу через ToolSearch). Без MCP накладные расходы — 3 500–5 000 токенов. Но при подключении нескольких MCP-серверов реестр тулов перескакивает за 30–40, и токены на схемы превышают 10 000–14 000.
Примечание автора: цифры по Claude Code — это консервативные оценки по документации и телеметрии сообщества, а не личные замеры Reschreiter.
Pi + Dynamic Tools: 4 тула, 3 600 токенов
Авторское решение Reschreiter — расширение dynamic-tools для агентного рантайма Pi. При старте сессии активны всего 4 тула: read, bash, edit, write. Остальные 20+ инструментов — в standby-режиме, представленном одной строкой текста в промпте (~5–10 токенов). Результат — 3 600 токенов на нулевом ходе, 1.3% окна в 272K.

Почему 15 000 лишних токенов убивают качество
Накладные расходы — это не только деньги за API. Когда агент видит 79 определений тулов при каждом ходе, страдают две вещи.
Контекст заполняется раньше. При 200K-окне сжирание 15K на схемы — это 7.5% окна до начала работы. Через 15–20 ходов агент подбирается к границе контекста, модель запускает compaction и теряет ранние договорённости.
Внимание рассеивается. LLM работает лучше, когда пространство решений сфокусировано. Десятки похожих тулов (многофункциональные endpoints для управления тредами, деплоя сайтов, спавна сабагентов) заставляют модель тратить вычислительные ресурсы на пролистывание нерелевантных вариантов. Автор прямо называет это «polluting the attention space with irrelevant parameters».
Приём 1: объединение CRUD-операций вместо размножения тулов
Сокращение контекста не начинается с runtime-трюков. Оно начинается с проектирования тулов.
В классическом REST-API каждое действие — отдельный endpoint. Для HTTP это нормально: регистрация эндпоинта не стоит ничего до первого запроса. Но для AI-агента каждый тул — это JSON-схема, которая отправляется на каждый ход. Четыре CRUD-тула для работы с памятью:
memory_create — ~200 токенов
memory_read — ~200 токенов
memory_update — ~200 токенов
memory_delete — ~200 токенов
Итого: ~800 токенов на схемы, четыре описания, четыре списка параметров, четыре варианта для выбора модели.
Reschreiter объединяет по интенту — два тула (или даже один):
{
"name": "memory_write",
"description": "Create, update, or delete entries in agent memory.",
"parameters": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": ["create", "update", "delete"]
},
"id": {
"type": "string",
"description": "Memory ID (required for update or delete)."
},
"content": {
"type": "string"
}
},
"required": ["action"]
}
}
Схема memory_write всего на 15–20% больше одной memory_create, но заменяет три определения. Сокращение схемного следа — 50%, при этом ни одна функция не потеряна. Автор уточняет:
Modern LLMs handle action-parameterized tools reliably. I have run tools structured this way for months across diverse tasks, and the models pick the correct action without hesitation.
Современные LLM надёжно работают с action-параметризованными тулами. Я месяцами использую инструменты с такой структурой на разных задачах, и модели безошибочно выбирают нужное действие.

Приём 2: динамическая загрузка инструментов
Первый приём решает проблему на уровне проектирования. Второй — на уровне runtime.
Reschreiter столкнулся с этой задачей при разработке мобильного приложения denkr.ai — на мобильных рабочих процессах раздутие контекста напрямую бьёт по латентности и стоимости. Позже, перейдя на Pi как основной агентный рантайм, он построил расширение dynamic-tools с четырьмя ключевыми механизмами.
Базовый набор: 4 тула по умолчанию
При старте расширение принудительно оставляет в схеме только read, bash, edit, write. Все остальные тулы, зарегистрированные через плагины, MCP или локальные скрипты, загружаются Pi внутренне, но исключаются из активной LLM-схемы через pi.setActiveTools(...).
Список standby без мета-тула
Распространённая ошибка при построении менеджеров тулов — создание отдельного LLM-тула activate_tool({name}). Сам он добавляет JSON-схему, документацию параметров и переключение через function-calling. Reschreiter использует другой подход: в хуке before_agent_start в системный промпт добавляется простой текстовый список:
## Dynamic Tool Activation
Default active tools: read, bash, edit, write.
Standby tools (not currently in your active schema):
- web_search (part of group: web_search)
- browser_open (part of group: browser_use)
- ...
To activate a tool or group, run in bash: pi-tool activate <name>
20 строк текста в standby-списке стоят ~100 токенов. 20 JSON-схем с параметрами и описаниями — от 4 000 до 10 000 токенов.
Перехват bash внутри процесса
Агент уже имеет доступ к bash (он в базовом наборе). Зачем нужен отдельный тул для активации? Достаточно, чтобы модель выполнила pi-tool activate browser_use. Расширение перехватывает эту команду в хуке tool_call на уровне Node.js-процесса, обновляет pi.setActiveTools() и перезаписывает bash-команду на echo-подтверждение. Никакого реального shell-вызова — только обновление состояния в памяти.
Группы и автоматический TTL
Тулы редковызываются поодиночке. Если нужен браузер — нужны browser_open, browser_observe, browser_act, browser_wait одновременно. Конфигурация группует их: pi-tool activate browser_use загружает весь пакет.
После завершения задачи дополнительные тулы не висят в контексте бесконечно. Каждый standby-тул получает TTL-таймер (по умолчанию 2 хода). Если тул не используется два хода подряд — он удаляется, контекст возвращается к базовым 4.

А как же кеш промптов?
Возражение из треда на Hacker News: если системный промпт меняется при активации тулов, это ломает кеш промптов и обходится дороже, чем статический набор.
Reschreiter ответил замерами на 417-ходовой сессии с 669 вызовами тулов:
- Core 4 тула (bash, read, edit, write): 656 вызовов (98.1%)
- Standby-тулы (web_search, web_fetch, goal_control): 13 вызовов (1.9%)
Поскольку 98.1% операций опираются на 4 базовых тула, префикс схемы остаётся неизменным и кешируется на протяжении 90%+ сессии.
Из 417 ходов 30 привели к промаху кеша. Причины:
| Причина | Доля промахов |
|---|---|
| Compaction и чтение больших файлов | 40.0% |
| Смена модели | 20.0% |
| Активация standby-тулов | 16.7% (5 ходов) |
| Таймауты бездействия | 13.3% |
| Начальный прогрев сессии | 10.0% |
Активация тулов вызвала кеш-промах на 1.2% ходов (5 из 417). Остальные 98.8% работали без штрафа за инструменты.
Более того, даже с кешем статические тулы обходятся дорого. Провайдеры берут плату за кешированные токены (Anthropic — 10%, OpenAI — 50%). В Codex с 79 статическими тулами за 417 ходов обрабатывается свыше 6 млн токенов схем — и это только по кеш-ставке. Dynamic-подход экономит 5,4 млн неиспользуемых токенов за одну сессию.
Сводная таблица
| Метрика | Статические тулы (Codex / Antigravity) | Pi + Dynamic Tools | Сокращение |
|---|---|---|---|
| Контекст на нулевом ходе | 14 500–19 900 токенов | 3 600 токенов | −75% … −82% |
| Активных схемных тулов | 17–79+ | 4 базовых | −76% … −95% |
| Надёжность выбора тулов | Подвержена галлюцинациям схем | Высокая точность | Чистое пространство решений |
Что изменилось в цифрах

Автор приводит данные реальной сессии в CircaCode (десктопное приложение на базе Pi):
- 417 ходов, 669 вызовов тулов
- Turn zero: 3 600 токенов (3 500 входных, 1.3% окна в 272K)
- Базовый наборвсегда: read, bash, edit, write
- Standby активировался: 13 раз за всю сессию (web_search, web_fetch, goal_control)
- Бонус: можно подключать любые тулы (браузер, фоновые задачи, скрапинг, синтез речи) без перманентного штрафа за контекст
Reschreiterотмечает, что до dynamic-подхода каждое новое расширение было компромиссом: «Is this feature useful enough to justify permanently adding 500 tokens of JSON schema to every single prompt for the rest of time?» С динамической загрузкой этот вопрос отпадает — standby-тул стоит 5–10 токенов в строке текста.
Как повторить: практические советы
Решения Reschreiter заточены под Pi с lifecycle-хуками, но принципы применимы к любому агенту.
Для разработчиков агентных оболочек
- Audit текущих тулов. Посчитайте, сколько инструментов активны на нулевом ходе и сколько из них реально используются за сессию. Телеметрия Reschreiter показала: 98.1% — базовые 4.
- Объединяйте по интенту, не по HTTP-методу. Четыре CRUD-тула → один с action-enum. Модели справляются.
- Разделяйте на Always Loaded и Standby. Базовый набор (файлы, bash, git) — всегда. Всё остальное — по demand.
- Используйте текстовый список вместо мета-тула. Список из 20 имён в markdown стоят ~100 токенов. Отдельный
activate_toolс JSON-схемой — ещё 200–500. - Автоматический TTL. Неиспользуемые тулы убираются через 1–2 хода. Иначе контекст снова раздувается.
Для пользователей Claude Code / Codex / OpenCode
Динамическая загрузка тулов по OTP-принципу пока не реализована в коммерческих оболочках. Но принцип «минимум подключённых MCP» работает уже сейчас:
- MCP-профили. Eugene Trapeznikov описал паттерн: набор JSON-файлов с разными наборами MCP-серверов + shell-функция, которая выбирает профиль по пути или git-remote. Playwright подключается только при необходимости, а не в каждой сессии.
- Держите AGENTS.md коротким. Файл конвенций читается как контекст. Документация Claude Code рекомендует ~200 строк.
- Отключайте неиспользуемые MCP-серверы. Каждый MCP добавляет схемы тулов в контекст. Playwright MCP — 21 тул, ~13 700 токенов. Если вам не нужен браузер — не держите его подключённым (об этом подробнее в статье про контекст Claude Code).
- Компакция с re-inject. После
/compactвозвращайте критичные инструкции вручную — агент теряет их при сжатии (GrinRus, Habr, март 2026).
Ограничения и честные замечания
- Решение заточено под Pi. Dynamic-tools использует lifecycle-хуки (
before_agent_start,tool_call,agent_settled), которые есть не у всех агентных рантаймов. Claude Code, Codex и Cursor не предоставляют такой доступ к внутреннему циклу. - Interception через bash — компромисс. Из треда на HN: «You’re one which away from a very confused LLM» (tym0). Если модель напишет
pi-toolс опечаткой или в неожиданном контексте, расширение не распознает команду и она уйдёт в реальный bash. - Кеш промптов: не нулевой штраф. Автор показал, что 1.2% ходов дают кеш-промах из-за активации тулов. Это мало, но не ноль. Комментаторы на HN (k9294, tym0) считают удаление тулов из схемы ещё хуже для кеша, чем добавление — «instant cache nuke».
- Замеры на Codex и Antigravity — авторские, на Claude Code — оценочные. Reschreiter не использует Claude Code лично, его цифры based on «technical analyses, telemetry shared by other engineers, and community discussions online».
- Нет сравнения с Aider, Cline, OpenCode. Автор тестирует только Codex, Antigravity/Gemini, Claude Code (оценочно) и Pi. Агенты на базе OpenCode или Cline не замерялись.
Российские реалии
Доступность инструментов
- Pi (CircaCode) — open-source рантайм, доступен в России без ограничений. Установка через npm или как десктопное приложение CircaCode. Не требует API-ключей для базовой работы.
- Claude Code — доступен через API Anthropic; для оплаты нужна зарубежная карта или крипта. С января 2026 доступен без подписки Max, через API с пропорциональной оплатой.
- Codex (OpenAI) — заблокирован для российских IP, требует VPN. Оплата — только иностранные карты или криптовалюта.
- Antigravity CLI — open-source, работает без ограничений, но требует API-ключ Gemini (Google).
Российский опыт с оптимизацией контекста
Прямых кейсов по сокращению контекстного overhead на русском языке опубликовано немного. Ближайшие материалы:
- GrinRus, «Проблема не в промпте: как Claude Code плывёт на длинных задачах», Habr, март 2026 — подробный разбор управления контекстом: compaction, CLAUDE.md, re-inject после сжатия. Цифры и рекомендации применимы к российским разработчикам, работающим через VPN с Claude Code.
- Eugene Trapeznikov, «MCP Profiles», 17.07.2026 — паттерн профилей MCP, который сокращает количество подключённых серверов до нужного по контексту (personal vs work). Работает в России через VPN.
- Spryt, «Как стать вайбкодером», spryt.ru, 23.07.2026 — практический опыт работы с OpenCode и бесплатными моделями в РФ: лимиты, VPN-лайфхаки, OpenRouter через Cloudflare Worker. Контекстное управление не описано, но описана начальная точка входа для российских разработчиков.
Тема «как сократить контекст агента» в рунете пока не освещена в виде отдельных кейсов — статья GrinRus на Habr ближе всего, но фокусируется на управлении контекстом через /compact и файлы, а не на runtime-оптимизациях схем тулов.
Связанные статьи
- Контекст ИИ-агента: как управлять памятью и экономно тратить токены — общий гайд по контекстным окнам, компакции и AGENTS.md
- Контекст Claude Code: как управлять памятью агента — подробный разбор компакции, prompt caching и re-inject
- AGENTS.md: файл-конвенций, который понимают все AI-агенты — как грамотно составить файл инструкций, не раздувая контекст
- Что такое агентный кодинг: как AI-агенты пишут код за вас — базовый гайд: цикл агента, инструменты, контекстное окно
