Back to the Lab

NODE · node_browser18 Oct 2026In main · unreleased

A log should read as it is written

The research agent’s newest step is revealed in fourteen even jumps instead of fading in, so the pane reads like a terminal.

Noticed

NODE’s research agent works in the background, and its list of steps is the only sign of what it is doing. renderAgent() cleared the list and rebuilt it on every new step, so every line was redrawn each time and nothing marked which line was new. The whole pane changed in order to say one thing, and the one thing you wanted to read — the newest line — arrived without announcement.

Made

renderAgent() keeps the lines it has already drawn and appends only the new ones. Each new line is revealed with clip-path: inset(0 100% 0 0) to inset(0 0 0 0) over 160ms with steps(14, end). Fourteen even jumps rather than a smooth wipe: a fade says something appeared, and the steps say this is being written. Only the newest line moves, so the earlier steps stay readable while new ones arrive. Starting a new run clears the list; reopening the pane on a finished run shows its lines with no typing at all. Under reduced motion each new line fades in over 120ms instead.

At speed
4× slower

Recorded from the approval prototype, not the running app. The prototype runs the same CSS on copies of NODE’s own controls; app recordings replace these when they are made.

Tokens it uses

--motion-type
160ms — one line of text typed out
--ease-type
steps(14, end) — typing only
--ease-enter
cubic-bezier(0, 0, 0.2, 1) — the reduced-motion fade

Rules it follows

Animate transform and opacity only

The system allows four exceptions, and clip-path is the one written for this: it may animate only for the type-out of a single line of text. Nothing else on the line moves.

Nothing bounces or overshoots. No spring curves

steps(14, end) has no curve at all — fourteen flat jumps and a stop. The point is a terminal writing, not a thing arriving.

Motion confirms that something changed and then gets out of the way

The whole line is revealed in 160ms, short enough that it never holds up reading. Earlier lines stay still while new ones arrive.

Reduced motion removes the movement and keeps the fade

Each new line fades in whole over 120ms with no reveal. A line already drawn never types again, so reopening the pane on a finished run is silent either way.

Still open

A line long enough to wrap onto two rows is revealed left to right on both rows at once. It still reads as one line being written, but it is not what a terminal would do.

Open the commit All of the Lab