Сколько токенов уходит в Claude Code: замеры

17 минут чтения

Один вопрос из одной фразы, заданный Claude Code в корне рабочего проекта, стоит около 51 тысячи токенов. Ответ в нём занимает 54 токена, остальное это то, что модель читает перед ответом: системный промпт, описания инструментов, файл правил проекта и его память. Чтение одного файла на 75 строк с пересказом обходится в 103 тысячи за два запроса, поиск функции по проекту в 101 тысячу, а сессия, в которой агент за 35 минут пишет и публикует статью, отправляет модели 23 миллиона токенов, из которых 98 процентов приходят из кэша. Все числа ниже сняты в репозитории этого сайта: пять задач одной командой 19 сентября 2026 года и семь сессий по транскриптам с 16 по 19 сентября.

В мае я честно писал, что стоимость работы Claude Code не считал: с мая на плане за 200 долларов я видел только итог, около 80 процентов недельного лимита к концу недели, и не смотрел, из чего он складывается. Замеры ниже снял на моей машине и в моём аккаунте тот же автоматический прогон, который пишет статьи по расписанию; я разобрал его результаты. Здесь: сколько уходит на конкретное действие, где посмотреть свой расход и почему пятичасовой лимит тает, когда вы почти ничего не делали.

Что модель читает при каждом запросе

Модель ничего не помнит между запросами. Каждый раз, когда Claude Code отправляет ей ход, в запрос уходит всё: системный промпт с описанием инструментов, правила проекта из CLAUDE.md, вся история разговора с результатами команд и ваше новое сообщение. Ответ модели весит десятки или сотни токенов, а этот «багаж» весит десятки тысяч и растёт с каждым ходом. Поэтому расход в токенах определяется тем, что модель прочитала, и ваш текст в нём почти незаметен.

Чтобы не пересчитывать один и тот же багаж каждый раз, API кэширует неизменную часть запроса: если начало запроса совпадает с предыдущим, эта часть читается из кэша и стоит для Sonnet и Opus десятую долю обычного входа, для Fable 5.1 сороковую. В ответе API на каждый запрос стоят четыре числа, и по ним видно, что было новым, а что пришло из кэша: input_tokens (новые токены без кэша), cache_creation_input_tokens (записано в кэш, то есть тоже новое), cache_read_input_tokens (прочитано из кэша) и output_tokens (ответ модели вместе с её рассуждениями). Как устроено само окно контекста и что происходит, когда оно заполняется, я разбирал в статье про контекст в Claude Code; здесь речь про расход.

Замер: пять задач одной командой

Самый простой способ увидеть свой расход это запустить Claude Code без интерфейса, с флагом -p и выводом в JSON. В конце ответа лежит блок usage с теми самыми четырьмя числами и оценка стоимости, которую Claude Code считает сам по прайс-листу. Команда ниже запускается из папки проекта (cd в неё сначала), задаёт вопрос, а jq вынимает из ответа только нужное; если jq не установлен, вторую строку можно заменить на python3 -m json.tool answer.json и найти блок usage глазами. Модель выбрана Sonnet, чтобы числа были ближе к плану за 20 долларов.

Команда замера из папки проекта: вопрос без чтения файлов, ответ в JSON
claude -p "Ответь одним предложением, не читая файлов: что такое токен в языковой модели?" --output-format json --model sonnet > answer.json
jq '{num_turns, total_cost_usd, usage: (.usage | {input_tokens, cache_creation_input_tokens, cache_read_input_tokens, output_tokens})}' answer.json
Вывод для вопроса, заданного в корне проекта сайта (19.09.2026, модель claude-sonnet-4-6)
{
  "num_turns": 1,
  "total_cost_usd": 0.1561932,
  "usage": {
    "input_tokens": 3,
    "cache_creation_input_tokens": 40582,
    "cache_read_input_tokens": 10639,
    "output_tokens": 54
  }
}

Три токена нового текста и 54 токена ответа, а модель прочитала 51 224 токена. По оценке Claude Code это 16 центов за одно предложение; на подписке деньги не списываются, но именно этот объём идёт в счёт лимита. Ту же команду прогон запустил ещё в четырёх вариантах: в пустой папке вне проекта, с чтением файла, с поиском по проекту и с выводом git log (для команд в режиме -p агенту нужно заранее разрешить их флагом --allowedTools, иначе он тратит ход на запрос разрешения). В таблице «отправлено» это всё, что модель прочитала за задачу, «новых» это то, что не пришло из кэша.

