One terminal per seat, in the server process. The bar names the terminal, its
shell and its cwd, and carries the state in words. The screen is the server's own grid,
repainted as a VT stream on attach and then fed the shell's bytes.
the surface · raised by the strip's show or a hand-off's Open
back to chatterminal 1 · zsh · /Users/vedhavyas/Projects/forgewaiting for youtake controlDoneNot now
sudo needs the account password before the
reinstall can runtyping is hidden
the touch key bar is drawn under pointer: coarse: a
finger cannot produce Escape, Tab or an arrow, and every key is a 44px target. Ctrl and Alt
are sticky for the next character the soft keyboard types, and the whole bar is inert
outside the person's own control: the surface is a viewer then, and the server refuses a
keystroke that arrives anyway. A parked hand-off raises the surface as a viewer too - take
control there to type. Whoever loses the role reads
another client has the keyboard, or
the agent took the keyboard when an agent's call took it.
the bar, no ask parked · the person's own door to the keyboard
back to chatterminal 1 · zsh · /Users/vedhavyas/Projects/forgeview onlytake control
while this page holds the role the state says you have control
and the door reads release control. One holder at a time, like the browser's controller: another
client's take overrides it, an agent's write or hand-off takes it back, and going back to chat
gives it up - a lower never keeps the agent out. The person takes it explicitly every time.
the bar while a take is answered · the press, the refusal and the other holder
back to chatterminal 1 · zsh · /Users/vedhavyas/Projects/forgeview onlytaking control...
back to chatterminal 1 · zsh · /Users/vedhavyas/Projects/forgethis connection is not viewing that terminaltake control
back to chatterminal 1 · zsh · /Users/vedhavyas/Projects/forgeanother client has the keyboardtake control
a take or release is drawn while the server answers - taking control...,
releasing... - and a refusal replaces the state line in the server's own words, until the
terminal hand-off ask ends, the control push lands or a fresh repaint arrives; the bar carries the
parked ask's Done and Not now while that terminal hand-off is the front ask. A client
that lost the keyboard to another client's take reads
another client has the keyboard; a client that
lost it to an agent's call reads the agent took the keyboard.
the strip's row · drawn for every seat; a refused read draws the note
terminal a command is runningshowterminal waiting for youhideterminal idleshowxterminal exitedshowterminal offstartterminal the seat has no session yet - start it first
the states are words as well as colour: a running command, a person's input
wanted, idle-but-the-agent's, an exited shell, or no terminal yet. Start is the
person's own door on a seat no agent has opened. A seat with no working tree - its read
refused - gets no door: the row says why instead.
the hand-off's card · the one thing only the person can do
terminal hand-off · terminal 1
sudo needs the account password before the reinstall can run.
typing is hidden: the program is reading a secret
the agent is blind while this is parked: terminal__read and terminal__write are refused, and the tool gets the ending only. Open terminal raises the surface as a viewer - take control there to type - and the ending hands the keyboard back to the agent. The keystrokes go to the PTY, not into the agent's turn; the shell may echo them, so a read after the hand-off can carry what was typed.