Тест: Claude Code тратит 33 000 токенов ещё до вашего промпта, OpenCode, 7 000

Компания Systima поставила логирующий прокси между двумя агентскими CLI-инструментами для написания кода, Claude Code и OpenCode, и API модели, чтобы зафиксировать точные тела запросов и данные о расходе токенов из ответа API. Тестировали Claude Code версии 2.1.207 и OpenCode версии 1.17.18, обе, на модели Claude Sonnet 4.5; часть замеров позже повторили на более новой модели Claude Fable 5. Базовые условия изолировали намеренно: пустое рабочее пространство без файлов с инструкциями, без MCP-серверов, без пользовательских настроек и памяти, права доступа отключены, чтобы затем добавлять факторы по одному.
Базовый замер (задача "ответь ровно OK" на реплику из 22 символов) показал: OpenCode отправил один системный блок ("Ты, OpenCode, лучший агент для написания кода на свете"), 10 стандартных инструментов для работы с кодом и сам промпт, итого около 6 900 токенов. Claude Code отправил полноценный набор из 27 инструментов, не только базовые для кода, но и целый набор для фоновых агентов и оркестрации (создание cron-задач, мониторинг, семейство инструментов Task, управление git worktree, push-уведомления), плюс три служебных блока-напоминания перед самим промптом: каталог типов агентов для делегирования, каталог доступных навыков (skills) и пользовательский контекст. Итог, около 33 000 токенов. Схемы инструментов, главный вклад в разницу: около 24 000 из 33 000 токенов Claude Code, это описания инструментов, против 4 800 из 6 900 у OpenCode. Даже если полностью отключить все инструменты, голый системный промпт Claude Code весит 26 891 символ (~6 500 токенов) против 8 811 символов (~2 000 токенов) у OpenCode, больше чем втрое; авторы связывают это с "поведенческой доктриной", правилами тона, безопасности и управления задачами, встроенными в промпт.
На практической задаче с одним инструментом (прочитать файл и пересказать его) оба харнесса справились корректно, но с разной ценой: Claude Code сделал 6 HTTP-запросов и суммарно потратил около 199 000 токенов на входе, OpenCode, 4 запроса и около 41 000 плюс один небольшой вызов модели Haiku для названия сессии. Большая часть этих токенов, дешёвые чтения из кэша, но запись кэша на первом ходу и расход окна контекста скидкой не покрываются: стартовые 33 000 токенов означают, что каждый ход начинается уже на одной шестой пути внутри окна контекста в 200 000 токенов, ещё до того, как в диалоге появится хоть строка кода.
На многошаговой задаче (написать код, прогнать его, поправить по результатам теста) картина перевернулась. Claude Code упаковал всю работу, два файла на запись и два запуска скриптов, в один параллельный пакет вызовов инструментов, обойдясь тремя запросами всего. OpenCode делал по одному вызову инструмента за ход и потратил на это девять ходов. Поскольку базовая нагрузка пересылается заново с каждым запросом, итоговые суммы токенов сблизились: OpenCode девять раз заплатил свои ~7 000 токенов базы, Claude Code, три раза свои ~33 000, и на этой конкретной задаче общий расход Claude Code в итоге оказался ниже, чем у OpenCode.
Повтор базового замера на более новой модели Claude Fable 5 показал, что разрыв зависит от модели: для более новых моделей Claude Code сам урезает системный промпт, 27 787 символов инструкций для Sonnet против 10 526 для Fable, схемы инструментов сократились с 99 778 до 82 283 символов при том же наборе из 27 инструментов. В результате разрыв по объёму данных на старте упал с 4,7 раза (Sonnet) до примерно 3,3 раза (Fable), Claude Code всё равно прожорливее, но не так драматично.
В реальном использовании факторы накладываются друг на друга. Реальный файл с инструкциями на 72 килобайта (AGENTS.md/CLAUDE.md) добавил около 20 000 токенов к каждому запросу у обоих харнессов, но с оговоркой: тестируемая версия Claude Code файл AGENTS.md вообще игнорировала и подхватывала инструкции только из файла с именем CLAUDE.md, вставляя их в первое сообщение пользователя; OpenCode читает оба имени файла и вставляет их в системный промпт. Пять небольших публичных MCP-серверов добавили Claude Code около 4 900 токенов по данным о содержимом запроса и около 6 967 учтённых токенов у OpenCode, при этом число доступных инструментов выросло с 27 до 69 у Claude Code и с 10 до 52 у OpenCode; в реальных production-серверах со сложными API схемы получаются в разы больше. Отдельно нашли ещё один тихий сбой: в неинтерактивном режиме вывода (print mode) Claude Code игнорировал файл конфигурации .mcp.json в папке проекта, пока ему явно не передали флаг --mcp-config. Шаблоны фреймворков для пошаговых сценариев работы (например, BMAD) добавляют ещё один множитель: тестовый шаблон в 8 405 символов (~2 100 токенов) целиком попадает в историю диалога и пересылается заново с каждым следующим запросом, за девятизапросную сессию он был отправлен девять раз.
Самый крупный из измеренных множителей, делегирование работы вложенным агентам (сабагентам). Когда задачу распараллелили на двух сабагентов, Claude Code потратил суммарно 513 000 токенов на входе против 121 000 токенов на ту же работу, выполненную напрямую, рост в 4,2 раза при девяти запросах к модели. Причина, у каждого из пяти вызовов сабагентов свой отдельный стартовый пакет (системный промпт на 3 554 символа плюс 24 из 27 инструментов), а затем родительский агент дополнительно поглощает всю переписку сабагентов целиком. У OpenCode устройство сабагентов заметно легче, системный промпт на 1 379 символов и всего 5 инструментов, но их ветка сабагентов не отработала в тесте до конца через прокси-шлюз, поэтому итоговые цифры для OpenCode авторы не приводят.
Авторы объясняют, зачем вообще это мерить: накладные расходы по токенам, это стоимость, задержка и бюджет контекста, а в юрисдикциях вроде ЕС требование статьи 12 Акта об ИИ предполагает, что оператор системы должен уметь ответить на вопрос "что именно отправляет мой агент" данными, а не догадками. Раздел о влиянии режима расширенных рассуждений (пятый множитель) в доступном нам тексте источника обрывается на первом предложении и полностью не раскрыт.
Ключевые факты
- Базовый тест ('ответь ровно OK'): Claude Code 2.1.207 отправляет модели около 33 000 токенов служебных данных ещё до промпта, OpenCode 1.17.18, около 7 000 (обе версии на Claude Sonnet 4.5); на модели Claude Fable 5 разрыв сокращается до ~3,3 раза, потому что Claude Code сам урезает системный промпт для новых моделей.
- Главный вклад в разницу, схемы инструментов: около 24 000 из 33 000 токенов Claude Code уходит на описания 27 инструментов (включая оркестрацию фоновых и вложенных агентов), против 4 800 из 6 900 у OpenCode с его 10 инструментами.
- На многошаговой задаче картина переворачивается: Claude Code упаковывает работу в меньше запросов (3 против 9 у OpenCode) и в итоге тратит меньше токенов суммарно, потому что базовая нагрузка пересылается заново с каждым запросом, а не платится один раз.
- Реальные надстройки складываются: инструкция на 72 КБ (CLAUDE.md) добавляет ~20 000 токенов к каждому запросу, пять MCP-серверов, ещё 5 000, 7 000, а делегирование задачи двум сабагентам увеличило расход с 121 000 до 513 000 токенов (в 4,2 раза) на скромной по объёму задаче.
- Найдены и тихие сбои конфигурации: тестируемая версия Claude Code игнорировала файл AGENTS.md (требовалось имя CLAUDE.md) и игнорировала .mcp.json в неинтерактивном режиме без явного флага --mcp-config, то есть настройка могла казаться подключённой, но не работать.
Почему это важно
Токены, это не абстракция: каждый токен служебной обвязки харнесса, это токен, который нельзя потратить на код или контекст задачи, а платится он на каждом ходу заново (или в лучшем случае читается из кэша по льготной ставке). Прогон Systima впервые точно измерил, во сколько это обходится на одной и той же модели: голая базовая нагрузка Claude Code в разы больше, чем у конкурента OpenCode, а с учётом инструкций репозитория, MCP-серверов и сабагентов расхождение может достигать кратных величин. Тема попадает и в регуляторную плоскость: статья 12 Акта ЕС об ИИ ожидает от операторов агентных систем умения объяснить, что именно их агент отправляет, обычно на такие вопросы отвечают "по ощущениям", а не цифрами.
Кому это важно
В первую очередь, командам, которые уже используют Claude Code или OpenCode в продакшене и следят за счётом за API: чем больше в репозитории объёмный CLAUDE.md/AGENTS.md, подключённых MCP-серверов и делегирования задач сабагентам, тем сильнее расходится цена одной и той же работы между харнессами. Также это важно тем, кто выбирает между агентскими CLI для кодинга и сравнивает их не по фичам, а по счёту в конце месяца, и инженерам, которые настраивают мониторинг расходов на ИИ-инструменты внутри организации.
Как это применить
Из измерений следуют практические шаги: проверить, какое именно имя файла с инструкциями реально читает используемый харнесс (в тестируемой версии Claude Code, только CLAUDE.md, не AGENTS.md, иначе инструкция молча игнорируется); не подключать MCP-серверы бездумно, особенно с богатыми схемами API, измерять нагрузку от каждого перед массовым подключением; относиться к делегированию сабагентам как к сознательному компромиссу цены и параллелизма, а не к автоматическому ускорению, на скромной задаче оно подняло расход в 4,2 раза; для харнессов с высокой базовой нагрузкой (вроде Claude Code) выгоднее задачи, где несколько действий упаковываются в один параллельный вызов инструментов, а не растягиваются на много ходов; и отдельно проверять в неинтерактивном режиме, что MCP-конфигурация реально подключена (может понадобиться явный флаг --mcp-config).
Можно ли доверять
Методология описана подробно и выглядит добросовестной: логирующий прокси фиксирует и точное тело запроса, и метрики использования из ответа API, версии харнессов и модели зафиксированы (Claude Code 2.1.207, OpenCode 1.17.18, Claude Sonnet 4.5 и отдельно Claude Fable 5), базовые условия изолированы, а множители добавлялись по одному, это снижает риск случайных искажений. Авторы честно называют собственную погрешность измерения (около 6 200 токенов на конверт локального шлюза, вычтенных из всех цифр) и метод перевода символов в токены. Ограничения: это одно независимое исследование компании Systima, не воспроизведённое сторонними наблюдателями; оба инструмента активно обновляются, и абсолютные цифры для конкретных версий могут устареть уже к следующему релизу; часть материала источника (описание множителя от расширенных рассуждений) в доступном нам тексте обрывается на середине и не может быть проверена.
Риски и подводные камни
Главный риск, молчаливые сбои конфигурации, которые обнаружили сами авторы: игнорирование файла AGENTS.md и игнорирование .mcp.json без явного флага означают, что команда может быть уверена, что инструкция или MCP-сервер подключены, а на деле харнесс их не видит, и никакой ошибки это не выдаёт. Второй риск, не переносить выводы буквально на любую нагрузку: разрыв "33 000 против 7 000", это базовый минимум для одной конкретной версии на одной конкретной модели; на многошаговых задачах с батчингом расход может, наоборот, оказаться ниже у более прожорливого на старте харнесса. Наконец, сабагенты, самый резкий из измеренных множителей (4,2 раза на скромной задаче), и команды, включающие делегирование по умолчанию, рискуют получить неожиданный счёт за API, не отследив источник роста.
«Базовые 33 000 токенов означают, что каждый ход начинается уже на одной шестой пути внутри окна контекста в 200 000 токенов, ещё до того, как в диалоге появится хоть строка кода.»
— Systima, отчёт о сравнении Claude Code и OpenCode