Blog · 27. Oktober 2026 · 14 Min. Lesezeit

Claude Code Statusline einrichten: Beispiele

Grafische Titelkarte zum Beitrag „Claude Code Statusline einrichten: Beispiele“ mit einem stilisierten Motiv: ein Terminalfenster, an dessen unterem Rand eine Leiste mit Fortschrittsbalken, Prozentzeichen und Dollarzeichen leuchtet.
Grafik: HumanITy

Die Claude Code Statusline ist eine frei gestaltbare Leiste am unteren Rand von Claude Code, die ein Skript deiner Wahl ausführt. Claude Code übergibt dem Skript die Daten der Sitzung als JSON auf der Standardeingabe und zeigt an, was das Skript ausgibt. So siehst du ständig, wie voll das Kontextfenster ist, was die Sitzung zum Listenpreis gekostet hätte und, mit einem Pro- oder Max-Abo, wie viel vom 5-Stunden- und 7-Tage-Limit verbraucht ist. Einrichten kannst du sie auf zwei Wegen: Du beschreibst in einer Sitzung mit /statusline, was du sehen willst, und Claude Code schreibt Skript und Einstellung selbst. Oder du trägst in ~/.claude/settings.json ein Feld statusLine mit "type": "command" und dem Pfad zu deinem Skript ein. Die Statusline läuft laut Anthropic lokal und verbraucht keine API-Token.

Ich arbeite täglich mit Claude Code. Auf meinem Mac zeigt meine Statusline seit April 2026 den Namen des aktuellen Ordners, das Modell, die Kontextauslastung in Prozent und den Verbrauch des 5-Stunden-Fensters. Die Beispiele unten stammen aus Anthropics Doku, die Syntax habe ich am 26.10.2026 dort abgeglichen. Alles zu Claude sammle ich auf der Seite Claude; wenn du Claude Code noch nicht eingerichtet hast, fang mit Claude Code installieren: Windows, Mac, Linux an.

Statusline oder Statuszeile eines Mods: zwei verschiedene Dinge

Seit Oktober 2026 gibt es einen zweiten Weg, eine Zeile unter dem Prompt zu füllen, und der wird leicht verwechselt. Ein Mod, also ein Plugin mit eigenem JavaScript- oder TypeScript-Code, kann mit $.ui.status(text) eine Zeile unter dem Prompt setzen. Laut Doku beginnt diese Zeile immer mit ⚠ und dem Namen des Mods, etwa ⚠ my-mod: checks: 3 passing, und bleibt stehen, bis der Mod sie ändert.

Statusline (dieser Beitrag) Statuszeile eines Mods
Was läuft ein Shell-Befehl oder Skript, das du in den Einstellungen einträgst eine Funktion im Code eines installierten Mods
Woher die Daten kommen JSON der Sitzung auf der Standardeingabe was der Mod selbst ermittelt
Erkennbar an genau dem, was dein Skript ausgibt ⚠ und dem Namen des Mods am Anfang
Wer sie abschalten kann disableAllHooks stoppt auch die Statusline; mit allowManagedHooksOnly gilt nur eine Statusline aus den verwalteten Einstellungen disableAllHooks in den verwalteten Einstellungen stoppt alle Mods; Admins, die nur eigene Mods zulassen (allowManagedModsOnly), stoppen fremde, deine Statusline läuft dabei laut Doku weiter

Wenn du also eine Zeile mit ⚠ und einem fremden Namen siehst, kommt sie von einem Mod, nicht von deiner Statusline. Was Mods sonst können und wie du sie im Team steuerst, steht in Claude Code Mods: was sie können und dürfen. Wo die Statusline neben Skills, Hooks, Plugins und Mods steht, ordne ich in Claude Code Erweiterungen: was ist was? ein.

Statusline einrichten mit /statusline

Der schnellste Weg: Du beschreibst in einer laufenden Sitzung in normaler Sprache, was angezeigt werden soll. Das Beispiel aus der Doku:

/statusline show model name and context percentage with a progress bar

Claude Code legt daraufhin ein Skript in ~/.claude/ an und trägt es in deine Einstellungen ein. Bestätige die Rückfragen zum Schreiben der Dateien. Zum Entfernen gibst du /statusline eine passende Anweisung, die Doku nennt etwa /statusline delete oder /statusline remove it, oder du löschst das Feld statusLine von Hand aus der settings.json.

Statusline von Hand einrichten

Willst du verstehen, was /statusline im Hintergrund baut, richte es selbst ein. Die Doku führt in drei Schritten durch ein Skript für macOS und Linux, das Modell, Ordner und Kontextauslastung zeigt. Es nutzt jq, ein Kommandozeilenwerkzeug für JSON, das du eventuell erst installieren musst.

