メインコンテンツへスキップ
ステータスラインは Claude Code の下部にあるカスタマイズ可能なバーで、設定したシェルスクリプトを実行します。stdin 経由で JSON セッションデータを受け取り、スクリプトが出力したものを表示し、コンテキスト使用状況、コスト、git ステータス、またはその他の追跡したい情報を一目で確認できる永続的なビューを提供します。 ステータスラインは以下の場合に便利です:
  • 作業中にコンテキストウィンドウの使用状況を監視したい
  • セッションコストを追跡する必要がある
  • 複数のセッション間で作業し、それらを区別する必要がある
  • git ブランチとステータスを常に表示したい
ステータスラインは組み込みのフッターバッジの上にある独自の行にレンダリングされ、それらを置き換えません。会話内に ID が表示されたときにフッターにクリック可能なリンクバッジを追加する場合は、スクリプトを記述せずに footerLinksRegexes を設定してください。 以下は、最初の行に git 情報を表示し、2 番目の行にカラーコード化されたコンテキストバーを表示する 複数行ステータスライン の例です。
最初の行にモデル名、ディレクトリ、git ブランチを表示し、2 番目の行にコンテキスト使用状況プログレスバー、コスト、期間を表示する複数行ステータスライン
このページでは、基本的なステータスラインの設定 について説明し、Claude Code からスクリプトへの データフロー について説明し、表示できるすべてのフィールド をリストアップし、git ステータス、コスト追跡、プログレスバーなどの一般的なパターンの すぐに使える例 を提供します。

ステータスラインを設定する

/statusline コマンド を使用して Claude Code にスクリプトを生成させるか、手動でスクリプトを作成 して設定に追加します。

/statusline コマンドを使用する

/statusline コマンドは、表示したい内容を説明する自然言語の指示を受け入れます。Claude Code は ~/.claude/ にスクリプトファイルを生成し、設定を自動的に更新します:

ステータスラインを手動で設定する

ユーザー設定(~/.claude/settings.json~ はホームディレクトリ)または プロジェクト設定statusLine フィールドを追加します。type"command" に設定し、command をスクリプトパスまたはインラインシェルコマンドに指定します。スクリプト作成の完全なチュートリアルについては、ステータスラインをステップバイステップで構築する を参照してください。
command フィールドはシェルで実行されるため、スクリプトファイルの代わりにインラインコマンドを使用することもできます。この例では jq を使用して JSON 入力を解析し、モデル名とコンテキスト割合を表示します:
オプションの padding フィールドは、ステータスラインコンテンツに追加の水平スペース(文字単位)を追加します。デフォルトは 0 です。このパディングはインターフェイスの組み込みスペースに加えて追加されるため、ターミナルエッジからの絶対距離ではなく相対的なインデントを制御します。 オプションの refreshInterval フィールドは、イベント駆動更新 に加えて、N 秒ごとにコマンドを再実行します。最小値は 1 です。ステータスラインが時計などの時間ベースのデータを表示する場合、またはメインセッションがアイドル状態の間にバックグラウンドサブエージェントが git 状態を変更する場合に設定します。イベントのみで実行する場合は設定しないままにします。 オプションの hideVimModeIndicator フィールドは、プロンプトの下にある組み込みの -- INSERT -- テキストを非表示にします。スクリプトが vim.mode 自体をレンダリングする場合は、これを true に設定して、モードが 2 回表示されないようにします。

ステータスラインを無効にする

/statusline を実行し、ステータスラインを削除またはクリアするよう指示します(例:/statusline delete/statusline clear/statusline remove it)。settings.json から statusLine フィールドを手動で削除することもできます。

ステータスラインをステップバイステップで構築する

このチュートリアルでは、現在のモデル、作業ディレクトリ、コンテキストウィンドウ使用状況の割合を表示するステータスラインを手動で作成することで、内部で何が起こっているかを示します。
/statusline を実行して、表示したい内容を説明すると、これらすべてが自動的に設定されます。
これらの例では Bash スクリプトを使用しており、macOS と Linux で動作します。Windows では、Windows 設定 で PowerShell と Git Bash の例を参照してください。
モデル名、ディレクトリ、コンテキスト割合を表示するステータスライン
1

JSON を読み取り、出力を出力するスクリプトを作成する

Claude Code は stdin 経由でスクリプトに JSON データを送信します。このスクリプトは jq(コマンドラインの JSON パーサーで、インストールが必要な場合があります)を使用して、モデル名、ディレクトリ、コンテキスト割合を抽出し、フォーマットされた行を出力します。これを ~/.claude/statusline.sh に保存します(~ はホームディレクトリ、macOS では /Users/username、Linux では /home/username など):
2

