You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Live logs showed 23% of usage fetches 429ing in clusters exactly one
backoff apart: the fixed 120s cooldown retried straight into a
still-throttled window. The 2.1.197 binary confirms the contract is
unchanged and the CLI has no 429 handling either — the client must
pace itself.
- Consecutive failures escalate 120s -> 240s -> 480s -> 600s cap;
err state persists until a success so escalation compounds
- Retry-After captured via curl %header{} and honored when longer
- Stale-data indicator says why: !429 / !auth / !5xx / !net
- Bump flash glyph ▲ -> + (triangle renders poorly in some fonts),
bound tight to its badge
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+10-6Lines changed: 10 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -82,7 +82,7 @@ Every component earns its place:
82
82
| Effort | Compact lowercase badge: `lo` / `md` / `xh` / `max` / `ultra` / `auto` (`high` is the default and stays hidden). Dim for routine levels; `max` / `ultra` use the pressure color; `fast` shows in fast mode. |
83
83
| Context bar | Merged with model. Green / yellow / red by window pressure. On 1M models the bar also carries the premium input-pricing band: yellow past 200k tokens, red past 800k — the % alone looks calm (320k = 32%) while every request bills at the premium rate. A real 0% (e.g. right after `/compact` resets the window) renders a visibly empty bar `[░░░░░░0%]` — the snap to empty *is* the refresh signal; the bar hides only when no context data exists at all. |
84
84
| User tier | Neutral white-weight (MAX bold, PRO normal, dim otherwise) — identity, never a status color. Truncated display name. |
85
-
| Quota | Integer percentages. The 5h badge always carries its window countdown while a window is live — `5h[42%@1h20m]` reads "42% used, resets in 1h20m" — because on a 5h horizon the time remaining is the number you plan the current sitting around. Same `@remaining` language as the 7d badge; relative, not wall-clock, so no mental subtraction. When a window's utilization climbs between renders, a reverse-video `▲N` glyph appears outside the badge for ~60s: `5h[44%@1h18m] ▲2` means "you just burned 2%". A drop (window reset) stays quiet — the fresh low number is its own signal. **7d is forecast, not leveled**: a learned per-weekday burn profile (EWMA over your own usage history) plus your recent 24h burn project whether the quota outlasts the window — your heavy Tuesday counts more than a generic average. The verdict is color alone; under pressure the badge shows explicit time remaining in the window: `7d[44%@5d]` red means "at your pace, dry days before the reset 5 days from now". Cold start (<14 days history) falls back to window-average pacing. Recovery color when reset is imminent. |
85
+
| Quota | Integer percentages. The 5h badge always carries its window countdown while a window is live — `5h[42%@1h20m]` reads "42% used, resets in 1h20m" — because on a 5h horizon the time remaining is the number you plan the current sitting around. Same `@remaining` language as the 7d badge; relative, not wall-clock, so no mental subtraction. When a window's utilization climbs between renders, a reverse-video `+N` token appears right after the badge for ~60s: `5h[44%@1h18m]+2` means "you just burned 2%". A drop (window reset) stays quiet — the fresh low number is its own signal. **7d is forecast, not leveled**: a learned per-weekday burn profile (EWMA over your own usage history) plus your recent 24h burn project whether the quota outlasts the window — your heavy Tuesday counts more than a generic average. The verdict is color alone; under pressure the badge shows explicit time remaining in the window: `7d[44%@5d]` red means "at your pace, dry days before the reset 5 days from now". Cold start (<14 days history) falls back to window-average pacing. Recovery color when reset is imminent. |
86
86
| Extra usage | Monthly spend, limit, prepaid balance. `--extra auto` shows when quota runs out. |
87
87
| Cache health | Detects observed prompt-cache rebuilds and cache-read drops. `cache!` on break, `cache~` when building. If a future Claude Code stdin includes TTL breakdown, `--cache always` can show `cache:1h@14:20`; current stdin usually exposes aggregate cache tokens only. Hidden when healthy by default. |
88
88
@@ -107,8 +107,8 @@ red, matching its Claude Code TUI color) = model family; everything else is
107
107
| 5 themes, 9 bar styles | -- | Yes |
108
108
| Prompt cache break detection | -- | Yes |
109
109
| OAuth + macOS Keychain | -- | Yes |
110
-
| Quota bump flash (▲N) | -- | Yes |
111
-
|230 bats tests + CI | -- | Yes |
110
+
| Quota bump flash (+N) | -- | Yes |
111
+
|238 bats tests + CI | -- | Yes |
112
112
113
113
## Configuration
114
114
@@ -184,9 +184,13 @@ environment variables are intent, not proof of what the server accepted.
184
184
| 50 -- 79% | 1 min |
185
185
| >= 80% | 30 sec |
186
186
187
-
Error backoff: 2 min. Cache writes: atomic `mv`.
187
+
Error cooldown escalates with consecutive failures — 2 min, 4 min, 8 min, 10 min
188
+
cap — and a server `Retry-After` (429s carry one) extends it further. The
189
+
cooldown resets on the next successful fetch. Cache writes: atomic `mv`.
188
190
189
-
Indicators: `~` after quota = refresh in flight. `!` = last fetch failed.
191
+
Indicators: `~` after quota = refresh in flight. A failed fetch shows why the
192
+
data may be stale: `!429` rate limited, `!auth` token rejected, `!5xx` server
193
+
error, `!net` connection failed.
190
194
191
195
### Try It Locally
192
196
@@ -277,7 +281,7 @@ run. Setting only `CLAUDE_CACHE_DIR` keeps the legacy single-dir behavior.
277
281
npm exec --yes bats -- t/
278
282
```
279
283
280
-
230 tests across `t/statusline.bats` (218 statusline + integration) and
284
+
238 tests across `t/statusline.bats` (226 statusline + integration) and
281
285
`t/install.bats` (12 installer). CI runs on push and PR to `main`.
0 commit comments