Dated proposal · #339 · 2026-09-05 · hand-written and frozen, not a description of shipped behavior

Chat Surface, Three Ways

One conversation drawn three ways, for #339. The copy is lifted from the #17 reference. The question this page exists to answer is which visual register the chat surface should be in — and only that. The reference proposal settled what the window draws and how it behaves; it is approved and workable, and it stays the direction unless one of these beats it. So the copy, the turn, the timings and the sprite here are that page's, unchanged. Switch variants mid-stream: the same live turn carries across, which is the comparison worth making.

What all three share by decision, not by accident. ADR-0010 binds the surface to four kinds of line and no fifth: the user's turns, the agent's text as it streams, tool calls as one-liners, and the forwarded session/request_permission prompt with the Harness's own choices. No diff view, file tree, plan panel, skill browser or settings pane, in any variant — those are the Harness's own surfaces. A design that needs a fifth kind of line to look good is a design this page rejects rather than an argument for widening the scope.

What is new to all three is the Character Prompt tab beside the conversation: the Character's personality.txt frozen and read-only above, and this Instance's own prompt editable below, empty by default. WHO labels carry a local HH:mm (#445), five characters on the same line as the name. The frozen text on this page is BMO's, quoted from characters/bmo/personality.txt. The tab is a proposal, and its ADR is #338; what it is doing here is showing whether each design has room for a second pane at all.

What to judge

All three are dark, because the app's own surface is dark. The reference proposal draws its window ink-on-white to match the Speech bubble's Windows-95 register; none of these three argues for light, and the contrast between a dark window and that white bubble is one of the things to judge here.

Design
Backdrop
State
bmoBMO
BMO
spatial: fidget · idle harness: attached · idle

Both traces run at once, under every variant. The left one is the Spatial Layer, which is model-free and never waits for anything; the right one is the Harness session. Watch them during the slow turn: the buddy plays Behaviors the whole way through, because nothing in the frame loop is allowed to block on a turn. That property is not up for design — it is why the sprite is beside the window in all three.

The three directions

Modern minimal
The current direction, given another pass. Soft dark panel, 16 px spacing, one accent, and the tool one-liners pushed down in weight so the sentences carry the eye. Tabs read as tabs.
Competes on equal terms rather than as the incumbent. Its risk is looking like every other chat window, and having nothing on screen that says the thing behind it is an agent process.
Terminal log
One line per event, and an elapsed-seconds gutter. Monospace throughout, tool calls and the permission prompt as log records, the composer a prompt line. Every line kind is legible from its own column.
Honest about what the Harness is, and the least mascot-like on purpose. Judge whether it can sit under a Windows-95 sprite without the two reading as different products — and whether a person answers a permission prompt that looks like a log line.
Pane of glass
A frosted panel the desktop shows through. Backdrop blur, thin light borders, pill controls. A dark scrim under the blur, and a second plate under the scrollback, are what hold the text legible over a bright wallpaper.
The one direction that reads as floating over your desk rather than being a window on it. Switch to the busy backdrop and judge the streamed text and the tool one-liners, which are the lowest-contrast things on screen.

Where ADR-0010's four line kinds pushed back on a look, it is recorded here rather than fixed by adding a fifth. The glass panel wants a wide, sparse layout and gets a column of one-liners; the terminal wants a status line at the bottom and the trace beneath the window is the page's, not the window's.

The Harness here is a script and a timer, as on the reference page — there was no ACP client in the tree on the date above. Timings are the proposal, not the ceiling. This page wires nothing: it is three stylesheets over one window, and the window is docs/design/chat.html's, proposed in #324.