Пять задач через claude -p, модель Sonnet 4.6, 19.09.2026

Отправлено модели всего
Из них новых, не из кэша

Вопрос из одной фразы в пустой папке: 1 запрос, ответ 49 токенов

Отправлено модели всего

18 858

Из них новых, не из кэша

8 219

Тот же вопрос в корне проекта: 1 запрос, ответ 54 токена

Отправлено модели всего

51 224

Из них новых, не из кэша

40 585

Прочитать файл на 75 строк и пересказать: 2 запроса, ответ 248

Отправлено модели всего

103 217

Из них новых, не из кэша

37 527

Найти вызовы функции по проекту: 2 запроса, ответ 302

Отправлено модели всего

101 292

Из них новых, не из кэша

36 024

git log --stat -40 и три предложения по нему: 4 запроса, ответ 565

Отправлено модели всего

208 291

Из них новых, не из кэша

38 194

Из таблицы видно главное. Ответ модели почти не участвует в расходе: самый длинный из пяти занял 565 токенов. Расход задаёт контекст, а контекст растёт с каждым запросом: чтение файла это два запроса, потому что после команды чтения модель получает результат и отвечает ещё раз, и второй запрос снова несёт всё, что было в первом. Из кэша при этом пришло 65 тысяч из 103. Четыре запроса с git log дали 208 тысяч отправленных при 38 тысячах новых.

Второе, что видно: 10 639 токенов из кэша даже в пустой папке. Это начало запроса, одинаковое в любой папке (описания встроенных инструментов), и оно уже лежало в кэше к моменту запуска. А вот разница между пустой папкой и проектом, 40 585 против 8 219 новых токенов, не про кэш. Это то, что проект добавляет в каждую сессию.

Наша находка: проект добавляет 32 тысячи токенов до первого слова

CLAUDE.md в корне проекта сайта занимает 331 строку и 103 килобайта. Claude Code читает его при старте каждой сессии и каждого субагента (отдельного помощника со своим окном, которого агент запускает под задачу), вместе с ним грузится память проекта и короткие описания восьми скилов, и по замеру всё это около 32 тысяч токенов до первого слова задачи; большая часть приходится на файл правил. Прогон проверил, что файл действительно в контексте, а не подгружается по требованию: спросил в режиме -p, какие разделы CLAUDE.md агент видит, не читая файлов, и получил три заголовка из него; запрос стоил те же 51 тысячу.

Документация Claude Code рекомендует держать файл в пределах 200 строк и выносить специализированные инструкции в скилы, которые загружаются только при вызове. У нас в файле лежат подробные правила деплоя, проверки вёрстки, ведения доски задач и уборки в разделе SEO, а нужны они далеко не в каждой сессии. Решение записано в бэклог проекта: разделы уходят в скилы, файл сокращается до ориентира из документации. Как устроен скил и почему он не занимает окно, пока его не позвали, я разбирал в статье про скилы в Claude Code. Если у вас файл правил на сотню строк, проверьте его тем же способом: два запуска claude -p с одинаковым вопросом, в проекте и в папке вне любого репозитория, и разница в сумме отправленных токенов покажет, сколько проект добавляет к каждому запросу. Один запуск даёт разброс в пару тысяч токенов, так что сравнивайте порядок, а не единицы.

Ноутбук с редактором кода у ночного окна, рядом лист в клетку с рукописным списком и галочками, карандаш и лампа

Сессия целиком: пять статей и два длинных вечера

Одна команда показывает цену действия, но лимит съедают сессии. Claude Code хранит каждую сессию транскриптом в ~/.claude/projects/<папка проекта>/<id>.jsonl; папка проекта называется по его пути с дефисами вместо слэшей, например -Users-artem-bot, а самый свежий файл в ней это текущая сессия. В каждой строке с ответом модели лежит тот же блок usage. Скрипт ниже складывает эти числа по файлу; зависимостей у него нет, нужен только Python 3. Субагенты пишут свои транскрипты в подпапки, скрипт их не читает, так что суммы ниже это основной разговор без помощников.

