Claude Code の Git ブランチ表示:ブランチと変更をプロンプトの上に
Git のブランチ、変更ファイル数、ahead/behind の状態を Claude Code のプロンプトの上に 1 行で表示します。
権限
- コマンドを実行お使いのマシン上でシェルのプログラムを実行できます($.process.run / spawn)。具体的に何を実行するかはソースで確認してください。
- ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
- 検証バージョン
- v2.1.291
- 最終検証日
- 必要バージョン
- Claude Code ≥ 2.1.287
- 表示先
- プロンプト上部
- ソース
- ClaudeMods (MIT)
Claude Code 内でインストール:
/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplaceこのModでできること
Claude Code の Git ブランチ表示 Mod は、入力欄の上に 1 行を追加し、Git 上のどこにいるのかを教えてくれます。表示はたとえば ⎇ main · 3 changed · ↑1 ↓0 のようになります。ブランチ名、git status が変更ありと報告したパスの数、そしてブランチがアップストリームよりどれだけ先行・遅行しているかがわかります。HEAD が detached の場合は、代わりに短いコミットハッシュを表示します。Git リポジトリの外では、この行は表示されません。
特に役立つのは、Claude があなたの代わりに編集しているときです。セッションがフィーチャーブランチではなく main で始まってしまった場合もすぐに気づけますし、Claude が編集するにつれて変更数が増えていくので、レビューとコミットのタイミングがわかります。Claude Code 2.1.287 以降が必要です。
デモ
録画では、小さなデモ用プロジェクトでこの Mod を読み込んだ状態の Claude Code を起動しています。最初のプロンプトを入力する前から、入力欄の上の帯にはブランチと変更ファイル数が表示されています。続いて Claude に src 内のファイル一覧を頼むと、ターンの実行中も帯はその場に残り、ターンが完了すると更新されます。
インストール
インストールブロックにある 3 つの方法のどれでもかまいません。1 行で済む方法は実行中のセッション内で使えます。シェルからの方法では、すでに開いているセッションで /reload-plugins を実行する必要があります。
$ install cm-git-branch
Claude Code 2.1.287 以上が必要
1.Claude Code 内で1行
/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。
2.シェルから
claude plugin marketplace add rotbit/claudemods-marketplace claude plugin install cm-git-branch@claudemodsその後、すでに開いているセッションでは /reload-plugins を実行してください。
3.インストールせずに試す
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-git-branchその1セッションだけ Mod を読み込みます。設定には何も追加されません。
仕組み
この Mod は最新の Git の状態を $.state のアトムに保持し、AbovePrompt の描画箇所に表示します。hooks/register.tsx のフックは次のとおりです。
on('session.start', async ($, e, next) => {
const started = await next(e)
await refresh($)
$.clock.every(intervalMs, () => {
refresh($).catch(() => undefined)
})
return started
})
on('turn.complete', async ($, e, next) => {
const result = await next(e)
if (e.agentId === undefined) await refresh($)
return result
})
on('tool.call', { tool: 'Bash' }, async ($, e, next) => {
const ran = await next(e)
if (mentionsGit(e.command)) await refresh($)
return ran
}).catch(($, e, next) => next(e))更新のタイミングは 3 つあります。session.start は最初の読み取りを行い、Claude Code の外で行われた変更を拾うためのタイマーを開始します。turn.complete はメインループの各ターンの後に更新します。サブエージェントのターン(agentId を持つもの)はスキップされます。Bash 向けの tool.call フックは、まず await next(e) でコマンドを実行させ、そのコマンドが git や gh pr checkout/merge に触れている場合にだけ更新します。その .catch は呼び出しをそのまま通すので、Mod 側で失敗が起きてもコマンドがブロックされることはありません。
refresh は $.session.cwd() で git status --porcelain=v1 -b を 1 回だけ実行します。この 1 つのコマンドでブランチ、アップストリーム、ahead/behind、変更一覧がすべて得られるので、rev-parse や rev-list を別に呼び出す必要はありません。hooks/git.ts の純粋関数 parseStatus は、コミットがまだない新しいリポジトリや detached HEAD にも対応しています。Git が見つからない、または応答が遅い場合は、古いデータを表示するのではなく帯を非表示にします。
カスタマイズ
以下のオプションは、/config の Mod 名の下で変更できます。変更すると Mod は新しい値で再読み込みされます。タイマーのデフォルト値は register の先頭にある Math.max(2_000, ... 15_000) で設定されており、これが 2 秒の下限も保証しています。帯の見た目を変えたい場合は、ui.render フック内の Text 要素を編集してください。ブランチ名は cyan の bold で、詳細は dimColor で描画されています。
| 設定 | 型 | デフォルト | 説明 |
|---|---|---|---|
| intervalMs | number | 15000 | Refresh interval (ms). How often to re-read git status between turns, in milliseconds (at least 2000). |
| showAheadBehind | boolean | true | Show ahead/behind. Show commits ahead of and behind the upstream branch (↑1 ↓0). |
| hideWhenClean | boolean | false | Hide when clean. Hide the band while the work tree is clean and in sync with its upstream. |
Claude Code の /config で変更できます。Mod はホットリロードされます。
権限と安全性
コマンドを実行 が表示されるのは、この Mod が $.process.run を呼び出すためです。実行するプログラムは厳密に 2 つだけです。git status --porcelain=v1 -b と、HEAD が detached のときに限った git rev-parse --short HEAD です。どちらも読み取り専用で、シェルを介さない argv 配列で実行され、10 秒のタイムアウトが設定されています。
ツール呼び出しを傍受 が表示されるのは、Bash の tool.call にフックしているためです。ただし観察するだけで、コマンドを変更したり拒否したりすることはなく、更新はコマンドの完了後に行います。UI を変更 は帯の表示のためのものです。
ファイルの中身を読むこと、ネットワークを使うこと、モデルを呼び出すことはありません。完全にオフにするには /plugin disable cm-git-branch を実行します。1 回のセッションだけすべての Mod をオフにして始めるには claude --safe-mode を使います。
- コマンドを実行
- お使いのマシン上でシェルのプログラムを実行できます($.process.run / spawn)。具体的に何を実行するかはソースで確認してください。
- ツール呼び出しを傍受
- Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更
- Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
互換性とトラブルシューティング
macOS のターミナル上で Claude Code 2.1.291 にてテスト済みです。帯が表示されない場合は、次の順に確認してください。
claude --versionが 2.1.287 以降であること。- セッションが Git リポジトリ内で開始されていること。同じフォルダーで
git statusが動作するはずです。 - Mod が有効になっていること。
/pluginメニューの Installed タブに表示され、「mod active」の行があるはずです。 - シェルから開いているセッションにインストールした場合は、
/reload-pluginsを実行すること。 - 入力欄の上でアンケートや別のプロンプトが開いていないこと。それらが表示されている間、帯は場所を譲り、閉じた後に戻ってきます。
非常に大きなリポジトリでは、git status の実行回数を減らすために intervalMs を大きくしてください。
よくある質問
- Claude Code の Git ブランチ表示 Mod はリポジトリを変更しますか?
- いいえ。実行するのは git status --porcelain=v1 -b だけで、HEAD が detached のときに限り git rev-parse --short HEAD も実行します。どちらも読み取り専用で、シェルを介さずに実行され、10 秒でタイムアウトします。
- 帯が表示されないのはなぜですか?
- よくある原因は、セッションのフォルダーが Git リポジトリではない、Claude Code が 2.1.287 より古い、/plugin で Mod が無効になっている、あるいはアンケートがプロンプトの上のスペースを使っている、のいずれかです。シェルからインストールした後は /reload-plugins を実行してください。
- 別のターミナルで行ったチェックアウトにも気づきますか?
- はい。更新間隔(デフォルトは 15 秒)以内に反映されます。もっと早く反映させたい場合は、/config で intervalMs を小さくしてください。最小値は 2 秒です。
- デスクトップアプリでも動作しますか?
- はい。AbovePrompt の帯は、ターミナルでもデスクトップアプリの Code タブでも描画されます。claude -p や VS Code 拡張機能のチャットパネルでは Mod は動作しますが何も描画しないため、帯はそこには表示されません。
- 報告することがないときは帯を隠せますか?
- hideWhenClean をオンにしてください。作業ツリーがクリーンで、アップストリームと同期している間は帯が非表示になります。
# 関連する Mod

コンテキストメーター
コンテキストウィンドウの使用率、5 時間・7 日間のプラン使用量、セッションのコストをステータスラインに表示し、上限が近づくと警告します。
- ステータス
- トースト
- UI を変更
v2.1.291 で検証済み

危険なコマンドのブロック
rm -rf /、main への force-push、DROP TABLE、curl | sh などの破壊的な Bash コマンドを実行前に拒否します。
- トースト
- ツール呼び出しを傍受
- UI を変更
v2.1.291 で検証済み

ツール呼び出しカウンター
Claude のツール呼び出しをターンごと・セッションごとに数え、スピナーの横に件数を表示。/tally で内訳も確認できます。
- スピナー
- トランスクリプト
- ステータス
- ツール呼び出しを傍受
- UI を変更
- コマンド・ツールを追加
v2.1.291 で検証済み
同じカテゴリの Mod: Git と GitHub、ステータスラインとプロンプトバー。