実行可能にする

スクリプトを実行可能にマークして、シェルが実行できるようにします:
3

設定に追加する

Claude Code にスクリプトをステータスラインとして実行するよう指示します。この設定を ~/.claude/settings.json に追加します。これは type"command"(「このシェルコマンドを実行する」という意味)に設定し、command をスクリプトに指定します:
ステータスラインはインターフェイスの下部に表示されます。設定は自動的に再読み込みされますが、Claude Code との次の相互作用まで変更は表示されません。

ステータスラインの仕組み

Claude Code はスクリプトを実行し、stdin 経由で JSON セッションデータ をパイプします。スクリプトは JSON を読み取り、必要なものを抽出し、stdout にテキストを出力します。Claude Code はスクリプトが出力したものを表示します。 更新のタイミング スクリプトは新しいアシスタントメッセージの後、/compact が完了した後、パーミッションモードが変更されたとき、または vim モードが切り替わったときに実行されます。更新は 300ms でデバウンスされます。つまり、急速な変更がバッチ処理され、スクリプトは物事が落ち着いたら一度実行されます。スクリプトがまだ実行中に新しい更新がトリガーされた場合、実行中の実行はキャンセルされます。スクリプトを編集した場合、Claude Code との次の相互作用がトリガーされるまで変更は表示されません。 これらのトリガーは、メインセッションがアイドル状態の場合(例えば、コーディネーターがバックグラウンドサブエージェントを待機している場合)、静かになる可能性があります。アイドル期間中に時間ベースまたは外部ソースのセグメントを最新に保つには、refreshInterval を設定して、固定タイマーでもコマンドを再実行します。 スクリプトが出力できるもの
  • 複数行:各 echo または print ステートメントは別の行として表示されます。複数行の例 を参照してください。
  • \033[32m のような ANSI エスケープコード を使用して緑色を表示します(ターミナルがサポートしている必要があります)。git ステータスの例 を参照してください。
  • リンクOSC 8 エスケープシーケンス を使用してテキストをクリック可能にします(macOS では Cmd+クリック、Windows/Linux では Ctrl+クリック)。iTerm2、Kitty、WezTerm などのハイパーリンクをサポートするターミナルが必要です。クリック可能なリンクの例 を参照してください。
ターミナルに出力をサイズ調整する Claude Code はスクリプトの出力をキャプチャするため、ターミナルに直接接続しません。そのため、tput cols と言語レベルの幅検出はスクリプト内からターミナルサイズを読み取ることができません。COLUMNS および LINES 環境変数を代わりに読み取ってください。Claude Code はスクリプトを実行する前に、これらを現在のターミナルサイズに設定します。Claude Code v2.1.153 以降が必要です。
ステータスラインはローカルで実行され、API トークンを消費しません。オートコンプリート提案、ヘルプメニュー、パーミッションプロンプトなど、特定の UI 相互作用中は一時的に非表示になります。

利用可能なデータ

Claude Code は以下の JSON フィールドを stdin 経由でスクリプトに送信します:
ステータスラインコマンドは stdin 経由でこの JSON 構造を受け取ります:
不在の可能性があるフィールド(JSON に存在しない):
  • session_name--name または /rename でカスタム名が設定されている場合のみ表示
  • prompt_id:最初のユーザー入力の後のみ表示
  • workspace.git_worktree:現在のディレクトリがリンク git worktree 内にある場合のみ表示
  • workspace.repo:git リポジトリ内で origin リモートが設定されている場合のみ表示
  • effort:現在のモデルが推論努力パラメータをサポートしている場合のみ表示
  • vim:vim モードが有効な場合のみ表示
  • agent--agent フラグまたはエージェント設定が設定されている場合のみ表示
  • pr:現在のブランチのオープン PR が見つかった場合のみ表示。PR がマージまたはクローズされると削除されます。pr.review_state は独立して不在の可能性があります
  • worktree--worktree セッション中のみ表示。存在する場合、branchoriginal_branch もフックベースの worktree では不在の可能性があります
  • rate_limits:Claude.ai サブスクライバー(Pro/Max)がセッションの最初の API レスポンスの後のみ表示。各ウィンドウ(five_hourseven_day)は独立して不在の可能性があります。jq -r '.rate_limits.five_hour.used_percentage // empty' を使用して、不在を適切に処理します。
null の可能性があるフィールド
  • context_window.current_usage:セッションの最初の API 呼び出しの前は null。また /compact の直後は次の API 呼び出しが再度入力されるまで null
  • context_window.used_percentagecontext_window.remaining_percentage:セッションの早期段階では null の可能性があります
スクリプトで条件付きアクセスと null 値のフォールバックデフォルトを使用して、不在のフィールドを処理します。

コンテキストウィンドウフィールド

context_window オブジェクトは、最新の API レスポンスからのライブコンテキストウィンドウを説明します。v2.1.132 以降、total_input_tokenstotal_output_tokens は現在のコンテキスト使用状況を反映し、累積セッション合計ではありません。
  • 結合合計total_input_tokenstotal_output_tokens):コンテキストウィンドウに現在あるトークン。total_input_tokensinput_tokenscache_creation_input_tokens、および cache_read_input_tokens の合計です。total_output_tokens は最新レスポンスからの出力トークンです。両方とも最初の API レスポンスの前は 0 です。
  • コンポーネント別使用状況current_usage):カテゴリ別に分類された同じトークン数。キャッシュヒットを新規入力から分離する必要がある場合に使用します。
