Об этом проекте
Vole представляет собой локальный монитор использования, стоимости и аномалий для AI-агентов для кодинга. Он предназначен для ситуаций, когда несколько агентов работают параллельно, независимо расходуя токены и не сигнализируя о проблемах — например, при зацикливании в инструментах, повторных попытках обращения к сломанному API или многократном перечитывании одного и того же большого контекста. В то время как другие инструменты отвечают на вопрос «сколько я потратил?», Vole спрашивает «не происходит ли сейчас что-то неправильное?» и сообщает о расходах как о побочном эффекте.
Обработка данных
Vole читает лог-файлы, которые инструменты уже записывают на диск — например, ~/.claude/projects/**/*.jsonl для Claude Code, ~/.local/share/opencode/opencode.db для OpenCode, ~/.codex/sessions/**/rollout-*.jsonl для Codex CLI, ~/.grok/logs/unified.jsonl для Grok CLI, а также локальные хранилища для Cursor, Devin и Antigravity — и нормализует их в единую схему. Все работает локально: без скрапинга, облачных API, входа в систему; содержимое промптов или инструментов не сохраняется. Единственным запрашиваемым необязательным разрешением являются уведомления для оповещений о критических инцидентах.
Поддерживаемые инструменты и политика точности
Охват варьируется в зависимости от инструмента: Claude Code и OpenCode предоставляют точные данные о токенах и стоимости; Codex CLI и Grok CLI предоставляют точное количество токенов, но не имеют опубликованных тарифов; Cursor, Devin и Antigravity не записывают токены локально и поэтому отслеживаются только по активности. Согласно политике проекта, уровень «оценочных» данных отсутствует — количество токенов либо считывается дословно из логов инструмента, либо считается отсутствующим. Строки без токенов учитываются как вызовы, но исключаются из агрегатов токенов и стоимости. Идея оценки токенов Cursor по количеству строк кода была рассмотрена и эксплицитно отклонена.
Приложение
Элемент в строке меню показывает токены в реальном времени, стоимость или просто иконку, которая окрашивается при открытом инциденте. Нажатие открывает панель с основными показателями, спарклайном и столбцами по каждому инструменту; дашборд предоставляет полный обзор. Ключевым элементом является временная шкала с аннотациями инцидентов, которая суммирует токены по инструментам и при наведении показывает название группы, количество токенов и возникшие инциденты. Приложение содержит собственный коллектор, запускает его и обновляется на месте: релиз в виде архива с контрольной суммой обеспечивает установку в один клик с проверкой SHA-256 перед заменой бандла; релизы без контрольной суммы никогда не устанавливаются скрыто.
Командная строка и MCP
Помимо приложения, Vole предоставляет терминальные команды для работы с теми же данными: pnpm top (активные сессии, контекст против окна, токены в минуту, обратный отсчет кэша), pnpm digest (сводка использования агентов в формате markdown с опциями диапазона и JSON), pnpm pr (использование в текущей ветке для описания PR), pnpm statusline и pnpm mcp — stdio MCP-сервер. MCP-сервер предоставляет функции vole_summary, vole_live_sessions, vole_session, vole_incidents, vole_breakdown, vole_whatif и vole_digest, чтобы агент мог узнать стоимость собственной сессии или проверить, не зафиксировал ли Vole проблему. Сервер читает локальную базу данных и выводит ответы в stdout.
Правила аномалий
Поставляются пять правил: billable_burn_spike (10-минутное окно, стоимость которого более чем в 3 раза превышает типичное окно этой сессии), repeat_call_loop (45+ вызовов за 5 минут при неизменном выводе), error_storm (доля ошибок более 20% за 15 минут при наличии минимум 5 ошибок), rate_limit_pressure (Codex сообщает о потреблении более 80% квоты) и context_pressure (вызов занял не менее 80% контекстного окна модели). Базовые показатели определяются методом leave-one-out, сравнивая окно со медианой всех остальных окон, а обнаружение циклов требует двух сигналов, чтобы продуктивный всплеск вызовов не был ошибочно принят за цикл.
Модель стоимости
Стоимость эквивалентна стоимости API по прейскуранту — тому, сколько использование стоило бы через API; в интерфейсе отмечено, что подписные планы не тарифицируются по токенам. Тарифы хранятся в packages/core/src/data/pricing.json с версионированием через effective_from, а локальный файл ~/.vole/pricing.json дополняет их, позволяя добавлять модели без обновления релиза. Строки, сохраненные до появления тарифа для модели, пересчитываются ретроактивно. Неизвестные модели возвращают NULL, но никогда не 0.
Верификация и тестирование
Проект включает pnpm test для модульных тестов правил, запросов, группировки и инвариантов уверенности, а также pnpm verify, который сверяет каждую сохраненную строку с исходной записью, используя независимо реализованную формулу стоимости. Верификация сравнивает каждую запись по отдельности, а не общие итоги, и завершается ошибкой при пустом хранилище, чтобы избежать ложноположительного результата. Команда pnpm seed записывает 30 дней синтетической истории с тегом source='seed', которая отображается отдельно от живых данных.
Сборка и ограничения
Сборка из исходников требует Node 22+, pnpm и Xcode 26, протестировано на macOS 26 arm64; pnpm app:bundle собирает и открывает приложение, либо коллектор и приложение можно запустить отдельно. Документированные ограничения включают: поверхностный охват инструментов без локальных токенов, учет в is_error только ошибок API (что может привести к недоучету в error_storm), нижние границы скорости генерации для некоторых инструментов, определение контекстных окон только для ID моделей первого лица и приблизительное время для Antigravity на основе mtime файлов. Проект распространяется под лицензией MIT и приветствует контрибьюторов с двумя правилами ревью: никогда не выдумывать числа и обеспечивать идемпотентность каждого коллектора.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.