Как экономить токены в Claude Code

Я уже разбирался несколько месяцев назад, как Claude Code стремится экономить токены во время работы. Но с тех пор тема экономии стала намного более актуальной — сначала у Anthropic вышли модели с новым токенизатором, который использовал на 30-35% больше токенов по сравнению с предыдущей версией, а потом наступил Fable, который их расходует еще более щедро и при этом отдельно лимитируется на дорогих подписках и вообще тарифицируется отдельно на остальных.

Даже если вы не такой уж тяжелый пользователь, тема экономии токенов может быть актуальна — как минимум, от количества обрабатываемых токенов прямо зависит время обработки и очень часто — качество результата.

Проблема актуальна не только для пользователей Claude Code — с начала лета GitHub Copilot перевел свои тарифы на токены, а самые мощные модели вообще увел с большими мультипликаторами в более дорогие подписки. Если добавить, что как раз к концу мая компании вдруг поняли, сколько они реально расходуют ресурсов — при непонятном результате, — и начали зажимать расходы, то понятно, почему тема экономии обогнала тему запуска всяких персональных агентов.

Честно говоря, до релиза Fable 5 у меня вопрос об экономии токенов вообще не стоял — мне не удавалось потратить недельные лимиты ни разу, как бы интенсивно я их не использовал. Правда, скажу честно — я не придумывал задачи, чтобы потратить лимиты, не запускал агентов в цикле на много часов — просто решал имеющиеся задачи. Fable лишь заставил более критически посмотреть на организацию работы и помог пересмотреть некоторые узкие места.

Итак, короткий список очевидных советов.

  • Не выполняйте всю работу агентом на самой мощной модели. Используемая модель должна точно соответствовать задаче. Мощная модель хороша для обсуждения большой задачи, планирования, глубокого анализа данных. Если задача заключается в чтении большого количества данных — например, логов, — и производства над ними заранее определенных операций — включайте модель заметно проще, например, Sonnet или Gemini Flash Lite или GPT-5.6 Terra. Во-первых, это дешевле, во-вторых, быстрее, в-третьих, вы уменьшаете риск ненужной инициативы модели при выполнении простых операций.
  • Не выполняйте всю работу одним агентом. В этом случае контекст сессии содержит огромное количество разных данных, большинство из которых может быть просто не нужно для задачи (например, большой кусок логов, в которых только несколько строк относятся к делу), а многие вполне могут быть заменены сводным отчетом. Основной агент, с которым вы общаетесь, может для каждой рутинной задачи запустить субагентов с готовыми специализированными настройками, те включатся, отработают запрос, отдадут ответ и выключатся. При этом они как раз могут использовать другие модели — то есть основной агент на Fable отправляет агента на Sonnet проверить большой кусок логов и дать сводный отчет или дает ему указание обработать какой-то кусок данных и сохранить в файл и так далее. Вершиной делегирования в данном случае будет использование dynamic workflow в Claude Code, когда основной агент пишет скрипт, который запускает десятки, а то и сотни агентов, раздает им задачи, а потом скрипт же собирает результаты, которые уже возвращает основному агенту.
    Я таким образом сделал за час с лишним перевод 300 страниц технической документации — Fable скриптом разрезал файл на отдельные куски, запустил агентов, которые прошлись по тексту и составили глоссарий, потом через workflow запустил 140 агентов, которые перевели каждый свой кусок, после чего выборочно вычитал текст.
  • Одна задача = одна сессия. Запуск моделей с контекстом в 1 миллион токенов сыграл злую шутку с пользователями, провоцируя на длинные сессии. Да, часто задача требует несколько сотен тысяч токенов для решения. Но далеко не всегда их надо тратить.
    Длинная сессия — это большое количество количество контекста. Этот контекст не всегда может быть полностью релевантен задаче. Модель неравномерно работает с длинным контекстом — упрощенно говоря, часто модели хорошо учитывают начало и контекст большого блока, проваливаясь в середине (U-shaped). Если в сессии были какие-то отвлечения или ошибки — контекст продолжает тащить это в себе. И при этом, чем дольше длится сессия, тем больше токенов приходится гонять на каждом шаге, а это уже не прямая зависимость, а часто прогрессия.
    Любую задачу можно разбить на мелкие. Более того, процесс ее решения можно разбить на этапы, каждый из которых будет иметь входные параметры и выходные результаты — в каждой такой точке работу можно зафиксировать и проверить, причем хотите самостоятельно, хотите — другой моделью.
    Это, конечно, уничтожает магию “Я сказал сделать хорошо и все сделалось”, но дает гарантию результата, пусть и не такого быстрого. А заодно и экономит токены — разбейте задачу на этапы в виде изучения, планирования, имплементации и тестирования и самая мощная модель вам понадобится только на этапе выработки решения и планирования, а объемную работу по имплементации выполнит быстрый и точный субагент.
  • Выключите компакт. Когда Claude Code доходит до уровня 65-70% заполнения контекста, он делает автоматическое сжатие сессии и только этот результат остается в контексте. Любое lossy сжатие теряет информацию и этот случай не исключение. Что именно потеряется — вы контролируете плохо, поэтому шансы, что задача плохо переживет контекст, высокие.
    Но этого и не надо — если разбить большую задачу на понятные подзадачи, грамотно фиксировать промежуточные результаты и хорошо организовать оркестрацию агентов, то основной агент легко удержится на уровне 300-400к токенов максимум.
  • Регулируйте effort/thinking level модели. Да, иногда хочется получить максимальное усилие самой мощной модели. Но не надо ставить дефолтом Ultra или Ultracode и потом спрашивать, как экономить токены. То, что написано выше про выбор модели, еще более справедливо про выбор effort.
  • Длина сессии — это не только контекст, но и время. Если вы в Claude Code делаете большую паузу и возвращаетесь к открытой сессии через час и более того, то высока вероятность, что кэш сессии уже сброшен и теперь для возобновления работы надо передать весь контекст в модель заново. Не делайте таких перерывов — это еще один аргумент в пользу мелко нарезанных задач.
    Кстати, сейчас Claude Code и другие клиенты Anthropic начали показывать подсказку при длительном простое, что лучше начать новый чат.
  • Регулярно просматривайте все промпты и настройки. Например, для Fable рекомендуется заметно уменьшить размер промптов — примеры, которые мы привыкли давать прежним моделям, эта воспринимает как инструкцию “Делай так и никак иначе”. Если выбросить примеры, CLAUDE.md и другие конфиги могут заметно похудеть, тоже экономя контекст.

К популярным советам подключать более дешевые модели, — например, китайские, — вместо каких-то моделей в сам Claude Code, я отношусь скептически. Дело в том, что Claude Code исходит из того, что он работает с моделями одного семейства, поэтому при обращении к любой модели он использует одни и те же настройки — в итоге вы подключите вместо Opus или Sonnet Qwen или Kimi и в них полетят промпты, разработанные для моделей Anthropic. Подход к составлению промптов сильно отличается между моделями — лучше возьмите какой-нибудь pi или opencode, настройте в нем всё под конкретную модель и вызывайте его в режиме командной строки из Claude Code.

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