-- NORMAL -- ~/projets/claude-status-line.md projet 03 / 06

claude-status-line

L’usage de votre abonnement Claude Code, mesuré sur une seule ligne, sous la zone de saisie.

Stack
TypeScript · Bun
Année
2026
Dépôt
github.com/Popoch39/claude-status-line ↗
A

Anatomie

8 pièces · une seule les compte
Fig. 1 Rampe à cadran — fenêtre de 5 h et semaine
2h143jv1.0.0
  1. Choisir la source

    Prend les limites de Claude Code, sinon de l’API, sinon du cache.

    resolveRateLimits()

    214async function resolveRateLimits(

    215 fromStdin?: RateLimits,

    216): Promise<RateLimits | undefined> {

  2. Demander à l’API

    Interroge l’API Anthropic avec votre jeton, en 2,5 s au plus.

    readOAuthToken()

    157const CREDENTIALS_PATH = join(homedir(), ".claude", ".credentials.json");

    158const FETCH_TIMEOUT_MS = 2500; // borne la latence ajoutée au démarrage

    160function readOAuthToken(): string | undefined {

  3. 03~/.claudeL115–145 ↗

    Garder une copie

    Range les dernières limites dans un fichier JSON de secours.

    readCache()

    120const CACHE_PATH = join(homedir(), ".claude", ".statusline-cache.json");

    122type RateLimits = NonNullable<StatusInput["rate_limits"]>;

    125function readCache(): RateLimits | undefined {

  4. 04render()L231–254 ↗

    Assembler la ligne

    Modèle · dossier · 5h · sem, sur une seule ligne de terminal.

    render()

    231async function render(): Promise<void> {

    232 const data = (await Bun.stdin.json().catch(() => ({}))) as StatusInput;

    234 const segments: string[] = [];

  5. Dessiner les barres

    Dix cases par fenêtre : 68 % donne sept cases pleines.

    windowSegment()

    103function windowSegment(label: string, win?: Window): string {

    104 const pct = win?.used_percentage;

    105 if (pct == null) return `${C.dim}${label} —${C.reset}`;

  6. 06colorFor()L52–69 ↗

    Colorer selon l’usage

    Vert sous 50 %, jaune jusqu’à 80 %, rouge au-delà.

    colorFor()

    53function colorFor(pct: number): string {

    54 if (pct > 80) return C.red;

    55 if (pct >= 50) return C.yellow;

  7. 07fmtReset()L73–85 ↗

    Compter jusqu’au reset

    Le temps avant la remise à zéro : 3j, 2h14 ou 14m.

    fmtReset()

    74function fmtReset(epochSec?: number): string {

    75 if (epochSec == null) return "";

    76 const delta = epochSec - Date.now() / 1000;

  8. 08refreshIntervalL280–285 ↗

    Recommencer chaque minute

    Claude Code relance le binaire toutes les 60 secondes.

    settings.statusLine

    280settings.statusLine = {

    281 type: "command",

    282 command,

stdin · 5h 68 % · reset 2h14 · sem 41 % · 3j
Lecture des notes

Glissez la règle ou la figure pour faire avancer le temps ; les triangles marquent les événementsGlissez la règle ou la figure du doigt ; les triangles marquent les événements

Fig. 1 — Tant que Claude Code n’a pas encore fourni ses limites sur stdin, l’aiguillage interroge l’API (un jeton, 2,5 s au plus) ou relit le cache. Chaque pourcentage est ensuite borné à 0–100 et arrondi en dix cases : une lame se lève dès 5, 15, …, 95 %. Le cadran le juge sous 50, de 50 à 80 ou au-delà, et les tambours écrivent le délai de reset en jours, en heures-minutes ou en minutes. Les pourcentages sont un exemple, le traitement est celui du code.

Nomen­clature

  1. 01 Tête d’aiguillage Boisseau rotatif à levier et trois crans, stdin, API et cache : il choisit d’où viennent les limites à chaque rendu. Code : statusline.ts, lignes 211–227 ↗
  2. 02 Sonde API Plongeur à ressort et bague de temporisation de 2,5 s : il demande un jeton et revient avec les en-têtes anthropic-ratelimit-unified-*. Code : statusline.ts, lignes 157–209 ↗
  3. 03 Capsule de cache Capsule tournée, vissée sous la tête : frappée à chaque écriture, elle montre son contenu par une fenêtre témoin et n’est relue qu’en dernier recours. Code : statusline.ts, lignes 115–145 ↗
  4. 04 Rampe Profilé qui porte les segments dans l’ordre, modèle, dossier, puis les deux fenêtres, séparés par trois goujons « · » : il sort une seule ligne. Code : statusline.ts, lignes 231–254 ↗
  5. 05 Peignes à dix lames Un module par fenêtre, 5h puis sem : un peigne de dix lames, une par case de la barre. Sans pourcentage, les dix lames restent baissées. Code : statusline.ts, lignes 103–109 ↗
  6. 06 Cadran à deux aiguilles Échelle de 0 à 100 % en trois zones, sous 50, de 50 à 80 et au-delà : il borne, arrondit et juge chaque pourcentage, aiguille longue pour 5h, courte pour la semaine. Code : statusline.ts, lignes 52–69 ↗
  7. 07 Tambours de reset Compteurs dans la face de chaque module : le délai avant reset en jours, en heures-minutes ou en minutes, « — » sans pourcentage. Code : statusline.ts, lignes 73–85 ↗
  8. 08 Volant du temps et croix de Malte Un tour de volant fait soixante crans de croix de Malte : un rendu de la status line par cran, toutes les 60 secondes de refreshInterval. Code : statusline.ts, lignes 280–285 ↗