Skip to Content
BenutzerhandbuchFunktionenStatuszeile

Statuszeile

Zeige benutzerdefinierte Informationen in der Fußzeile mithilfe eines Shell-Befehls an.

Mit der Statuszeile kannst du einen Shell-Befehl ausführen, dessen Ausgabe im linken Bereich der Fußzeile angezeigt wird. Der Befehl erhält strukturierten JSON-Kontext über stdin und kann so sitzungsbezogene Informationen wie das aktuelle Modell, die Token-Nutzung, den Git-Branch oder beliebige andere skriptbare Daten anzeigen.

With status line (default approval mode — 1 row): ┌─────────────────────────────────────────────────────────────────┐ │ user@host ~/project (main) ctx:34% 🔒 docker | Debug | 67% │ ← status line └─────────────────────────────────────────────────────────────────┘ With status line + non-default mode (2 rows): ┌─────────────────────────────────────────────────────────────────┐ │ user@host ~/project (main) ctx:34% 🔒 docker | Debug | 67% │ ← status line │ auto-accept edits (shift + tab to cycle) │ ← mode indicator └─────────────────────────────────────────────────────────────────┘

Sobald konfiguriert, ersetzt die Statuszeile den Standardhinweis „? for shortcuts“. Nachrichten mit hoher Priorität (Beenden-Aufforderungen durch Ctrl+C/D, Esc, vim INSERT-Modus) überlagern die Statuszeile vorübergehend. Der Text der Statuszeile wird abgeschnitten, falls er die verfügbare Breite überschreitet.

Voraussetzungen

  • jq wird zum Parsen der JSON-Eingabe empfohlen (Installation z. B. über brew install jq, apt install jq usw.)
  • Einfache Befehle, die keine JSON-Daten benötigen (z. B. git branch --show-current), funktionieren auch ohne jq

Schnelles Setup

Der einfachste Weg, eine Statuszeile zu konfigurieren, ist der Befehl /statusline. Er startet einen Setup-Agenten, der deine Shell-PS1-Konfiguration ausliest und eine passende Statuszeile generiert:

/statusline

Du kannst ihm auch spezifische Anweisungen geben:

/statusline show model name and context usage percentage

Manuelle Konfiguration

Füge ein statusLine-Objekt unter dem ui-Schlüssel in ~/.qwen/settings.json hinzu:

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); model=$(echo \"$input\" | jq -r '.model.display_name'); pct=$(echo \"$input\" | jq -r '.context_window.used_percentage'); echo \"$model ctx:${pct}%\"" } } }
FeldTypErforderlichBeschreibung
type"command"JaMuss "command" sein
commandstringJaAuszuführender Shell-Befehl. Empfängt JSON über stdin, die erste Zeile von stdout wird angezeigt.

JSON-Eingabe

Der Befehl erhält ein JSON-Objekt über stdin mit folgenden Feldern:

{ "session_id": "abc-123", "version": "0.14.1", "model": { "display_name": "qwen-3-235b" }, "context_window": { "context_window_size": 131072, "used_percentage": 34.3, "remaining_percentage": 65.7, "current_usage": 45000, "total_input_tokens": 30000, "total_output_tokens": 5000 }, "workspace": { "current_dir": "/home/user/project" }, "git": { "branch": "main" }, "metrics": { "models": { "qwen-3-235b": { "api": { "total_requests": 10, "total_errors": 0, "total_latency_ms": 5000 }, "tokens": { "prompt": 30000, "completion": 5000, "total": 35000, "cached": 10000, "thoughts": 2000 } } }, "files": { "total_lines_added": 120, "total_lines_removed": 30 } }, "vim": { "mode": "INSERT" } }
FeldTypBeschreibung
session_idstringEindeutige Sitzungs-ID
versionstringQwen Code-Version
model.display_namestringName des aktuellen Modells
context_window.context_window_sizenumberGesamtgröße des Kontextfensters in Tokens
context_window.used_percentagenumberNutzung des Kontextfensters in Prozent (0–100)
context_window.remaining_percentagenumberVerbleibendes Kontextfenster in Prozent (0–100)
context_window.current_usagenumberToken-Anzahl des letzten API-Aufrufs (aktuelle Kontextgröße)
context_window.total_input_tokensnumberGesamtzahl der in dieser Sitzung verbrauchten Input-Tokens
context_window.total_output_tokensnumberGesamtzahl der in dieser Sitzung verbrauchten Output-Tokens
workspace.current_dirstringAktuelles Arbeitsverzeichnis
gitobject | absentNur innerhalb eines Git-Repositories vorhanden.
git.branchstringName des aktuellen Branches
metrics.models.<id>.apiobjectAPI-Statistiken pro Modell: total_requests, total_errors, total_latency_ms
metrics.models.<id>.tokensobjectToken-Nutzung pro Modell: prompt, completion, total, cached, thoughts
metrics.filesobjectStatistiken zu Dateiänderungen: total_lines_added, total_lines_removed
vimobject | absentNur vorhanden, wenn der Vim-Modus aktiviert ist. Enthält mode ("INSERT" oder "NORMAL").