Скрипт: расход токенов по транскрипту сессии (Python 3)
# Считает расход токенов по транскриптам Claude Code.
# Запуск: python3 token-usage.py ~/.claude/projects/<папка-проекта>/<сессия>.jsonl
import json, sys

for path in sys.argv[1:]:
    seen, tot, calls = set(), dict(input=0, cache_write=0, cache_read=0, output=0), 0
    for line in open(path):
        try:
            o = json.loads(line)
        except ValueError:
            continue
        usage = (o.get("message") or {}).get("usage")
        key = o.get("requestId") or o.get("uuid")
        if o.get("type") != "assistant" or not usage or key in seen:
            continue
        seen.add(key); calls += 1
        tot["input"] += usage.get("input_tokens", 0)
        tot["cache_write"] += usage.get("cache_creation_input_tokens", 0)
        tot["cache_read"] += usage.get("cache_read_input_tokens", 0)
        tot["output"] += usage.get("output_tokens", 0)
    sent = tot["input"] + tot["cache_write"] + tot["cache_read"]
    print(f"{path.split('/')[-1][:8]}  запросов {calls}  отправлено {sent/1e6:.1f} млн  "
          f"из кэша {100*tot['cache_read']//max(sent,1)}%  в кэш {tot['cache_write']/1e3:.0f} тыс  "
          f"без кэша {tot['input']/1e3:.0f} тыс  ответ {tot['output']/1e3:.0f} тыс")

Прогон применил его к семи сессиям в проекте сайта. Пять из них это автоматические прогоны на модели Fable 5.1, в каждом агент выбирает тему по поисковым запросам, пишет статью, проверяет её в браузере, публикует и уведомляет поисковики; человек в них не участвует. Шестая это вечерняя сессия 18 сентября, почти восемь часов с перерывами. Седьмая тянулась с 16 по 18 сентября на модели Opus 5, к ней возвращались после долгих пауз.

Семь сессий по транскриптам, 16-19 сентября 2026

Отправлено модели всего
Новое: записано в кэш и ответы

Статья №1, 35 минут, 74 запроса, 166 вызовов инструментов, Fable 5.1

Отправлено модели всего

23,5 млн, 98 % из кэша

Новое: записано в кэш и ответы

448 тыс + 124 тыс

Статья №2, 40 минут, 74 запроса, Fable 5.1

Отправлено модели всего

22,0 млн, 98 % из кэша

Новое: записано в кэш и ответы

416 тыс + 122 тыс

Статья №3, 51 минута, 70 запросов, Fable 5.1

Отправлено модели всего

21,8 млн, 98 % из кэша

Новое: записано в кэш и ответы

466 тыс + 149 тыс

Статья №4, 43 минуты, 73 запроса, Fable 5.1

Отправлено модели всего

19,8 млн, 98 % из кэша

Новое: записано в кэш и ответы

398 тыс + 130 тыс

Статья №5, 42 минуты, 59 запросов, Fable 5.1

Отправлено модели всего

13,5 млн, 98 % из кэша

Новое: записано в кэш и ответы

322 тыс + 111 тыс

Вечерняя сессия с перерывами, 7,7 часа, 137 запросов, Fable 5.1

Отправлено модели всего

76,6 млн, 96 % из кэша

Новое: записано в кэш и ответы

2,9 млн + 328 тыс

Сессия с возвратами, три дня, 165 запросов, Opus 5

Отправлено модели всего

50,2 млн, 98 % из кэша

Новое: записано в кэш и ответы

1,0 млн + 189 тыс

Это и есть ответ на вопрос «на сколько хватит 25 миллионов токенов». Если считать отправленное, 25 миллионов это одна плотная сессия на 35-40 минут, в которой агент сделал семьдесят ходов. Если считать новое, то есть то, что модель прочитала впервые и что написала сама, та же сессия №1 уложилась в 572 тысячи. Оба числа правдивы, вопрос в том, что именно считает ваш тариф: у API кэш дешевле в десять раз (у Fable 5.1 в сорок), а у подписки в лимит идёт весь объём, но кэшированная часть весит меньше. Точную формулу зачёта кэша в лимит подписки Anthropic не публикует, поэтому единственный надёжный способ узнать, сколько осталось, это посмотреть в /usage.

