本文へスキップ
claudemods

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
表示先
プロンプト上部

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. 1.Claude Code 内で1行

    /plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace

    実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。

  2. 2.シェルから

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-git-branch@claudemods

    その後、すでに開いているセッションでは /reload-plugins を実行してください。

  3. 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 で描画されています。

設定型デフォルト説明
intervalMsnumber15000Refresh interval (ms). How often to re-read git status between turns, in milliseconds (at least 2000).
showAheadBehindbooleantrueShow ahead/behind. Show commits ahead of and behind the upstream branch (↑1 ↓0).
hideWhenCleanbooleanfalseHide 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 をオンにしてください。作業ツリーがクリーンで、アップストリームと同期している間は帯が非表示になります。
Claude Code で動作中の コンテキストメーター

コンテキストメーター

コンテキストウィンドウの使用率、5 時間・7 日間のプラン使用量、セッションのコストをステータスラインに表示し、上限が近づくと警告します。

  • ステータス
  • トースト
  • UI を変更

v2.1.291 で検証済み

Claude Code で動作中の 危険なコマンドのブロック

危険なコマンドのブロック

rm -rf /、main への force-push、DROP TABLE、curl | sh などの破壊的な Bash コマンドを実行前に拒否します。

  • トースト
  • ツール呼び出しを傍受
  • UI を変更

v2.1.291 で検証済み

Claude Code で動作中の ツール呼び出しカウンター

ツール呼び出しカウンター

Claude のツール呼び出しをターンごと・セッションごとに数え、スピナーの横に件数を表示。/tally で内訳も確認できます。

  • スピナー
  • トランスクリプト
  • ステータス
  • ツール呼び出しを傍受
  • UI を変更
  • コマンド・ツールを追加

v2.1.291 で検証済み

同じカテゴリの Mod: Git と GitHub、ステータスラインとプロンプトバー。