Skip to content

v0.2.0 — a terminal you can read and answer from a phone

Choose a tag to compare

@lntvan166 lntvan166 released this 18 Aug 09:55
· 204 commits to main since this release

v0.1.0 could show an agent's screen. This one can be read on a phone, answered safely, and watched without burning data.

Every number below was measured against a live herdr on a 390×844 viewport, not estimated.

Reading

Prose reflows; structure doesn't. Of the lines too wide for a phone, 57% are structural (tables, boxes, progress bars) and 43% are prose. Neither "wrap everything" nor "wrap nothing" is right, so each run of structure gets its own horizontal scroll strip while prose reflows around it. Plain separators are clipped rather than handed a scrollbar. Wrap / Exact is the operator's choice and persists per device.

Scrollback, reconstructed. Up to 4000 lines per agent, revealed by Show earlier. It is rebuilt from live reads by detecting what scrolled off the top — because herdr refuses every scrollback source while an agent is blocked, which is precisely when you want to re-read an analysis before answering. Nothing renders until you ask, so the pane costs what it always did (38 DOM nodes before, 75 after).

Answering

You can see what Enter will commit. The keypad cursor wraps from the last option back to the first, and the middle option of a permission prompt is routinely "and don't ask again" — a standing grant. The wrap was never the hazard; the wrap being invisible was.

Real option buttons carry the agent's own labels verbatim — no reordering, no generic "Approve" — so committing one cannot be off by one.

The reply box works in every state. It previously returned 409 in three states out of four, because it pointed at a route that only answers prompts.

Watching

v0.1.0 v0.2.0
refresh floor 1000 ms 250 ms, backing off to 10 s
bytes per update full screen (~2 KB gzipped) only changed lines (~322 B)
projected data ~30 MB/hour ~4.5 MB/hour

A thinking agent redraws one line of 63 — the spinner and its token counter — so sending the whole screen was ~90% waste. The spinner still updates every 250 ms; only the bytes carrying it shrank.

An open tab now knows when it's stale. no-cache on index.html fixes a fresh load and does nothing for a tab left open for days. A newer build now surfaces a reload prompt within one heartbeat.

Known limits, all measured

  • herdr exposes no output-changed event and no byte stream, so output is pulled and cannot stream the way a chat UI streams tokens.
  • History covers only what a tab watched. An agent nobody watched has none, and closing that gap would mean recording every agent continuously — a recorder, not a viewer.
  • Reconstruction records a gap rather than guessing when the screen scrolls more than half a viewport between polls.
  • No DOM test environment. Component effects and wiring are unverified, and several defects reached the browser this cycle for exactly that reason. It's the next thing worth fixing.

Full changelog: v0.1.0...v0.2.0