tokenarchive
tokenarchive
Ежедневные снимки вашего использования ИИ при написании кода — хранятся вечно.

ccusage может рассказать, сколько вам обходятся Claude Code, Codex, Gemini и другие, — но лишь настолько, насколько хватает логов на вашей машине, а эти логи ротируются. tokenarchive делает снимок отчёта ccusage раз в день, хранит каждый снимок как JSON-архив только на добавление и строит по нему панель. При желании Cloudflare Worker хранит копию архива вне вашей машины, под защитой passkey.
Всё здесь построено на двух принципах:
Ничто никогда не стирается. Снимки и есть архив; любая база данных — производная копия, которую можно пересобрать из них.
Отсутствие никогда не сообщается как ноль. День без снимка сам говорит об этом. Значение $0.00 утверждало бы, что мы посмотрели, а вы ничего не потратили.
Быстрый старт (macOS)
npx tokenarchiveУстановщик запрашивает имя устройства и опциональный URL Worker, размещает среду выполнения в ~/.local/share/tokenarchive/app, планирует ежедневное задание (23:50, плюс при каждом входе в систему — скрипт идемпотентен), позволяет security запросить ingest-токен, так что тот никогда не попадает в руки установщика, и проверяет всё одним реальным запуском. Повторный запуск перенастроит его в любое время; --uninstall удаляет всё, кроме вашего архива.
Снимки попадают в ~/.local/share/tokenarchive/{device}/{date}.json. Чтобы попробовать один раз, ничего не устанавливая:
git clone https://github.com/ddyy/tokenarchive && cd tokenarchive && ./snapshot.shДругие платформы: переносимо всё, кроме связующего кода для планировщика. sync.js, импортёр и панель — это обычный Node; перенесите snapshot.sh на systemd-таймер или cron-задание, и остальное последует.
Related MCP server: opencode-export
Панель
generate-dashboard.js создаёт один самодостаточный HTML-файл — без фреймворка, без сервера, без внешних запросов. Сначала он импортирует новые снимки в локальную модель чтения SQLite (import-snapshots.js), так что перегенерация инкрементальна.
Каждая панель — это фильтр: щёлкните или проведите по моделям, устройствам, агентам, дням или биллинговым окнам — и остальная часть страницы последует (⌘ добавляет к выделению, ⇧ расширяет его). Фильтры сочетаются между измерениями по И и живут во фрагменте URL, так что вид можно добавить в закладки.
Переключатель Отображать как — над итогами и снова в закреплённой панели, когда они уходят при прокрутке, — измеряет всю страницу в долларах или в токенах: график и его ось, затенение покрытия, биллинговые окна и каждый список, который переупорядочивается в соответствии с выбранной мерой. При наведении на строку показываются полное имя, которое пришлось сократить, его стоимость, токены, подразумеваемая цена за миллион, его доля от того, что на экране, а для проектов — количество сессий и охватываемый ими период:

Полоса покрытия показывает по одной ячейке на календарный день, поэтому пробел виден как пробел — дни без снимка никогда не отображаются как дни нулевого использования:

Несколько устройств
Архив разделён по устройствам уже на уровне файловой системы: снимки лежат в {data}/{device}/{date}.json, каждая строка базы данных несёт устройство, а импорт работает только через upsert. Поэтому машины никогда не сливаются и не затирают друг друга, а всё, что помещает файлы обеих машин в один каталог данных, даёт объединённый архив — Worker, синхронизируемая папка или скопированный каталог работают одинаково.
Состояние оценивается по каждому устройству: у каждого свой зелёный/жёлтый/красный индикатор, своя дата последнего снимка и свой список пропущенных дней, так что одна актуальная машина не может скрыть другую, которая замолчала. Устройство, переставшее отправлять данные, сохраняет всю свою историю — архив ничего не стирает; он просто показывает пробел.
Worker ниже — это способ сделать это без перемещения файлов вручную.
Worker (опционально, рекомендуется)
Каталог worker/ — это Cloudflare Worker, который принимает отправку снимков и отдаёт ту же панель из D1, под защитой WebAuthn-passkey. Исходные снимки хранятся в R2 без изменений — именно это делает его резервной копией, а не представлением: /admin/replay может пересобрать D1 из бакета без вашего ноутбука. Инструкции по развёртыванию из пяти команд см. в worker/README.md.
После развёртывания зарегистрируйте passkey на /auth/ — первый passkey закрепляет архив за собой; для добавления passkey другого устройства требуется вход в систему. Затем создайте на /admin ingest-токен для устройства (при показе токена приводятся инструкции по настройке), и ежедневное задание снимков будет отправлять данные автоматически. Машина, которая никогда не синхронизировалась, ничего не потеряла: файлы на диске и есть архив, а следующая успешная синхронизация всё наверстает. Устаревшие отправки не могут затереть новые данные — ingest сохраняет самый новый снимок.
/admin управляет остальным: ingest-токенами и токенами MCP только для чтения (показываются один раз, отзываются по каждому устройству), ротацией сессионных ключей, перечнем снимков и /admin/replay, который пересобирает D1 из оригиналов в R2.
Чтобы добавить вторую машину, запустите там установщик с тем же URL Worker и выпустите для неё собственный ingest-токен — токен принимает данные только от имени того устройства, для которого был выпущен, поэтому одна машина не может писать как другая, и отзыв одного токена никогда не затрагивает остальные.
MCP
Спросите своего агента о вашем собственном использовании. Два сервера, одни и те же четыре инструмента только для чтения (usage_summary, usage_by_project, usage_by_day, archive_health), одна общая реализация:
Локальный, поверх SQLite-архива на этой машине:
claude mcp add tokenarchive node /path/to/tokenarchive/mcp-server.jsУдалённый, обслуживается Worker на
/mcpдля машин, у которых нет архива. Выпустите токенmcpна/admin, затем:claude mcp add --transport http tokenarchive https://YOUR-WORKER/mcp \ --header "Authorization: Bearer YOUR-TOKEN"
Только для чтения по построению: нет ни одного инструмента, который записывал бы, удалял или переписывал что-либо.
Конфигурация
Всё можно переопределить переменной окружения, ничего не требуется:
Variable | Default |
|
|
|
|
| короткое имя хоста |
| не задана — без синхронизации |
| не задана — читается из связки ключей входа ( |
Тесты
bash test/run.shБольшинство наборов тестов изолированы. Три набора (static, interaction, tooltip) запускаются против панели, которую вы сгенерировали последней, в ~/.local/share/tokenarchive/index.html, поэтому им нужен настоящий архив на машине — сначала один раз выполните снимок.
Лицензия
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Read-only analytics for Convex apps, queryable via MCP from Claude, Cursor, and other clients.
Anthropic organization usage and cost reporting through an admin API key connected by the user.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceProvides comprehensive telemetry and usage analytics for Claude Code sessions, including token usage tracking, cost monitoring, and tool usage patterns. Enables users to monitor their Claude usage with detailed metrics, warnings, and trend analysis.12-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to list, inspect, and export OpenCode AI coding sessions as HTML/JSON archives with secret redaction and token statistics.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access observability and evaluation data, including run history, span traces, LLM-as-judge evaluation results, and regression reports.MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to access live runtime observability data such as logs, deploys, and health metrics for evidence-based incident triage.1MIT