current_usage オブジェクトには以下が含まれます:
  • input_tokens:現在のコンテキストの入力トークン
  • output_tokens:生成された出力トークン
  • cache_creation_input_tokens:キャッシュに書き込まれたトークン
  • cache_read_input_tokens:キャッシュから読み取られたトークン
キャッシュフィールドの意味とそれらがどのように請求されるかについては、キャッシュパフォーマンスの確認 を参照してください。 used_percentage フィールドは入力トークンのみから計算されます:input_tokens + cache_creation_input_tokens + cache_read_input_tokensoutput_tokens は含まれません。 current_usage から手動でコンテキスト割合を計算する場合、used_percentage と一致させるために同じ入力のみの式を使用します。 current_usage オブジェクトはセッションの最初の API 呼び出しの前は null です。また /compact の直後は null であり、次の API 呼び出しが再度入力されるまで null のままです。

これらの例は一般的なステータスラインパターンを示しています。任意の例を使用するには:
  1. スクリプトを ~/.claude/statusline.sh(または .py/.js)などのファイルに保存します
  2. 実行可能にします:chmod +x ~/.claude/statusline.sh
  3. 設定 にパスを追加します
Bash の例は jq を使用して JSON を解析します。Python と Node.js には組み込みの JSON 解析があります。

コンテキストウィンドウの使用状況

現在のモデルとコンテキストウィンドウの使用状況を視覚的なプログレスバーで表示します。各スクリプトは stdin から JSON を読み取り、used_percentage フィールドを抽出し、塗りつぶされたブロック(▓)が使用状況を表す 10 文字のバーを構築します:
モデル名とパーセンテージ付きプログレスバーを表示するステータスライン

git ステータスと色

