何のためのものか
画面下部のカスタマイズ可能なバー。設定したシェルスクリプトを実行し、stdin で JSON のセッションデータを受け取り、その出力を表示する。
コマンドを打たないと分からない情報(モデル、作業ディレクトリ、コンテキスト使用率、推定コスト)を、常に目に入る場所へ出すための仕組みである。
触る
/statuslineに自然言語で指示する。~/.claude/にスクリプトが生成され、設定が自動更新される- 消すときは
/statuslineに削除を依頼する(/statusline deleteなど)か、settings からstatusLineフィールドを消す
手で書くなら ~/.claude/settings.json に statusLine を足し、type を "command"、command にスクリプトパスかインラインのシェルコマンドを書く。
ステータスラインはローカルで動き、API トークンを消費しない。
入れる
出す情報を選ぶ。stdin の JSON から取れる主なものは次のあたり。
| 欲しいもの | フィールド |
|---|---|
| モデル | model.display_name |
| 今どこにいるか | workspace.current_dir、workspace.project_dir、workspace.git_worktree |
| リポジトリ | workspace.repo.owner、workspace.repo.name |
| コンテキスト残量 | context_window.used_percentage、context_window.remaining_percentage |
| コスト | cost.total_cost_usd(クライアント側の推定値) |
- 複数行出したいなら
echoを複数回。色は ANSI escape code、リンクは OSC 8 - 詰まって見えるなら
paddingを足す - vim mode を自分で描くなら
hideVimModeIndicatorをtrueにする
効かせる
再実行のタイミングを知る。ここを誤解すると「更新されない」と感じる。
スクリプトはセッション開始時(resume を含む)に 1 回、そのあとは新しいアシスタントメッセージ・/compact の完了・permission mode の変更・vim mode の切り替えで再実行される。時間で更新したいなら refreshInterval(最小 1 秒)を足す。
- 更新は 300ms でデバウンスされる。実行中に次のトリガーが来ると実行中のスクリプトはキャンセルされるので、重い処理は置かない
- スクリプトの編集は、次の更新トリガーで再実行されたときに反映される
- ターミナル幅は
tput colsでは取れない。COLUMNSとLINES環境変数を読む
落とし穴
- カスタムステータスラインを設定すると、フッターのキーボードヒントの多くが表示されなくなる(
esc to interrupt、? for shortcutsなど) - ステータスラインはフッターを置き換えず、その上に独自の行として描かれる
- オートコンプリート候補、ヘルプメニュー、permission prompt など一部の UI 操作中は一時的に隠れる
exceeds_200k_tokensは実際のコンテキストウィンドウサイズに関わらず固定の 200k 閾値。1M コンテキストでも 200k を超えれば true になる