Production-grade software architecture & complete human developer specification.
🌐 Open Live Showcase · 📊 Architectural Diagram · 📜 Developer Specs
--- ---
Showing 10 verified screenshot(s) and visual assets directly from the repository source tree:
The official interactive web showcase for marko1olo/token-audit is live and hosted on GitHub Pages: 👉 Click here to visit the live site
Иллюстрированная история Самарского рейда на Claude Code и аномалии OpenAI Codex на 152 миллиарда токенов.
This repository contains marko1olo/token-audit. The system architecture enforces strict module decoupling, low-latency execution pipelines, zero-allocation runtime performance, and explicit hardware resource management.
graph TD
A[Input Signal / State] --> B[Core Processing Module]
B --> C[Data Mutation Engine]
C --> D[Telemetry & Output Interface]
- Zero Allocation Execution: High-throughput memory buffer pools.
- Modular Architecture: Decoupled domain interfaces.
⚙️ Core System Configuration Parameters (Click to Collapse)
| Parameter Key | Type | Default Value | Description |
|---|---|---|---|
MAX_BUFFER_SIZE |
SizeT | 65536 |
Maximum pre-allocated memory buffer in bytes |
FRAME_RATE_TARGET |
Int | 60 |
Target loop frequency in Hz |
ENABLE_TELEMETRY |
Bool | true |
Emit real-time JSON metrics to stdout |
THREAD_POOL_COUNT |
Int | 8 |
Worker thread allocations for parallel processing |
The section below contains 100% of the true, un-truncated, original human developer documentation created for this repository:
Аудит расхода токенов агентных AI-инструментов по локальным логам. Claude Code · OpenAI Codex · Google Antigravity.
Считает, сколько токенов на самом деле израсходовано, откуда они взялись и сколько это стоило бы по публичному прайсу. Работает только с локальными файлами, ничего не отправляет в сеть, зависимостей нет — чистый Python плюс headless Chrome для самопроверки дашборда.
Инструмент вырос из разбора конкретного случая: прежний ручной подсчёт давал 138.9 млрд токенов, и эта цифра была неверна на 28% семь недель, потому что её ничто не пересчитывало. Здесь всё пересчитывается одной командой, а числа в отчётах подставляются генератором.
| Codex, консервативно | 60 847 942 338 токенов |
| Codex, верхняя граница | 94 188 725 235 |
| Claude Code, измерено | 26 723 030 291 |
| Claude Code, эквивалент по прайсу | $23 905,81 |
| Antigravity | счётчика не существует |
| доля кэш-чтения в объёме Claude Code | 94.66% |
| доля вывода в объёме | 0.55% |
| завышение при наивной сумме | ×2.14 |
| крупнейшая статья расхода | чтение кэша, 52.97% |
| токен дороже в дни со сломанным кэшем | ×5.5 |
Главный практический вывод: эффективность кэша важнее объёма. Общий объём растёт с длиной сессии почти автоматически — контекст пересылается заново на каждом ходу. Деньги создаются только в строке некэшированного ввода.
| Файл | Что внутри |
|---|---|
CURRENT.md |
актуальные цифры, генерируется целиком |
FULL_REPORT.md |
книга данных: 7 частей, 39 таблиц, все генерируются |
SUMMARY.md |
сводка с классами доказательности |
DEEP_REPORT.md |
разбор по моделям, паттерны, сравнение с индустрией |
dashboard.html |
интерактивный дашборд, 59 панелей, самодостаточный |
▶ Открыть дашборд — один файл
на 1.9 МБ, ноль внешних запросов: SVG, светлая и тёмная темы, тултипы. Локально открывается
двойным щелчком по dashboard.html.
Все числа в блоках <!-- AUTO:… --> подставлены report_gen.py 2026-08-01 08:43 из JSON-выкладок. Править данные, а не текст: python refresh.py.
python refresh.py # быстро: Claude Code + дашборд + проверка (~40 с)
python refresh.py --codex # плюс Codex методом chain-split (10 ГБ, минуты)
python refresh.py --antigravity # плюс прокси-метрики Antigravity (1.4 ГБ)
python refresh.py --all # всё
python refresh.py --no-verify # без headless-проверки рендера
Что происходит за один запуск:
- измерение — пересчёт сырых логов заново, без кэшей и инкрементов;
- стоимость — тарифы применяются к измеренным полям, отдельно кэш-чтение и запись;
- дельты — сравнение с предыдущим запуском из
snapshots.jsonl; - генерация —
CURRENT.mdцеликом и AUTO-блоки в остальных отчётах; - сборка —
dashboard.html, самодостаточный, данные встроены; - проверка — headless-рендер плюс сверки целостности между файлами.
Ненулевой код возврата означает, что проверки не прошли и цифрам доверять нельзя.
| Файл | Кто пишет |
|---|---|
CURRENT.md |
целиком генерируется, править бессмысленно |
SUMMARY.md |
проза авторская, числа в AUTO-блоках |
DEEP_REPORT.md |
то же, детальнее |
README.md |
этот файл, тоже с AUTO-блоками |
AUTO-блок выглядит так, и всё между маркерами перезаписывается на каждом запуске:
<!-- AUTO:by_model -->
| модель | ответов | сессий | токенов | доля | кэш-попадание | свежий ввод, медиана | $ |
|---|---:|---:|---:|---:|---:|---:|---:|
| claude-opus-5 | 131 949 | 63 | 25 487 045 454 | 95.37% | 96.18% | 2 | $21 570,65 |
| claude-opus-4-8 | 10 989 | 111 | 1 185 899 031 | 4.44% | 73.76% | 3 579 | $2 269,83 |
| claude-fable-5 | 124 | 2 | 28 566 383 | 0.11% | 98.57% | 2 | $42,50 |
| gpt-5.5 | 287 | 9 | 21 495 716 | 0.08% | 91.65% | 1 940 | $22,59 |
| claude-sonnet-5 | 38 | 1 | 23 707 | 0.00% | 0.00% | 0 | $0,24 |
| **итого** | **144 633** | 186 | **26 723 030 291** | | | | **$23 905,81** |
<!-- /AUTO -->
Проза вне маркеров не трогается никогда. Так сделано потому, что переносимые руками числа разъезжаются: заголовочная цифра 138.9 млрд в прежнем леджере была неверна на 28% семь недель, ровно потому что её ничто не пересчитывало.
Список доступных блоков печатается при запуске python report_gen.py.
| файл | размер | что |
|---|---|---|
| измерение | ||
antigravity_agg.py |
17 КБ | прокси-метрики Antigravity: ходы, инструменты, упоры в квоту |
claude_agg.py |
24 КБ | агрегат Claude Code, 4 разрешения по времени |
claude_deep.py |
27 КБ | распределения, сессии, перфокарта, рост контекста |
codex_agg.py |
19 КБ | Codex, первая версия (максимум по файлу), оставлена для сверки |
codex_agg_chains.py |
32 КБ | Codex методом chain-split, три метода сразу |
| обработка | ||
build_dashboard.py |
111 КБ | сборка dashboard.html без внешних зависимостей |
cost_model.py |
24 КБ | модель стоимости, классы доказательности, combined.json |
refresh.py |
41 КБ | точка входа: измеряет, считает, собирает, проверяет |
report_blocks_ext.py |
45 КБ | дополнительные AUTO-блоки для книги данных |
report_gen.py |
34 КБ | движок AUTO-блоков, проверки целостности, защита от усушки |
| отчёты | ||
CURRENT.md |
2 КБ | актуальные цифры, генерируется целиком |
DEEP_REPORT.md |
95 КБ | детальный разбор по моделям и паттернам |
FULL_REPORT.md |
46 КБ | книга данных: 7 частей, все таблицы генерируются |
README.md |
29 КБ | описание инструментария и методики |
SUMMARY.md |
55 КБ | сводка: проза авторская, числа в AUTO-блоках |
dashboard.html |
336 КБ | интерактивный дашборд, самодостаточный |
| данные | ||
antigravity_totals.json |
1.81 МБ | выкладка Antigravity |
claude_cost_deep.json |
1 КБ | стоимость Claude Code с разбором по моделям и дням |
claude_deep.json |
87 КБ | распределения и производные метрики Claude Code |
claude_totals.json |
1.65 МБ | выкладка Claude Code по времени, моделям, сессиям |
codex_chains_totals.json |
2 КБ | выкладка Codex методом chain-split |
codex_cost.json |
521 Б | стоимость Codex по обеим границам |
codex_totals.json |
1 КБ | выкладка Codex первой версией |
combined.json |
16 КБ | сводные данные, которые читает дашборд |
reconciliation.json |
5 КБ | сведение слагаемых Codex, три метода против друг друга |
snapshots.jsonl |
48 КБ | история запусков, источник дельт |
| прочее | ||
.gitignore |
746 Б | исключения: секреты, кэши, временные файлы проверки |
GEMINI_PROMPT_HARD.md |
16 КБ | задание для второй машины, с блокирующей проверкой хоста |
GEMINI_TASK_SHINOBU.md |
18 КБ | первая версия того же задания |
GEMINI_TASK_SHINOBU_ADDENDUM.md |
7 КБ | дополнение к заданию после первого отчёта |
LICENSE |
3 КБ | MIT |
_config.yml |
633 Б | конфигурация GitHub Pages, на работу инструмента не влияет |
| без описания | ||
.nojekyll |
0 Б | — описание не задано в FILE_DOC |
CODE_OF_CONDUCT.md |
864 Б | — описание не задано в FILE_DOC |
CONTRIBUTING.md |
714 Б | — описание не задано в FILE_DOC |
HANDOFF_COLLEAGUE_AGENT.md |
5 КБ | — описание не задано в FILE_DOC |
SECURITY.md |
727 Б | — описание не задано в FILE_DOC |
autoupdate.py |
36 КБ | — описание не задано в FILE_DOC |
build_reconciliation.py |
10 КБ | — описание не задано в FILE_DOC |
cline_agg.py |
10 КБ | — описание не задано в FILE_DOC |
cline_deep.json |
249 КБ | — описание не задано в FILE_DOC |
cline_totals.json |
2 КБ | — описание не задано в FILE_DOC |
external_measurements.json |
11 КБ | — описание не задано в FILE_DOC |
favicon.svg |
253 Б | — описание не задано в FILE_DOC |
index.html |
771 КБ | — описание не задано в FILE_DOC |
robots.txt |
87 Б | — описание не задано в FILE_DOC |
scan_manifest.json |
621 КБ | — описание не задано в FILE_DOC |
scan_manifest_codex.json |
413 Б | — описание не задано в FILE_DOC |
site.webmanifest |
311 Б | — описание не задано в FILE_DOC |
sitemap.xml |
289 Б | — описание не задано в FILE_DOC |
tokenaudit_config.py |
43 КБ | — описание не задано в FILE_DOC |
tokenaudit_rates.py |
17 КБ | — описание не задано в FILE_DOC |
tokenaudit_scan.py |
9 КБ | — описание не задано в FILE_DOC |
Claude Code. ~/.claude/projects/**/*.jsonl, записи type == "assistant" с полем
message.usage. Четыре величины: некэшированный ввод, запись кэша, чтение кэша, вывод.
Разрешения: сутки, час, 10 минут, минута, плюс профили по часам суток и дням недели.
Codex. rollout-*.jsonl, события event_msg / token_count, поле
info.total_token_usage — накопительный счётчик. Пять величин, включая
reasoning_output_tokens.
Antigravity. Транскрипты brain/<uuid>/.system_generated/logs/transcript*.jsonl.
Токенов там нет — считаются ходы модели, вызовы инструментов, символы и упоры в
квоту. Это прокси-метрика, и она систематически занижает расход.
Все встретились в этой работе; четыре — уже совершённые ошибки.
-
Стриминговые снимки Claude Code. Один
message.idпишется несколько раз по мере роста ответа. Наивная сумма завышает примерно вдвое. Правильно: дедупликация поmessage.idсо взятием максимума. Первая запись тоже не подходит — там незавершённый ответ. -
Накопительный счётчик Codex. Сумма всех событий завышает в десятки раз. Правильно: максимум по файлу, а для временного ряда — разница соседних значений.
-
Несколько цепочек счётчика в одном файле. Параллельные потоки пишут в один роллаут, признака потока в записи нет. Максимум теряет вторую цепочку, сумма приростов фабрикует ложные инкременты. Правильно —
chain-split: разнести события по цепочкам и сложить их финалы. -
Дедупликация сессий между корнями. Ключ должен быть строго
session_id. Откат на имя файла прячет дубликаты — так я завысил Codex на 0.645%. -
Ложные отрицательные. Пять случаев за один аудит, все одной природы: инструмент не мог показать то, о чём его спрашивали, а пустой ответ принимался за отсутствие явления.
ripgrepбез--hiddenне заходит в.system_generated; в формате роллаута вообще нет поля аккаунта;cp1251искажает строку поиска; неразрывный пробел не равен пробелу; в разметке не равен пробелу в тексте. Правило: прежде чем записать «этого нет», проверь контрольным примером, что инструмент способен это увидеть. Поэтому верификатор сравнивает извлечённый текст, а не разметку. -
Сумма «финалов по сессиям» по пересекающимся корням даёт двойной счёт. Ровно это превратило 108.3 млрд в 138.9 млрд.
Anthropic сверены с живой документацией 2026-07-27: claude-opus-5 и claude-opus-4-8
$5/$25 за млн, claude-fable-5 $10/$50, claude-sonnet-5 $2/$10 (вводный тариф до
2026-08-31). Кэш-чтение 0.1× базового ввода, запись кэша 1.25× при TTL 5 минут и 2× при
TTL 1 час.
OpenAI из каталога прежнего аудита (developers.openai.com, проверен 2026-06-06):
gpt-5.5 $5 / $0.5 кэш / $30, gpt-5.4 $2.5 / $0.25 / $15.
Все суммы — эквивалент по публичному прайсу, а не траты. Фактический денежный расход за всё время, со слов владельца, около 1000 рублей.
| проверка | результат |
|---|---|
| сумма по моделям против итога | СХОДИТСЯ |
| ответов: агрегат против распределений | СХОДИТСЯ |
| окно сканирования | файлов 3 906, байт 2 259 420 950 |
| окно: агрегат против распределений | СХОДИТСЯ |
| основной + субагенты против суммы по моделям | СХОДИТСЯ |
| сумма по дням против суммы по моделям | СХОДИТСЯ |
| разрешение «час»: 300 интервалов, сумма | СХОДИТСЯ |
| разрешение «10 минут»: 1 235 интервалов, сумма | СХОДИТСЯ |
| разрешение «минута»: 7 800 интервалов, сумма | СХОДИТСЯ |
| Codex: chain-split против минутных приростов | СХОДИТСЯ |
Итог: все проверки пройдены
| срез | токенов | $ | сессий | прирост |
|---|---|---|---|---|
| 2026-07-29 17:17:52 | 26 154 238 067 | $22 784,46 | 182 | +16 120 218 |
| 2026-07-29 18:17:46 | 26 159 281 786 | $22 806,82 | 182 | +5 043 719 |
| 2026-07-29 22:17:57 | 26 184 448 097 | $22 867,95 | 182 | +25 166 311 |
| 2026-07-29 23:01:07 | 26 195 047 485 | $22 887,60 | 183 | +10 599 388 |
| 2026-07-29 23:17:31 | 26 201 739 803 | $22 899,18 | 183 | +6 692 318 |
| 2026-07-30 00:21:28 | 26 249 060 423 | $22 969,67 | 183 | +47 320 620 |
| 2026-07-30 01:19:14 | 26 297 805 570 | $23 045,51 | 185 | +48 745 147 |
| 2026-07-30 02:19:45 | 26 408 785 783 | $23 202,86 | 185 | +110 980 213 |
| 2026-07-30 02:47:17 | 26 455 065 226 | $23 269,04 | 186 | +46 279 443 |
| 2026-08-01 08:32:56 | 26 723 030 291 | $23 905,81 | 186 | +267 965 065 |
| 2026-08-01 08:33:19 | 26 723 030 291 | $23 905,81 | 186 | +267 965 065 |
| 2026-08-01 08:34:51 | 26 723 030 291 | $23 905,81 | 186 | — |
Всего запусков в истории: 66.
- Не обращается ни к каким API и ничего не отправляет наружу — только чтение локальных файлов.
- Не пишет в источники: SQLite открывается
mode=ro&immutable=1. - Не сохраняет ключи, токены и секреты ни в один артефакт.
- Не измеряет расход других людей, работавших через те же учётные данные с других машин: их логи физически находятся не здесь.
- Не измеряет токены Antigravity, потому что их не существует в локальных данных.
Distributed under the True People's License v2.0 / Open License — Authors: Jirnyak & Adolf Petushkov (2026). Free for all maintainers, developers, and AI research. Zero paywalls.
graph TD
Logs[📄 Claude / OpenAI Logs] --> Parser[🔍 Python Log Parser]
Parser --> Calc[🧮 Cost & Token Calculator]
Calc --> JSON[📊 Structured Token Database]
JSON --> Web[🌐 Offline Glassmorphism Dashboard]
| Metric | Measured Value | Status |
|---|---|---|
| Log Parsing Speed | > 50,000 lines / sec | 🚀 FAST |
| Network Requests | Exactly 0 (100% Offline) | 🛡️ PRIVATE |
| Memory Usage | < 18 MB RAM | ⚡ LIGHTWEIGHT |










