AI・機械学習
ClaudeStatsBar: セッションが486kトークンに達しても、そのコストを誰も教えてくれない
Show HN: ClaudeStatsBar: your session is 486k deep and nothing told you (github.com)
要約
ClaudeStatsBarは、Claude Codeのセッションにおけるコンテキストウィンドウの使用状況とコストをリアルタイムで表示するツールです。セッションが気づかぬうちに拡大し、APIリクエストのコストが急増する問題を解決するために開発されました。このツールは、次のターンにかかるコストや、セッションがどれだけ大きくなっているかを視覚化し、ユーザーがコストを意識した作業を行えるように支援します。
全文翻訳
ClaudeStatsBar: セッションが486kトークンに達しても、そのコストを誰も教えてくれない
Claude Codeのステータスバーで、実際にコストに影響する数値を表示します。コンテキストウィンドウがいっぱいかどうかだけでなく、単語を入力する前に次のターンがいくらかかるか、そしていつクリアするのが得策かを示します。
Opus 5 (1Mコンテキスト) · my-project · ▕██████░░░░░░▏ 486k · 49k/ターン · 88t · 5h 15% ~162t 残り · 7d 3%
486kコンテキスト — 現在、入力する前に各ターンで49kトークンかかります。
/clear タスクを切り替えた場合、/compact 続行する場合
純粋なPython標準ライブラリ。依存関係なし、ネットワークなし、トランスクリプト解析なし、プロキシなし。
レンダリングあたり約25ms。
なぜこれが存在するのか
Claudeで大規模なものを構築すると、セッションが長くなります。作業中にセッションは知らないうちに成長します。デフォルトでは、それがどれだけコストがかかるかを警告するものが何もないため、最初の兆候は通常、制限そのものです — コンテキストが枯渇した、またはローリング使用ウィンドウがいっぱいになった、タスクの途中で。
モデルが強力であるほど、その影響は早く現れます。大きなコードベースでのFableは、予想よりも早く上限に達するでしょう。
これは、作業中にサイズを画面に表示します。セッションがどれだけのコンテキストを保持しているか、単語を入力する前に次のターンがどれだけかかるか、そして5時間と7日間のウィンドウのどれだけが残っているかです。
タスクの途中で制限を発見するのではなく、適切な境界でクリアするのに十分です。
セッションは感じるよりもはるかに大きくなります。
私の2週間のClaude Codeの使用状況を測定しました — 916のトランスクリプト、711のセッション、57,451のAPIリクエスト、116億トークン — そしてそのサイズは予想通りではありませんでした。
セッションは実際にどれだけ大きくなるか
セッション開始時のメディアンコンテキスト 42.8k
ターンあたりのメディアン成長 ~1.7k
リクエストあたりの平均コンテキスト 193.3k
150kコンテキストを超えて実行されたセッション 37%
サンプル全体で再読み取りされた累積コンテキスト 11.1Bトークン
私が実際にタイプしたコンテキスト 1.3Mトークン
711セッション全体で私がタイプしたすべては1.3Mトークンでした。同じサンプルは、すでに保持していた111億トークンのコンテキストを再読み取りしました。
短いプロンプトはレバーではありません。セッションサイズがレバーです。
理由は、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 <このリポジトリ>
ClaudeStatsBar && cd ClaudeStatsBar
./install.sh
インストーラーは、statusLineエントリを~/.claude/settings.jsonにマージし、ファイルを事前にバックアップし、既存のステータスラインを上書きしないようにします。
新しいセッションを開くか、/hooksを実行して設定をリロードします。
手動
// ~/.claude/settings.json
{
"statusLine": {
"type": "command",
"command": "/絶対/パス/to/ClaudeStatsBar/statsbar.py",
"padding": 0
}
}
Windowsの場合: "command": "python C:\\path\\to\\ClaudeStatsBar\\statsbar.py" (シェバンと~展開は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/ターン
このセッションで最も安いポイントに対する相対コスト
いいえ
7.0倍、ベースラインが観測されなかった場合は抑制
5時間ウィンドウのヘッドルーム
生の%
のみ
~162t 残り、測定された燃焼率から外挿
しきい値の警告
正しいコマンドの名前
いいえ
/clear vs /compact、原因によって選択
インストーラー、正常な劣化、セッションを壊さない
はい
最初の行が重要です。パーセンテージフルは、残りのスペースを示します。それはメッセージのコストを示さず、大きなウィンドウではそれらはひどく乖離します。1Mのうち486kは、快適な49%フルと読まれますが、メッセージあたり49kという静かなコストがかかります — セッション開始時の同じ質問のコストの11倍です。半分空いていると言うパーセンテージは、その時点で完全に間違ったシグナルです。
バーの読み方
フィールド 意味
Opus 5 (1Mコンテキスト) モデル。ウィンドウサイズがバーの意味を変えます。
my-project 現在のディレクトリ。
▕██████░░░░░░▏ コンテキストウィンドウ使用量 — 残りのスペース。
486k 各ターンで再送信されるトークン。60k未満は緑、120kまでアンバー、それ以上は赤。
49k/ターン 文字を入力する前に、各ターンでその再送信がいくらかかるか。コンテキスト x 0.1、キャッシュ読み取り率。
7.0× このセッションで最も安いポイントよりも、メッセージがどれだけ多くコストがかかるか。セッションの途中でバーが開始され、実際のベースラインが見られなかった場合は非表示。
88t 今セッションのAPIリクエスト数。
5h 15% ~162t 残り 5時間制限の使用率と、測定された燃焼率でのヘッドルームのターン数。15ターン未満は赤。
7d 3% 週次制限の使用率。
120kコンテキストまたはウィンドウの80%を超えると、2番目の警告行が表示されます。
49k/ターンは成長ではなく家賃です
一般的な誤読。セッションはターンあたり約1.7kトークンで成長します。49kは、既存の486kを再度モデルに入れるために支払うものです。
ターン 送信 追加 請求
49 478k 1.7k 47.8k
50 480k 1.7k 48.0k
51 482k 1.7k 48.2k
結果は直感的ではありません。1単語の返信は複雑なリクエストと同じコストがかかります。長いセッションの終わりに「もう一つだけ簡単なこと」と言うのは、あなたが送ることができる最も価値の低いメッセージです。
対処法
測定された影響でランク付け:
/clear 無関係なタスク間 — 約35%。ゲーム全体、そして無料。
ターン数を減らす — 約20%。各ラウンドトリップは、内容に関係なく、完全なコンテキストスイープを必要とします。
ツール呼び出しをバッチ処理する。ファイルを再読み取りしない。
常にロードされている指示ファイルをトリムする — 約2%。行う価値はありますが、悩む価値はありません。私のサンプルでは、42.8kセッションベースラインの約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リスト価格の比率を使用します(入力1倍、キャッシュ書き込み1.25倍、キャッシュ読み取り0.1倍、出力5倍)。形状は正しいです。49k/ターンを請求ではなくインデックスとして扱ってください。レート制限のパーセンテージはAnthropic自身の数値であり、そのような注意書きは必要ありません。
乗数は実際のベースラインを必要とします。それは観測された最小コンテキストと比較します。セッションの途中でインストールされた場合、開始を見ることはなかったため、比率を抑制して、安心できる1.0倍を表示するのではなく、抑制します。
燃焼予測は、5つのサンプルを収集してから外挿し、ローリング5時間ウィンドウがリセットされるときに再ベースライン化します。
状態は~/.claude/.statusline-state/<session_id>.jsonに保存されます。観測された最小コンテキストとレート制限のベースラインです。1週間後に削除されます。
セッションを壊すことはありません。例外が発生すると、空行が表示され、0で終了します。
プロンプトキャッシュにはClaude Code 2.1.251+、last_miss_causeには2.1.260+が必要です。それ以前のバージョンでは動作しません。