Claude Code ステータスラインを v2.1.80 の新フィールドでアップデートした
概要
Claude Code v2.1.80 で statusline スクリプトに渡される JSON に新しいフィールドが追加された。これを機にステータスラインの表示を見直して、コスト表示の正確性向上とレート制限情報の追加を行った。
v2.1.80 で追加された主なフィールド
rate_limits(claude.ai Pro/Max のみ)
rate_limits.five_hour.used_percentage— 5時間ローリングウィンドウの使用率 (0-100)rate_limits.five_hour.resets_at— リセット時刻(Unix epoch)rate_limits.seven_day.used_percentage— 7日ウィンドウの使用率rate_limits.seven_day.resets_at— リセット時刻
cost(正確なコスト情報)
cost.total_cost_usd— セッションの実コスト(USD、キャッシュ割引反映済み)cost.total_duration_ms— セッション経過時間cost.total_api_duration_ms— API待ち時間cost.total_lines_added/total_lines_removed— 追加/削除行数
その他
workspace.project_dir/workspace.current_dirsession_id,transcript_path,versionoutput_style.nameworktree.*(worktree 使用時)
ステータスラインのアップデート
Before
Opus 4.6 ctx [#####---------------] 25% cost $0.5400
コストは input/output トークン数から Opus 4 の料金($15/M input, $75/M output)で自前計算していた。キャッシュ割引は考慮されず、概算値だった。レート制限情報は表示なし。
``` #!/usr/bin/env bash
input=$(cat)
| model=$(echo “$input” | jq -r ‘.model.display_name // “Unknown”’) |
| used_pct=$(echo “$input” | jq -r ‘.context_window.used_percentage // empty’) |
| total_input=$(echo “$input” | jq -r ‘.context_window.total_input_tokens // 0’) |
| total_output=$(echo “$input” | jq -r ‘.context_window.total_output_tokens // 0’) |
Build progress bar (20 chars wide)
if [-n “$used_pct”]; then filled=$(echo “$used_pct” | awk ‘{printf “%d”, ($1 * 20 / 100) + 0.5}’) empty=$((20 - filled)) bar=”” for i in $(seq 1 $filled); do bar=”${bar}#”; done for i in $(seq 1 $empty); do bar=”${bar}-“; done context_str=”[${bar}] ${used_pct}%” else context_str=”[——————–] –%” fi
Estimate cost using Claude Opus 4 pricing
cost=$(awk -v i=”$total_input” -v o=”$total_output” ‘BEGIN { cost = (i / 1000000 * 15) + (o / 1000000 * 75) printf “$%.4f”, cost }’)
printf “%s ctx %s cost %s” “$model” “$context_str” “$cost” ```
After
Opus 4.6 ctx [#####---------------] 25% cost $0.5400 5h: 12% 7d: 3%
変更点:
- コスト : トークンからの自前計算 →
cost.total_cost_usdに変更。キャッシュ割引も反映された正確な値になった - レート制限 :
rate_limitsから 5時間 / 7日の使用率を末尾に追加。Pro/Max 以外の環境ではフィールドが存在しないため自動的に非表示になる
``` #!/usr/bin/env bash
input=$(cat)
| model=$(echo “$input” | jq -r ‘.model.display_name // “Unknown”’) |
| used_pct=$(echo “$input” | jq -r ‘.context_window.used_percentage // empty’) |
| cost=$(echo “$input” | jq -r ‘.cost.total_cost_usd // 0’) |
Build progress bar (20 chars wide)
if [-n “$used_pct”]; then filled=$(echo “$used_pct” | awk ‘{printf “%d”, ($1 * 20 / 100) + 0.5}’) empty=$((20 - filled)) bar=”” for i in $(seq 1 $filled); do bar=”${bar}#”; done for i in $(seq 1 $empty); do bar=”${bar}-“; done context_str=”[${bar}] ${used_pct}%” else context_str=”[——————–] –%” fi
Format cost
cost_str=$(awk -v c=”$cost” ‘BEGIN { printf “$%.4f”, c }’)
Rate limits (claude.ai Pro/Max only)
rate_str=”” five_h=$(echo “$input” | jq -r ‘.rate_limits.five_hour.used_percentage // empty’) seven_d=$(echo “$input” | jq -r ‘.rate_limits.seven_day.used_percentage // empty’) if [-n “$five_h”] && [-n “$seven_d”]; then rate_str=$(printf “ 5h: %s%% 7d: %s%%” “$five_h” “$seven_d”) fi
printf “%s ctx %s cost %s%s” “$model” “$context_str” “$cost_str” “$rate_str” ```