Tutoriel 2 novembre 2026 8 min de lecture

Une status line sur 3 lignes pour Claude Code avec ccstatusline

Gabriel Janez

Gabriel Janez

Développeur Full-Stack PHP

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: ok

Voici 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 npx dans le PATH ;
  • 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.json

Le 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.32

Pour 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.32

Relancez 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 interroge api.anthropic.com.
  • Le statut du service : le widget claude-status interroge status.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.32

Si 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.

Tags

Claude Code IA Node.js Productivité Terminal

Partager

Articles similaires

PHP 7 min

Faille PHP critique : mettre à jour PHP sur un VPS Ubuntu

php -v affiche 8.4.11 alors que la 8.4.27 est sortie : votre serveur est-il vulnérable ? Correctifs rétroportés, mise à jour ciblée, migration vers Ubuntu 26.04 et PHP 8.5, et les pièges rencontrés : retour d'expérience sur mon VPS.

Besoin d'aide sur votre projet ?

Discutons de vos besoins et trouvons ensemble la meilleure solution technique.

Me contacter