claude-cost — Claude用セッションコストトラッカー
概要
claude-cost(パッケージ名: claude-cost-tracker)は、AnthropicのCLIクライアント「claude」を直接置き換えて使える小さなラッパーです。内部でPTY(擬似端末)を利用してTUIの入出力を透過的にプロキシし、セッションが終了したタイミングでそのセッションにかかったコストのサマリーを端末に出力します。インストールはnpmからグローバルに可能で、既存のワークフローを変えずにコスト可視化を追加できます。
リポジトリの統計情報
- スター数: 2
- フォーク数: 0
- ウォッチャー数: 2
- コミット数: 3
- ファイル数: 5
- メインの言語: JavaScript
主な特徴
- claudeコマンドへの完全引数転送:既存の使い方を変えずに利用可能
- PTYを用いたTUI透過プロキシ:端末表示やインタラクションを崩さない
- セッション終了時にコスト集計を表示:使用トークンやモデル別コストの要約を提示
- npmでグローバルインストール可能:導入が容易でCLIワークフローへ自然に組込める
技術的なポイント
claude-costはNode.jsで実装され、グローバルCLIとして動作する小さなユーティリティです。内部的には擬似端末(PTY)を作成して、ユーザーの端末と実際のclaudeプロセスの間に透明なプロキシを構築します。これによりclaudeのTUI(端末ユーザーインターフェイス)をそのまま表示・操作でき、出力を監視しつつ必要な情報を抽出できます。具体的には、stdout/stderrのストリームを読み取り、ANSIエスケープシーケンスや改行を適切に扱いながらコストに関連する出力(例:トークン使用量やモデル名、料金表示)をパースします。
終了処理では、子プロセスのexitイベントやSIGINT等のシグナルをハンドルして安全に集計を行い、端末に整形されたサマリーを表示します。実装上はnode-pty系のライブラリやchild_process.spawnを使う構成が考えられ、端末サイズ変更やTTYフラグの転送、エンコーディングの扱い(UTF-8, 絵文字)などの配慮が必要です。また、引数はそのままclaudeに転送するため、モデル指定やプロンプトファイルの指定など既存CLIオプションとの互換性を保持します。
注意点としては、claudeの出力フォーマットが変わるとパーサーが壊れる可能性があること、端末出力のタイミングや部分的なバッファリングにより正確な集計が難しくなるケースがあることです。ネットワーク上で直接APIを捕捉する方式ではないため、正確性は表示される情報に依存します。将来的な拡張としては、モデル別の料金表を組み込んだ精密なコスト計算や、JSON形式でのログ出力、セッション履歴の保存、またはGUIダッシュボードとの連携などが考えられます。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- README.md: file
- package-lock.json: file
- package.json: file
- src: dir
まとめ
手軽に導入できるCLIラッパーで、TUIを壊さずコストを可視化する実用的ツールです。
リポジトリ情報:
- 名前: claude-cost
- 説明: 説明なし
- スター数: 2
- 言語: JavaScript
- URL: https://github.com/Lachytonner/claude-cost
- オーナー: Lachytonner
- アバター: https://avatars.githubusercontent.com/u/245951288?v=4
READMEの抜粋:
claude-cost-tracker
PTY wrapper for Claude Code that transparently proxies the TUI and displays a session cost summary on exit.
Install
npm install -g claude-cost-tracker
Usage
Use claude-cost anywhere you’d normally use claude. All arguments are forwarded:
claude-cost
claude-cost -p "explain this repo"
claude-cost --model claude-opus-4-6
When the session ends, a cost summary is printed automatically:
╔══════════════════════════════════════════════════...