Featured image of post Claude Codeのステータスラインをカスタマイズして使用量クォータを常に表示する

Claude Codeのステータスラインをカスタマイズして使用量クォータを常に表示する

Claude Codeのステータスラインをrobbyrussellテーマ風にカスタマイズし、5時間/7日間の使用量クォータをリアルタイム表示する方法

Claude Codeの入力欄の下にはステータスラインが表示されるが、デフォルトではモデル名とコンテキスト使用量くらいしか表示されない。

Maxプランで使っていると「今どれくらいクォータを消費しているか」が気になるが、毎回Webで確認するのは面倒だ。そこで、ステータスラインをカスタマイズして使用量クォータを常に表示するようにした。

完成形

最終的にこのような表示になる。

カスタマイズ後のステータスライン

左から順に:

  • プロジェクト名(シアン)— ワークツリー使用時も元のリポジトリ名を表示
  • Gitブランチ(赤)+ dirty flag — 長いブランチ名は自動省略
  • モデル名(薄字)
  • コンテキスト使用率 — 色分け表示
  • セッションコスト
  • 5時間/7日間クォータ — 使用率と残り時間のカウントダウン

クォータの色はしきい値で変化する。50%未満は緑、50〜79%は黄色、80%以上は赤。

セットアップ

前提条件

  • jq(JSONパーサー)
  • curl(API呼び出し用)
  • git

1. スクリプトの配置

以下のスクリプトを ~/.claude/statusline-command.sh に保存する。curlで直接ダウンロードできる。

1
2
3
curl -o ~/.claude/statusline-command.sh \
  https://gist.githubusercontent.com/sudolifeagain/605b2fdf22b12b87cf0dc485e2992de2/raw/statusline-command.sh
chmod +x ~/.claude/statusline-command.sh

2. settings.jsonに登録

~/.claude/settings.json に以下を追加する。

1
2
3
4
5
6
{
  "statusLine": {
    "type": "command",
    "command": "bash ~/.claude/statusline-command.sh"
  }
}

これだけで次回のClaude Code起動時からステータスラインが変わる。

仕組み

ステータスラインの入力

Claude Codeはステータスラインスクリプトを実行する際、stdinにJSON形式でセッション情報を渡してくる。

1
2
3
4
5
6
{
  "model": { "display_name": "Claude Opus 4.6" },
  "workspace": { "current_dir": "/home/user/project" },
  "context_window": { "used_percentage": 12.5 },
  "cost": { "total_cost_usd": 0.45, "total_duration_ms": 120000 }
}

スクリプトは jq でこのJSONをパースし、必要な情報を取り出している。

クォータの取得

5時間/7日間の使用量クォータはClaude Codeの入力JSONには含まれていないため、Anthropic APIから直接取得している。

1
2
curl -s -H @"$auth_file" \
  "https://api.anthropic.com/api/oauth/usage"

OAuthトークンは ~/.claude/.credentials.json から読み取る。トークンは一時ファイル経由で渡すことで ps aux への露出を防いでいる。APIレスポンスは ~/.cache/claude-statusline/ に5分間キャッシュし、APIコール失敗時は10分間のバックオフを入れている。複数のClaude Codeインスタンスが同時にキャッシュを更新しないよう、mkdir によるアトミックロックで排他制御もしている。

ワークツリー対応

claude -w でワークツリーモードを使うと、カレントディレクトリがワークツリーのパスになる。そのままだとプロジェクト名の代わりにワークツリー名(ランダム文字列)が表示されてしまう。

1
2
# ワークツリーのメインリポジトリパスを取得
main_wt=$(git -C "$cwd" worktree list --porcelain | head -1 | sed 's/^worktree //')

git worktree list --porcelain の1行目がメインワークツリー(元のリポジトリ)のパスを返すので、そこからプロジェクト名を取得している。

ブランチ名の省略

ワークツリーのブランチ名はランダムに生成されて長くなりがちなので、自動省略する機能を入れた。

元のブランチ名 省略後
worktree-delightful-brewing-wreath wt:delightful-brewing-w…
feature/add-user-auth f/add-user-auth
fix/null-pointer-crash x/null-pointer-crash

25文字を超える場合は末尾を で切り詰める。

クロスプラットフォーム対応

Linux、macOS、Windows(Git Bash)で動作するよう、プラットフォーム依存の箇所にフォールバックを入れている。

1
2
3
4
5
6
7
8
# ファイルのmtime取得: GNU stat → BSD stat
_file_mtime() {
  stat -c %Y "$1" 2>/dev/null || stat -f %m "$1" 2>/dev/null || echo 0
}

# ISO 8601パース: GNU date → BSD date
local reset_epoch=$(date -d "$clean" +%s 2>/dev/null || \
  date -j -f "%Y-%m-%dT%H:%M:%S%z" "$clean" +%s 2>/dev/null)

リポジトリ

スクリプト本体に加えて、カスタムスキル(/review-pr/copilot-review)やインストールスクリプトも含めたリポジトリを公開している。

発言は個人の見解であり、所属組織とは関係ありません。
Hugo で構築されています。
テーマ StackJimmy によって設計されています。