teamspend について
teamspendは、AIコーディングツールの支出を期間間で比較するCLIとライブラリです。移行を評価するチームや、ローカルのセッションデータを使う個人向けで、API・ローカルログ・CSVを扱い、推定値や取得不能データを明示します。
主な機能
- 01移行前後の支出比較
- 02APIとローカルログの読み取り
- 03過去データのCSV取り込み
- 04JSONとテキスト形式のレポート
- 05推定費用と欠損データの表示
活用シーン
- 01コーディングツール切り替え後の費用評価
- 02APIデータと過去のCSV記録の統合
- 03スクリプトやCIでのツール別費用確認
MCP 対応
READMEではteamspendをMCPサーバーと説明しており、AIコーディングツールの支出を比較するMCPツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
teamspend
インストール • 使い方 • 機能 • 比較 • FAQ • 貢献
AI コーディングツールを切り替えて本当に節約できたかどうかは、どのツールも教えてくれません。teamspendなら、1つのコマンドでわかります。

上の録画では、インストールから初回実行までの流れを管理者用APIキーなしで最初から最後まで見せるため、claude-code-personal(認証情報不要、ローカルのセッションログを読み込み)を使用しています。出力形式は、どのアダプターを指定しても実際の出力例と同じです。
npx teamspend-cli --tools cursor,claude-code --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
ツールは2つではなく、現在は6つです。Cursor、Claude Code、GitHub Copilot、OpenCode、Codex CLIに加え、管理者アクセス権がない人向けの認証情報不要のパーソナルモードがあります。複数のAIコーディングツールを同時に使ったり、ツールを切り替えたりするチームは、これまで以上に増えています。どのツールにも、自分自身については正確でも、それ以外の情報は構造上表示できないダッシュボードがあります。teamspendは、欠けていたピースです。両方のツールのAPIから直接取得した、変化を正確に示す実数を1つ表示します。
目次
- 実際の動作を見る
- 実際にできること
- 1分以内に始める
- 使うだけでなく、信頼されるように設計
- CSVインポート:ライブAPIでは取得できない履歴データに対応
- GitHub Copilotのサポート
- OpenCode:ローカルのみ、APIキー不要
- Codex CLI:ローカルのみ、APIキー不要
- 管理者アクセス権がない場合のパーソナル利用モード
- セッション単位のコスト内訳
- コマンド
- ライブラリAPIリファレンス
- MCP サーバー
- ロードマップ
- 実行前に知っておくとよいこと
- teamspendとは何か、なぜ存在するのか
- teamspendの比較
- FAQ
- 貢献
- 成功事例
- ライセンス
実際の動作を見る
npx teamspend-cli --tools cursor,claude-code --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
出力例(以下は出力形式です。実際の数値は、ご利用の組織のAPIデータに基づきます):
teamspend snapshot -- migration cost comparison
Tools: cursor -> claude-code
BEFORE (cursor)
Total spend: $2,140.00 (exact, usage-based)
Active users: 14
AFTER (claude-code)
Total spend: $1,860.00 (exact, usage-based)
Active users: 14
DELTA: -$280.00 (-13.1%)
Full report: ./teamspend-snapshot-2026-07-11T142842.json
製品全体はこれだけです。コマンド1つ、正直な数値1つ、スプレッドシートは不要です。
実際の動作
- スクレイピングや推定ではなく、実際の数値を取得します。 Cursor の Admin API と Anthropic の Claude Enterprise Analytics API に直接接続します。表示されるのは、ベンダー自身が報告する数値です。
- 単一のベンダーのダッシュボードではできない、ツール間の比較ができます。 Cursor のダッシュボードに表示されるのは Cursor の情報です。Claude Code のダッシュボードに表示されるのは Claude Code の情報です。teamspend は両方の数値を同じ文章にまとめます。
- CSV インポートで過去のデータの不足を補います。 比較期間がツールの API で取得できる履歴より古い場合、同じ形式の CSV を渡せば、その行を同じレポートに取り込みます。別途マージする必要はありません。
- 問題を黙って見過ごしません。 比較対象の片方のデータを取得できない場合は、明確に「データを取得できません」と理由を示します。誤った数値を正しいものとして表示することはありません。
- 本番環境のクライアントにふさわしい方法でリトライします。 レート制限、タイムアウト、一時的なエラーに対して、上限を設けた指数バックオフを自動的に行います。そのため、不安定な API 呼び出しが不安定な結果につながることはありません。
- 不審なゼロ値をそのまま信用せず、フラグを付けます。 Cursor と Claude Code の両方で、定額のシート課金プランでは、実際にトークンを使用しているユーザーの金額が正確そうな
$0として報告されることがあります。teamspend はこのパターンを検出し、誤解を招くゼロ値を表示する代わりに、その数値が推定値であることを示します。 - 実行時依存関係はゼロです。 監査が必要なサプライチェーンは、自分たちのコード以外にありません。
fetch、引数の解析、ファイル入出力はすべてネイティブ機能を使います。
1 分以内に使い始める
teamspend は、独立した 2 つの同等に扱われるパッケージを提供しています。ツールチェーンに合うものを選ぶか、両方インストールしてください。どちらも同じ 6 つのデータソースに接続し、同じ変更前後の差分を計算します。
# npm -- JavaScript/TypeScript CLI + library
npm install -g teamspend-cli
# PyPI -- Python CLI + library (genuine port, not a wrapper around the Node binary)
pip install teamspend-cli
どちらのパッケージ名も teamspend-cli です(以前の単純な teamspend という名前は、このプロジェクトの他のパッケージに合わせて変更され、2026-08-03 時点で両方のレジストリから完全に非公開化されました。同じメンテナー、同じリポジトリですが、どのバージョンもインストールできなくなっています)。どちらを使っても、インストールされるコマンドは teamspend です。
比較するツールの API キーを 2 つ指定してください。
export TEAMSPEND_CURSOR_TOKEN=<your Cursor Admin API key>
export TEAMSPEND_CLAUDE_CODE_TOKEN=<your Anthropic Admin/Analytics API key>
どちらも、そのプラットフォームで組織管理者レベルのアクセス権が必要です。すでに組織の請求情報を確認できるなら、必要な権限があります。
teamspend --tools cursor,claude-code --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
--json を追加すると、上記の人間が読みやすい概要ではなく、完全な JSON レポートが標準出力に出力されます。別のスクリプトや CI のステップに渡すときに便利です。ディスク上の JSON レポートファイルは、どちらの場合も書き込まれます。--json が変更するのは、ターミナルに出力される内容だけです。
GitHub Copilot と比較する場合は、以下の「GitHub Copilot のサポート」をご覧ください。Cursor/Claude Code よりも環境変数が 2 つ多く必要です。実際の組織に対して使う前に、その理由を確認してください。
どちらの CLI も同じ比較フラグ(--tools、--before、--after、--json、--before-csv、--after-csv、--breakdown、--help/-h、--version/-V)に対応しており、同じ形式で出力します。すべてのフラグについては、以下のコマンドのセクションをご覧ください。Python パッケージのライブラリ API については python/README.md、両方の配布形態を網羅した完全なガイドについては docs/getting-started.mdをご覧ください。
使うだけでなく、信頼できるように構築
チームの支出データやメールデータを扱うツールは、公開された形で信頼を得るべきです。このコードベースについて実際に言えることを以下に示します。マーケティング文句ではなく、コミットごとに確認しています。
| 実行時依存関係 | ゼロ |
| パッケージサイズ | 圧縮時 56.8 kB、展開時 193.1 kB |
| 初回応答までのコールドインストール時間 | 1 秒未満。npm/npx のキャッシュをクリアして測定 |
| テスト | 102 件合格(npm)、116 件合格(PyPI)、TypeScript テストスイートの行カバレッジ 97% |
| 既知の脆弱性 | npm audit によるとゼロ |
| ファイル権限 | レポートファイルは所有者のみがアクセスできる権限(0600)に設定され、自動的に Git の追跡対象から除外されます。ユーザーごとのメールアドレスと支出額が含まれるためです |
ライブ API では取得できない過去の履歴を CSV でインポート
date,user_email,cost_usd,is_estimated
2025-11-01,[email protected],12.50,false
npx teamspend-cli --tools cursor,claude-code --before 2025-11-01:2025-11-30 --after 2026-06-01:2026-06-30 --before-csv ./before.csv
GitHub Copilot のサポート
export TEAMSPEND_COPILOT_TOKEN=<a token with read:org on the org>
export TEAMSPEND_COPILOT_ORG=<your GitHub org login>
export TEAMSPEND_COPILOT_SEAT_PRICE_USD=19 # optional, see below
npx teamspend-cli --tools cursor,copilot --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
認証情報: TEAMSPEND_COPILOT_TOKEN には read:org スコープ(クラシック PAT)またはきめ細かな「View Organization Copilot Metrics」権限が必要で、組織は Copilot Business または Enterprise を利用している必要があります。TEAMSPEND_COPILOT_ORG も必須です。Cursor と Claude Code の管理 API とは異なり、GitHub の Copilot メトリクスエンドポイントは、トークンだけでなく URL パス内の特定の組織ログイン名に紐付いているためです。
teamspend がドル換算額を正確に算出する仕組み: GitHub の実際の最新 Copilot 使用状況メトリクス API(GET /orgs/{org}/copilot/metrics/reports/ users-1-day。このツールの開発中に GitHub の公式ドキュメントで確認済みです。他のツールが今も参照している古い /orgs/{org}/copilot/metrics エンドポイントは、2026-04-02 に GitHub によって廃止され、現在は機能しません)には、コストや支出を示すフィールドが一切ありません。Copilot Business/Enterprise は、月額の固定料金で座席数に応じて請求され(座席あたり $19 または $39。対応する月間 AI クレジット枠が含まれます)、GitHub は組織が実際に契約している座席単価をどの API でも公開していません。これは、このツールで扱う Cursor と Claude Code の固定料金制プランにもすでにある、構造的な制約です。
API がユーザーごとに返すのは ai_credits_used です。teamspend はこれを GitHub が公式に公開している固定レート、AI クレジット 1 件 = $0.01 USD で USD に換算します。これは独自に設定した値ではなく、組織ごとの交渉価格でもありません。TEAMSPEND_COPILOT_SEAT_PRICE_USD を設定すると、クレジットのみの金額には含まれないライセンス費用も反映するため、その固定料金が比較期間全体でアクティブなユーザーごとに 1 回だけ加算されます(1 日ごとに加算されることはありません)。設定しない場合、報告される金額はクレジット使用料のみであり、座席料金は含まれないことが明示されます。
ベンダーが報告するコストフィールド自体がないため、座席料金の設定有無にかかわらず、Copilot の結果はすべて isEstimated: true としてマークされます。これは、特定のゼロコストパターンに対してのみ発生する Cursor と Claude Code の「疑わしいゼロ」フラグよりも強い注意事項です。Copilot にはそもそも信頼できるネイティブのドル換算額がないため、teamspend は金額を確定値として提示しません。比較期間全体に対して 1 回ではなく、暦日ごとに API を 1 回呼び出す理由を含む詳しい仕組みについては、docs/concepts.md を参照してください。
OpenCode:ローカルのみで動作し、API キーは不要です
OpenCode(旧 sst/opencode)には、管理、チーム、請求に関する API が一切ありません。README でも確認できるように、組織全体の使用状況を取得するエンドポイントを持たないローカル CLI です。TEAMSPEND_OPENCODE_TOKEN で認証する対象がないため、このトークンは存在しません。代わりに teamspend は、OpenCode がディスク上に保存するローカルセッションログ(~/.local/share/opencode/storage/message/、または設定されている場合は $OPENCODE_DATA_DIR)を直接読み取ります。これは OpenCode 自身が書き込むファイル形式であり、ccusage の OpenCode ガイドと tokscale もすでに読み取っています。
teamspend --tools claude-code,opencode --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30

