La barre de statut est une barre personnalisable en bas de Claude Code qui exécute n’importe quel script shell que vous configurez. Elle reçoit les données de session JSON sur stdin et affiche tout ce que votre script imprime, vous donnant une vue persistante et en un coup d’œil de l’utilisation du contexte, des coûts, de l’état git, ou de tout ce que vous voulez suivre. Les barres de statut sont utiles quand vous :Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
- Voulez surveiller l’utilisation de la fenêtre de contexte pendant que vous travaillez
- Avez besoin de suivre les coûts de session
- Travaillez sur plusieurs sessions et avez besoin de les distinguer
- Voulez que la branche git et l’état soient toujours visibles

Configurer une barre de statut
Utilisez la commande/statusline pour que Claude Code génère un script pour vous, ou créez manuellement un script et ajoutez-le à vos paramètres.
Utiliser la commande /statusline
La commande/statusline accepte des instructions en langage naturel décrivant ce que vous voulez afficher. Claude Code génère un fichier script dans ~/.claude/ et met à jour vos paramètres automatiquement :
Configurer manuellement une barre de statut
Ajoutez un champstatusLine à vos paramètres utilisateur (~/.claude/settings.json, où ~ est votre répertoire personnel) ou paramètres de projet. Définissez type sur "command" et pointez command vers un chemin de script ou une commande shell en ligne. Pour une procédure complète de création d’un script, voir Construire une barre de statut étape par étape.
command s’exécute dans un shell, vous pouvez donc aussi utiliser des commandes en ligne au lieu d’un fichier script. Cet exemple utilise jq pour analyser l’entrée JSON et afficher le nom du modèle et le pourcentage de contexte :
padding ajoute un espacement horizontal supplémentaire (en caractères) au contenu de la barre de statut. Par défaut 0. Cet espacement s’ajoute à l’espacement intégré de l’interface, il contrôle donc l’indentation relative plutôt que la distance absolue du bord du terminal.
Le champ optionnel refreshInterval réexécute votre commande toutes les N secondes en plus des mises à jour basées sur les événements. Le minimum est 1. Définissez ceci quand votre barre de statut affiche des données basées sur le temps comme une horloge, ou quand les sous-agents en arrière-plan modifient l’état git pendant que la session principale est inactive. Laissez-le non défini pour s’exécuter uniquement sur les événements.
Le champ optionnel hideVimModeIndicator supprime le texte intégré -- INSERT -- sous l’invite. Définissez ceci sur true quand votre script affiche vim.mode lui-même, afin que le mode ne soit pas affiché deux fois.
Désactiver la barre de statut
Exécutez/statusline et demandez-lui de supprimer ou d’effacer votre barre de statut (par exemple, /statusline delete, /statusline clear, /statusline remove it). Vous pouvez aussi supprimer manuellement le champ statusLine de votre settings.json.
Construire une barre de statut étape par étape
Cette procédure montre ce qui se passe sous le capot en créant manuellement une barre de statut qui affiche le modèle actuel, le répertoire de travail et le pourcentage d’utilisation de la fenêtre de contexte.L’exécution de
/statusline avec une description de ce que vous voulez configure tout cela automatiquement pour vous.
Créer un script qui lit JSON et imprime la sortie
Claude Code envoie les données JSON à votre script via stdin. Ce script utilise
jq, un analyseur JSON en ligne de commande que vous devrez peut-être installer, pour extraire le nom du modèle, le répertoire et le pourcentage de contexte, puis imprime une ligne formatée.Enregistrez ceci dans ~/.claude/statusline.sh (où ~ est votre répertoire personnel, tel que /Users/username sur macOS ou /home/username sur Linux) :Ajouter aux paramètres
Dites à Claude Code d’exécuter votre script comme barre de statut. Ajoutez cette configuration à Votre barre de statut apparaît en bas de l’interface. Les paramètres se rechargent automatiquement, mais les modifications n’apparaîtront pas avant votre prochaine interaction avec Claude Code.
~/.claude/settings.json, qui définit type sur "command" (ce qui signifie « exécuter cette commande shell ») et pointe command vers votre script :Comment fonctionnent les barres de statut
Claude Code exécute votre script et envoie les données de session JSON via stdin. Votre script lit le JSON, extrait ce dont il a besoin et imprime du texte sur stdout. Claude Code affiche tout ce que votre script imprime. Quand elle se met à jour Votre script s’exécute après chaque nouveau message d’assistant, après que/compact se termine, quand le mode de permission change, ou quand le mode vim bascule. Les mises à jour sont débogées à 300 ms, ce qui signifie que les changements rapides se regroupent et votre script s’exécute une fois que les choses se stabilisent. Si une nouvelle mise à jour se déclenche pendant que votre script s’exécute encore, l’exécution en cours est annulée. Si vous modifiez votre script, les modifications n’apparaîtront pas avant que votre prochaine interaction avec Claude Code ne déclenche une mise à jour.
Ces déclencheurs peuvent devenir silencieux quand la session principale est inactive, par exemple pendant qu’un coordinateur attend les sous-agents en arrière-plan. Pour garder les segments basés sur le temps ou provenant de sources externes à jour pendant les périodes inactives, définissez refreshInterval pour aussi réexécuter la commande sur un minuteur fixe.
Ce que votre script peut afficher
- Plusieurs lignes : chaque instruction
echoouprints’affiche comme une ligne séparée. Voir l’exemple multi-lignes. - Couleurs : utilisez les codes d’échappement ANSI comme
\033[32mpour le vert (le terminal doit les supporter). Voir l’exemple d’état git. - Liens : utilisez les séquences d’échappement OSC 8 pour rendre le texte cliquable (Cmd+clic sur macOS, Ctrl+clic sur Windows/Linux). Nécessite un terminal qui supporte les hyperliens comme iTerm2, Kitty ou WezTerm. Voir l’exemple de liens cliquables.
La barre de statut s’exécute localement et ne consomme pas de jetons API. Elle se cache temporairement pendant certaines interactions UI, y compris les suggestions d’autocomplétion, le menu d’aide et les invites de permission.
Données disponibles
Claude Code envoie les champs JSON suivants à votre script via stdin :| Champ | Description |
|---|---|
model.id, model.display_name | Identifiant du modèle actuel et nom d’affichage |
cwd, workspace.current_dir | Répertoire de travail actuel. Les deux champs contiennent la même valeur ; workspace.current_dir est préféré pour la cohérence avec workspace.project_dir. |
workspace.project_dir | Répertoire où Claude Code a été lancé, qui peut différer de cwd si le répertoire de travail change pendant une session |
workspace.added_dirs | Répertoires supplémentaires ajoutés via /add-dir ou --add-dir. Tableau vide si aucun n’a été ajouté |
workspace.git_worktree | Nom du git worktree quand le répertoire actuel se trouve à l’intérieur d’un worktree lié créé avec git worktree add. Absent dans le worktree principal. Rempli pour n’importe quel git worktree, contrairement à worktree.* qui s’applique uniquement aux sessions --worktree |
cost.total_cost_usd | Coût total estimé de la session en USD, calculé côté client. Peut différer de votre facture réelle |
cost.total_duration_ms | Temps écoulé total depuis le début de la session, en millisecondes |
cost.total_api_duration_ms | Temps total passé à attendre les réponses API en millisecondes |
cost.total_lines_added, cost.total_lines_removed | Lignes de code modifiées |
context_window.total_input_tokens, context_window.total_output_tokens | Comptages de jetons actuellement dans la fenêtre de contexte, à partir de la réponse API la plus récente. L’entrée inclut les lectures et écritures du cache. Avant v2.1.132, il s’agissait de totaux cumulatifs de session |
context_window.context_window_size | Taille maximale de la fenêtre de contexte en jetons. 200 000 par défaut, ou 1 000 000 pour les modèles avec contexte étendu. |
context_window.used_percentage | Pourcentage pré-calculé de fenêtre de contexte utilisée |
context_window.remaining_percentage | Pourcentage pré-calculé de fenêtre de contexte restante |
context_window.current_usage | Comptages de jetons du dernier appel API, décrits dans champs de fenêtre de contexte |
exceeds_200k_tokens | Si le comptage total de jetons (jetons d’entrée, de cache et de sortie combinés) de la réponse API la plus récente dépasse 200 k. C’est un seuil fixe indépendamment de la taille réelle de la fenêtre de contexte. |
effort.level | Effort de raisonnement actuel (low, medium, high, xhigh, ou max). Reflète la valeur de session en direct, y compris les changements /effort en cours de session. Absent quand le modèle actuel ne supporte pas le paramètre d’effort |
thinking.enabled | Si la réflexion étendue est activée pour la session |
rate_limits.five_hour.used_percentage, rate_limits.seven_day.used_percentage | Pourcentage de la limite de débit de 5 heures ou 7 jours consommée, de 0 à 100 |
rate_limits.five_hour.resets_at, rate_limits.seven_day.resets_at | Secondes d’époque Unix quand la fenêtre de limite de débit de 5 heures ou 7 jours se réinitialise |
session_id | Identifiant de session unique |
session_name | Nom de session personnalisé défini avec l’indicateur --name ou /rename. Absent si aucun nom personnalisé n’a été défini |
transcript_path | Chemin vers le fichier de transcription de conversation |
version | Version de Claude Code |
output_style.name | Nom du style de sortie actuel |
vim.mode | Mode vim actuel (NORMAL, INSERT, VISUAL, ou VISUAL LINE) quand le mode vim est activé |
agent.name | Nom de l’agent lors de l’exécution avec l’indicateur --agent ou les paramètres d’agent configurés |
worktree.name | Nom du worktree actif. Présent uniquement pendant les sessions --worktree |
worktree.path | Chemin absolu vers le répertoire du worktree |
worktree.branch | Nom de la branche git pour le worktree (par exemple, "worktree-my-feature"). Absent pour les worktrees basés sur des hooks |
worktree.original_cwd | Le répertoire dans lequel Claude se trouvait avant d’entrer dans le worktree |
worktree.original_branch | Branche git extraite avant d’entrer dans le worktree. Absent pour les worktrees basés sur des hooks |
Schéma JSON complet
Schéma JSON complet
Votre commande de barre de statut reçoit cette structure JSON via stdin :Champs qui peuvent être absents (non présents dans JSON) :
session_name: apparaît uniquement quand un nom personnalisé a été défini avec--nameou/renameworkspace.git_worktree: apparaît uniquement quand le répertoire actuel se trouve à l’intérieur d’un git worktree liéeffort: apparaît uniquement quand le modèle actuel supporte le paramètre d’effort de raisonnementvim: apparaît uniquement quand le mode vim est activéagent: apparaît uniquement lors de l’exécution avec l’indicateur--agentou les paramètres d’agent configurésworktree: apparaît uniquement pendant les sessions--worktree. Quand présent,branchetoriginal_branchpeuvent aussi être absents pour les worktrees basés sur des hooksrate_limits: apparaît uniquement pour les abonnés Claude.ai (Pro/Max) après la première réponse API dans la session. Chaque fenêtre (five_hour,seven_day) peut être indépendamment absente. Utilisezjq -r '.rate_limits.five_hour.used_percentage // empty'pour gérer l’absence avec élégance.
null :context_window.current_usage:nullavant le premier appel API dans une session, et à nouveau après/compactjusqu’à ce que le prochain appel API le remplisse à nouveaucontext_window.used_percentage,context_window.remaining_percentage: peuvent êtrenullau début de la session
Champs de fenêtre de contexte
L’objetcontext_window décrit la fenêtre de contexte en direct à partir de la réponse API la plus récente. À partir de v2.1.132, total_input_tokens et total_output_tokens reflètent l’utilisation du contexte actuel, et non les totaux cumulatifs de session.
- Totaux combinés (
total_input_tokens,total_output_tokens) : jetons actuellement dans la fenêtre de contexte.total_input_tokensest la somme deinput_tokens,cache_creation_input_tokens, etcache_read_input_tokens;total_output_tokensest les jetons de sortie de la réponse la plus récente. Les deux sont0avant la première réponse API. - Utilisation par composant (
current_usage) : les mêmes comptages de jetons ventilés par catégorie. Utilisez ceci quand vous avez besoin des accès au cache séparés de l’entrée fraîche.
current_usage contient :
input_tokens: jetons d’entrée dans le contexte actueloutput_tokens: jetons de sortie généréscache_creation_input_tokens: jetons écrits dans le cachecache_read_input_tokens: jetons lus du cache
used_percentage est calculé à partir des jetons d’entrée uniquement : input_tokens + cache_creation_input_tokens + cache_read_input_tokens. Il n’inclut pas output_tokens.
Si vous calculez le pourcentage de contexte manuellement à partir de current_usage, utilisez la même formule d’entrée uniquement pour correspondre à used_percentage.
L’objet current_usage est null avant le premier appel API dans une session, et à nouveau immédiatement après /compact jusqu’à ce que le prochain appel API le remplisse à nouveau.
Exemples
Ces exemples montrent les modèles courants de barre de statut. Pour utiliser n’importe quel exemple :- Enregistrez le script dans un fichier comme
~/.claude/statusline.sh(ou.py/.js) - Le rendre exécutable :
chmod +x ~/.claude/statusline.sh - Ajouter le chemin à vos paramètres
jq pour analyser JSON. Python et Node.js ont l’analyse JSON intégrée.
Utilisation de la fenêtre de contexte
Affiche le modèle actuel et l’utilisation de la fenêtre de contexte avec une barre de progression visuelle. Chaque script lit JSON depuis stdin, extrait le champused_percentage et construit une barre de 10 caractères où les blocs remplis (▓) représentent l’utilisation :

État git avec couleurs
Affiche la branche git avec des indicateurs codés par couleur pour les fichiers en attente et modifiés. Ce script utilise les codes d’échappement ANSI pour les couleurs de terminal :\033[32m est vert, \033[33m est jaune, et \033[0m réinitialise à la valeur par défaut.

Suivi des coûts et de la durée
Suivez les coûts API de votre session et le temps écoulé. Le champcost.total_cost_usd accumule le coût estimé de tous les appels API dans la session actuelle. Le champ cost.total_duration_ms mesure le temps écoulé total depuis le début de la session, tandis que cost.total_api_duration_ms suit uniquement le temps passé à attendre les réponses API.
Chaque script formate le coût en devise et convertit les millisecondes en minutes et secondes :

Afficher plusieurs lignes
Votre script peut afficher plusieurs lignes pour créer un affichage plus riche. Chaque instructionecho produit une ligne séparée dans la zone de statut.

print ou echo crée une ligne séparée :
Liens cliquables
Cet exemple crée un lien cliquable vers votre dépôt GitHub. Il lit l’URL du dépôt distant, convertit le format SSH en HTTPS avecsed et enveloppe le nom du dépôt dans les codes d’échappement OSC 8. Maintenez Cmd (macOS) ou Ctrl (Windows/Linux) et cliquez pour ouvrir le lien dans votre navigateur.

printf '%b' qui interprète les échappements de barre oblique inverse de manière plus fiable que echo -e sur différents shells :
Utilisation des limites de débit
Affiche l’utilisation des limites de débit d’abonnement Claude.ai dans la barre de statut. L’objetrate_limits contient five_hour (fenêtre glissante de 5 heures) et seven_day (fenêtres hebdomadaires). Chaque fenêtre fournit used_percentage (0-100) et resets_at (secondes d’époque Unix quand la fenêtre se réinitialise).
Ce champ n’est présent que pour les abonnés Claude.ai (Pro/Max) après la première réponse API. Chaque script gère le champ absent avec élégance :
Mettre en cache les opérations coûteuses
Votre script de barre de statut s’exécute fréquemment pendant les sessions actives. Les commandes commegit status ou git diff peuvent être lentes, surtout dans les grands dépôts. Cet exemple met en cache les informations git dans un fichier temporaire et ne les actualise que toutes les 5 secondes.
Le nom du fichier de cache doit être stable dans les invocations de barre de statut au sein d’une session, mais unique dans les sessions afin que les sessions concurrentes dans différents dépôts ne lisent pas l’état git en cache les unes des autres. Les identifiants basés sur les processus comme $$, os.getpid() ou process.pid changent à chaque invocation et annulent le cache. Utilisez plutôt le session_id de l’entrée JSON : il est stable pour la durée de vie d’une session et unique par session.
Chaque script vérifie si le fichier de cache est manquant ou plus ancien que 5 secondes avant d’exécuter les commandes git :
Configuration Windows
Sur Windows, Claude Code exécute les commandes de barre de statut via Git Bash quand Git Bash est installé, ou via PowerShell quand Git Bash est absent. Pour exécuter un script PowerShell comme votre barre de statut, invoquez-le viapowershell ; cela fonctionne à partir de l’un ou l’autre shell :
Barres de statut des sous-agents
Le paramètresubagentStatusLine rend un corps de ligne personnalisé pour chaque sous-agent affiché dans le panneau d’agent sous l’invite. Utilisez-le pour remplacer la ligne par défaut name · description · token count par votre propre formatage.
columns (la largeur de ligne utilisable) et un tableau tasks, où chaque tâche a id, name, type, status, description, label, startTime, tokenCount, tokenSamples et cwd.
Écrivez une ligne JSON sur stdout par ligne que vous voulez remplacer, sous la forme {"id": "<task id>", "content": "<row body>"}. La chaîne content est rendue telle quelle, y compris les couleurs ANSI et les hyperliens OSC 8. Omettez le id d’une tâche pour conserver le rendu par défaut pour cette ligne ; émettez une chaîne content vide pour la masquer.
Les mêmes portes de confiance et disableAllHooks qui s’appliquent à statusLine s’appliquent ici. Les plugins peuvent expédier un subagentStatusLine par défaut dans leur settings.json.
Conseils
- Tester avec une entrée fictive :
echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh - Garder la sortie courte : la barre de statut a une largeur limitée, donc une sortie longue peut être tronquée ou s’enrouler maladroitement
- Mettre en cache les opérations lentes : votre script s’exécute fréquemment pendant les sessions actives, donc les commandes comme
git statuspeuvent causer des ralentissements. Voir l’exemple de mise en cache pour savoir comment gérer cela.
Dépannage
La barre de statut n’apparaît pas- Vérifiez que votre script est exécutable :
chmod +x ~/.claude/statusline.sh - Vérifiez que votre script affiche sur stdout, pas stderr
- Exécutez votre script manuellement pour vérifier qu’il produit une sortie
- Si
disableAllHooksest défini surtruedans vos paramètres, la barre de statut est également désactivée. Supprimez ce paramètre ou définissez-le surfalsepour le réactiver. - Exécutez
claude --debugpour enregistrer le code de sortie et stderr de la première invocation de barre de statut dans une session - Demandez à Claude de lire votre fichier de paramètres et d’exécuter la commande
statusLinedirectement pour afficher les erreurs
-- ou des valeurs vides
- Les champs peuvent être
nullavant la fin de la première réponse API - Gérez les valeurs null dans votre script avec des valeurs par défaut de secours telles que
// 0dans jq - Redémarrez Claude Code si les valeurs restent vides après plusieurs messages
- Utilisez
used_percentagepour l’état de contexte le plus simple et précis - Le pourcentage de contexte peut différer de la sortie
/contexten raison du moment où chacun est calculé
- Vérifiez que votre terminal supporte les hyperliens OSC 8 (iTerm2, Kitty, WezTerm)
- Terminal.app ne supporte pas les liens cliquables
-
Si le texte du lien apparaît mais n’est pas cliquable, Claude Code peut ne pas avoir détecté le support des hyperliens dans votre terminal. Cela affecte couramment Windows Terminal et d’autres émulateurs ne figurant pas dans la liste de détection automatique. Définissez la variable d’environnement
FORCE_HYPERLINKpour remplacer la détection avant de lancer Claude Code :Dans PowerShell, définissez d’abord la variable dans la session actuelle : - Les sessions SSH et tmux peuvent supprimer les séquences OSC selon la configuration
-
Si les séquences d’échappement apparaissent comme du texte littéral comme
\e]8;;, utilisezprintf '%b'au lieu deecho -epour une gestion plus fiable des échappements
- Les séquences d’échappement complexes (couleurs ANSI, liens OSC 8) peuvent occasionnellement causer une sortie brouillée si elles chevauchent d’autres mises à jour UI
- Si vous voyez du texte corrompu, essayez de simplifier votre script en sortie en texte brut
- Les barres de statut multi-lignes avec codes d’échappement sont plus sujettes aux problèmes de rendu que le texte brut sur une seule ligne
- La commande de barre de statut s’exécute uniquement si vous avez accepté la boîte de dialogue de confiance de l’espace de travail pour le répertoire actuel. Parce que
statusLineexécute une commande shell, elle nécessite la même acceptation de confiance que les hooks et autres paramètres exécutant des shells. - Si la confiance n’est pas acceptée, vous verrez la notification
statusline skipped · restart to fixau lieu de votre sortie de barre de statut. Redémarrez Claude Code et acceptez l’invite de confiance pour l’activer.
- Les scripts qui se terminent avec des codes non nuls ou ne produisent aucune sortie font que la barre de statut devient vide
- Les scripts lents bloquent la barre de statut de se mettre à jour jusqu’à ce qu’ils se terminent. Gardez les scripts rapides pour éviter une sortie obsolète.
- Si une nouvelle mise à jour se déclenche pendant qu’un script lent s’exécute, le script en cours est annulé
- Testez votre script indépendamment avec une entrée fictive avant de le configurer
- Les notifications système comme les erreurs de serveur MCP et les mises à jour automatiques s’affichent sur le côté droit de la même ligne que votre barre de statut. Les notifications transitoires telles que l’avertissement de contexte faible circulent également dans cette zone.
- L’activation du mode verbeux ajoute un compteur de jetons à cette zone
- Sur les terminaux étroits, ces notifications peuvent tronquer votre sortie de barre de statut