| Následující verze | Předchozí verze |
| ai:platformy:claude-code:statusline [11.04.2026 12:22] – Věrná migrace z software:vyvoj:claude-code:statusline do ai:platformy:claude-code:statusline; upraven pouze interní odkaz na nový namespace. Petr Nosek | ai:platformy:claude-code:statusline [08.05.2026 21:45] (aktuální) – Zjednodušení: ctx% čteno přímo z used_percentage. Doplněny poznatky z oficiální dokumentace (total_input_tokens zahrnuje cache, used_percentage existuje). Petr Nosek |
|---|
| ====== Status line pro Claude Code ====== | ====== Status line pro Claude Code ====== |
| |
| [[ai:platformy:claude-code:start|Claude Code]] umí vykreslovat vlastní status line spuštěný jako externí příkaz. Tohle je moje varianta, která drží stabilní pořadí polí a na jeden pohled ukazuje pracovní adresář, model, session ID, využití kontextu, 5h a 7d limity i informaci, jestli session nepřelezla hranici 200k tokenů. | //Vytvořeno: **** | Aktualizováno: **~~LASTMOD~~**// |
| | |
| | [[ai:platformy:claude-code:start|Claude Code]] umí vykreslovat vlastní status line spuštěný jako externí příkaz. Tohle je moje varianta, která drží stabilní pořadí polí a na jeden pohled ukazuje pracovní adresář, model, session ID, využití kontextu, 5h a 7d limity i absolutní spotřebu tokenů context window se zvýrazněním nad hranicí 200k. |
| |
| ===== Co z toho získám ===== | ===== Co z toho získám ===== |
| |
| * Aktuální pracovní adresář zkrácený relativně k ''$HOME'', takže místo celé cesty vidím jen ''~'' nebo ''~/...''. | * Aktuální pracovní adresář projektu (root, kde byl Claude Code spuštěn) zkrácený relativně k ''$HOME'', takže místo celé cesty vidím jen ''~'' nebo ''~/...''. Adresář se v průběhu session nemění, i když shell přejde do podadresáře. |
| * Použitý model a session ID přímo ve status line. | * Použitý model a session ID přímo ve status line. |
| * Využití context window v procentech. | * Využití context window v procentech, čtené přímo z předpočítaného pole ''used_percentage''. |
| * 5hodinový a 7denní limit, včetně času resetu, pokud je Claude Code pošle v JSONu. | * 5hodinový a 7denní limit, včetně času resetu, pokud je Claude Code pošle v JSONu. |
| * Rychlý signál, jestli session už překročila hranici 200k tokenů. | * Absolutní spotřebu tokenů context window ve formátu ''XYZk/TOTALk''. Hodnota celkového okna se čte dynamicky, takže funguje i pro 1M context window. Červeně se rozsvítí při překročení 200k tokenů. |
| * Barevné zvýraznění podle vytížení: zelená pod 70 %, žlutá od 70 %, červená od 90 %. | * Barevné zvýraznění podle vytížení: zelená pod 70 %, žlutá od 70 %, červená od 90 %. |
| |
| |
| <code> | <code> |
| ~/scratch │ Sonnet 4.6 | sid:<id> │ ctx:23% │ <200k | ~/scratch │ Sonnet 4.6 | sid:<id> │ ctx:23% │ 92k/400k |
| </code> | </code> |
| |
| |
| <code> | <code> |
| ~/project-dokuwiki │ Sonnet 4.6 | sid:<id> │ ctx:23% │ 5h:41% ↺ 01:15 │ 7d:68% ↺ Ne 10:00 │ <200k | ~/project-procesniaudit-website │ Sonnet 4.6 │ ctx:55% │ 5h:4% ↺ 00:50 │ 7d:45% ↺ Po 08:00 │ 220k/400k |
| </code> | </code> |
| |
| * sid → dim | * sid → dim |
| * ''ctx'', ''5h'' a ''7d'' → zelená pod 70 %, žlutá od 70 %, červená od 90 % | * ''ctx'', ''5h'' a ''7d'' → zelená pod 70 %, žlutá od 70 %, červená od 90 % |
| * ''>200k'' → červeně a tučně | * token counter ''XYZk/TOTALk'' → červeně a tučně při překročení 200k, jinak dim |
| * ''<200k'' → dim | |
| |
| ===== Celý skript ===== | ===== Celý skript ===== |
| |
| # ── 1) cwd ───────────────────────────────────────────────────────────────────── | # ── 1) cwd ───────────────────────────────────────────────────────────────────── |
| cwd=$(echo "$input" | jq -r '.workspace.current_dir // .cwd // ""') | cwd=$(echo "$input" | jq -r '.workspace.project_dir // .workspace.current_dir // .cwd // ""') |
| # Show path relative to home dir | # Show path relative to home dir |
| home_dir="$HOME" | home_dir="$HOME" |
| } | } |
| |
| # ── exceeds_200k ─────────────────────────────────────────────────────────────── | |
| exceeds=$(echo "$input" | jq -r '.exceeds_200k_tokens // false') | |
| |
| # ── 3) context used ──────────────────────────────────────────────────────────── | # ── 3) context used ──────────────────────────────────────────────────────────── |
| ctx_used_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty') | ctx_used_tokens=$(echo "$input" | jq -r '.context_window.total_input_tokens // empty') |
| | ctx_window_size=$(echo "$input" | jq -r '.context_window.context_window_size // empty') |
| | ctx_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty') |
| ctx_str="" | ctx_str="" |
| if [ -n "$ctx_used_pct" ]; then | if [ -n "$ctx_pct" ]; then |
| ctx_int=$(printf "%.0f" "$ctx_used_pct") | ctx_int=$(printf "%.0f" "$ctx_pct") |
| if [ "$ctx_int" -ge 90 ]; then | if [ "$ctx_int" -ge 90 ]; then |
| ctx_str="$(printf "${RED}${BOLD}ctx:%s%%!${RESET}" "$ctx_int")" | ctx_str="$(printf "${RED}${BOLD}ctx:%s%%!${RESET}" "$ctx_int")" |
| fi | fi |
| |
| # 6) exceeds_200k signal | # 6) token counter — červeně od 200k |
| if [ "$exceeds" = "true" ]; then | if [ -n "$ctx_used_tokens" ] && [ -n "$ctx_window_size" ] && [ "$ctx_window_size" -gt 0 ]; then |
| parts+=("$(printf "${RED}${BOLD}>200k${RESET}")") | ctx_used_k=$(python3 -c "print(round($ctx_used_tokens / 1000))") |
| else | ctx_total_k=$(python3 -c "print(round($ctx_window_size / 1000))") |
| parts+=("$(printf "${DIM}<200k${RESET}")") | if [ "$ctx_used_tokens" -gt 200000 ]; then |
| | parts+=("$(printf "${RED}${BOLD}%sk/%sk${RESET}" "$ctx_used_k" "$ctx_total_k")") |
| | else |
| | parts+=("$(printf "${DIM}%sk/%sk${RESET}" "$ctx_used_k" "$ctx_total_k")") |
| | fi |
| fi | fi |
| |
| * Pole ''5h'' a ''7d'' se zobrazí jen když Claude Code skutečně pošle ''rate_limits''. | * Pole ''5h'' a ''7d'' se zobrazí jen když Claude Code skutečně pošle ''rate_limits''. |
| * Funkce ''fmt_reset_short()'' a ''fmt_reset_long()'' zvládnou jak unix epoch, tak ISO-8601 string. | * Funkce ''fmt_reset_short()'' a ''fmt_reset_long()'' zvládnou jak unix epoch, tak ISO-8601 string. |
| | * Pro cwd se primárně čte ''.workspace.project_dir'' — pole, které Claude Code nastavuje na root projektu (kde byl spuštěn) a nemění se v průběhu session, i když shell přejde do podadresáře. Pole ''.workspace.current_dir'' a ''.cwd'' jsou jen fallback. |
| | * Procento využití context window se čte přímo z ''context_window.used_percentage'' — předpočítané pole, které Claude Code posílá od verze 2.1.132. Pokrývá vstupní tokeny včetně cache: ''used_percentage'' = (''input_tokens'' + ''cache_creation_input_tokens'' + ''cache_read_input_tokens'') / ''context_window_size''. Výstupní tokeny do procenta nezahrnuje, ale ani do ''XYZk'' v token counteru (tam se čte ''total_input_tokens'', které je součtem stejných tří složek). |
| | * ''total_input_tokens'' zahrnuje všechny vstupní tokeny včetně cache a od v2.1.132 reprezentuje aktuální stav context window, nikoli kumulativní součet přes celou session. |
| | * Skript záměrně nepoužívá příznak ''exceeds_200k_tokens'' — ten vychází z tokenů aktuálního API volání (input + output + cache) a má pevnou hranici 200k bez ohledu na skutečnou velikost okna. Místo toho skript ukazuje aktuální stav v segmentu ''XYZk/TOTALk''. |
| * Když některé pole v JSONu chybí, skript se nerozbije a prostě ho přeskočí. | * Když některé pole v JSONu chybí, skript se nerozbije a prostě ho přeskočí. |
| * Pořadí polí je pevné: ''cwd'' → ''model + sid'' → ''ctx'' → ''5h'' → ''7d'' → ''>200k/<200k''. | * Pořadí polí je pevné: ''cwd'' → ''model + sid'' → ''ctx'' → ''5h'' → ''7d'' → ''XYZk/TOTALk''. |
| | |
| | ===== Zdroje ===== |
| | |
| | * [[https://code.claude.com/docs/en/statusline|Claude Code – Customize your status line (oficiální dokumentace)]] |