GitHub Copilot CLI が GA しましたね! Claude Code と GitHub Copilot CLI の両刀使いユーザとしては、両者が切磋琢磨して機能追加してくれるのは嬉しい限りです。

そんな Claude Code と GitHub Copilot CLI の機能差としてのステータスラインの話です。

Claude Code ではステータスラインをカスタムできるので、モデル名や 5 時間セッションの使用率とかを表示してます。 Claude Pro なのでセッション上限を常に気にしながら Claude Code に作業をお願いしています。 早く富豪コーディングしたい。

一方、GitHub Copilot CLI のデフォルトはこんな表示です。 カレントディレクトリとブランチ名とモデル名、そして残り Premium requests の割合が表示されます。

GitHub Copilot CLI でも同じようにステータスラインをカスタムしたいんですが、GA した v0.0.418 でも正式にはできません。

「正式にはできない」ですが、Experimental な機能としてステータスラインのカスタマイズが提供されています。 GitHub Copilot CLI で /experimental コマンドを使って Experimental モードを有効にすれば、ステータスラインのカスタムができるようになります。

まずは /experimental show コマンドで Experimental モードで使える機能一覧を確認。

❯ /experimental show
● 🧪 Experimental Features

  The following experimental features can be enabled with `/experimental on`:

  Feature Flags:
    PERSISTED_PERMISSIONS        - Enable persisted tool permissions across sessions on a per-location basis
    SESSION_CLEANUP              - Enable /session cleanup and /session prune commands for managing session
  storage
    SUBAGENT_COMPACTION          - Enable compaction instead of truncation for subagents
    SESSION_STORE                - Enable SQLite-based session store for cross-session history, file
  tracking, and search
    STATUS_LINE                  - Enable custom status line functionality that executes user-defined scripts
    SHOW_FILE                    - Enable a tool which allows the agent to show you code snippets within the
  timeline

  ⚠️  These features are not stable, may have bugs, and may be removed in the future.

  Usage: /experimental show  - Show this help
         /experimental on    - Enable experimental mode
         /experimental off   - Disable experimental mode

色々 Experimental な機能がありますが、ステータスラインのカスタムは STATUS_LINE というフラグで提供されています。

/experimental on コマンドで Experimental モードを有効にすると、ステータスラインのカスタムができるようになります。

❯ /experimental on
● Experimental mode is enabled. These features are not stable, may have bugs, and may be removed in the
  future. Please restart the CLI for changes to take effect.

/experimental on コマンドを打って GitHub Copilot CLI を再起動すると Experimental モードが有効になりますが、これだけだとステータスラインは変わらないので、ステータスラインの設定をします。

必要なのは ~/.copilot/config.json の修正と、ステータスラインに表示する内容を出力するスクリプトの作成です。

~/.copilot/config.json は次のように status_line という項目を追加します。

{
  "status_line": {
    "type": "command",
    "command": "/Users/nnstt1/.copilot/status-line.sh"
  }
}

スクリプトの指定はフルパスじゃないと動きませんでした。 このスクリプトは stdin から statusObject という JSON を受け取るので、この JSON をいい感じに使ってステータスラインに表示したい内容を出力するようにします。

というのを GitHub Copilot CLI に調べてもらいました。 まだ Experimental でドキュメントはないので手探りです、Copilot が。

以下は 🌿 main ☁️ azure-sub ⚡ 4 req 📝 +6/-7 のようなステータスラインを表示するサンプルスクリプトです。 表示しているのは Git ブランチ、Azure サブスクリプション、Premium requests 消費数、コード変更行数です。

#!/bin/bash

STATUS_JSON=$(cat)

# Git ブランチ
GIT_BRANCH=$(git branch --show-current 2>/dev/null)

# Azure サブスクリプション
AZ_SUB=$(az account show --query "name" -o tsv 2>/dev/null)

# Premium requests消費数
PREMIUM_REQS=$(echo "$STATUS_JSON" | jq -r '.cost.total_premium_requests // empty' 2>/dev/null)

# コード変更行数
LINES_ADDED=$(echo "$STATUS_JSON" | jq -r '.cost.total_lines_added // empty' 2>/dev/null)
LINES_REMOVED=$(echo "$STATUS_JSON" | jq -r '.cost.total_lines_removed // empty' 2>/dev/null)

# 表示内容の組み立て
PARTS=()
[ -n "$GIT_BRANCH" ] && PARTS+=("🌿 $GIT_BRANCH")
[ -n "$AZ_SUB" ] && PARTS+=("☁️ $AZ_SUB")
PARTS+=("⚡ ${PREMIUM_REQS:-0} req")
PARTS+=("📝 +${LINES_ADDED:-0}/-${LINES_REMOVED:-0}")

# スペース区切りで出力
echo "${PARTS[*]}"

ちなみに stdin から受け取る statusObject は次のような JSON 形式です。 この JSON から GitHub Copilot CLI のステータスを表示してもいいし、Azure サブスクリプションみたいな他の情報を表示してもいいです。

{
  "cwd": "/path/to/project",
  "session_id": "uuid",
  "transcript_path": "/path/to/session",
  "model": {
    "id": "claude-sonnet-4.6",
    "display_name": "claude-sonnet-4.6 (medium) (1x)"
  },
  "workspace": {
    "current_dir": "/path/to/project"
  },
  "version": "0.0.418",
  "cost": {
    "total_api_duration_ms": 425149,
    "total_lines_added": 6,
    "total_lines_removed": 7,
    "total_duration_ms": 4126505,
    "total_premium_requests": 4
  },
  "context_window": {
    "total_input_tokens": 6295154,
    "total_output_tokens": 15584,
    "total_cache_read_tokens": 5953752,
    "total_cache_write_tokens": 0,
    "total_tokens": 6310738,
    "context_window_size": 200000,
    "used_percentage": 100,
    "remaining_percentage": 0,
    "remaining_tokens": 0,
    "current_usage": {
      "input_tokens": 6295154,
      "output_tokens": 15584,
      "cache_creation_input_tokens": 0,
      "cache_read_input_tokens": 5953752
    }
  }
}

設定ファイルとスクリプトの準備ができたら GitHub Copilot CLI を起動します。

こんな風にデフォルトの表示の下にカスタマイズしたステータスラインが表示されます。

デフォルトでモデル名やブランチ名も表示されているので、あえてステータスラインに同じ内容を表示する必要はないかもです。

ステータスラインが使える場面は「Copilot が承認待ちになっている状態」かな。 承認待ちのときにはデフォルトの表示が消えてしまうんですが、ステータスラインは残るので承認待ちのときに確認するためにモデル名やブランチ名を表示するのはアリかもしれません。

というわけで、まだ Experimental な機能ですが、GitHub Copilot CLI でもステータスラインをカスタムできるようになっています。 Experimental モードを有効にすると若干不安定な気もするので、使うなら自己責任で。