Terminal and platforms7 of 10
The spinner, the phrase and the bar
On this page
While she works, the last rows of the window are the only thing moving. They are the answer to "is this thing stuck?", and nothing in them is decorative.
At 80 columns, twenty-one seconds into a turn with npm test still going, that is the band's row,
the input frame, and the bar:
▆ npm test 21s
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃› type while she works — enter queues it, esc stops ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
● LIVE ( ・ω・ ) Working on it… esc → stop 21.3s
The same step, committed to the transcript when it finishes, carries its toolset chip and its own clock:
▆ ▏BASH ▕ npm test 21.3s
✓ TOOL release notes · 7 results 3.0s
The tool row and its spinner
A running tool gets a row of its own with a mark in front of it. The mark is a twelve-frame ramp,
▁▂▃▄▅▆▇▆▅▄▃▂ — .oOo with --ascii. It fills at twelve frames a second at her neutral mood, and
that rate is scaled by the mood she is in: 1.5× excited, 0.5× sad, 0.35× sleepy.
Below 0.2 seconds it does not animate at all: it shows a quiet bullet. An action that lands immediately should not flash.
On a surface slower than the ramp — 4 frames a second over SSH — it does not play the ramp slowly. It
steps to a four-frame swell instead, one whole stride per draw: fewer frames, not slower ones, since
below about 4 Hz no table reads as motion at all. Under --calm it does not move: one fixed frame,
the same one every time.
Her thinking wears a different mark, ◦▪●, in a different colour. The two tables deliberately share
no glyph, in either charset — on a terminal with no colour to tell them apart, "she is composing" and
"a tool is running" were drawing the same character.
The clock beside the row is real elapsed time, clocked by the terminal, because nothing on the wire carries a timestamp.
The bar, left to right
The chip. LIVE normally, and WORKING whenever a long job is live — which is a departure on
purpose, because the loudest device in the bar used to announce LIVE while the thing the reader
wanted sat in the dim phrase beside it. It reads off the same one answer the phrase does, so the chip
can never say WORKING while the phrase says the job landed.
The chip's mark blinks, as a status light: half on, half off, on a period of 0.7 s while she is
speaking and 0.9 s while she works. The blink says "this is alive", and speeding one up would report
an emergency nobody is having. While a long job is live it stops blinking and swells instead, four
frames at 6 Hz, which is the one real motion device in the bar. At a safety gate it keeps a slow
2-second blink whatever else is going on: calm at a gate is deliberate. Under --calm it is solid,
and it is solid at idle too, where the surface never repaints and nothing may cost a byte.
A third chip, OFFLINE, is printed once on the way out, as the last line of the session:
○ OFFLINE ( -ω- )z see you — the transcript stays right here
Her face, a kaomoji, still under --calm.
The phrase, which is what the turn is doing. Every phrase has short twins all the way down to nothing: a phrase that shortens reads as a decision, a phrase that truncates reads as a bug. The room it gets is measured against the prefix and the right slot actually built, not a fixed reserve.
The right slot, which is a state channel and not a clock. It carries a clock only where a clock is honest about something — a thing running. A card that is waiting has no countdown, because a countdown on a safety gate is a pressure this design does not want.
What the phrase says
| While | The phrase |
|---|---|
| she is composing | thinking… |
| a tool is running, first 4 s | focused — working… |
| a tool is running, after that | one of four, changing every 3.5 s |
| a known tool is running | its own phrase — reading…, recalling…, looking back through what you told me…, laying the steps out… |
| helpers are out | 3 on stage, and tab peek esc stops all on the right |
| a card is open | waiting on you |
| a long job is running | the long job — <its current step> |
| a reminder came due | a reminder just came due — <it> |
| nothing at all | you're connected — just type, and your model on the right |
The four that cycle are:
Working on it…
Still running…
Still at it…
Not stuck — it's just a slow one…
That is the terminal's own reassurance and it is always there. Whether she also says something out loud while a tool runs is a different question with a different answer per model and per tool: a reasoning model narrates its own tool use, so the canned lines are suppressed for it, and a text register gets none of them — it draws this spinner instead.
esc, and what it would take down
After ten seconds of a turn the right slot starts offering esc → stop. Press it with more than one
thing running and nothing stops: it arms for three seconds and the phrase becomes the blast radius,
recomputed every frame:
esc again — that stops all 3 of them
esc again — that stops the one still running
esc again — that stops the job and the command
esc again — that stops this turn
Every size has its own sentence because the things it counts land during those three seconds. One
plural sentence for the whole window ran down through that stops all 1 of them to that stops all 0 of them, which is a blast radius of nothing offered as a warning.
At the prompt the slot says /stop stops it instead, because out there prompt_toolkit owns the
keyboard and esc closes a completion list.
Rates, and what they cost
| Surface | Frames per second |
|---|---|
| an ordinary terminal | 12 |
over SSH (SSH_CONNECTION or SSH_TTY is set) | 4 |
--calm / KOTOBA_REDUCED_MOTION | 2, and every mark is a still |
Every moving mark is phased at the rate the surface actually redraws at, never at its design speed. A 6 Hz swell sampled at 2 Hz advances three frames per draw and plays out of order — which is exactly the stutter that was reported live.
An idle prompt costs nothing per second. The band is its content: no job and no plan is zero rows and zero bytes, the chip is solid at idle, and nothing wakes the prompt unless something is coming.
The box's hint line
The input frame's placeholder tells you what typing does right now:
- at rest:
talk to her · @ a file · / for commands - during a turn:
type while she works — enter queues it, esc stops - with a card open:
the card above is waiting — y, a, t, n or ?— naming the keys that card drew - with a confirmation open:
the card above is waiting — y or n