1. Skript anlegen unter ~/.claude/statusline.sh:

#!/bin/bash
# Read JSON data that Claude Code sends to stdin
input=$(cat)

# Extract fields using jq
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
# The "// 0" provides a fallback if the field is null
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

# Output the status line - ${DIR##*/} extracts just the folder name
echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"

2. Ausführbar machen:

chmod +x ~/.claude/statusline.sh

3. In ~/.claude/settings.json eintragen:

{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}

Claude Code lädt die Einstellungen beim Speichern neu und führt das Skript sofort aus. Statt in den Benutzereinstellungen kannst du die Statusline auch in den Projekteinstellungen eintragen. Drei optionale Felder kennt die Doku: padding rückt die Anzeige um eine Zahl von Zeichen ein, refreshInterval führt das Skript zusätzlich alle N Sekunden aus (mindestens 1), und hideVimModeIndicator blendet die eingebaute Anzeige -- INSERT -- aus, wenn dein Skript den Vim-Modus selbst zeigt.

Kurz zum Ablauf: Das Skript läuft beim Start einer Sitzung und danach bei jeder neuen Antwort, nach /compact, beim Wechsel des Berechtigungsmodus und wenn ein Limit-Fenster oder der Prompt-Cache abläuft. Claude Code bündelt Änderungen innerhalb von 300 Millisekunden und bricht ein noch laufendes Skript ab, wenn schon das nächste Update ansteht. Halte das Skript deshalb schnell.

Beispiel 1: Kontext im Blick

Das wichtigste Feld für den Alltag ist context_window.used_percentage: der Anteil des Kontextfensters, den die letzte Antwort belegt hat. Dieses Skript aus der Doku baut daraus einen Balken aus zehn Zeichen:

#!/bin/bash
# Read all of stdin into a variable
input=$(cat)

# Extract fields with jq, "// 0" provides fallback for null
MODEL=$(echo "$input" | jq -r '.model.display_name')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

# Build progress bar: printf -v creates a run of spaces, then
# ${var// /▓} replaces each space with a block character
BAR_WIDTH=10
FILLED=$((PCT * BAR_WIDTH / 100))
EMPTY=$((BAR_WIDTH - FILLED))
BAR=""
[ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}"
[ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}"

echo "[$MODEL] $BAR $PCT%"

Zwei Details aus der Doku helfen beim Lesen der Zahl. Erstens zählt used_percentage nur Eingabe-Token, also frische Eingabe plus Cache-Schreib- und Cache-Lese-Token, nicht die Ausgabe. Zweitens zeigt die Statusline den Stand der letzten Antwort, während /context die seitdem hinzugekommenen Nachrichten schätzt. /context kann deshalb bis zur nächsten Antwort etwas höher liegen. Die Größe des Fensters steht in context_window.context_window_size: laut Doku 200.000 Token als Standard oder 1.000.000 bei Modellen mit erweitertem Kontext.

Beispiel 2: Kosten und Dauer

Das Feld cost.total_cost_usd summiert die geschätzten Kosten aller API-Aufrufe der Sitzung, cost.total_duration_ms die Laufzeit. Das Skript aus der Doku formatiert beides:

#!/bin/bash
input=$(cat)

MODEL=$(echo "$input" | jq -r '.model.display_name')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

COST_FMT=$(printf '$%.2f' "$COST")
DURATION_SEC=$((DURATION_MS / 1000))
MINS=$((DURATION_SEC / 60))
SECS=$((DURATION_SEC % 60))

echo "[$MODEL] 💰 $COST_FMT | ⏱️ ${MINS}m ${SECS}s"

Lies den Betrag richtig: Laut Doku rechnet Claude Code ihn auf deinem Rechner zum Listenpreis aus, außer deine Organisation hinterlegt eigene Preise mit modelPricing. Er kann von deiner tatsächlichen Rechnung abweichen und springt mit /clear auf 0 zurück, weil dann eine neue Sitzung beginnt. Mit einem Abo ist er vor allem ein Vergleichswert, wie teuer eine Sitzung über die API gewesen wäre.

Beispiel 3: das 5-Stunden- und Wochenlimit

Mit einem Pro- oder Max-Abo liefert Claude Code im Feld rate_limits zwei Fenster: five_hour für das rollierende 5-Stunden-Fenster und seven_day für die Woche, jeweils mit used_percentage von 0 bis 100 und resets_at als Zeitpunkt des Zurücksetzens. Das Skript aus der Doku zeigt beide und berücksichtigt außerdem den Fall eines Unternehmens-Gateways mit Ausgabelimit:

#!/bin/bash
input=$(cat)

