
Один вопрос из одной фразы, заданный 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 долларов.
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{
"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, иначе он тратит ход на запрос разрешения). В таблице «отправлено» это всё, что модель прочитала за задачу, «новых» это то, что не пришло из кэша.
Вопрос из одной фразы в пустой папке: 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 новых токенов, не про кэш. Это то, что проект добавляет в каждую сессию.
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. Субагенты пишут свои транскрипты в подпапки, скрипт их не читает, так что суммы ниже это основной разговор без помощников.
# Считает расход токенов по транскриптам 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, к ней возвращались после долгих пауз.
Статья №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, как в замере выше.
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, тогда лимитов подписки нет вообще и каждый токен стоит денег; как такой режим живёт на своём сервере, разбирал отдельно. А если проект уже разросся, агент путается, а лимит кончается к обеду, структуру проекта и файл правил я разбираю с заказчиком за одну рабочую сессию: вайб-кодинг в Минске.
Скилы в Claude Code: что это и как сделать свой
Скил это папка с SKILL.md. Где она лежит, что писать в описании, чем скил отличается от промпта и CLAUDE.md, почему не срабатывает и как перенести в Codex.
Как открыть Mini App в Telegram: способы запуска
Кнопка в чате, меню, профиль бота, ссылка в канал и группу, ярлык на экране: где запускается Mini App, что оно узнаёт о человеке и почему не открывается.
Контекст в Claude Code: что это и когда кончается
Рабочая память агента: правила, файлы, выводы команд. Что происходит, когда окно заполняется, что переживает сжатие и как продолжить проект после обрыва.