Setup Claude Code Status Line¶
Guide pour installer la barre de statut personnalisee de Claude Code, identique a celle utilisee sur le projet MemTide.
Apercu¶
La status line affiche en temps reel :
- Ligne 1 :
[Modele] [Agent]+ barre de contexte coloree + % utilise + cout en $ + duree de session - Ligne 2 : dossier courant + branche Git active
Exemple de rendu :
[Claude 4 Opus] [PURE] ████████░░ 80% | $1.23 | ⏱️ 12m 34s
📁 memtide | 🌿 dev
La barre de contexte change de couleur selon le remplissage : - Vert : < 70% - Jaune : 70-89% - Rouge : >= 90%
[PURE] s'affiche quand aucun sous-agent n'est actif, sinon le nom de l'agent apparait.
Prerequis¶
- Claude Code installe (
npm install -g @anthropic-ai/claude-codeou via le binaire officiel) - jq installe (parsing JSON) :
- macOS :
brew install jq - Ubuntu/Debian :
sudo apt install jq - Windows :
winget install jqlang.jqouscoop install jqouchoco install jq - Windows (MSYS2) :
pacman -S mingw-w64-x86_64-jq - Ou telecharger depuis jq releases
- git installe (pour l'affichage de la branche)
- Bash disponible (Git Bash sur Windows, natif sur macOS/Linux)
Etape 1 : Creer le script de la status line¶
Creer le fichier ~/.claude/statusline-command.sh avec le contenu exact suivant :
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
AGENT=$(echo "$input" | jq -r '.agent.name // empty')
AGENT_DISPLAY="${AGENT:-PURE}"
CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'
if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"
elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"
else BAR_COLOR="$GREEN"; fi
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
BLOCK=$(printf '\xe2\x96\x88')
LIGHT=$(printf '\xe2\x96\x91')
BAR=""
for ((i=0; i<FILLED; i++)); do BAR="${BAR}${BLOCK}"; done
for ((i=0; i<EMPTY; i++)); do BAR="${BAR}${LIGHT}"; done
MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))
BRANCH=""
git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"
COST_FMT=$(printf '$%.2f' "$COST")
echo -e "${CYAN}[$MODEL] [$AGENT_DISPLAY]${RESET} ${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"
echo -e "📁 ${DIR##*/}$BRANCH"
Commandes d'installation¶
macOS / Linux :
cat << 'SCRIPT' > ~/.claude/statusline-command.sh
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
AGENT=$(echo "$input" | jq -r '.agent.name // empty')
AGENT_DISPLAY="${AGENT:-PURE}"
CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'
if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"
elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"
else BAR_COLOR="$GREEN"; fi
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
BLOCK=$(printf '\xe2\x96\x88')
LIGHT=$(printf '\xe2\x96\x91')
BAR=""
for ((i=0; i<FILLED; i++)); do BAR="${BAR}${BLOCK}"; done
for ((i=0; i<EMPTY; i++)); do BAR="${BAR}${LIGHT}"; done
MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))
BRANCH=""
git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"
COST_FMT=$(printf '$%.2f' "$COST")
echo -e "${CYAN}[$MODEL] [$AGENT_DISPLAY]${RESET} ${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"
echo -e "📁 ${DIR##*/}$BRANCH"
SCRIPT
chmod +x ~/.claude/statusline-command.sh
Windows (Git Bash) :
Meme commande que ci-dessus, executee dans Git Bash. Le script sera cree a l'emplacement /c/Users/<TON_USER>/.claude/statusline-command.sh.
cat << 'SCRIPT' > /c/Users/$USERNAME/.claude/statusline-command.sh
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
AGENT=$(echo "$input" | jq -r '.agent.name // empty')
AGENT_DISPLAY="${AGENT:-PURE}"
CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'
if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"
elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"
else BAR_COLOR="$GREEN"; fi
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
BLOCK=$(printf '\xe2\x96\x88')
LIGHT=$(printf '\xe2\x96\x91')
BAR=""
for ((i=0; i<FILLED; i++)); do BAR="${BAR}${BLOCK}"; done
for ((i=0; i<EMPTY; i++)); do BAR="${BAR}${LIGHT}"; done
MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))
BRANCH=""
git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"
COST_FMT=$(printf '$%.2f' "$COST")
echo -e "${CYAN}[$MODEL] [$AGENT_DISPLAY]${RESET} ${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"
echo -e "📁 ${DIR##*/}$BRANCH"
SCRIPT
chmod +x /c/Users/$USERNAME/.claude/statusline-command.sh
Etape 2 : Configurer Claude Code¶
Editer le fichier ~/.claude/settings.json pour ajouter la cle statusLine.
Si le fichier n'existe pas encore :
cat << 'EOF' > ~/.claude/settings.json
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline-command.sh"
}
}
EOF
Si le fichier existe deja, ajouter/modifier uniquement la cle statusLine :
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline-command.sh"
}
}
Note Windows¶
Sur Windows, Claude Code ne resout pas toujours ~ correctement car le processus n'utilise pas forcement un shell bash pour interpreter le chemin. Utilisez le chemin absolu au format Unix :
"command": "bash /c/Users/MonUser/.claude/statusline-command.sh"
Le raccourci ~ peut fonctionner mais n'est pas garanti. Si la status line ne s'affiche pas, passer au chemin absolu.
Etape 3 : Verifier¶
- Relancer Claude Code (
claudedans le terminal) - La barre de statut devrait apparaitre en bas du terminal avec les infos en temps reel
Test manuel du script¶
Pour verifier que le script fonctionne independamment :
echo '{"model":{"display_name":"Claude 4 Opus"},"workspace":{"current_dir":"/home/user/project"},"cost":{"total_cost_usd":0.42,"total_duration_ms":185000},"context_window":{"used_percentage":35.7},"agent":{}}' | bash ~/.claude/statusline-command.sh
Resultat attendu :
[Claude 4 Opus] [PURE] ███░░░░░░░ 35% | $0.42 | ⏱️ 3m 5s
📁 project
Comment ca marche¶
Claude Code appelle le script a chaque rafraichissement de la status line. Il envoie un JSON sur stdin contenant l'etat courant de la session. Le script :
- Lit le JSON depuis stdin (
cat) - Extrait les champs avec
jq: .model.display_name: nom du modele actif.workspace.current_dir: repertoire de travail.cost.total_cost_usd: cout cumule de la session.context_window.used_percentage: pourcentage de contexte utilise.cost.total_duration_ms: duree totale en millisecondes.agent.name: nom du sous-agent actif (vide si aucun)- Construit une barre de progression avec des blocs Unicode (
█= rempli,░= vide) - Colore la barre selon le niveau de remplissage (vert/jaune/rouge)
- Detecte la branche Git courante
- Affiche le tout sur 2 lignes avec des codes ANSI
Champs JSON disponibles (reference)¶
Le JSON envoye par Claude Code sur stdin contient ces champs utilisables :
| Chemin jq | Description |
|---|---|
.model.display_name |
Nom affiche du modele (ex: "Claude 4 Opus") |
.workspace.current_dir |
Repertoire de travail courant |
.cost.total_cost_usd |
Cout total de la session en USD |
.cost.total_duration_ms |
Duree totale de la session en ms |
.context_window.used_percentage |
% de la fenetre de contexte utilise |
.context_window.total_tokens |
Tokens max de la fenetre |
.agent.name |
Nom du sous-agent actif (vide si main) |
Depannage¶
| Probleme | Solution |
|---|---|
| Pas de status line | Verifier que statusLine est dans ~/.claude/settings.json (pas dans un settings projet) |
jq: command not found |
Installer jq (voir prerequis) |
| Caracteres casses | Verifier que le terminal supporte UTF-8 et les emojis |
| Script non execute | chmod +x ~/.claude/statusline-command.sh (necessaire aussi sous Git Bash Windows) |
| Branche Git non affichee | Normal si le dossier courant n'est pas un repo Git |
| Status line vide sous Windows | Remplacer ~ par le chemin absolu /c/Users/MonUser/.claude/statusline-command.sh dans settings.json |
jq installe mais introuvable |
Sous Windows, verifier que le dossier de jq.exe est dans le PATH du terminal utilise par Claude Code |