MODEL=$(echo "$input" | jq -r '.model.display_name')
# "// empty" produces no output when rate_limits is absent
FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

LIMITS=""
[ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"
[ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"

# Behind a Claude apps gateway: dollars when the gateway reports them, else the percentage
SPEND_PCT=$(echo "$input" | jq -r '.rate_limits.spend_limit.used_percentage // empty')
SPEND_USD=$(echo "$input" | jq -r '.rate_limits.spend_limit | select(.used_usd != null) | "$\(.used_usd) / $\(.limit_usd)"')
[ -n "$SPEND_PCT" ] && LIMITS="${LIMITS:+$LIMITS }spend: ${SPEND_USD:-$(printf '%.0f' "$SPEND_PCT")%}"

[ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"

Drei Einschränkungen nennt die Doku, und an ihnen scheitern die meisten Versuche:

  • Nur Pro und Max: rate_limits gibt es für claude.ai-Abos Pro und Max. Mit einem API-Schlüssel ohne Gateway siehst du dort nichts.
  • Erst nach der ersten Antwort: Vor der ersten API-Antwort einer Sitzung fehlt das Feld, und jedes Fenster kann einzeln fehlen. Deshalb das // empty im Skript.
  • Ausgabelimit nur hinter einem Gateway: rate_limits.spend_limit gibt es nur, wenn deine Organisation Claude Code über einen Claude-apps-Gateway mit Ausgabelimit betreibt. Das Feld gibt es seit Version 2.1.251, die Dollarbeträge used_usd und limit_usd seit 2.1.284, jeweils in Claude Code und im Gateway. Mit Pro oder Max suchst du es vergeblich.

Mehrere Zeilen, Farben und Links

Jede Zeile, die dein Skript ausgibt, wird zu einer eigenen Zeile der Statusline. Farben setzt du mit ANSI-Codes wie \033[32m für Grün, anklickbare Links mit OSC-8-Sequenzen; die funktionieren laut Doku zum Beispiel in iTerm2, Kitty und WezTerm, nicht im macOS-Terminal. Die Doku hat dafür ein zweizeiliges Beispiel: oben Modell, Ordner und Git-Branch, unten ein Kontextbalken, der unter 70 Prozent grün, ab 70 gelb und ab 90 rot wird, daneben Kosten und Dauer. Je mehr Escape-Sequenzen und Zeilen, desto eher kommt es laut Doku zu Darstellungsfehlern; im Zweifel bleibt eine schlichte Zeile die robusteste.

Teure Befehle wie git status solltest du zwischenspeichern, weil das Skript sehr oft läuft. Die Doku empfiehlt dafür einen Dateinamen mit der session_id aus dem JSON, nicht mit der Prozessnummer, weil die sich bei jedem Aufruf ändert. Die Breite des Terminals liest dein Skript aus den Umgebungsvariablen COLUMNS und LINES; tput cols funktioniert dort nicht.

Statusline unter Windows

Unter Windows führt Claude Code den Befehl über Git Bash aus, wenn es installiert ist, sonst über PowerShell. Wichtig: Schreib Pfade im Feld command mit Schrägstrichen nach vorn. Git Bash verschluckt sonst die Backslashes, und die Statusline bleibt ohne Fehlermeldung leer. Ein PowerShell-Skript rufst du laut Doku so auf:

{
  "statusLine": {
    "type": "command",
    "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"
  }
}

Das passende Skript statusline.ps1 aus der Doku zeigt Ordner, Modell und Kontext:

$input_json = $input | Out-String | ConvertFrom-Json
$cwd = $input_json.cwd
$model = $input_json.model.display_name
$used = $input_json.context_window.used_percentage
$dirname = Split-Path $cwd -Leaf

if ($used) {
    Write-Host "$dirname [$model] ctx: $used%"
} else {
    Write-Host "$dirname [$model]"
}

Weitere Felder, die sich lohnen

Neben Kontext, Kosten und Limit stehen im JSON noch einige Felder, die im Alltag nützen:

  • prompt_cache (seit 2.1.251): ob der Prompt-Cache noch warm ist (warm), die Trefferquote (hit_ratio) und seit 2.1.260 die vermutete Ursache des letzten Cache-Fehlschlags (last_miss_cause), etwa geänderte Werkzeuge oder ein abgelaufener Cache.
  • effort.level: die aktuelle Denkstufe, von low bis max, auch nach einem Wechsel mit /effort.
  • session_name, pr.number und worktree.name: hilfreich, wenn du mehrere Sitzungen parallel offen hast und sie auseinanderhalten willst.
  • subagentStatusLine: eine eigene Einstellung, mit der du die Zeilen deiner Subagents im Agentenbereich unter dem Prompt selbst gestaltest. Seit 2.1.293 bekommt das Skript dort auch den Subagent-Typ (agentType).

Wer nicht selbst skripten will: Die Doku nennt Community-Projekte wie ccstatusline und starship-claude mit fertigen Vorlagen. Die habe ich nicht getestet; prüf fremde Skripte vorher, denn die Statusline führt einen Shell-Befehl mit deinen Rechten aus.

Wenn die Statusline leer bleibt

Die Doku nennt für die Fehlersuche diese Prüfpunkte. In meinen Worten:

  1. Ausführbar? chmod +x ~/.claude/statusline.sh.
  2. Ausgabe auf stdout, Exit-Code 0? Claude Code zeigt die Ausgabe nur, wenn das Skript mit 0 endet. Ausgaben auf stderr erscheinen nicht.
  3. Von Hand testen mit einem Beispiel-JSON, wie die Doku es vorschlägt:
    echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh
    
  4. Ordner vertraut? Bis du den Dialog zum Vertrauen in den Arbeitsordner bestätigst, bleibt die Statusline leer, weil sie wie ein Hook einen Shell-Befehl ausführt.
  5. Abgeschaltet? disableAllHooks: true außerhalb der verwalteten Einstellungen schaltet auch die Statusline ab. Setzt deine Organisation allowManagedHooksOnly, verschwindet deine eigene Statusline ohne Warnung.
  6. Fehlerausgabe ansehen: claude --debug protokolliert die stderr-Ausgabe des Skripts.

Zeigt die Statusline -- oder leere Werte, sind die Felder vor der ersten Antwort einer Sitzung oft noch null. Fang das im Skript ab, zum Beispiel mit // 0 in jq.

Häufige Fragen

Was ist die Claude Code Statusline?

Eine frei gestaltbare Leiste am unteren Rand von Claude Code. Sie führt ein Skript aus, das die Sitzungsdaten als JSON bekommt, und zeigt dessen Ausgabe an, zum Beispiel Modell, Kontextauslastung, Kosten, Git-Branch oder Limit.

Wie richte ich die Statusline ein?

Am schnellsten mit /statusline und einer Beschreibung dessen, was du sehen willst. Von Hand trägst du in ~/.claude/settings.json ein Feld statusLine mit "type": "command" und dem Pfad zu einem ausführbaren Skript ein.

Kostet die Statusline Token?

Nein. Laut Anthropic läuft sie lokal und verbraucht keine API-Token. Was sie kostet, ist Rechenzeit auf deinem Rechner, deshalb sollte das Skript schnell sein.

Warum zeigt meine Statusline kein 5-Stunden-Limit?

Das Feld rate_limits gibt es laut Doku nur für Pro- und Max-Abos, und erst nach der ersten Antwort in einer Sitzung. Mit einem API-Schlüssel ohne Gateway bleibt es leer, und das Feld spend_limit erscheint nur hinter einem Claude-apps-Gateway mit Ausgabelimit.

Was ist der Unterschied zwischen Statusline und der Statuszeile eines Mods?

Die Statusline ist dein eigenes Skript aus den Einstellungen. Die Statuszeile eines Mods setzt ein installiertes Plugin mit $.ui.status; sie beginnt immer mit ⚠ und dem Namen des Mods. Beide laufen unabhängig voneinander.

Funktioniert die Statusline unter Windows?

Ja. Claude Code nutzt Git Bash, wenn es installiert ist, sonst PowerShell. Schreib Pfade im Feld command mit / statt \, sonst bleibt die Statusline unter Git Bash leer.

Wie du weitermachst

Fang mit /statusline und einem einzigen Wert an, zum Beispiel der Kontextauslastung, und erweitere erst, wenn du merkst, was dir im Alltag fehlt. Läuft deine Statusline, lohnt sich als Nächstes ein Blick auf Hooks, die nach demselben Prinzip Shell-Befehle an festen Punkten ausführen: Claude Code Hooks: Regeln, die immer gelten. Wenn du mehrere Sitzungen parallel laufen lässt, hilft dir außerdem Claude Code Agent View: Sitzungen ohne tmux. Wie andere ihre Claude-Code-Umgebung einrichten, besprechen wir in meiner deutschsprachigen Community Claude Practitioners.

Kevin Welter

Kevin Welter

Entwickler, IT-Architekt, Fachbuchautor (Kubernetes, Cloud-Infrastrukturen) und Speaker. Betreibt sein Business mit einer KI-Belegschaft aus vierzehn KI-Mitarbeitern und zeigt Selbstständigen in seiner Community, wie sie ihren ersten KI-Mitarbeiter einstellen.

Mehr über KI-Mitarbeiter

In einer Stunde läuft dein erster KI-Mitarbeiter

7 Tage kostenlos testen