Zum Inhalt springen
claudemods

Claude Code Git-Branch-Mod: Branch und Änderungen über dem Prompt

Zeigt Git-Branch, geänderte Dateien und Ahead/Behind-Status in einer Zeile über dem Prompt von Claude Code.

Berechtigungen

  • Führt Befehle ausKann Shell-Programme auf deinem Rechner ausführen ($.process.run / spawn). Im Quellcode siehst du, welche genau.
  • Fängt Tool-Aufrufe abSieht jeden Tool-Aufruf von Claude (tool.call / tool.check) und könnte ihn blockieren oder verändern.
  • Verändert die OberflächeZeichnet in die Oberfläche von Claude Code: Leisten, Bereiche, Statustext, Toasts (ui.render / $.ui.*).
getestet mit
v2.1.291
zuletzt getestet
erfordert
Claude Code ≥ 2.1.287
Oberflächen
über dem Prompt

In Claude Code installieren:

/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace
Alle Installationswege ↓

Was macht diese Mod?

Die Claude Code Git-Branch-Mod setzt eine Zeile über das Eingabefeld, die dir zeigt, wo du in Git gerade stehst: ⎇ main · 3 changed · ↑1 ↓0. Du siehst den Namen des Branches, wie viele Pfade git status als geändert meldet und wie weit der Branch seinem Upstream voraus ist oder hinterherhinkt. Ist HEAD losgelöst (detached), zeigt sie stattdessen den kurzen Commit-Hash. Außerhalb eines Git-Repositorys erscheint die Zeile einfach nicht.

Am meisten hilft sie, wenn Claude in deinem Auftrag Dateien bearbeitet. Du merkst sofort, wenn eine Sitzung auf main statt auf einem Feature-Branch gestartet ist, und die Zahl der Änderungen steigt mit jeder Bearbeitung durch Claude – so weißt du, wann es Zeit zum Prüfen und Committen ist. Benötigt Claude Code 2.1.287 oder neuer.

Demo

Die Aufnahme startet Claude Code mit geladener Mod in einem kleinen Demo-Projekt. Schon vor dem ersten Prompt zeigt die Leiste über der Eingabe den Branch und die Zahl der geänderten Dateien. Dann wird Claude gebeten, die Dateien in src aufzulisten; die Leiste bleibt stehen, während der Turn läuft, und wird aktualisiert, sobald der Turn abgeschlossen ist.

Installation

Nutze eine der drei Methoden im Installationsblock. Die Einzeiler-Methode funktioniert innerhalb einer laufenden Sitzung; die Shell-Methode braucht in bereits offenen Sitzungen /reload-plugins.

$ install cm-git-branch

Erfordert Claude Code ≥ 2.1.287

  1. 1.Eine Zeile, direkt in Claude Code

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

    In eine laufende Sitzung einfügen (v2.1.275+). Claude Code fragt zuerst, ob der Marketplace hinzugefügt werden soll.

  2. 2.Aus deiner Shell

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

    Führe danach in jeder bereits geöffneten Sitzung /reload-plugins aus.

  3. 3.Ohne Installation ausprobieren

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-git-branch

    Lädt die Mod nur für eine Sitzung. An deinen Einstellungen wird nichts geändert.

So funktioniert es

Die Mod hält den jeweils neuesten Git-Status in einem $.state-Atom und zeichnet ihn an der Render-Stelle AbovePrompt. Hier die Hooks aus 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))

Es gibt drei Aktualisierungspunkte. session.start nimmt die erste Messung vor und startet einen Timer für Änderungen, die außerhalb von Claude Code passieren. turn.complete aktualisiert nach jedem Turn der Hauptschleife; Subagent-Turns (mit einer agentId) werden übersprungen. Der tool.call-Hook für Bash lässt den Befehl mit await next(e) zuerst laufen und aktualisiert danach nur, wenn der Befehl git oder gh pr checkout/merge erwähnt. Sein .catch reicht den Aufruf durch, sodass ein Fehler in der Mod deinen Befehl nie blockiert.

refresh führt ein einziges git status --porcelain=v1 -b in $.session.cwd() aus. Dieser eine Befehl liefert Branch, Upstream, Ahead/Behind und die Liste der Änderungen, separate Aufrufe von rev-parse und rev-list sind also nicht nötig. Eine reine Funktion parseStatus in hooks/git.ts behandelt neue Repositorys ohne Commits und losgelösten HEAD. Fehlt Git oder ist es zu langsam, wird die Leiste ausgeblendet, statt veraltete Daten zu zeigen.

Anpassen

Diese Optionen änderst du in /config unter dem Namen der Mod; die Mod lädt sich mit den neuen Werten neu. Der Standardwert für den Timer wird oben in register gesetzt, Math.max(2_000, ... 15_000), was auch die Untergrenze von 2 Sekunden erzwingt. Um das Aussehen der Leiste zu ändern, bearbeite die Text-Elemente im ui.render-Hook: Der Branch wird bold in cyan gezeichnet, die Details mit dimColor.

EinstellungTypStandardFunktion
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.

Ändere diese Werte in Claude Code mit /config – die Mod lädt sich automatisch neu.

