4 min čítania
Chýbajúci ukazovateľ
Dlhé sedenia s Claude Code končievajú rovnako. Kontextové okno sa zaplní, spustí sa auto-compact a model sa vráti bez polovice toho, na čom ste sa dohodli. Začne nanovo rozhodovať o veciach, ktoré ste uzavreli pred dvoma hodinami.
Nič z toho nemusí byť prekvapenie. Claude Code pri každom prekreslení počíta, ako plné okno je. Len to číslo nikdy nenakreslí.
Stavový riadok to rieši. Je to jeden riadok vypísaný pod promptom, generuje ho príkaz podľa vášho výberu a zobrazuje, čo sami uznáte za dôležité. Ten môj ukazuje šesť vecí.
Edit(statusline.py)
Updated 4 files · +312 -88
- 1ModelKtorý model práve odpovedá. Užitočné, keď máte otvorených viac sedení s rôznymi modelmi.
- 2Voľný kontextRezerva pred auto-compactom. Práve tento údaj rozhoduje, či sedenie prežije.
- 3VetvaAktuálna git vetva. Hviezdička znamená neuložené zmeny v pracovnom strome.
- 4ZmenyRiadky, ktoré agent pridal a odobral. Veľkosť diffu, ktorý vás ešte čaká pri kontrole.
- 5TokenyVyužitý kontext voči veľkosti okna. Variant s 1M oknom sa deteguje za behu, nikdy sa nepredpokladá.
- 6ProjektNázov adresára projektu, aby sa štyri terminálové karty nikdy nepomiešali.
Druhý segment je dôvod, prečo existuje zvyšných päť.
Kontrakt má štyri riadky
Claude Code od vás dostane príkaz. Pred každým prekreslením mu pošle na stdin JSON snímku sedenia a to, čo príkaz vypíše na stdout, sa stane stavovým riadkom. To je celé API, takže celá vec je vlastne filter:
import json, sys
data = json.load(sys.stdin)
print(data["model"]["display_name"])Nasmerujte naň settings.json a máte funkčný stavový riadok:
{
"statusLine": {
"type": "command",
"command": "python3 ~/.claude/statusline.py"
}
}Všetko ostatné je už len rozhodovanie o tom, čo si to miesto zaslúži.
Jediná časť, ktorá nie je zrejmá
Spotreba tokenov žije v prepise, JSONL súbore s jednou správou na riadok. Lákavé je sčítať input_tokens cez všetky riadky. Výsledok rastie rýchlo, pôsobí uveriteľne a je poriadne nafúknutý.
Tu je dôvod. Model nemá medzi ťahmi žiadnu pamäť, takže každý ťah posiela celú konverzáciu nanovo ako vstup. Spotreba každého ťahu preto už opisuje všetko doteraz odoslané: ak prvý ťah stál 10k tokenov a druhý pridá 2k, druhý vykáže 12k. Sčítajte riadky a dostanete 22k pre konverzáciu, ktorá zaberá 12k. Prompt caching výkaz iba rozdeľuje do troch priehradiek: čerstvé tokeny, tokeny prečítané z cache a tokeny práve zapísané do cache. Tri priehradky najnovšej správy dávajú presne to, čo práve sedí v okne:
for line in reversed(lines):
usage = (json.loads(line).get("message") or {}).get("usage")
if usage:
return (usage["input_tokens"]
+ usage["cache_read_input_tokens"]
+ usage["cache_creation_input_tokens"])Choďte odzadu, vezmite prvý riadok so spotrebou, sčítajte tri polia, koniec.
Pásik potrebuje aj menovateľa: kapacitu okna, ktorú JSON sedenia nikdy neuvádza priamo. Väčšina modelov beží na 200k, niektoré na 1M, takže skript overuje dve stopy a stačí mu ktorákoľvek: [1m] v identifikátore modelu alebo príznak exceeds_200k_tokens v dátach. Pomýľte sa na 1M sedení a pásik hlási prázdno pri 200k, hoci zostáva 800k miesta. Pásik, ktorý klame o vlastnej mierke, je horší než žiadny.
Tri pravidlá, vďaka ktorým je nudný
Skript beží pri každom prekreslení, priamo v termináli, v ktorom sa snažíte pracovať. To je nepriateľské miesto na vymýšľanie, preto sa drží troch pravidiel.
Nikdy nespadni. Stavový riadok, ktorý vyhodí výnimku, nahradí šesť užitočných faktov stack traceom, znova a znova. Každé riskantné volanie je obalené; pokazený vstup skončí vypísaním Claude Code a ide sa ďalej.
Nikdy sa nezasekni. Každé volanie git nesie timeout=0.25. Pomalý sieťový disk stojí štvrť sekundy, nie zamrznutý prompt.
Nikdy nič neinštaluj. Iba štandardná knižnica. Jeden súbor, curl a hotovo.
Čo sa zmenilo
Kompakcia už nie je niečo, čo sa mi stane. Keď pásik klesne pod dve políčka, dokončím myšlienku, commitnem a začnem čerstvé sedenie s kontextom, ktorý som si vybral sám, namiesto toho, čo prežilo automatický súhrn v najhoršej možnej chvíli.
A celé je to v necelej stovke riadkov Pythonu, ktoré sa zaplatia pri každom sedení.
Skript aj postup inštalácie sú v repozitári: status-line. Jeden súbor, štyri riadky konfigurácie, hotovo.
Zdieľať článok