リポジトリ
スクリーンショット
Claude Code CLI の /usage コマンドが表示する使用量情報を、メニューバーから常時確認できるようにしたもの。
- 5-Hour Session / 7-Day Weekly / 7-Day Sonnet の各レートリミットの消費率
- リセットまでの残り時間
- Extra Usage(有効時)の消費額・上限・消費率
をドーナツチャートとプログレスバーで表示する。ポーリング間隔は 1〜60 分で設定可能。
背景
Claude Code のソースコードが漏洩した際に内部実装を調査し、/usage が内部で何をしているかを特定した。具体的には以下の 3 ステップで使用量を取得している。
-
Keychain からの OAuth トークン読み取り -- Claude Code は macOS Keychain にサービス名
Claude Code-credentials、アカウント名をローカルユーザー名として OAuth トークン (access_token, refresh_token, expires_at) を JSON で保存している -
Usage API の呼び出し -- 有効な access_token を Bearer トークンとして
https://api.anthropic.com/api/oauth/usageに GET リクエストを送る。ヘッダーにanthropic-beta: oauth-2025-04-20が必要。レスポンスにはfive_hour,seven_day,seven_day_sonnetの各 utilization とresets_at、およびextra_usageが含まれる
OAuthトークンという機密情報にアクセス可能な Keychain の権限を要求することから、コードの透明性を確保するために OSS として公開せざるを得ないと判断した。
動作要件
- macOS 14.0 (Sonoma) 以降
- Claude Code CLI がインストール済みかつサインイン済みであること
Keychain アクセスについて
初回起動時に macOS が Keychain アクセスの許可を求めるダイアログを表示する。許可しなければアプリは動作しない。
本アプリは自前の OAuth ログインフローを持たず、トークンのリフレッシュも行わない。Claude Code が Keychain に保存済みのトークンを読み取り専用で使用する。
トークンが期限切れ(有効期限の 5 分前を含む)の場合、Claude Code によるリフレッシュを待つため 3 秒間隔で最大 3 回 Keychain を再読み取りする。すべてのリトライで期限切れのままであればエラーを表示し、次のポーリングで再試行する。
すべてのデータはローカルで処理される。認証情報および使用量データは Anthropic の公式 API エンドポイント以外には一切送信されない。
インストール
Xcode または Xcode Command Line Tools (Swift 5.9+) が必要。
git clone https://github.com/s-age/ccmeter.git
cd ccmeter
./Scripts/build.sh --install
release ビルド → CCMeter.app アセンブル → コード署名 → /Applications へコピーまで一括で実行される。
ビルドオプション
| フラグ | 説明 |
|---|---|
--clean |
ビルド前にアーティファクトを削除 |
--test |
ビルド前にテストを実行 |
--install |
ビルド後に /Applications へインストール |
--skip-icon |
アプリアイコン生成をスキップ |
--no-sign |
コード署名をスキップ |
