Васин Константин
Васин Константин · промпт для Claude Code

Панель анализа расхода токенов Claude Code

Claude Code пишет полную историю каждой сессии на диск, но нигде не показывает: какой проект сколько сжирает, сколько это стоило бы по деньгам и сколько идёт руками, а сколько — автоматикой из кронов. Этот промпт заставляет саму Claude Code построить такую панель — локально, по твоим же транскриптам.

Как использовать

  1. Открой Claude Code в пустой рабочей папке.
  2. Вставь промпт целиком (кнопка «Копировать» ниже).
  3. Дай агенту прочитать и написать код — он сам найдёт твои транскрипты в ~/.claude/projects и соберёт данные.
  4. Открой получившийся tokens/index.html локально или через python3 -m http.server.
Промпт описывает алгоритм и все грабли текстом, а не готовым кодом — так Claude Code адаптирует пути и структуру под твою машину, а не копирует чужую конфигурацию один в один.
Промпт целикомвставь в Claude Code
Построй локальную панель «Анализ расхода токенов Claude Code» — сколько токенов и денег
сожрал Claude Code по дням, по проектам и по моделям, с разбивкой «руками / автоматика».

ИСТОЧНИК ДАННЫХ
Claude Code пишет транскрипты в ~/.claude/projects/<slug>/*.jsonl — по файлу на сессию.
Каждая строка — JSON-событие; нас интересуют только строки, где есть message.usage
(в них лежат input_tokens, output_tokens, cache_read_input_tokens,
cache_creation_input_tokens и опционально message.usage.cache_creation с разбивкой
на ephemeral_5m_input_tokens / ephemeral_1h_input_tokens).

ШАГ 1 — индекс "день × проект × модель"
Напиши модуль, который проходит все *.jsonl под ~/.claude/projects и строит
{день: {проект: {модель+кто+поток: [input, cache_read, cache_write_5m, cache_write_1h,
output, calls]}}}. Учти грабли (они не гипотетические, все проверены на реальном
корпусе транскриптов):

1. Один вызов модели пишется в файл НЕСКОЛЬКО раз (по числу content-блоков ответа:
   thinking, tool_use и т.д. — у всех одинаковый usage). Дедуплицируй по requestId
   (или message.id/uuid как fallback) В ПРЕДЕЛАХ ОДНОГО ФАЙЛА. Между файлами requestId
   не пересекаются, так что per-файловый дедуп достаточен и позволяет кэшировать
   по файлам независимо.

2. Транскрипты быстро вырастают до гигабайт. Читай файл в БИНАРНОМ режиме построчно
   и отбрасывай строки без подстроки b'"usage"' ДО json.loads — иначе будешь
   парсить и огромные tool_result-строки, которые не нужны.

3. Определение проекта. Claude Code кладёт реальные пути в аргументы tool_use
   (file_path/path/notebook_path у Read/Edit/Write, произвольная строка в command
   у Bash). Возьми домашнюю папку с проектами (например ~/Projects — спроси
   пользователя или прочитай из конфига) и:
   - собери СПИСОК РЕАЛЬНО СУЩЕСТВУЮЩИХ подпапок в ней (fs.readdir), это твой
     "known projects" — без этого фильтра любой левый путь типа
     ~/Projects/CLAUDE.md даст фантомный "проект CLAUDE.md";
   - в каждом tool_use ищи путь вида .../Projects/<имя>/<подпапка>/... и бери
     <имя>, только если оно есть в known projects;
   - аргументам file_path/path/notebook_path доверяй больше, чем случайной строке
     внутри длинной bash-команды (два прохода: сначала "сильные" ключи, потом
     остальные);
   - если у события путей нет вообще (чистое рассуждение, ответ без вызова
     инструментов) — унаследуй проект от ПРЕДЫДУЩЕГО события в этом же файле
     ("липкая" привязка внутри сессии, не молчаливая привязка "куда попало");
   - не определилось НИ РАЗУ за файл — отдельный бакет "(без привязки)", не
     сваливай в общий проект;
   - блоки одного ответа (thinking отдельно от tool_use) объединяй по одному
     requestId — иначе половина путей потеряется, потому что путь лежит в
     tool_use, а thinking идёт первым отдельной строкой.
   Прямо скажи пользователю в UI: это ЭВРИСТИКА с точностью до проекта,
   не бухгалтерия — сессия-обсуждение без единого файла целиком уедет в проект
   последнего касания.

4. "Кто жёг" — поле entrypoint в записи: sdk-cli/sdk/headless/api = автоматика
   (headless claude -p из крона/скрипта), claude-vscode/cli = живая сессия
   человека. Второе измерение — поток: isSidechain=true или файл лежит в
   подпапке .../subagents/... значит это подагент, иначе основной поток.

5. Дата события — по timestamp (UTC, суффикс Z), переведи в свой локальный
   часовой пояс перед тем как относить к "дню" — иначе вечерняя работа
   уезжает в "завтра"/"вчера" в зависимости от TZ.

ШАГ 2 — кэш (обязателен, иначе каждая пересборка будет читать гигабайты заново)
Кэшируй агрегаты по файлу, ключ — mtime+size файла: не изменились — не перечитываем,
берём агрегаты из кэша. Кэш храни отдельно от самих транскриптов и не выкидывай
записи для файлов, которых больше нет на диске (история дороже места) — просто
помечай их alive:false и подрезай по retention (например 120 дней). Пиши кэш
атомарно (tmp-файл + rename), сборка идёт по расписанию и оборванный кэш заставит
следующий запуск читать всё с нуля.

ШАГ 3 — деньги (только оценка, НЕ бухгалтерия подписки)
Заведи таблицу цен $/1M токенов (input, output) по актуальным моделям — сверь на
момент сборки с https://claude.com/pricing или скиллом claude-api, цены меняются.
Не кэшируй доллары, кэшируй только токены — при обновлении прайса вся история
пересчитывается на лету. Множители на кэш: чтение кэша ~0.1× от input-цены,
запись на 5 минут ~1.25×, запись на 1 час ~2×. Если разбивки cache_creation нет —
считай всё по дешёвому 5-минутному тарифу (занижай, не выдумывай). Токены
незнакомой модели не выбрасывай из счётчика: клади их в tokens, но отдельно
помечай unpriced_tokens, чтобы витрина могла честно написать "на N токенов цены
нет" вместо того чтобы молча занизить сумму. В UI явным текстом: "работа идёт по
подписке, эти суммы не списываются — это оценка для сравнения проектов между собой".

ШАГ 4 — JSON-контракт для витрины
Собери один tokens.json с окном (например 30 дней):
{
  "generated_at": ISO-время сборки,
  "dates": [30 дат по возрастанию],
  "periods": ["1","7","30"],
  "totals": { "1": {...}, "7": {...}, "30": {...} },   // агрегат за период:
      tokens/input/cache_read/cache_write/output/calls/cost/cache_share/sessions/
      projects + разбивки models/kinds/flows
  "daily": [ {date, tokens, cost, calls, sessions, manual, auto, top_project} ],
  "projects": [ {key, label, series:[30 чисел], cost_series:[...], last_day,
                 periods: {"1":{...},"7":{...},"30":{...}} } ],  // periods того же
      проекта содержит агрегат + models/kinds/flows/subpaths (топ-6 подпапок
      внутри проекта, куда реально приходились правки)
  "meta": {index:{files_total, files_scanned, files_cached, seconds, retention_days},
           history_from, cost_basis:"api_list_price_estimate", note}
}
Не показывай проект в списке, если за максимальный период у него 0 токенов —
список не должен превращаться в шум из давно мёртвых папок.

ШАГ 5 — витрина (одна статическая HTML-страница, без сборщика/фреймворка)
Тёмная UI-тема, шрифты Google Fonts (заголовки — что-то геометрическое жирное,
текст — нейтральный гротеск). Разделы:
- полоса итогов (токены/деньги/запросы/сессии/проектов/доля кэша) с переключателем
  периода 1 день / 7 дней / 30 дней (чисто клиентский, без повторных запросов);
- столбчатый график по дням: высота = все токены, тёмная часть столбика = доля
  автоматики; при наведении — тултип с деталями дня;
- три разреза долями (stacked bar): по моделям, по "кто жёг" (руками/автоматика),
  по потоку (основной/подагенты);
- таблица проектов: имя, спарклайн за период, токены с долей от макс. проекта,
  оценка $, число запросов; клик разворачивает — топ подпапок, разбивка по
  моделям, разбивка "из чего собран контекст" (свежий ввод / чтение кэша /
  запись кэша / ответы модели).
Все числа компактно (млрд/млн/тыс), формат ru-RU. Внизу — сноска: как считается
привязка к проекту, сколько файлов индекса, глубина истории. Данные тянутся
fetch("data/tokens.json") — если файла нет, показать заметку с командой сборки.

ШАГ 6 — как это разложить и запускать
Структура: tokens/build_tokens.py (собирает data/tokens.json), tokens/index.html
(витрина), sources/claude_usage_index.py (модуль индекса из шагов 1-2).
Запуск сборки: python3 tokens/build_tokens.py. Просмотр: любой статический сервер
(python3 -m http.server из папки tokens/) либо залить index.html + data/tokens.json
на свой хостинг/VPS как статику — данные не завязаны на бэкенд.
Если нужно обновлять само — заведи локальный cron/launchd (Mac) или systemd-таймер
(Linux) раз в несколько часов, который просто перезапускает build_tokens.py и
(опционально) заливает две пары файлов на хостинг.

ВАЖНО: не хардкодь домашние пути. Определяй ~/Projects и ~/.claude/projects через
Path.home(), спроси пользователя, если у него проекты лежат не в ~/Projects.

Что получится

Важная оговорка

Привязка расхода к проекту — эвристика по путям в вызовах инструментов, не бухгалтерия. Сессия, где ты только обсуждал стратегию и не тронул ни одного файла, целиком уедет в проект последнего касания. А доллары — справочная оценка «во что бы это встало по API»: если ты работаешь по подписке, никто их с тебя не списывает, они нужны только для сравнения проектов между собой.

Ещё промпты и скиллы для Claude Code

Разбор инструмента по ссылке, разведка ниши перед SEO-сайтом, второй мозг — всё разбирается в Telegram-канале.

Читать дальше

Все гайды рабочие: каждый — то, что реально крутится у меня, а не пересказ документации.

Claude Code и агенты

Хуки в Claude CodeАгент сам запускает твой скрипт: память на старте, сохранение контекста между сессиями, стоп-кран на опасные команды. Экономия токеновСтартовый вес сессии пересылается каждый ход. Как срезать его в разы: 48 400 → 15 200 токенов, готовые правила. Разбор инструментаСкилл: кидаешь ссылку на Reels, пост или репозиторий — получаешь вердикт, брать или мимо, и первый тест.

SEO и сайты

SEO-машинаКарта из десяти систем, из которых собран сайт на ИИ-агентах: что делает каждая и как собрать такую же. GEO-оптимизация сайтаКак попадать в ответы ChatGPT, AI Overviews и Яндекс Нейро: механика, чеклист по четырём уровням и промпт для аудита и правок. Разведка нишиСкилл: go/no-go по нише до сборки сайта — спрос через Wordstat, деньги-страницы, контент-план. Сайт с нуля с ИИ-агентомЧто решить до первого промпта, зачем два раздельных ТЗ и как сразу заложить блог с категориями. Самоаудит сайта20 проверок за 30 секунд и сравнение с медианой по 83 сайтам малого бизнеса. Скрипт бесплатный. Wordstat APIПодключение через Yandex Cloud за 15 минут: API-ключ, Folder ID, роль, проверка, лимиты и деньги. API поисковиковТокен Яндекс.Вебмастера и доступ к Google Search Console. Включая ловушку с семью днями.

Видео и контент

6 проектов в Claude CodeКонтент-пайплайн целиком: карусели, Reels, озвучка клон-голосом, авто-монтаж, второй мозг. Монтаж «голова + экран»Обучающий ролик с лицом поверх записи экрана: синхронизация, резка тишины, поиск фальстартов, вставки. Индекс видеотекиГотовый промпт: ИИ режет все видео на диске на смысловые куски с таймкодами — что происходит, что говорится, подо что годится.