この数値を信頼する前に知っておくべき、正直な注意点が 2 つあります。
- これはこのマシンでの使用状況であり、チームの使用状況ではありません。 OpenCode のローカルメッセージファイルには、ユーザー名やメールアドレスのフィールドがありません。チームという概念のない単一開発者向けツールであるため、teamspend は見つかったすべてのデータを、コマンドを実行した OS アカウントという合成ユーザーに割り当てます。チーム全体の OpenCode 支出を比較するには、各メンバーのマシンで teamspend を実行するか、別の方法で数値を集めて CSV インポートを使用してください。
- 金額は常に推定値として表示されます。 OpenCode はローカルメッセージファイルで、ほとんどのモデルの
cost: 0を保存します(独自のリアルタイム料金テーブルがないため)。そのため、teamspend は OpenCode が記録したコスト値を合計し、該当フィールドが実際に入力されているまれなメッセージでも、常に(estimated)と表示します。(exact, usage-based)と表示することはありません。トークン数(入力/出力/キャッシュ読み取り/キャッシュ書き込み)は正確で、概算なのは金額のみです。
Codex CLI:ローカルのみで動作し、API キーは不要です
Codex CLI(OpenAI のコーディングエージェント CLI)には、管理者用、チーム用、請求用の API もありません。ローカル CLI であることは、独自の Rust ソース(codex-rs/)を直接確認済みです。TEAMSPEND_CODEX_TOKEN で認証する対象がないため、このトークンは存在しません。代わりに teamspend は、Codex 自身のローカルのロールアウトログをディスクから直接読み込みます(~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl、または CODEX_HOME の指す場所)。これは Codex 自身が書き込むものと同じディスク上の形式で、ccusage の Codex ガイドとmrexodia/agent-cost-dashboardもすでに読み込んでいます。
teamspend --tools claude-code,codex --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
この数値を信頼する前に知っておくべき、正直な注意点が 3 つあります。
- これはこのマシンの使用量であり、チームの使用量ではありません。 OpenCode のローカルファイルと同様に、Codex のロールアウトログにはユーザー名やメールアドレスのフィールドがありません。そのため teamspend は、見つかったすべてのデータを、コマンドを実行した OS アカウントという 1 人の合成ユーザーに割り当てます。チーム全体の Codex の支出を比較するには、各メンバーのマシンで teamspend を実行するか、別の方法で数値を集めてCSV インポートを使用してください。
- ドル金額には常に推定の印が付き、金額は常に正確に $0 です。 Codex のローカルログには、OpenCode のような
cost: 0というプレースホルダーさえありません。token_countイベントにはコストフィールドがなく、トークン数だけが記録されています。teamspend には独自のトークン単価表が含まれていないため、OpenAI の実際の個別交渉価格とずれていく表を使ってドル金額を推測するのではなく、$0を報告し、結果に(estimated)と印を付けます。トークン数(入力/出力/キャッシュ読み込み)は正確ですが、Codex はドル金額をそもそも報告していません。 - 読み取れるのは直近約 7 日分だけです。 Codex は 7 日より古いロールアウトファイルをバックグラウンドで
.jsonl.zst(zstd)に圧縮します。teamspend が読み取るのは通常の.jsonlのみです。これは、2 つ目のディスク上の形式に依存関係を追加しないため、OpenCode の新しい SQLite ストアに対してもすでに採用している方針と同じです。これより古い期間にさかのぼると、Codex の数値は過少報告されるか、空になることがあります。古いデータについてはCSV インポートと組み合わせてください。
管理者アクセスがない場合の個人利用モード
上記の機能には、組織管理者の認証情報(TEAMSPEND_CURSOR_TOKEN、TEAMSPEND_CLAUDE_CODE_TOKEN)が必要です。ベンダーの管理 API からチーム全体の数値を取得するためです。自分の Claude Code の支出だけを知りたい場合や、組織管理者のアクセス権がない(または使いたくない)場合は、ツール名に claude-code ではなく claude-code-personal を指定してください。
npx teamspend-cli --tools claude-code-personal,claude-code-personal --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30
このモードでは、Claude Code 自身のローカル JSONL セッションログをディスクから直接読み込みます(デフォルトでは ~/.claude/projects/**/*.jsonl、または CLAUDE_CONFIG_DIR/XDG_CONFIG_HOME の指す場所)。API キーも、ネットワーク呼び出しも、管理者アクセスも不要です。必要なのは、Claude Code がマシン上にすでに書き込んでいるログだけです。チームではなく、コマンドを実行したローカルの単一ユーザーについて報告します。
正直な注意点は 2 つあります。実行したマシン上にあるデータしか参照できないこと、そして、ログに記録されたすべてのエントリに Claude Code からの正確な costUSD が含まれているとは限らないことです。costUSD がない場合でも、そのエントリのトークン数は集計されますが、ドル金額には isEstimated の印が付きます。これは、このツールが表示するほかのすべての推定値と同じです(上記の「疑わしいゼロ値をそのまま信頼せず、警告します」を参照)。CSV インポートの代替手段とも組み合わせられます。claude-code-personal を片方に指定し、もう片方に --before-csv/--after-csv を指定すれば、teamspend が直接取得しないツールについて、自分の使用量と手入力した数値を比較できます。
セッション単位のコスト内訳
合計額から分かるのは「いくら使ったか」であり、「何がコストを押し上げているか」ではありません。--breakdown session を追加すると、合計額をセッション/会話ごとに分類できます。claude-code-personal と opencode がすでに読み込んでいるものと同じログデータを使い、1つの数値に合算するのではなく、各ログエントリーが持つ sessionId/sessionID でグループ化します。
npx teamspend-cli --tools claude-code-personal,claude-code-personal --before 2026-04-01:2026-04-30 --after 2026-06-01:2026-06-30 --breakdown session

