モチベーション
- コンテキストが増えるとコストがかさむのでコンテキストを意識しながらClaude Codeを利用したい
- 5時間制限,7日制限を常に意識しながらClaude Codeを利用したい
目標
こんな感じに表示します.
やり方の概要
Claude Code のステータスライン機能を使います.
ステータスラインは,指定したコマンドの標準出力を画面下部に表示する機能です.
公式ドキュメント
このコマンドは標準入力で JSON を受け取ります.
その JSON にコンテキストとレート制限の情報が入っているので,スクリプトで整形して出力するだけで済みます.
今回使うフィールドは次のとおりです.
| フィールド | 内容 |
|---|---|
model.display_name |
モデル名 |
context_window.context_window_size |
コンテキストの上限 |
context_window.current_usage |
直近のリクエストの入力トークン数(キャッシュ作成・読み取りを含む) |
context_window.used_percentage |
コンテキストの使用率 |
rate_limits.five_hour.used_percentage |
5 時間制限の使用率 |
rate_limits.five_hour.resets_at |
5 時間制限のリセット時刻(UNIX 秒) |
rate_limits.seven_day.* |
7 日制限。5 時間制限と同じ形式 |
rate_limits は次の条件で入ります.
- claude.ai の Pro / Max 契約であること
- セッションの最初の API 応答が返った後であること
したがって,起動直後は制限の項目が出ません.
API キーで利用している場合も出ない可能性があります.
常時表示する用のプロンプト
次のプロンプトを Claude Code に渡せば,スクリプトの作成と設定の変更をしてくれます.
Claude Code のステータスラインに、コンテキスト使用状況と 5 時間・7 日制限を常時表示するよう設定してください。
表示例:
Sonnet 5 | 242k / 1M (24%使用済み) | 5h: 残り 63% (2h6m後にリセット) | 7d: 残り 88% (3d3h後にリセット)
仕様:
- statusLine のコマンドは、標準入力の JSON から次のフィールドを読む。
- model.display_name
- context_window.context_window_size
- context_window.current_usage(input_tokens、cache_creation_input_tokens、cache_read_input_tokens の合計を使用トークンとする。なければ context_window.total_input_tokens)
- context_window.used_percentage(なければ使用トークンと上限から計算する)
- rate_limits.five_hour と rate_limits.seven_day の used_percentage と resets_at(UNIX 秒)
- トークン数は 242k、1M のように k / M 表記にする。
- コンテキストは「N%使用済み」、制限は「残り N%」(100 から使用率を引く)と表示する。
- リセットまでの時間は resets_at と現在時刻の差から求め、3d4h、2h10m、45m の形式にする。リセット時刻を過ぎている場合は時間の部分を省略する。
- rate_limits や各ウィンドウが欠けている場合はエラーにせず、その項目だけ省略する。
- JSON の解析に失敗した場合は、技術ログを stderr に出し、画面には「コンテキスト情報を取得できません」と表示する。
- スクリプトはファイルに書き出し、settings.json の statusLine からそのファイルを呼び出す。
変更は新しいセッションを開くと反映されます.
