このプロジェクトについて

Voleは、AIコーディングエージェント向けのローカルファーストな利用状況、コスト、および異常検知モニターです。複数のエージェントを併用し、それぞれが独立してトークンを消費している状況において、ツールループへの陥入、壊れたAPIへのリトライ、同一の巨大なコンテキストの繰り返し読み込みといった問題が発生しても、エージェント自身がそれを通知しないという課題を解決します。他のツールが「いくら使ったか」に答えるのに対し、Voleは「今、何か問題が起きていないか」を問い、コスト報告はその副次的な機能として提供します。 データ処理 Voleは、ツールが既にディスクに書き出しているログファイルを読み取ります(例:Claude Codeの~/.claude/projects/**/*.jsonl、OpenCodeの~/.local/share/opencode/opencode.db、Codex CLIの~/.codex/sessions/**/rollout-*.jsonl、Grok CLIの~/.grok/logs/unified.jsonl、およびCursor、Devin、Antigravityのローカルストア)し、それらを単一のスキーマに正規化します。すべてはローカルで動作し、スクレイピングやクラウドAPI、ログインは不要で、プロンプトやツールの内容は保存されません。唯一、クリティカルなインシデント発生時の通知のために、オプションで通知権限を要求します。 サポートツールと忠実性ポリシー ツールによってカバー範囲が異なります。Claude CodeとOpenCodeは正確なトークン数とコストを提供し、Codex CLIとGrok CLIは正確なトークン数を提供しますが、公開された料金プランはありません。Cursor、Devin、Antigravityはローカルにトークンを記録しないため、アクティビティのみがカバーされます。本プロジェクトのポリシーとして「推定」ティアは設けず、トークン数はツールのログからそのまま読み取るか、存在しないものとして扱います。トークンがない行もコール数としてはカウントされますが、トークンおよびコストの集計からは除外されます。コード行数からCursorのトークン数を推定する方法は検討されましたが、明示的に却下されました。 アプリ メニューバーのアイテムに、リアルタイムのトークン数、コスト、またはアイコンのみが表示され、インシデント発生中は色が変わります。クリックすると、主要数値、スパークライン、ツール別バーが表示されるパネルが開き、ダッシュボードで詳細を確認できます。特徴的な機能は、インシデントが付記されたタイムラインで、ツールごとのトークンを積み上げ表示し、ホバー時にバケット名、トークン数、発生したインシデントを表示します。アプリは独自のコレクターを内蔵して起動し、その場で更新されます。チェックサム付きアーカイブのリリースでは、公開されたSHA-256を検証してからバンドルを入れ替えるワンクリックインストールを提供し、チェックサムのないリリースではサイレントインストールを行いません。 コマンドラインとMCP アプリに加えて、Voleは同じデータに対してターミナルコマンドを提供します:pnpm top(ライブセッション、コンテキスト対ウィンドウ、分あたりトークン数、キャッシュカウントダウン)、pnpm digest(範囲指定やJSONオプション付きのMarkdown形式利用サマリー)、pnpm pr(PR説明用の現在のブランチでの利用状況)、pnpm statusline、およびstdio MCPサーバーであるpnpm mcpです。MCPサーバーはvole_summary、vole_live_sessions、vole_session、vole_incidents、vole_breakdown、vole_whatif、vole_digestを公開しており、エージェント自身が自分のセッションコストやVoleによるフラグ立ての有無を問い合わせることができます。サーバーはローカルデータベースを読み取り、stdoutで回答します。 異常検知ルール 5つのルールが搭載されています:billable_burn_spike(10分間のコストがそのセッションの通常ウィンドウの3倍を超えた場合)、repeat_call_loop(出力が平坦なまま5分間に45回以上のコールが発生した場合)、error_storm(15分間でエラー率が20%を超え、かつ5回以上のエラーが発生した場合)、rate_limit_pressure(Codexがクォータの80%以上の消費を報告した場合)、context_pressure(1回のコールがモデルのコンテキストウィンドウの80%以上を占めた場合)。ベースラインはleave-one-out方式で、あるウィンドウを他のすべてのウィンドウの中央値と比較します。ループ検知には2つのシグナルを必要とし、生産的なバーストコールがループと誤認されないようにしています。 コストモデル コストは、リスト価格における同等のAPI価値(API経由で利用した場合のコスト)として計算されます。UI上では、サブスクリプションプランはトークン単位で請求されないことが注記されています。料金はpackages/core/src/data/pricing.jsonに保持され、effective_fromでバージョン管理されています。また、インストールごとの~/.vole/pricing.jsonで上書き可能であるため、リリースなしでモデルを追加できます。料金設定前のデータは遡及的に再計算されます。不明なモデルは0ではなくNULLを返します。 検証とテスト プロジェクトには、ルール、クエリ、バケッティング、信頼性不変性のユニットテストを行うpnpm testと、独立して再実装されたコスト計算式を用いて保存された全行をソースレコードと照合するpnpm verifyが用意されています。検証は合計ではなくレコードごとに行われ、ストアが空の場合は失敗するため、空の状態での「合格」は起こりません。pnpm seedコマンドは、source='seed'タグ付きの30日分の合成履歴を書き込み、ライブデータとは別にチャート化します。 ビルドと制限事項 ソースからのビルドにはNode 22+、pnpm、Xcode 26が必要で、macOS 26 arm64でテストされています。pnpm app:bundleでアプリをビルドして起動でき、コレクターとアプリを個別に実行することも可能です。文書化された制限事項には、ローカルにトークンを記録しないツールへの限定的なカバー、is_errorがAPIエラーのみを対象とするためerror_stormが過小評価される可能性、一部ツールでの生成速度が下限値であること、コンテキストウィンドウがファーストパーティのモデルIDのみで解決されること、Antigravityのタイミングがファイルのmtimeに基づく近似値であることが含まれます。本プロジェクトはMITライセンスで提供されており、貢献を歓迎しています。レビュールールとして「数値を捏造しないこと」と「すべてのコレクターはべき等であること」の2点が定められています。