| Obě strany předchozí revize Předchozí verze | |
| ai:platformy:claude-code:statusline [08.05.2026 21:28] – Oprava skriptu statusline: project_dir místo current_dir, dynamický ctx %, segment XYZk/TOTALk místo exceeds_200k. 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 |
|---|
| * 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. | * 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, počítané dynamicky ze skutečně vrácených polí JSONu. | * 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. |
| * 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ů. | * 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ů. |
| ctx_used_tokens=$(echo "$input" | jq -r '.context_window.total_input_tokens // 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_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_tokens" ] && [ -n "$ctx_window_size" ] && [ "$ctx_window_size" -gt 0 ]; then | if [ -n "$ctx_pct" ]; then |
| ctx_pct=$(python3 -c "print(round($ctx_used_tokens / $ctx_window_size * 100))") | ctx_int=$(printf "%.0f" "$ctx_pct") |
| if [ "$ctx_pct" -ge 90 ]; then | if [ "$ctx_int" -ge 90 ]; then |
| ctx_str="$(printf "${RED}${BOLD}ctx:%s%%!${RESET}" "$ctx_pct")" | ctx_str="$(printf "${RED}${BOLD}ctx:%s%%!${RESET}" "$ctx_int")" |
| elif [ "$ctx_pct" -ge 70 ]; then | elif [ "$ctx_int" -ge 70 ]; then |
| ctx_str="$(printf "${YELLOW}ctx:%s%%${RESET}" "$ctx_pct")" | ctx_str="$(printf "${YELLOW}ctx:%s%%${RESET}" "$ctx_int")" |
| else | else |
| ctx_str="$(printf "${GREEN}ctx:%s%%${RESET}" "$ctx_pct")" | ctx_str="$(printf "${GREEN}ctx:%s%%${RESET}" "$ctx_int")" |
| fi | fi |
| fi | fi |
| * 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. | * 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 počítá dynamicky z ''context_window.total_input_tokens'' a ''context_window.context_window_size''. Pole ''context_window.used_percentage'' v JSONu od Claude Code neexistuje, proto ho skript nepoužívá. | * 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). |
| * Skript záměrně nepoužívá příznak ''exceeds_200k_tokens'' — ten se počítá z **kumulativní** spotřeby tokenů přes celou session (součet všech inputů přes všechny turny) a v dlouhé session zůstane natrvalo ''true''. Místo toho skript ukazuje aktuální stav context window v segmentu ''XYZk/TOTALk''. | * ''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'' → ''XYZk/TOTALk''. | * 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)]] |