2026-11-11 Claude Epic Status Line v2.3.0 - 5 processes instead of 113

Canonical version: 2026-11-11 Claude Epic Status Line v2.3.0 - 5 processes instead of 113.

I've just shipped v2.3.0 of Claude Epic Status Line, my status line for Claude Code. It started with a bug on my Windows machine: the status line showed 354k of context and 244 requests, while the session was already at 359k and 247.

The cause was speed: a status line that can't finish a render in time keeps showing old numbers.

What was wrong

One render started 113 processes. In Git Bash on Windows, a process costs about 60 ms, so a render took about 9 seconds.

Why does that matter? Claude Code debounces status line updates at 300 ms, and it cancels a render that is still running when the next update arrives. So during an active session, my renders kept being cancelled, and the line stayed behind.

Faster renders

I rebuilt the render path. One jq call reads the whole stdin payload, one git status --porcelain=v2 --branch call reads the repository, and bash builtins do everything else. That's 5 processes instead of 113.

Measured on the same machines:

  • Windows (Git Bash): 9 s → 0.8 s
  • Linux: 178 ms → 65 ms

The usage API request (per-model weekly limits, extra-usage credits) no longer runs during a render either. A render reads a cached digest. When that digest is older than the TTL (60 s by default), one background job refreshes it for the next render (stale-while-revalidate). The side effect: on a machine with no cache yet, those rows appear on the second render.

Windows support

Windows (Git Bash) is now supported. The directory used to show up as C://Users//me//My Drive//Notes//Vault. Now it shows …/Notes/Vault, with the home directory as ~.

A warning when the prompt cache goes cold

The per-turn figure (e.g., 24k/turn) assumes a warm prompt cache: the context you re-send on every turn is read at the cache-read rate, 5% of the input price on Opus 5.5. But the cache only lives 5 minutes or 1 hour (each request renews it). Once that time has passed, your next message re-writes the WHOLE context at the cache-write rate, which is above the input price.

Claude Code (2.1.251 or newer) now sends prompt_cache.expires_at and recache_tokens_if_cold, so the status line can tell you:

  • While the cache is warm, the context hint ends with cache warm until 2:42pm
  • Once it's cold, the line shows 486k next turn (cache cold), plus a hint: prompt cache expired at 2:42pm — the next turn re-writes 486k at the cache-write rate, not ~24k — /clear first if you have switched task
  • CESL_SHOW_CACHE=0 turns it off

Claude Code only re-runs the status line on events. If you want to see the cold state on an idle session, set refreshInterval (in seconds) in the statusLine block of ~/.claude/settings.json.

Fixes

  • The Fable weekly row was hidden. The usage API marks the Fable weekly allowance is_active: false while it counts usage, and the script dropped inactive limits. A per-model row now shows when the limit is active or has usage. In the v2.2.1 post, I wrote that the per-model rows show the Fable cap when the usage API returns it; on my account, they didn't until this release
  • The context percentage now matches Claude Code. The script truncated (35%) where Claude Code rounds (36%); it now uses context_window.used_percentage
  • Renders cancelled during an API request no longer leave usage-cache.json.<pid> files behind
  • A git status stopped by the 2-second bound is now marked with … instead of looking complete

Tests

v2.3.0 also comes with a test suite: bash tests/run.sh runs 103 checks, with fixtures, a fixed clock and a fake curl (no network). CI runs it on Linux, macOS (stock bash 3.2) and Windows (Git Bash). I tested this release on Linux, Windows and bash 3.2; macOS is only covered by CI. There's also a new version subcommand.

Get it

You need jq, curl, git and bash 3.2+, on Linux, macOS or Windows (Git Bash).

Already using it? Run git pull in your clone, then bash install.sh again. The installer keeps your config file.

New here? Clone the repository and run bash install.sh.

That's it for today! ✨

References


About Sébastien

Ready to get to the next level?

Found this valuable? Share it with someone who needs it.

Join 6,000+ readers. Get practical systems for knowledge & AI. Free.

Subscribe ✨

Free: Knowledge System Checklist

A clear roadmap to building your own knowledge system. Subscribe and get it straight to your inbox.

6,000+ readers. No spam. Unsubscribe anytime.

Subscribe