Berechtigungen & Sicherheit

Führt Befehle aus erscheint, weil die Mod $.process.run aufruft. Sie startet genau zwei Programme: git status --porcelain=v1 -b und, nur bei losgelöstem HEAD, git rev-parse --short HEAD. Beide sind rein lesend, nutzen ein argv-Array ohne Shell und haben ein Timeout von 10 Sekunden.

Fängt Tool-Aufrufe ab erscheint, weil sie sich in tool.call für Bash einhängt. Sie beobachtet nur: Sie ändert oder verweigert nie einen Befehl und aktualisiert erst, nachdem der Befehl beendet ist. Verändert die Oberfläche betrifft die Leiste.

Sie liest keine Dateiinhalte, nutzt kein Netzwerk und ruft das Modell nicht auf. Um sie dauerhaft abzuschalten, führe /plugin disable cm-git-branch aus; um eine einzelne Sitzung ganz ohne Mods zu starten, nutze claude --safe-mode.

Führt Befehle aus
Kann Shell-Programme auf deinem Rechner ausführen ($.process.run / spawn). Im Quellcode siehst du, welche genau.
Fängt Tool-Aufrufe ab
Sieht jeden Tool-Aufruf von Claude (tool.call / tool.check) und könnte ihn blockieren oder verändern.
Verändert die Oberfläche
Zeichnet in die Oberfläche von Claude Code: Leisten, Bereiche, Statustext, Toasts (ui.render / $.ui.*).

Kompatibilität & Fehlerbehebung

Getestet mit Claude Code 2.1.291 unter macOS im Terminal. Wenn die Leiste nicht erscheint, prüfe Folgendes der Reihe nach:

  • claude --version meldet 2.1.287 oder neuer.
  • Die Sitzung wurde in einem Git-Repository gestartet; git status sollte im selben Ordner funktionieren.
  • Die Mod ist aktiviert: Das Menü /plugin zeigt sie im Tab „Installed“ mit einer Zeile „mod active“.
  • Du hast über die Shell in eine offene Sitzung installiert: Führe /reload-plugins aus.
  • Über der Eingabe ist eine Umfrage oder eine andere Abfrage geöffnet. Die Leiste macht Platz, solange sie sichtbar ist, und kehrt danach zurück.

Erhöhe bei sehr großen Repositorys intervalMs, damit git status seltener läuft.

FAQ

Verändert die Claude Code Git-Branch-Mod mein Repository?
Nein. Sie führt nur git status --porcelain=v1 -b aus, plus git rev-parse --short HEAD, wenn HEAD losgelöst ist. Beide Befehle sind rein lesend, laufen ohne Shell und brechen nach 10 Sekunden ab.
Warum erscheint die Leiste nicht?
Die häufigsten Gründe: Der Ordner der Sitzung ist kein Git-Repository, Claude Code ist älter als 2.1.287, die Mod ist in /plugin deaktiviert, oder eine Umfrage belegt den Platz über dem Prompt. Führe nach einer Installation über die Shell /reload-plugins aus.
Bemerkt sie einen Checkout, den ich in einem anderen Terminal mache?
Ja, innerhalb eines Aktualisierungsintervalls (standardmäßig 15 Sekunden). Senke intervalMs in /config, wenn es schneller gehen soll, bis hinunter auf 2 Sekunden.
Funktioniert sie in der Desktop-App?
Ja. Die AbovePrompt-Leiste wird im Terminal und im Code-Tab der Desktop-App gezeichnet. In claude -p und im Chat-Panel der VS-Code-Erweiterung laufen Mods zwar, zeichnen aber nichts, daher ist die Leiste dort nicht zu sehen.
Kann ich die Leiste ausblenden, wenn es nichts zu melden gibt?
Schalte hideWhenClean ein. Die Leiste verschwindet dann, solange der Arbeitsbaum sauber und mit seinem Upstream synchron ist.
Kontext-Meter in Claude Code

Kontext-Meter

Kontextfüllstand, 5-Stunden- und 7-Tage-Plannutzung und Sitzungskosten in der Statuszeile, plus Warnung vor dem Limit.

  • Statuszeile
  • Toast
  • Verändert die Oberfläche

getestet mit v2.1.291

Gefährliche Befehle blockieren in Claude Code

Gefährliche Befehle blockieren

Verweigert rm -rf /, Force-Push auf main, DROP TABLE, curl | sh und andere destruktive Bash-Befehle vor der Ausführung.

  • Toast
  • Fängt Tool-Aufrufe ab
  • Verändert die Oberfläche

getestet mit v2.1.291

Tool-Call-Zähler in Claude Code

Tool-Call-Zähler

Zählt Claudes Tool-Aufrufe pro Turn und Sitzung, zeigt sie neben dem Spinner und ergänzt /tally als Übersicht.

  • Spinner
  • Verlauf
  • Statuszeile
  • Fängt Tool-Aufrufe ab
  • Verändert die Oberfläche
  • Fügt Befehle/Tools hinzu

getestet mit v2.1.291

Mehr in Git & GitHub, Statuszeile & Prompt-Leiste.