ステージングされたファイルと変更されたファイルのカラーコード化されたインジケーターを使用して git ブランチを表示します。このスクリプトはターミナルの色に ANSI エスケープコード を使用します:\033[32m は緑、\033[33m は黄、\033[0m はデフォルトにリセットします。
モデル、ディレクトリ、git ブランチ、ステージングされたファイルと変更されたファイルのカラーコード化されたインジケーターを表示するステータスライン
各スクリプトは現在のディレクトリが git リポジトリであるかどうかを確認し、ステージングされたファイルと変更されたファイルをカウントし、カラーコード化されたインジケーターを表示します:

コストと期間の追跡

セッションの API コストと経過時間を追跡します。cost.total_cost_usd フィールドは現在のセッションのすべての API 呼び出しの推定コストを累積します。cost.total_duration_ms フィールドはセッション開始からの総経過時間を測定し、cost.total_api_duration_ms は API レスポンスを待つのに費やされた時間のみを追跡します。 各スクリプトはコストを通貨としてフォーマットし、ミリ秒を分と秒に変換します:
モデル名、セッションコスト、期間を表示するステータスライン

複数行を表示する

スクリプトは複数の行を出力して、より豊かなディスプレイを作成できます。各 echo ステートメントはステータス領域に別の行を生成します。
最初の行にモデル名、ディレクトリ、git ブランチを表示し、2 番目の行にコンテキスト使用状況プログレスバー、コスト、期間を表示する複数行ステータスライン
この例は複数のテクニックを組み合わせています:閾値ベースの色(70% 未満は緑、70~89% は黄、90% 以上は赤)、プログレスバー、git ブランチ情報。各 print または echo ステートメントは別の行を作成します:
この例は GitHub リポジトリへのクリック可能なリンクを作成します。git リモート URL を読み取り、SSH 形式を sed で HTTPS に変換し、リポジトリ名を OSC 8 エスケープコードでラップします。Cmd(macOS)または Ctrl(Windows/Linux)を押しながらクリックして、ブラウザでリンクを開きます。
GitHub リポジトリへのクリック可能なリンクを表示するステータスライン
各スクリプトは git リモート URL を取得し、SSH 形式を HTTPS に変換し、リポジトリ名を OSC 8 エスケープコードでラップします。Bash バージョンは printf '%b' を使用します。これはバックスラッシュエスケープを異なるシェル間でより確実に解釈します:

レート制限の使用状況

Claude.ai サブスクリプションのレート制限使用状況をステータスラインに表示します。rate_limits オブジェクトには five_hour(5 時間のローリングウィンドウ)と seven_day(週間)ウィンドウが含まれます。各ウィンドウは used_percentage(0~100)とウィンドウがリセットされる Unix エポック秒の resets_at を提供します。 このフィールドは Claude.ai サブスクライバー(Pro/Max)がセッションの最初の API レスポンスの後のみ存在します。各スクリプトは不在のフィールドを適切に処理します:

高コストな操作をキャッシュする

ステータスラインスクリプトはアクティブなセッション中に頻繁に実行されます。git statusgit diff などのコマンドは、特に大規模なリポジトリでは遅い場合があります。この例は git 情報を一時ファイルにキャッシュし、5 秒ごとにのみ更新します。 キャッシュファイル名は、セッション内のステータスラインの呼び出し間で安定している必要がありますが、異なるリポジトリの同時セッションが互いのキャッシュされた git 状態を読み取らないように、セッション間で一意である必要があります。$$os.getpid()process.pid のようなプロセスベースの識別子は、呼び出しのたびに変わり、キャッシュを無効にします。代わりに JSON 入力から session_id を使用します:これはセッションの有効期間中は安定しており、セッションごとに一意です。 各スクリプトは git コマンドを実行する前に、キャッシュファイルが不在であるか 5 秒より古いかを確認します:

Windows 設定

Windows では、Claude Code はステータスラインコマンドを Git Bash 経由で実行します。Git Bash がインストールされている場合、または Git Bash がない場合は PowerShell を通じて実行します。PowerShell スクリプトをステータスラインとして実行するには、powershell 経由で呼び出します。これはどちらのシェルからでも機能します:
または、Git Bash がインストールされている場合は、Bash スクリプトを直接実行します:

サブエージェントステータスライン

subagentStatusLine 設定は、エージェントパネルに表示される各 サブエージェント のカスタム行本体をレンダリングします。デフォルトの name · description · token count 行を独自のフォーマットに置き換えるために使用します。
コマンドは、すべての表示されているサブエージェント行が stdin で単一の JSON オブジェクトとして渡される各リフレッシュティックで実行されます。入力には 基本フックフィールド、使用可能な行幅を示す columns フィールド、および tasks 配列が含まれます。各タスクには idnametypestatusdescriptionlabelstartTimemodelcontextWindowSizetokenCounttokenSamplescwd があります。 タスクごとの model フィールドは、タスクが実行される解決済みモデル ID です。contextWindowSize はそのモデルのコンテキストウィンドウ(トークン単位)で、メインステータスラインの context_window.context_window_size と同じ方法で計算されるため、tokenCount から行ごとのパーセンテージをレンダリングできます。両方のフィールドには Claude Code v2.1.205 以降が必要で、モデルがまだ解決されていないタスクでは省略されます。 オーバーライドしたい各行に対して stdout に 1 つの JSON 行を書き込みます。形式は {"id": "<task id>", "content": "<row body>"} です。content 文字列はそのままレンダリングされます。ANSI 色と OSC 8 ハイパーリンクを含みます。タスクの id を省略して、その行のデフォルトレンダリングを保持します。空の content 文字列を出力して、その行を非表示にします。 statusLine に適用される同じトラストと disableAllHooks ゲートが subagentStatusLine に適用されます。プラグインは、settings.json でデフォルトの subagentStatusLine を配布できます。

ヒント

  • モック入力でテストするecho '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh
  • 出力を短く保つ:ステータスバーの幅は限られているため、長い出力は切り詰められたり、不適切にラップされたりする可能性があります
  • 遅い操作をキャッシュする:スクリプトはアクティブなセッション中に頻繁に実行されるため、git status などのコマンドは遅延を引き起こす可能性があります。これを処理する方法については、キャッシング例 を参照してください。
ccstatuslinestarship-claude などのコミュニティプロジェクトは、テーマと追加機能を備えた事前構築設定を提供します。

トラブルシューティング

ステータスラインが表示されない
  • スクリプトが実行可能であることを確認します:chmod +x ~/.claude/statusline.sh
  • スクリプトが stdout に出力し、stderr に出力していないことを確認します
  • スクリプトを手動で実行して、出力を生成することを確認します
  • Windows で Git Bash がインストールされている場合、command パスのバックスラッシュはスクリプトが実行される前にエスケープ文字として消費される可能性があります。パスでは前方スラッシュを使用してください。Windows 設定を参照してください。
  • disableAllHooks が設定で true に設定されている場合、ステータスラインも無効になります。この設定を削除するか、false に設定して再度有効にします。
  • claude --debug を実行して、セッションの最初のステータスラインの呼び出しからの終了コードと stderr をログに記録します
  • Claude にスクリプトファイルを読み取り、statusLine コマンドを直接実行するよう依頼して、エラーを表示します
ステータスラインが -- または空の値を表示する
  • フィールドは最初の API レスポンスが完了する前は null の可能性があります
  • スクリプトで // 0 のようなフォールバックを使用して null 値を処理します
  • 複数のメッセージの後も値が空のままの場合は、Claude Code を再起動します
コンテキスト割合が予期しない値を表示する
  • 最も単純で正確なコンテキスト状態には used_percentage を使用します
  • コンテキスト割合は /context 出力と異なる場合があります。これは各が計算されるタイミングが異なるためです
OSC 8 リンクがクリック可能でない
  • ターミナルが OSC 8 ハイパーリンクをサポートしていることを確認します(iTerm2、Kitty、WezTerm)
  • Terminal.app はクリック可能なリンクをサポートしていません
  • リンクテキストが表示されているがクリック可能でない場合、Claude Code がターミナルのハイパーリンクサポートを検出できていない可能性があります。これは Windows Terminal および自動検出リストに含まれていない他のエミュレーターに一般的に影響します。Claude Code を起動する前に FORCE_HYPERLINK 環境変数を設定して、検出をオーバーライドします:
    PowerShell では、最初に現在のセッションで変数を設定します:
  • SSH と tmux セッションは設定に応じて OSC シーケンスをストリップする可能性があります
  • エスケープシーケンスが \e]8;; のようなリテラルテキストとして表示される場合は、echo -e の代わりに printf '%b' を使用して、より確実なエスケープ処理を行います
エスケープシーケンスでの表示の不具合
  • 複雑なエスケープシーケンス(ANSI 色、OSC 8 リンク)は、他の UI 更新と重複する場合、時々破損した出力を引き起こす可能性があります
  • 破損したテキストが表示される場合は、スクリプトをプレーンテキスト出力に簡略化してみてください
  • エスケープコード付きの複数行ステータスラインは、プレーンテキストの単一行よりもレンダリングの問題が発生しやすくなります
ワークスペーストラストが必要
  • ステータスラインコマンドは、現在のディレクトリのワークスペーストラストダイアログを受け入れた場合のみ実行されます。statusLine はシェルコマンドを実行するため、フックおよび他のシェル実行設定と同じトラストの受け入れが必要です。
  • トラストが受け入れられていない場合、ステータスラインの出力の代わりに statusline skipped · restart to fix という通知が表示されます。Claude Code を再起動し、トラストプロンプトを受け入れて有効にします。
スクリプトエラーまたはハング
  • ゼロ以外のコードで終了するか、出力を生成しないスクリプトは、ステータスラインを空白にします
  • 遅いスクリプトは、完了するまでステータスラインの更新をブロックします。古い出力を避けるために、スクリプトを高速に保ちます。
  • 遅いスクリプトの実行中に新しい更新がトリガーされた場合、実行中のスクリプトはキャンセルされます
  • 設定する前に、モック入力を使用してスクリプトを独立してテストします
通知がステータスラインの行を共有する
  • MCP サーバーエラーおよび自動更新などのシステム通知は、ステータスラインと同じ行の右側に表示されます。コンテキスト低警告などの一時的な通知もこの領域を循環します。
  • 詳細モードを有効にすると、この領域にトークンカウンターが追加されます
  • 狭いターミナルでは、これらの通知がステータスラインの出力を切り詰める可能性があります