v1.3.0
Added
-
A
renewsrow on every Usage card. A window reset says when you may work again; a renewal
says when the plan is charged and its allowance starts over — the question that decides whether
pacing is worth it at all. Codex states it, so the row readsrenews 13 Sep · in 25d, taken
from the same~/.codex/auth.jsonID token the account line already decodes: no extra request,
no extra file, one read for both labels.Anthropic states it nowhere readable — not in the usage endpoint, not in
~/.claude.json— so
the Claude card saysunknowninstead of counting a month from the day the subscription was
created. A date already in the past reads asunknowntoo: the Codex claim only refreshes while
Codex runs, and a stale date under a heading that says renews reads as one that is coming. -
The mouse reaches every surface, not just the switcher. The pointer worked in the projects
picker and nowhere else:--usageand--changelognever turned mouse reporting on at all,
--settingsread only keys, the Git pane took the wheel and ignored every click, and the mode
pickers moved the selection without ever running it. Now the wheel scrolls the changelog, moves
the selection in the Git menu and its sub-lists, walks the settings form, and scrolls a mode
picker's preview card when the pointer is over it — and a click reaches rows, tabs and
command-bar pills on all of them.One rule everywhere, because terminals report no double-click: a click selects, a click on the
row already selected does what Enter would, and a click on a pill does what the key printed on
its cap does. So no stray click ever launches a review or writes a setting, and a pill's label
cannot drift from its behaviour — the label is the behaviour. Each zone is still measured by
the loop that draws the thing it points at; what is shared is the lookup, not the measurement.
Clicking outside the settings card now discards the draft asescdoes, instead of closing over
a staged edit and leaving it alive.
Changed
-
A reset that is not today now names the day it falls on. The status line reads
resets 08:53 Wed 19 Augand the window's own bar row reads1d 12h · 19 Aug. A weekday is
unambiguous inside a seven-day window but it is not legible: mappingThuonto a calendar six
days out is arithmetic you had to do in your head, and the weekly bucket is exactly the one that
lands far enough away to need it.A window rolling over later today stays as short as it was —
resets 15:59 Thu,2h 40m— so
the presence of a date is itself the signal that the rollover is not today. The countdown keeps
its place beside it: it is the only "how long do I wait" figure a window that missed the donut
gets. -
More air between the Usage cards. The pane paints no background and draws no divider
between providers, so whitespace is the only thing separating them — and with the columns
butted together the two cards read as one wide table of rows rather than two independent
answers. They now get a gutter, which yields back to one column on a pane too narrow to seat
the cards' own rows. The columns also fill the pane exactly, instead of100 / nleaving the
remainder dark on the right. -
The Git menu asks before an all-files review of a large repo.
arunstuicr -A, which
reads every tracked file — and because the pane deliberately keeps the screen, draws one static
splash andexecs the review over itself, a checkout big enough to keep tuicr busy for minutes
is indistinguishable from a hang: no frame, no spinner, nothing to cancel. On a 7,600-file tree
it was two solid minutes of a cat that never moved.The row now counts the tree first — one
git ls-files, taken on activation rather than on open,
so the menu's first frame still costs nothing — and overgit.all_files_warn(1,500 by default)
it spends a screen saying what it found:6,699 files tracked in this repo,tuicr reads every one of them before its first frame. Enter opens it anyway, esc goes back to the menu. Under the
threshold nothing changed, andall_files_warn = 0never asks. A count git refuses to give
opens the review rather than standing in front of it: a broken number must not become a locked
door. -
The Git pane stopped painting itself opaque. Its menu card, its sub-list card and that
list's search box each filled themselves withpanel_bgand drew their borders in the accent.
All three were hand-rolledBlocks — exactly the drifttui::boxedexists to prevent — and the
result was one pane that looked like a solid dialog sitting next to five that the terminal shows
through. They go through the helper now: borders recede inoverlay0, captions keep
title_color, and nothing paints a fill, so a translucent terminal stays translucent under the
Git pane too.panel_bgkeeps the places it belongs: as ink on key caps and pills, and as the fill of the
changelog, settings and cheatsheet popups, which float over the live picker and genuinely have
to occlude it. The switcher's own list panel was hand-rolling aBlockas well — its caption
slot holds the tab strip rather than a word — sotuigrewframed, the captionless half of
boxed, and both panels build from it. Three render tests now assert the absence of a fill,
because the one that existed only covered the mode pickers.