ClaudeStatsBar: セッションが486kトークンに達しても、そのコストを誰も教えてくれない
Show HN: ClaudeStatsBar: your session is 486k deep and nothing told you (github.com)
要約
ClaudeStatsBarは、Claude Codeのセッションにおけるコンテキストウィンドウの使用状況とコストをリアルタイムで表示するツールです。セッションが気づかぬうちに拡大し、APIリクエストのコストが急増する問題を解決するために開発されました。このツールは、次のターンにかかるコストや、セッションがどれだけ大きくなっているかを視覚化し、ユーザーがコストを意識した作業を行えるように支援します。
全文翻訳
ClaudeStatsBar: your session is 486k deep and nothing told you
Claude Codeのステータスラインで、実際に問題となる数値を示します。コンテキストウィンドウがどれだけ埋まっているかではなく、単語を入力する前に次のターンがいくらかかるか、そしてタスクの途中で制限に達する前にクリアする価値があるかどうかを教えてくれます。
Opus 5 (1M context) · my-project · ▕██████░░░░░░▏ 486k · 49k/turn · 88t · 5h 15% ~162t left · 7d 3%
⚠ 486k context — every turn now costs 49k before you type. /clear if you have switched task, /compact to keep going
Pure Python stdlib. 依存関係なし、ネットワークなし、トランスクリプト解析なし、プロキシなし。レンダリングあたり約25ms。
なぜこれが必要なのか
Claudeで大規模なものを作成すると、セッションは長くなり、作業中にセッションが裏で成長していきます。デフォルトでは、それがどれだけコストがかかるかを警告するものが何もないため、最初の兆候は通常、制限そのものです――コンテキストが枯渇した、またはローリング使用ウィンドウがなくなった、タスクの途中です。モデルが強力であるほど、その影響は早く現れます。大きなコードベースでのFableは、予想よりも早く上限に達するでしょう。
これにより、作業中にサイズが表示されます:セッションがどれだけのコンテキストを保持しているか、単語を入力する前に次のターンがいくらかかるか、そして5時間および7日間のウィンドウのどれだけが残っているか。タスクの途中で制限を発見するのではなく、 sensible な境界でクリアするのに十分です。
セッションは、感じるよりもはるかに大きくなります。私は2週間のClaude Code使用状況を測定しました――916のトランスクリプト、711のセッション、57,451のAPIリクエスト、11.6 billion トークン――そしてそのサイズは予想とは異なりました。
| セッションが実際にどれだけ大きくなるか | |
|---|---|
| セッション開始時のメディアンコンテキスト | 42.8k |
| ターンあたりのメディアン成長 | ~1.7k |
| リクエストあたりの平均コンテキスト | 193.3k |
| 150kコンテキストを超えたセッション | 37% |
| サンプル全体で再読み込みされた累積コンテキスト | 11.1B トークン |
| 私が実際にタイプしたコンテキスト | 1.3M トークン |
711セッション全体で私がタイプしたものは1.3Mトークンでした。同じサンプルは、すでに保持していたコンテキストを11.1 billionトークン再読み込みしました。短いプロンプトはレバーではありません。セッションサイズが重要です。
その理由は、APIがステートレスであることです。各ターンは、システムプロンプト、指示、およびそれ以前のすべてのターンを含む会話全体を再送信します。そのため、ワイヤー上を流れるものは、段落を入力したか「はい」と入力したかに関わらず、メッセージごとに増加します。
なぜそれが累積するのか
ターンNがターン1..N-1を再送信するため、セッションが移動するコンテキストは、その長さの二乗にほぼ比例して増加します。上記のメディアン(開始時42.8k、ターンあたり1.7k)を使用すると:
| 同様の160ターンの作業 | 移動したコンテキスト | 終了時 |
|---|---|---|
| 1つの160ターンセッション | 28.6M トークン | ~315k |
| 4つの40ターンセッション | 12.3M トークン | 各~111k |
同じ作業でコンテキストは半分以下――そしてどの実行も上限に近づきません。分布も一致しています:セッションのトップ10%が、移動した全トークンの71%を占めました。
問題は、これらのどれも作業中に可視化されないこと、そしてコンテキストウィンドウの枯渇とは異なり、決して自己制限しないことです。セッションは200ターンにわたって480kで維持され、コンパクションをトリガーすることなく、静かに数百万トークンを消費する可能性があります。
それがこのツールが埋めるギャップです。
インストール
git clone <this repo> ClaudeStatsBar && cd ClaudeStatsBar
./install.sh
インストーラーは、~/.claude/settings.jsonにstatusLineエントリをマージし、ファイルをバックアップしてから、既存のステータスラインを上書きしないようにします。
新しいセッションを開くか、/hooksを一度実行して設定をリロードしてください。
手動
Windows: "command": "python C:\\path\\to\\ClaudeStatsBar\\statsbar.py" (shebangと~展開はPOSIXのみです)。
アンインストール: statusLineキーを削除します。
/statuslineとの違い
ClaudeStatsBarはstatusLineコマンドです――文書化されたメカニズムであり、競合するものではありません。Claude Codeはあなたのために1つ作成します:
/statusline show model name and context percentage with a progress bar
これはこれらのドキュメントからの実際の例であり、約10秒かかります。context_window.used_percentageは事前計算済みで到着するため、バーは1行に近いものです。プログレスバーだけが必要な場合は、これを使用してください。
これに追加されるもの:
/statusline 1行コマンド | ClaudeStatsBar | |
|---|---|---|
| コンテキストバーと%フル | はい | はい |
| 次のターンのコスト | いいえ | 49k/turn |
| このセッションの最も安い時点からの相対コスト | いいえ | 7.0×、ベースラインが観測されなかった場合は非表示 |
| 5時間ウィンドウのヘッドルーム | 生の%のみ | ~162t left、測定された燃焼率から外挿 |
| しきい値警告で適切なコマンドを名前付け | いいえ | /clear vs /compact、原因によって選択 |
| インストーラー、正常な低下、セッションを壊さない | - | はい |
最初の行が重要です。パーセンテージフルは残りの部屋の量を示します。メッセージのコストは示しません。大きなウィンドウでは、これらはひどく乖離します:1Mのうち486kは快適な49%フルと表示されますが、メッセージあたり49kという静かなコストがかかります――セッション開始時の同じ質問のコストの11倍です。半分空いている」と言うパーセンテージは、その時点で完全に間違ったシグナルです。
バーの読み方
| フィールド | 意味 |
|---|---|
Opus 5 (1M context) | モデル。ウィンドウサイズがバーの意味を変えます。 |
my-project | 現在のディレクトリ。 |
▕██████░░░░░░▏ | 使用されたコンテキストウィンドウ――残りの部屋の量。 |
486k | 各ターンで再送信されるトークン。60k未満は緑、120kまではアンバー、それ以上は赤。 |
49k/turn | 入力する前に、各ターンでその再送信にかかるコスト。コンテキスト x 0.1、キャッシュ読み取りレート。 |
7.0× | このセッションの最も安い時点よりもメッセージがどれだけ多くコストがかかるか。バーがセッションの途中で開始され、実際のベースラインを一度も見たことがない場合は非表示。 |
88t | 今セッションのAPIリクエスト数。 |
5h 15% ~162t left | 5時間制限の使用率と、このセッションの測定された燃焼率でのヘッドルームのターン数。15ターン未満は赤。 |
7d 3% | 週次制限の使用率。 |
120kコンテキストまたはウィンドウの80%を超えると、2番目の警告ラインが表示されます。
49k/turn は成長ではなくレントです
一般的な誤読です。セッションはターンあたり約1.7kトークン増加します。49kは、既存の486kをモデルに再度配置するために支払う金額です。
| ターン | 送信 | 追加 | 請求 |
|---|---|---|---|
| 49 | 478k | 1.7k | 47.8k |
| 50 | 480k | 1.7k | 48.0k |
| 51 | 482k | 1.7k | 48.2k |
結果は直感に反します:1単語の返信は、複雑なリクエストと同じコストがかかります。長いセッションの終わりに「あと1つだけ簡単なことを」と言うのは、あなたが送ることができる最も価値の低いメッセージです。
対処法
測定された影響順:
- 無関係なタスク間の
/clear- 約35%。 全てのゲームであり、無料です。 - ターンの削減 - 約20%。 各ラウンドトリップは、内容に関わらず完全なコンテキストスキャンを必要とします。ツール呼び出しをバッチ処理してください。ファイルを再読み込みしないでください。
- 常にロードされる指示ファイルのトリミング - 約2%。 やる価値はありますが、悩むほどではありません。私のサンプルでは、セッションベースラインの約8.7kのうち、ユーザー制御だったのは約8.7kでした。残りはハーネスです。
- 推論努力の低減 - 約2%。 出力は支出の9.9%にすぎません。
設定
| 変数 | デフォルト | 効果 |
|---|---|---|
CC_CTX_WARN | 60000 | アンバーしきい値(トークン)。 |
CC_CTX_HIGH | 120000 | レッドしきい値、および警告ライン。 |
CC_CTX_FULL_PCT | 80 | /compactにアドバイスを切り替えるウィンドウフルパーセンテージ。 |
CC_SHOW_COST | 未設定 | ドル見積もりを表示します。デフォルトではオフです:Claudeサブスクリプションでは、これはAPIリスト価格のクライアントサイドの数値であり、誰も支払わないお金です。APIキーでは便利です。 |
NO_COLOR | 未設定 | ANSIカラーを無効にします。 |
注意点と制限事項
- 重みはプロキシです。 コストはAPIリスト価格の比率(入力1x、キャッシュ書き込み1.25x、キャッシュ読み取り0.1x、出力5x)を使用します。形状は正しいです。
49k/turnを請求書ではなくインデックスとして扱ってください。レート制限パーセンテージはAnthropic自身の数値であり、そのような注意書きは必要ありません。 - 乗数は実際のベースラインを必要とします。 これは観測された最小コンテキストと比較します。セッションの途中でインストールされた場合、開始を見ていないため、
1.0×を表示する代わりに比率を抑制します。 - 燃焼予測は5つのサンプルを必要としてから外挿し、ローリング5時間ウィンドウがリセットされるときに再ベースライン化します。
- 状態は
~/.claude/.statusline-state/<session_id>.jsonに保存されます:観測された最小コンテキストとレート制限ベースライン。1週間後に削除されます。 - セッションを壊すことはありません。 どの例外も空行を表示して終了コード0で終了します。
- Claude Code 2.1.251+ が
prompt_cacheに必要、2.1.260+ がlast_miss_causeに必要です。古いバージョンは正常に低下します――それらのフィールドは単にレンダリングされません。
について
Field Logic によって開発されました。
このREADME全体にわたる数値は、推定値ではなく、私たち自身の日常のClaude Code使用状況を計装したものです――2週間で916のトランスクリプトと11.6 billionトークン。あなたのワークロードで数値が大きく異なる場合は、お知らせください。
ライセンス
MIT - LICENSEを参照してください。