Для читателя на плане за 20 долларов с Sonnet, одним окном и файлом правил на сорок строк порядок другой: по замеру задач выше один ход стоит около 19 тысяч отправленных, а не 51, и сессия из семидесяти ходов уложится в несколько миллионов отправленных, а не в двадцать. Полосу плана это меняет сильнее, чем модель.

Разница между рабочими прогонами и вечерней сессией: 96 процентов из кэша вместо 98 и 2,9 миллиона записано в кэш вместо 400 тысяч. По транскрипту две трети этих записей, 1,97 миллиона, пришлись ровно на три паузы длиннее часа: 136, 85 и 79 минут. После каждой из них первый запрос перечитывал всю историю как новую. Это цена перерывов.

Где посмотреть свой расход

Внутри сессии команда /usage. Верхний блок Session показывает токены текущей сессии по моделям, стоимость по прайс-листу и строку Prompt cache: сколько запросов было, какая доля входа пришла из кэша, сколько промахов и тёплый ли кэш прямо сейчас. Для подписчиков там же полосы плана: сколько израсходовано в текущем пятичасовом окне лимита и в недельном; эти полосы приходят с сервера и уже включают claude.ai. Ниже разбивка, кто съел лимит за последние сутки или семь дней: скилы, субагенты, плагины, отдельные MCP-серверы, задачи по расписанию; она считается по локальной истории сессий этой машины, поэтому расход с другого компьютера в неё не входит. Если какое-то поведение, например длинный контекст или промахи кэша, занимает десять процентов расхода и больше, Claude Code помечает его флагом и даёт подсказку.

Что именно лежит в окне контекста прямо сейчас, показывает /context: правила, инструменты, прочитанные файлы, история. А если хотите видеть расход постоянно, статусная строка Claude Code умеет показывать заполнение окна, стоимость сессии и проценты лимитов. В режиме -p всё то же самое лежит в JSON, как в замере выше.

Блок Session в /usage: пример из документации Claude Code (misses это промахи кэша, TTL его время жизни)
Total cost:            $0.55
Total duration (API):  6m 20s
Total duration (wall): 6h 33m 10s
Total code changes:    0 lines added, 0 lines removed
Usage by model:
   claude-sonnet-4-6:  1.2k input, 5.3k output, 940.0k cache read, 50.0k cache write ($0.55)
Prompt cache (main):   14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · warm (1h TTL, last activity 40s ago)

Почему пятичасовой лимит уходит, когда почти ничего не делаешь

На планах Pro и Max у Claude Code два счётчика. Первый это скользящее окно на пять часов. Второй недельный, он общий на все модели и сбрасывается раз в неделю в фиксированное время, закреплённое за вашим аккаунтом. Расход списывается с обоих одновременно, поэтому один тяжёлый рывок, например разветвлённая задача с десятком субагентов, может съесть неделю раньше, чем закроется пятичасовое окно. Оба счётчика общие с claude.ai: переписка в браузере и работа в терминале списываются из одного лимита. Когда окно кончается, Claude Code пишет «You've hit your session limit» и показывает время сброса; переключение модели через /model здесь не помогает, потому что лимит общий. Помогает оно только при отдельном сообщении про лимит Opus или Sonnet: тогда модель другого семейства продолжит работу.

По документации и по нашим цифрам лимит утекает в трёх местах, и ни одно из них не выглядит как работа.

Длинная сессия. Каждая реплика несёт всю историю. Вопрос из одной строки в сессии, открытой с утра, отправляет модели весь разговор с утра: в таблице выше 137 запросов дали 76 миллионов отправленных. Из кэша это дешевле, но не бесплатно. Между несвязанными задачами /clear, перед ним /rename, чтобы сессию потом найти через /resume; что при этом сохранить и как передать агенту незаконченную задачу, есть в статье про контекст.