ターミナルの概要にセッションごとの表(コスト上位10件)が追加され、JSON レポートにはセッションの配列全体が追加されます。どちらもオプトインです。このフラグを指定しなければ、出力はこれまでとバイト単位で完全に同じです。
セッションは、1回のやり取りを区切った単位です。teamspend が提示できる「タスクあたりのコスト」の最も誠実な代替指標です。 ログ自体のセッション識別子から直接得られる、実際に根拠のある数値であり、捏造されたものではありません。ただし、タスクの成功度、品質、ROI を測るものではありません。Anthropic、Cursor、GitHub を含め、どのベンダーも、特定のセッションの出力が実際に優れていたかどうかを公開していません。そのため teamspend は、それを把握しているとは決して主張せず、今後も主張しません。あるセッションのコストが9ドルで、別のセッションが1ドルだったとしても、それで分かるのは費用の使い道であり、どちらが価値に見合っていたかではありません。
さらに、次の2つの制約があります。
- ローカルログベースのツールでのみ利用できます。
claude-code-personalとopencodeはセッション単位のデータをディスクから直接読み込むため、それを使ってグループ化できます。cursor、claude-code、copilotは各ベンダーの管理 API からデータを取得しますが、どの API もユーザーごとの集計より細かいデータを返しません。レスポンスの形式にグループ化に使えるセッションフィールドはありません。これらのツールで--breakdown sessionを指定すると、空の表や捏造した表ではなく、その旨を説明する明確なメッセージが表示されます。 - セッションのドル建て金額には、そのセッション内の各エントリーの推定状況が引き継がれます。 セッション内のログ行に正確なコストが欠けている場合、そのセッションとその中の各エントリーに
isEstimatedのフラグが付けられます。これは、フラットな合計額にすでに適用されているものと同じルールです。
コマンド
teamspend-cli の両方のバイナリ(npm の dist/cli.js、PyPI の teamspend.cli:main)は同じフラグセットを受け付け、同じ方法で引数を検証します。この表は記憶に頼らず、実際にインストールされたバイナリの --help 出力から再構成したものです。
| フラグ | 引数 | 必須 | 機能 |
|---|---|---|---|
--tools | <a>,<b> | はい | 比較するツールを正確に2つ指定します。例:cursor,claude-code。指定できるのは cursor、claude-code、copilot、opencode、claude-code-personal、codex のいずれかです。 |
--before | YYYY-MM-DD:YYYY-MM-DD | はい | 「比較前」の期間を指定します。 |
--after | YYYY-MM-DD:YYYY-MM-DD | はい | 「比較後」の期間を指定します。 |
--before-csv | <path> | いいえ | 管理者 API で「比較前」の期間を取得できない場合に使う CSV の代替ファイルです。 |
--after-csv | <path> | いいえ | 「比較後」のツール用の CSV の代替ファイルです。同じ条件が適用されます。 |
--breakdown | session | いいえ | セッションごとのコスト表をターミナル出力と JSON レポートに追加します。claude-code-personal と opencode(2つのローカルログアダプター)でのみ動作します。それ以外の4つのツールでは、根拠のない内訳を作成せず、説明を表示します。 |
--json | なし | いいえ | 人間が読みやすい概要の代わりに、完全な JSON レポートを標準出力に表示します。ディスク上のレポートファイルは、どちらの場合も書き込まれます。 |
-h、--help | なし | いいえ | 使用方法を表示して 0 で終了します。 |
-V、--version | なし | いいえ | インストールされているバージョンを表示して 0 で終了します。 |
終了コード: 比較が成功した場合(または --help/--version の場合)は 0、無効な引数(不明なツール、不正な日付範囲、必須フラグの不足)がある場合、または比較のどちらか一方の結果を解決できなかった場合は 1 です。一部成功を示す終了コードはありません。片方を取得できない比較でも終了コードは 1 となり、その側にレポート独自の DATA UNAVAILABLE マーカーが表示されます。
知っておくべき、2つのバイナリ間の実際の違いが1つあります。npm の --help は上記のフラグ表全体を表示しますが、現在公開されている PyPI 0.2.7 ビルドの --help は、同じフラグを含む簡潔な使用方法の1行だけを表示し、フラグごとの説明はありません。両方のバイナリで受け付けるフラグと検証方法は同一で、違うのは --help の説明の詳しさだけです。
ライブラリ API リファレンス
どちらのパッケージも、CLI としてだけでなくインポート可能なライブラリとしても動作します。package.json の main/types フィールドと python/pyproject.toml のパッケージレイアウトは、どちらも実際にエクスポートされているコードを指しています。以下は推測ではなく、実際のソースから再導出した内容です。
npm(TypeScript)、import { ... } from "teamspend-cli":
import { fetchCursorSpend, fetchClaudeCodeSpend, buildComparison } from "teamspend-cli";
const before = await fetchCursorSpend({ start: "2026-04-01", end: "2026-04-30" }, cursorApiKey);
const after = await fetchClaudeCodeSpend({ start: "2026-06-01", end: "2026-06-30" }, claudeApiKey);
const report = buildComparison(
{ label: "before", tool: "cursor", result: before, error: null },
{ label: "after", tool: "claude-code", result: after, error: null },
);
| エクスポート | シグネチャ | 機能 |
|---|---|---|
fetchCursorSpend | (window: DateWindow, apiKey: string) => Promise<AdapterResult> | 指定期間の Cursor Admin API の支出を取得します。API の1回あたり30日という上限を超える場合は、ページネーションで取得します。 |
fetchClaudeCodeSpend | (window: DateWindow, apiKey: string) => Promise<AdapterResult> | Claude Enterprise Analytics API の支出を取得します。API の開始可能日である2026-01-01より前に始まる期間を指定すると、DataUnavailableError をスローします。 |
fetchCopilotSpend | (window: DateWindow, apiKey: string, org: string, seatPriceUsd?: number) => Promise<AdapterResult> | GitHub の固定レートである1クレジットあたり$0.01に基づき、ai_credits_used から Copilot の金額を算出します。結果は常に isEstimated としてマークされます。 |
importFromCSV | (csvPath: string, source: ToolId, window: DateWindow) => Promise<AdapterResult> | date,user_email,cost_usd,is_estimated の CSV スキーマを解析し、ライブアダプターが返すものと同じ形式の AdapterResult に変換します。 |
buildComparison | (before: PeriodOutcome, after: PeriodOutcome) => ComparisonReport | 期間前後の差分を作成します。どちらか一方が失敗した場合、部分的な数値は返さず、差分を null にします。 |
fetchWithRetry | (options: FetchWithRetryOptions) => Promise<unknown> | すべての管理 API アダプターが使用する共通 HTTP クライアントです。レート制限や一時的なエラーが発生した場合、上限付きの指数バックオフで再試行します。 |
renderTerminalSummary | (report: ComparisonReport, options?: RenderOptions) => string | ComparisonReport を、上記のターミナルサマリー形式に整形します。 |
writeJsonReport | (report: ComparisonReport, cwd: string) => Promise<string> | パーミッション 0600 の JSON レポートファイルを書き込み、そのパスを返します。 |
sumCost、topSpenders | (users: UserUsage[]) => number / (users: UserUsage[], limit: number) => UserUsage[] | 内部で使用される集計ヘルパーです。任意の UserUsage[] 配列に対しても安全に再利用できます。 |
現時点では、opencode、codex、claude-code-personal アダプターは CLI 専用です。src/cli.ts には組み込まれていますが、src/index.ts からは再エクスポートされていないため、teamspend コマンドからは利用できますが、import { ... } from "teamspend-cli" からはまだ利用できません。src/schema.ts、src/errors.ts、src/compare.ts からエクスポートされるその他すべて(型、エラークラス、DateWindow、AdapterResult)は、同じ方法で利用できます。
PyPI(Python)、from teamspend import ...:
from teamspend import fetch_cursor_spend, fetch_claude_code_spend, build_comparison
from teamspend.types import DateWindow
before = fetch_cursor_spend(DateWindow("2026-04-01", "2026-04-30"), cursor_api_key)
after = fetch_claude_code_spend(DateWindow("2026-06-01", "2026-06-30"), claude_api_key)
Python パッケージも同様の構成をエクスポートします。fetch_cursor_spend、fetch_claude_code_spend、fetch_copilot_spend、import_from_csv、build_comparison、render_terminal_summary、write_json_report に加え、AdapterResult/DateWindow/ToolId/UserUsage 型と、完全なエラー階層(AuthenticationError、RetryExhaustedError、SchemaDriftError、DataUnavailableError、CSVSchemaError、EmptyCSVError、CSVRowError、InvalidCliArgError)を提供しています。すべて python/src/teamspend/__init__.py に記載されています。npm パッケージと同様に、opencode/codex/claude-code-personal アダプターは CLI 専用で、まだパッケージのルートからは再エクスポートされていません。
現時点では、どちらのパッケージにも生成済みの API ドキュメントサイトはありません(CI で TypeDoc や Sphinx のビルドは行われていません)。そのため、サイトが作成されるまでは上記の表をリファレンスとしてご利用ください。
MCP サーバー
teamspend には Model Context Protocol サーバーが付属しているため、AI エージェント(Claude、Cursor、または MCP 互換クライアント)は、人が手動で CLI を実行しなくても、直接利用状況の比較を実行できます。
追加機能をインストールします。
pip install "teamspend-cli[mcp]"
MCP クライアントの設定に追加します(Claude Desktop の場合は claude_desktop_config.json)。
{
"mcpServers": {
"teamspend": {
"command": "uvx",
"args": ["--from", "teamspend-cli", "teamspend-mcp"]
}
}
}
このサーバーは run というツールを1つ公開します。指定された引数に --json を加えて公開済みの teamspend npm バイナリを実行し、解析済みの JSON 結果を返します。
run(["--tools", "claude-code-personal,opencode", "--before", "2026-04-01:2026-04-30", "--after", "2026-06-01:2026-06-30"])
ローカルログアダプター(claude-code-personal、opencode、codex)は、ディスク上の実際のセッションファイルをスキャンするため、これらを使った呼び出しは、特に ~/.claude/projects/ や ~/.local/share/opencode/storage/ の履歴が大量にある場合、戻るまでに最大30秒かかることがあります。トランスポートは stdio なので、ホストする必要はありません。MCP クライアントがサーバーをローカルのサブプロセスとして起動します。ソース:
python/src/teamspend/mcp_server.py。
ロードマップ
このプロジェクトは、意図的に対象を絞って始めました。実際のチームが移行していた2つのツールでアイデアを検証し、しっかり仕上げてから、対象を広げるためです。次の項目は、要望の多い順におおむね並んでいます。
- GitHub Copilot アダプター
- OpenCode アダプター
- Codex CLI アダプター
- USD 以外の請求への対応
これらの項目を早く実現してほしい場合や、リストにないツールを希望する場合は、issue を作成してお知らせください。実際に、要望をもとに順番を決めています。
実行前に知っておくとよいこと
- これはスナップショットを取得するツールであり、常時稼働するダッシュボードではありません。1つの質問に的確に答えて、処理を終了します。
- 出力には実際のメールアドレスと金額が含まれ、ターミナルに表示されるほか、レポートファイルにも保存されます。これを公開リポジトリの定期実行 CI ジョブに組み込むと、そのデータはビルドログに記録されるため、まず CI プロバイダーのログの公開範囲を確認してください。
- テスト用フィクスチャは、各ベンダーが公開している API ドキュメントをもとに作成しており、実際のアカウントは使っていません。初回の実行で解析エラーが発生した場合、それはベンダーの API の形式に変更があったことを示す実際の兆候であり、隠していたバグではありません。issue を作成してお知らせください。同じ問題に遭遇するほかのユーザーにも役立ちます。
- 定額制やユーザー単位の請求プラン(従量課金のない Cursor プラン、Claude.ai の Team/Enterprise シート)では、ベンダー独自の Admin API から実際のユーザーごとの費用を取得できません。teamspend は、実際のトークンやリクエストの利用状況があるにもかかわらず、報告された費用がちょうど $0 のユーザーを検出すると、そのユーザーの数値とレポート全体を推定値として表示し、実際の値のように見える誤解を招く $0 は表示しません。
- PyPI パッケージの
--versionは現在、インストール済みディストリビューション自体のメタデータを読み取らず、0.2.2 リリースのバージョン文字列を表示します。この修正はすでにmainに含まれており、次回の PyPI リリースで反映されます。それまでの間、pip show teamspend-cliを実行すれば、インストール済みの実際のバージョンを確認できます。
teamspend とは何か、なぜ存在するのか
teamspend は、ある問いに答えるコマンドラインツールです。チームがある AI コーディングツールから別のツールに移行したとき、または 2 つのツールを同時に使ったとき、各ベンダーの管理 API から直接取得した実際の金額で、実際のコストはいくらだったのでしょうか?
このツールが存在するのは、どのベンダーのダッシュボードも、構造上この問いに答えられないからです。Cursor の Admin API が報告するのは Cursor の支出です。Anthropic の Claude Enterprise Analytics API が報告するのは Claude Code の支出です。どちらにも競合他社の数値を自社の数値と並べて表示する理由はないため、移行の途中にいるチームは 2 つのダッシュボードを開いて、手作業で差し引くことになります。teamspend は、2 つのファイルに対する diff と同じことをします。両方のデータを同じ正規化スキーマで取得し、正直な差分を 1 つ表示します。
teamspend の機能は意図的に限定されています。継続的に実行することも、ダッシュボードをホストすることもなく、一度に 2 つのツールについて前後の期間を超えて追跡することもありません。単一の問いに答えて終了する、単一のコマンドです。
今これが重要な理由。 AI コーディングエージェントの支出は、もはや端数では済まなくなっています。Uber の CTO は The Information に対し、Claude Code の導入率が約 5,000 人のエンジニアの間で 32% から 84% に上昇する中、同社のエンジニアリング部門が 2026 年の AI ツール予算を約 4 か月で使い切ったと明らかにしました(Forbes、Fortune)。Uber の COO は率直に、「これらの統計のどれかと、消費者にとって有益な機能を 25% 多く生み出すこととの間に、関連性を見いだすのは非常に難しい」と述べています。Microsoft の Experiences and Devices 部門は、社内の Claude Code ライセンスを取り消し、コストが年間 AI 予算を超えたことを受けて、エンジニアを GitHub Copilot CLI に移行しました(The Verge、その後 Windows Central が報道)。企業でのエージェント型 AI 導入事例 127 件を対象にした FinOps 調査では、73% が予算を超過し、最大で 2.4 倍に達したものもありました(TechTimes、beri.net)。今年、各ベンダーはそれぞれ独自の予算管理機能で対応しました。Claude Enterprise は支出しきい値アラートを提供し、Cursor はチーム単位の金額上限を追加し、GitHub Copilot は組織の支出上限を追加しました。いずれも、自社ツールの数値と並べて競合他社のツールの数値を表示することはありません。この空白を埋めるのがまさに teamspend であり、このツールが 2 つの管理 API アダプターから、コストの数値を取得する実用的な方法を 6 つ備えるまでに成長した理由です。
teamspend の比較
これは、特定の用途のために作られた、対象を絞ったツールです。以下の2つのプロジェクトに取って代わろうとしているわけではありません。必要としているのが、これらのプロジェクトが得意とする機能なら、そちらをお使いください。
| teamspend | tokscale | codeburn | Vantage | |
|---|---|---|---|---|
| 答えられる質問 | 「2つのツール間で移行する際、チームの支出額はどれだけ変わりましたか?」 | 「40以上のコーディングエージェント CLI 全体で、個人としてどれくらい利用しましたか?」 | 「利用しているツール全体で、モデル、プロジェクト、タスク別の支出額はいくらですか?」 | 「クラウド、SaaS、AI 全体で、組織の支出額はいくらですか?」 |
| 対象ユーザー | チームの AI ツール費用について説明する必要がある人 | 自分の利用状況を追跡する個人開発者 | ローカルで費用の内訳を確認したい個人開発者 | マルチクラウドの費用を一元管理する、資金調達済みのプラットフォームチーム |
| ツールの対応範囲 | 6つ:Cursor、Claude Code、Copilot、OpenCode、Codexに加え、個人向けモード | CursorやClaude Codeを含む、40以上のツール連携 | Cursor、Claude Code、Codex、Geminiを含む、31のツールとエージェント | CursorとAnthropicのライブコネクターを提供 |
| チーム予算/移行前後の比較 | はい、これが製品のすべてです | 執筆時点で、コミュニティからの要望はありません | いいえ。単一マシンでのローカル追跡であり、チーム向けの管理 API からの取得には対応していません | 移行に特化したものではなく、より幅広い費用配賦プラットフォームです |
| 規模と支援体制 | 新しい、単一目的の OSS プロジェクト | 4,700以上のスター、395のフォーク、MIT ライセンス、活発にメンテナンスされています | 9,100以上のスター、715のフォーク、無料でローカルファースト | 2,500万ドルを調達済み(シード+シリーズ A)、商用プラットフォーム |
tokscale は、本当に優れたプロジェクトです。4,700以上のスターを獲得し、リーダーボードとコントリビューショングラフを備え、40以上のコーディングエージェントツールにわたる個人のトークン使用量を追跡します。直近の100件の Issue を確認しても、チーム予算、マネージャー向けダッシュボード、支出の集計に関する要望は一件もありません。そうした機能を作るプロジェクトではないからです。利用しているすべての AI CLI にわたる個人の利用状況を追跡したいなら、tokscale をお使いください。teamspend は別の質問に答えるために存在します。個人のコントリビューターではなく、チームの予算責任者が尋ねる質問に答えるためです。
codeburn は、teamspend にとって実質的に最も近い競合です。無料でローカルファーストであり、teamspend より多くのツールにわたって、モデル、プロジェクト、タスク別に費用をすでに分類しています。幅広いツールを対象に、個人が単一マシン上で費用の内訳を確認したいなら、codeburn のほうが teamspend より優れています。一方で、ベンダーの管理 API からデータを取得し、チーム単位での移行前後の比較に答えることはできません。これこそが、teamspend が作られた唯一の目的です。
Vantage は、より幅広いクラウド/SaaS/AI 費用プラットフォームの一環として、Cursor と Anthropic のライブコネクターをすでに提供しています。Vantage を通じてクラウド費用全体をすでに一元管理しているなら、優れた選択肢であり、teamspend では到底及ばない範囲をカバーします。teamspend が対象とするのは、より限定的なケースです。移行に関する一つの判断のための、軽量な単一目的のツールであり、そのために包括的な費用管理プラットフォームを導入する必要はありません。
Cursor、Claude Code、Copilot それぞれの管理コンソールは、各自のツールについて正確な情報を提供します。1つのツールしか使っていないなら、それらをお使いください。teamspend が必要になるのは、2つのツールを比較するときです。どの管理コンソールも、自社ツールの数値と競合製品の数値を同じ画面に表示することはないからです。
よくある質問
teamspend とは何ですか?一文で説明してください。
2つの AI コーディングツールについて、ベンダーが報告する実際の支出額を単一のコマンドで取得し、移行前後の差額を表示します。移行の最中にあるチームが、2つのダッシュボードを開いて手作業で差を計算する必要がなくなります。意図的に継続的な実行や、独自のダッシュボードのホスティングは行いません。詳しくは、上記の「teamspend とは何か、なぜ存在するのか」をご覧ください。
実行に必要なインストール要件と対応プラットフォームを教えてください。
npm パッケージ(teamspend-cli)を実行するには、package.json の engines フィールドに記載されているとおり、Node.js 18.3.0 以降が必要です。PyPI パッケージ(同じく teamspend-cli)には、python/pyproject.toml の requires-python に記載されているとおり、Python 3.9 以降が必要です。どちらも Operating System :: OS Independent を指定しており、実行時の依存関係はないため、利用可能なランタイムがあれば、OS 固有のセットアップは必要ありません。管理者 API アダプター(Cursor、Claude Code、Copilot)に必要なのは、ベンダーの API へのアウトバウンドネットワーク接続だけです。ローカルログアダプター(OpenCode、Codex CLI、claude-code-personal)は、teamspend を実行するマシンのディスクからファイルを直接読み込むため、ネットワーク接続も認証情報も必要ありません。
最も類似している codeburn と比べて、teamspend はどう違いますか? codeburn はすでに、1 台のマシン上で 31 種類のツールを対象に、モデル、プロジェクト、タスクごとにコストを内訳表示できます。管理者 API も必要ありません。このような単一マシンでの内訳が必要なら、codeburn のほうが teamspend より優れています。teamspend は別の問いに答えるもので、ベンダーの 管理者 API からデータを取得し、移行の前後でチーム 全体 の支出を比較します。これは codeburn のローカルトラッキング方式ではできません。個人向けのツール横断的なコスト内訳には codeburn を、予算管理者が報告する必要のあるチーム単位の移行前後の数値には teamspend を選んでください。規模やスター数を含む詳しい比較は、上記の「teamspend の比較」をご覧ください。
teamspend を商用利用したり、会社のコードベースで使ったりできますか?
はい。両方のパッケージは Apache License 2.0 です(LICENSE と、package.json/python/pyproject.toml の license フィールドをご覧ください)。このライセンスでは、帰属表示を行えば、コピーレフト要件なしで商用利用、改変、社内利用、再配布が認められています。別の商用プランや購入が必要なライセンスはありません。
teamspend は Cursor や Claude Code の管理コンソールを置き換えますか? いいえ。各ベンダーのコンソールは、引き続きそのベンダー自身の数値を確認するための正確な情報源です。また、支出以外の情報(シート管理、利用ポリシー、モデルへのアクセス)を確認する際にも必要です。teamspend が提供するのは、どちらのコンソールにもない、両方のツールの数値を同じ比較表にまとめる機能です。
ツールの API 呼び出しが途中で失敗した場合はどうなりますか?
比較全体が未完了として扱われ、不完全な結果が完了したものとして報告されることはありません。src/compare.ts の buildComparison は、両方の結果を取得できた場合にのみ差分を計算します。どちらか一方でも失敗した場合、その側のレポートには DATA UNAVAILABLE と表示され、差分は null になります。不完全な取得結果から数値を算出することはありません。
teamspend はチームの支出データを保存したり、どこかに送信したりしますか?
いいえ。これはローカルで動作する CLI です。各ベンダーの API をマシンから直接呼び出し、概要をターミナルに表示して、現在のディレクトリに JSON レポートファイルを 1 つ(権限 0600)書き込みます。teamspend や第三者にデータが送信されることはありません。
Cursor と Claude Code 以外のツールにも teamspend を使えますか?
はい。GitHub Copilot に対応しています。GitHub 自身の API には報告用の金額フィールドがないため、コストの数値をどのように算出しているかについての率直な説明を含め、上記の「GitHub Copilot のサポート」をご覧ください。OpenCode と Codex CLI にも対応しています。上記の「OpenCode:ローカルのみ、API キー不要」と「Codex CLI:ローカルのみ、API キー不要」をご覧ください。どちらも API キーなしで、それぞれのローカルセッションログを直接読み込みます。それ以外のツールについては、上記で説明した同じ date,user_email,cost_usd,is_estimated スキーマを使った CSV インポートで、引き続き対応できます。
支出額が $0 の場合に、正確な値ではなく「推定」と表示されることがあるのはなぜですか?
一部の料金プラン(席数固定の Cursor プラン、Claude.ai Team/Enterprise の席数プラン)では、ベンダー独自の Admin API からユーザーごとの実際の費用を取得できず、ユーザーに実際の利用があっても、一見正確そうな $0 が報告されます。teamspend は、費用が $0 なのにトークン数またはリクエスト数が 0 でない場合にそれを検出し、誤解を招く正確なゼロとして表示せず、推定値としてフラグを付けます。この修正につながった、他のツールでの独立した 2 件のバグ報告については、以下の「成功事例」をご覧ください。
teamspend は、支出に見合う価値があったかどうかを教えてくれますか? いいえ。そのようなふりをすることもありません。Anthropic、Cursor、GitHub を含め、どのベンダーも、特定のセッションが良いコードを生み出したのか、予算を無駄にしたのかを公開していません。teamspend は、ソースから直接取得した実際の数値で「いくらかかったか」に答えます。「費用に見合う価値があったか」には答えられませんし、答えることもできません。セッションごとの内訳は、誠実なツールでできる限りの答えを提供します。つまり、成果ごとの費用ではなく、セッションごとの費用です。
コントリビュート
気になる点、仕様が変わったベンダー API、または対応してほしいツールがあれば、issue または pull request を作成してください。このコードベースは意図的に小さくしているため、修正や新しいアダプターの追加は、見た目よりも小さな変更で済むことがほとんどです。npm(TypeScript)と PyPI(Python、python/)の両パッケージを対象とした完全なガイドについては、CONTRIBUTING.mdをご覧ください。アダプターの変更は両方に反映してください。
# TypeScript(リポジトリのルート)
npm install
npm run build
npm run lint
npm run typecheck
npm test
# Python(python/)
cd python
pip install -e ".[dev]"
pytest
teamspend のおかげで、2 つのダッシュボードを開いて手計算せずに済んだなら、スターを付けていただけると、同じ問題を抱える人がこのツールを見つけやすくなります。
成功事例
上記の不審なゼロ値への対応は、何もないところから生まれたものではありません。他のチームが自分たちのツールでまったく同じ壁にぶつかるのを見て、そのバグ報告を仕様として扱ったことがきっかけです。
- ccusage へのliuzemei の PRでは、同じ根本的な問題が修正されました。席数固定の料金プランでは、明らかに利用中のユーザーに対して、ベンダー独自の API が
cost_usd: 0を報告することがあります。その数値を額面どおりに信頼するツールは、チームに対して、最も多く使っているユーザーの費用はゼロだと伝えてしまいます。teamspend の Cursor アダプターと Claude Code アダプターにも、まったく同じ問題がありました。ただし、2 つの修正方法は異なります。ccusage はそのゼロ値を検出すると、料金表から実際の金額を再計算します。一方、teamspend はより控えめに、誤ったゼロ値を実際の値として表示せず、推定値としてフラグを付けます。
ライセンス
Apache 2.0。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。