Quand on travaille toute la journée avec Claude Code, on finit par se poser toujours les mêmes questions. Quel modèle tourne en ce moment ? Combien reste-t-il de place dans le contexte avant la compaction ? Où en est mon quota de 5 heures, et celui de la semaine ? Combien m'a coûté cette session ?
Claude Code sait afficher une status line, une barre d'état personnalisée sous la zone de saisie. Elle est vide par défaut. Je l'ai remplie avec ccstatusline, un outil open source (licence MIT), et une mise en page sur trois lignes qui répond à toutes ces questions d'un coup d'œil :
Opus 5.5 | xhigh | vous@exemple.com | Context: ▓▓▓▓░░░░░░ 84k/200k (42%)
Session: ▓▓▓░░│░░░░ 30.0% | 2hr 29m | Weekly: ▓▓▓▓│░░░░░ 38.0% | 3d 23hr 59m
⎇ main | (+12,-3) | Cache: n/a | Cost: $1.23 | Claude: okVoici comment elle fonctionne, comment l'installer en deux minutes et les quelques pièges à éviter.
Comment fonctionne la status line de Claude Code
Le principe est simple. Dans ~/.claude/settings.json, on déclare une commande shell. À chaque rafraîchissement, Claude Code lance cette commande et lui envoie sur l'entrée standard un objet JSON qui décrit l'état de la session : modèle, dossier courant, utilisation du contexte, coût, quotas, etc. Tout ce que la commande écrit sur la sortie standard s'affiche dans la barre, couleurs ANSI comprises.
On pourrait donc écrire son propre script avec jq. ccstatusline fait ce travail à notre place : il lit ce JSON, ajoute des informations qu'il va chercher lui-même (état git, statut du service) et compose le tout à partir de widgets configurables.
Les trois lignes en détail
Ligne 1 : la session
Le modèle actif, le niveau d'effort (low à max), l'e-mail du compte connecté et une jauge de remplissage du contexte. Cette dernière est la plus utile : elle indique quand il vaut mieux lancer un /compact ou démarrer une nouvelle session plutôt que de laisser le contexte se remplir.
L'e-mail paraît anecdotique, mais il évite une confusion fréquente quand on jongle entre un compte personnel et un compte professionnel.
Ligne 2 : les quotas
Avec un abonnement claude.ai, l'usage est limité sur une fenêtre glissante de 5 heures et sur une fenêtre hebdomadaire. Chaque jauge est suivie du temps restant avant sa remise à zéro.
Le détail intéressant est le trait vertical │ dans chaque jauge. Il marque le temps déjà écoulé dans la fenêtre. Si le remplissage dépasse ce trait, vous consommez plus vite que le rythme de la fenêtre et risquez d'atteindre la limite avant la remise à zéro. S'il reste derrière, vous avez de la marge.
Exemple :Weekly: ▓▓▓▓│░░░░░ 38.0% signifie que 38 % du quota hebdomadaire est consommé alors qu'environ 40 % de la semaine s'est écoulée. Le rythme est bon.
Ligne 3 : le dépôt et les coûts
La branche git, l'état du dépôt (fichiers modifiés, non suivis), le nombre de lignes ajoutées et supprimées, l'avance ou le retard sur la branche distante, le worktree courant, le minuteur du cache de prompt, le coût de la session et l'état du service Claude.
Les widgets sans valeur sont masqués : l'avance/retard ou le worktree n'apparaissent que lorsqu'ils ont quelque chose à montrer. La barre reste donc lisible, et aucune police Powerline n'est nécessaire.
Installation
Prérequis
- Claude Code 2.1.97 ou plus récent ;
- Node.js, avec
npxdans lePATH; - un abonnement claude.ai pour les jauges de quota. Avec une simple clé API, elles restent vides ou affichent
[No credentials].
1. Copier la mise en page
ccstatusline lit sa configuration dans ~/.config/ccstatusline/settings.json. Si vous en avez déjà une, sauvegardez-la : la copie l'écrase.
mkdir -p ~/.config/ccstatusline
cp ccstatusline.json ~/.config/ccstatusline/settings.jsonLe fichier ccstatusline.json décrit les trois lignes. Chaque widget y est un objet avec un type, une couleur et quelques options :
{
"version": 4,
"lines": [
[
{ "id": "1", "type": "model", "color": "brightCyan", "rawValue": true },
{ "id": "2", "type": "separator" },
{ "id": "3", "type": "thinking-effort", "color": "white", "rawValue": true },
{ "id": "4", "type": "separator" },
{ "id": "5", "type": "claude-account-email", "color": "white", "rawValue": true },
{ "id": "6", "type": "separator" },
{ "id": "7", "type": "context-bar", "color": "brightCyan", "metadata": { "display": "slider" } }
],
[
{ "id": "21", "type": "session-usage", "color": "brightCyan",
"metadata": { "display": "slider", "cursor": "true" } },
{ "id": "22", "type": "separator" },
{ "id": "23", "type": "reset-timer", "color": "white", "rawValue": true,
"metadata": { "display": "compact" } },
{ "id": "24", "type": "separator" },
{ "id": "25", "type": "weekly-usage", "color": "brightCyan",
"metadata": { "display": "slider", "cursor": "true" } },
{ "id": "26", "type": "separator" },
{ "id": "27", "type": "weekly-reset-timer", "color": "white", "rawValue": true,
"metadata": { "display": "compact" } }
],
[
{ "id": "31", "type": "git-branch", "color": "brightCyan" },
{ "id": "33", "type": "git-status", "color": "brightCyan" },
{ "id": "35", "type": "git-changes", "color": "brightCyan" },
{ "id": "37", "type": "git-ahead-behind", "color": "brightCyan" },
{ "id": "39", "type": "worktree-name", "color": "brightCyan" },
{ "id": "41", "type": "cache-timer", "color": "white" },
{ "id": "43", "type": "session-cost", "color": "white" },
{ "id": "45", "type": "claude-status", "color": "white" }
]
],
"flexMode": "full-minus-40",
"compactThreshold": 60,
"colorLevel": 2,
"gitCacheTtlSeconds": 5
}L'extrait ci-dessus est allégé : dans le fichier complet, la troisième ligne contient aussi un separator entre chaque widget, et le bloc powerline est désactivé. L'option "cursor": "true" ajoute le trait de temps écoulé dans les jauges de quota, et gitCacheTtlSeconds évite de relancer git status à chaque rafraîchissement.
2. Déclarer la commande dans Claude Code
Ajoutez ce bloc dans ~/.claude/settings.json, ou remplacez le bloc statusLine existant :
"statusLine": {
"type": "command",
"command": "npx -y ccstatusline@2.2.32",
"refreshInterval": 30,
"padding": 0
}refreshInterval force un rafraîchissement toutes les 30 secondes, même sans activité : le compte à rebours des quotas et l'état du service restent ainsi à jour. padding: 0 colle la barre au bord du terminal.
3. Tester hors de Claude Code
Avant de relancer Claude Code, vérifiez que la commande fonctionne seule. Elle doit afficher trois lignes, même incomplètes :
echo '{}' | npx -y ccstatusline@2.2.32Pour un rendu plus réaliste, envoyez-lui un JSON minimal depuis un dépôt git :
echo '{"model":{"display_name":"Opus 5.5"},"cwd":"'"$PWD"'"}' | npx -y ccstatusline@2.2.32Relancez ensuite Claude Code. Le tout premier affichage peut prendre quelques secondes, le temps que npx télécharge le paquet. Les suivants viennent du cache.
Le piège de nvm
Si la barre n'apparaît pas alors que la commande fonctionne dans votre terminal, le coupable est souvent nvm chargé à la demande (lazy loading) dans votre .zshrc ou .bashrc. Le shell lancé par Claude Code pour la status line n'est pas interactif : npx n'est pas dans son PATH, et la barre disparaît sans afficher aucune erreur.
La solution est d'indiquer explicitement le dossier de Node dans la commande, en remplaçant vXX.Y.Z par le résultat de nvm current :
"command": "PATH=\"$HOME/.nvm/versions/node/vXX.Y.Z/bin:$PATH\" npx -y ccstatusline@2.2.32"Attention : ce chemin contient la version de Node. Pensez à le mettre à jour quand vous changez de version, sinon la barre disparaît à nouveau, toujours sans message.
Sécurité : pourquoi figer la version
Une status line est un programme qui s'exécute toutes les quelques secondes sur votre machine, avec vos droits. Il faut donc savoir ce qu'il fait. ccstatusline a besoin de trois accès :
- Votre login Claude Code : quand Claude Code ne lui transmet pas les quotas (au démarrage d'une session par exemple), il lit votre token OAuth (
~/.claude/.credentials.json, ou le Trousseau sur macOS) et interrogeapi.anthropic.com. - Le statut du service : le widget
claude-statusinterrogestatus.claude.com. - Les données de session : la commande reçoit l'état de la session à chaque affichage.
C'est pour cette raison que la commande utilise ccstatusline@2.2.32 et non @latest. Avec @latest, une version compromise publiée sur npm s'exécuterait aussitôt sur votre poste, avec accès à votre token. Les attaques de la chaîne d'approvisionnement npm ne sont pas théoriques. Pour mettre à jour, lisez le changelog, puis changez le numéro de version vous-même.
Personnaliser la barre
Lancée sans entrée standard dans un terminal, la même commande ouvre un éditeur interactif pour ajouter, retirer ou recolorer les widgets :
npx -y ccstatusline@2.2.32Si vous partagez votre écran (visio, live, capture pour un article), pensez à l'e-mail de la première ligne. Pour le masquer, retirez le widget Claude Account Email dans l'éditeur, ou supprimez les blocs "id": "5" et "id": "6" du fichier ~/.config/ccstatusline/settings.json.
Désinstaller
Retirez le bloc statusLine de ~/.claude/settings.json, puis supprimez le dossier ~/.config/ccstatusline. Rien d'autre n'est installé globalement : npx ne conserve le paquet que dans son cache.
En résumé
Trois lignes suffisent pour ne plus avoir à se demander quel modèle tourne, si le contexte va bientôt saturer ou si le quota de la semaine tiendra jusqu'à vendredi. L'installation tient en deux fichiers de configuration. Les deux seuls points de vigilance sont un PATH incomplet avec nvm et la version de ccstatusline, à figer puisque l'outil a accès à votre login.