Worum geht's
Claude Code rendert standardmässig nur einen minimalen Prompt. Für unsere Multi-Session-Setups (Worktrees pro Session unter ~/Documents/Claude/$CLAUDE_CODE_SESSION_ID/) ist es enorm wertvoll, bei jeder Eingabe sofort zu sehen:
- Session-ID (kurz) — welche der parallel laufenden Sessions ist das?
- IN-WS / OUT-WS — bin ich im Session-Workspace oder ausserhalb?
- Working Directory — wo arbeitet Claude gerade?
- Git-Branch — auf welchem Branch?
Beispiel-Output:
[6989cb3c IN-WS] ~/Documents/Claude/6989cb3c-efdd-43dd-8fe1-4823d6c89702/DFXswiss/ccflare (fix/retry-backoff)
Setup
1. Statusline-Script anlegen
~/.claude/statusline.sh:
#!/usr/bin/env bash
# Statusline: kurze Session-ID, Workspace-IN/OUT-Indikator, cwd, Branch.
# Receives Claude Code statusline JSON on stdin.
set -uo pipefail
INPUT=$(cat)
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
CWD=$(echo "$INPUT" | jq -r '.workspace.current_dir // empty')
# Fallback wenn JSON-Felder fehlen
[[ -z "$SESSION_ID" ]] && SESSION_ID="${CLAUDE_CODE_SESSION_ID:-unknown}"
[[ -z "$CWD" ]] && CWD="${PWD:-?}"
SHORT="${SESSION_ID:0:8}"
DISPLAY_CWD="${CWD/#$HOME/~}"
WORKSPACE_BASE="$HOME/Documents/Claude/$SESSION_ID"
if [[ "$CWD" == "$WORKSPACE_BASE"* ]]; then
STATE="IN-WS"
else
STATE="OUT-WS"
fi
BRANCH=""
if [[ -d "$CWD/.git" ]] || git -C "$CWD" rev-parse --git-dir >/dev/null 2>&1; then
BRANCH=$(git -C "$CWD" rev-parse --abbrev-ref HEAD 2>/dev/null || true)
fi
if [[ -n "$BRANCH" ]]; then
echo "[$SHORT $STATE] $DISPLAY_CWD ($BRANCH)"
else
echo "[$SHORT $STATE] $DISPLAY_CWD"
fi
Ausführbar machen:
chmod +x ~/.claude/statusline.sh
2. In ~/.claude/settings.json eintragen
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
3. Session-Workspace-Hook (Voraussetzung für IN-WS / OUT-WS)
Damit IN-WS überhaupt einen Sinn ergibt, muss der Session-Ordner bei jedem Start angelegt werden. Ebenfalls in ~/.claude/settings.json:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "mkdir -p \"$HOME/Documents/Claude/$CLAUDE_CODE_SESSION_ID\""
}
]
}
]
}
}
Repo-Klone für die Session landen dann unter:
~/Documents/Claude/$CLAUDE_CODE_SESSION_ID/<org>/<repo>/
4. Verifizieren
Neue Claude-Code-Session starten — die Zeile sollte direkt erscheinen. Falls nicht:
jq installiert? (brew install jq)
- Script ausführbar? (
ls -l ~/.claude/statusline.sh)
- Script-Output direkt testen:
echo '{"session_id":"abc12345","workspace":{"current_dir":"'"$PWD"'"}}' | ~/.claude/statusline.sh
Wie's funktioniert
Claude Code ruft den statusLine.command bei jedem Render auf und reicht JSON über stdin rein. Verfügbare Felder u.a.:
session_id
workspace.current_dir
model.display_name
cwd
Das Script gibt eine Zeile auf stdout zurück — das wird unten im UI gerendert.
Erweiterungsideen
- Model-Name anzeigen (
claude-opus-4-7[1m] vs Sonnet)
- Dirty-Git-Indikator (
* bei uncommitted changes)
- Anzahl Files staged/modified
- Bei
OUT-WS rot färben (ANSI escape codes funktionieren)
Doku: https://docs.claude.com/en/docs/claude-code/statusline
Worum geht's
Claude Code rendert standardmässig nur einen minimalen Prompt. Für unsere Multi-Session-Setups (Worktrees pro Session unter
~/Documents/Claude/$CLAUDE_CODE_SESSION_ID/) ist es enorm wertvoll, bei jeder Eingabe sofort zu sehen:Beispiel-Output:
Setup
1. Statusline-Script anlegen
~/.claude/statusline.sh:Ausführbar machen:
chmod +x ~/.claude/statusline.sh2. In
~/.claude/settings.jsoneintragen{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh" } }3. Session-Workspace-Hook (Voraussetzung für IN-WS / OUT-WS)
Damit
IN-WSüberhaupt einen Sinn ergibt, muss der Session-Ordner bei jedem Start angelegt werden. Ebenfalls in~/.claude/settings.json:{ "hooks": { "SessionStart": [ { "hooks": [ { "type": "command", "command": "mkdir -p \"$HOME/Documents/Claude/$CLAUDE_CODE_SESSION_ID\"" } ] } ] } }Repo-Klone für die Session landen dann unter:
4. Verifizieren
Neue Claude-Code-Session starten — die Zeile sollte direkt erscheinen. Falls nicht:
jqinstalliert? (brew install jq)ls -l ~/.claude/statusline.sh)Wie's funktioniert
Claude Code ruft den
statusLine.commandbei jedem Render auf und reicht JSON über stdin rein. Verfügbare Felder u.a.:session_idworkspace.current_dirmodel.display_namecwdDas Script gibt eine Zeile auf stdout zurück — das wird unten im UI gerendert.
Erweiterungsideen
claude-opus-4-7[1m]vs Sonnet)*bei uncommitted changes)OUT-WSrot färben (ANSI escape codes funktionieren)Doku: https://docs.claude.com/en/docs/claude-code/statusline