Промах кэша после перерыва. На подписке кэш основного разговора живёт час с последнего запроса; на usage credits (доплата за расход сверх плана), по ключу API и у субагентов пять минут. Вернулись после обеда, и первый вопрос перечитывает всю историю заново как новые токены. Это те три паузы из вечерней сессии на 1,97 миллиона. Смена модели посреди сессии тоже сбрасывает кэш, потому что у каждой модели он свой, а на большинстве моделей то же делает смена уровня усилий (настройки, сколько модели думать); выбирайте их в начале.

Фоновые запросы. Задачи по расписанию внутри открытой сессии срабатывают по таймеру и каждый раз отправляют полный контекст, даже когда вы отошли. Суммаризация старых разговоров для --resume и часть служебных команд тоже делают запросы; документация оценивает эти фоновые расходы в пределах четырёх центов за сессию, но расписание в открытом окне в эту оценку не входит и за ночь набирает больше. У меня рутины по расписанию работают отдельными сессиями, и в разбивке /usage они видны отдельной строкой; там и стоит искать, если лимит ушёл без вас.

Открытый электрощит в подвале: предохранители, тумблеры, стрелочный прибор, зелёный индикатор, на дверце журнал

Что сделать сегодня

Откройте /usage в текущей сессии и посмотрите на разбивку: если в верхней строке стоит субагент, плагин или задача по расписанию, вы нашли, куда ушёл лимит. Закройте сессию, которая тянется с утра: /rename, потом /clear. Посмотрите длину своего CLAUDE.md и, если он длиннее двухсот строк, сравните два запуска claude -p в проекте и вне его, как в таблице выше.

Если вопрос в том, какой план брать и на сколько его хватит вечерами, ответ и мой режим на плане за 200 есть в обзоре Claude Code. Если хочется платить ровно за токены вместо окон лимита, у этого два пути: включить usage credits в настройках подписки, тогда расход сверх плана списывается по ценам API, или войти в Claude Code по ключу API, тогда лимитов подписки нет вообще и каждый токен стоит денег; как такой режим живёт на своём сервере, разбирал отдельно. А если проект уже разросся, агент путается, а лимит кончается к обеду, структуру проекта и файл правил я разбираю с заказчиком за одну рабочую сессию: вайб-кодинг в Минске.

Частые вопросы

Токены это единица объёма текста, который модель читает и пишет; лимит это квота подписки на пять часов и на неделю, которая списывается за этот объём. На API вы платите деньгами за токены и лимита в этом смысле нет; на подписке деньги фиксированы, а кончается окно.
Если считать отправленное модели, то по нашему замеру миллион это около двадцати вопросов в проекте с большим файлом правил (51 тысяча на вопрос) или десять чтений файла (около 100 тысяч каждое). Если считать новые токены, миллиона хватает примерно на час плотной работы агента: 35-минутная сессия из 74 запросов дала 572 тысячи нового. Что именно зачитывает ваш тариф, показывает /usage.
По отправленному это около пяти минут плотной работы агента: в нашей сессии 74 запроса за 35 минут отправили 23,5 миллиона, то есть примерно 670 тысяч в минуту. По новым токенам 3 миллиона это большая вечерняя сессия с перерывами: 7,7 часа работы дали 2,9 миллиона записанных в кэш и 328 тысяч ответов.
Столько, сколько лежит в контексте на момент запроса. В пустой папке первый запрос стоил 18 858 токенов, в проекте с файлом правил на 331 строку 51 224. Каждый следующий запрос в той же сессии больше предыдущего, потому что несёт всю историю; из кэша это дешевле, но считается.
Командой /usage внутри сессии: полосы плана показывают, сколько израсходовано в текущем пятичасовом окне и за неделю, а разбивка ниже называет, кто съел лимит за последние сутки: субагенты, плагины, MCP-серверы, задачи по расписанию. Чаще всего это сессия, открытая с утра, или задача по расписанию, которая срабатывала без вас.
Да, кэшированные токены входят в расход, но с меньшим весом, чем новые. Точную формулу зачёта Anthropic не публикует. Для API кэш читается у Sonnet и Opus за десятую долю обычной цены входа, у Fable 5.1 за сороковую; на подписке практический вывод тот же: держать кэш тёплым выгодно, а промах после перерыва дольше часа стоит перечитывания всей истории.

Новые посты на почту

Без спама. Отписка в один клик в любом письме.