Wichtig: stdin kann nur einmal gelesen werden. Speichere die Eingabe immer zuerst in einer Variable: input=$(cat).

Beispiele

Modell und Token-Nutzung

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); model=$(echo \"$input\" | jq -r '.model.display_name'); pct=$(echo \"$input\" | jq -r '.context_window.used_percentage'); echo \"$model ctx:${pct}%\"" } } }

Ausgabe: qwen-3-235b ctx:34%

Git-Branch + Verzeichnis

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); branch=$(echo \"$input\" | jq -r '.git.branch // empty'); dir=$(basename \"$(echo \"$input\" | jq -r '.workspace.current_dir')\"); echo \"$dir${branch:+ ($branch)}\"" } } }

Ausgabe: my-project (main)

Hinweis: Das Feld git.branch wird direkt in der JSON-Eingabe bereitgestellt – ein Aufruf von git über die Shell ist nicht erforderlich.

Statistiken zu Dateiänderungen

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); added=$(echo \"$input\" | jq -r '.metrics.files.total_lines_added'); removed=$(echo \"$input\" | jq -r '.metrics.files.total_lines_removed'); echo \"+$added/-$removed lines\"" } } }

Ausgabe: +120/-30 lines

Skriptdatei für komplexe Befehle

Für längere Befehle speichere ein Skript unter ~/.qwen/statusline-command.sh:

#!/bin/bash input=$(cat) model=$(echo "$input" | jq -r '.model.display_name') pct=$(echo "$input" | jq -r '.context_window.used_percentage') branch=$(echo "$input" | jq -r '.git.branch // empty') added=$(echo "$input" | jq -r '.metrics.files.total_lines_added') removed=$(echo "$input" | jq -r '.metrics.files.total_lines_removed') parts=() [ -n "$model" ] && parts+=("$model") [ -n "$branch" ] && parts+=("($branch)") [ "$pct" != "0" ] 2>/dev/null && parts+=("ctx:${pct}%") ([ "$added" -gt 0 ] || [ "$removed" -gt 0 ]) 2>/dev/null && parts+=("+${added}/-${removed}") echo "${parts[*]}"

Verweise dann in den Einstellungen darauf:

{ "ui": { "statusLine": { "type": "command", "command": "bash ~/.qwen/statusline-command.sh" } } }

Verhalten

  • Update-Auslöser: Die Statuszeile wird aktualisiert, wenn sich das Modell ändert, eine neue Nachricht gesendet wird (Token-Anzahl ändert sich), der Vim-Modus umgeschaltet wird, sich der Git-Branch ändert, Tool-Aufrufe abgeschlossen sind oder Dateiänderungen auftreten. Updates werden entprellt (300 ms).
  • Timeout: Befehle, die länger als 5 Sekunden dauern, werden beendet. Bei einem Fehler wird die Statuszeile geleert.
  • Ausgabe: Nur die erste Zeile von stdout wird verwendet. Der Text wird im linken Bereich der Fußzeile in abgedunkelten Farben dargestellt und abgeschnitten, falls er die verfügbare Breite überschreitet.
  • Hot Reload: Änderungen an ui.statusLine in den Einstellungen werden sofort wirksam – kein Neustart erforderlich.
  • Shell: Befehle werden unter macOS/Linux über /bin/sh ausgeführt. Unter Windows wird standardmäßig cmd.exe verwendet – umschließe POSIX-Befehle mit bash -c "..." oder verweise auf ein Bash-Skript (z. B. bash ~/.qwen/statusline-command.sh).
  • Entfernen: Lösche den Schlüssel ui.statusLine aus den Einstellungen, um die Funktion zu deaktivieren. Der Hinweis „? for shortcuts“ wird wieder angezeigt.

Fehlerbehebung

ProblemUrsacheLösung
Statuszeile wird nicht angezeigtKonfiguration im falschen PfadMuss unter ui.statusLine stehen, nicht auf Root-Ebene als statusLine
Leere AusgabeBefehl schlägt stillschweigend fehlManuell testen: echo '{"session_id":"test","version":"0.14.1","model":{"display_name":"test"},"context_window":{"context_window_size":0,"used_percentage":0,"remaining_percentage":100,"current_usage":0,"total_input_tokens":0,"total_output_tokens":0},"workspace":{"current_dir":"/tmp"},"metrics":{"models":{},"files":{"total_lines_added":0,"total_lines_removed":0}}}' | sh -c 'your_command'
Veraltete DatenKein Auslöser wurde gefeuertSende eine Nachricht oder wechsle das Modell, um ein Update auszulösen
Befehl zu langsamKomplexes SkriptOptimiere das Skript oder lagere rechenintensive Aufgaben in einen Hintergrund-Cache aus
Last updated on