Tui

Keybindings

Arbiter ships its own line editor. Bindings below are the complete set the editor responds to. Keys not listed are inserted literally.

Editing

KeyAction
Backspace / ^HDelete the character left of the cursor.
DeleteDelete the character under the cursor.
^AMove cursor to the start of the line.
^EMove cursor to the end of the line.
^B / Move cursor one byte left.
^F / Move cursor one byte right.
^KKill from cursor to end of line.
^UKill the entire line.
^WKill the previous word — but only if no chord handler is bound. The default REPL binds ^W as a pane chord (see below); in that mode the previous-word kill is unavailable.
TabTab-completion on the leading word (slash commands). Inserts a literal space if no completer is registered.
EnterSubmit the line.
^DEOF if the buffer is empty (exits the REPL), else delete-forward.
^CAbort the current line. Does not exit the process; just discards the buffer and redraws the prompt.
/ History navigation. Per-pane history persisted across sessions (see sessions.md).

Scrollback

KeyAction
PgUpScroll the focused pane's scroll region up by ~half a screen.
PgDnScroll back down. At the live tail, PgDn is a no-op.

Scrollback is visual-row aware: a wrapped paragraph counts as multiple rows for navigation, matching what the terminal actually drew. The scrollback ring is bounded (default 20k logical lines) — older content is evicted when the buffer fills.

Cancellation

KeyAction
EscCancel any in-flight agent turn. The pane's input clears, the cancel handler pushes [interrupted] into scrollback, and the agent's pending HTTP request is aborted. A lone Esc with no follow-on within 50 ms triggers cancel; longer sequences (CSI escape codes from arrows / PgUp / etc.) are routed to the editor instead.

Pane chords (Ctrl-w prefix)

^W opens a 2-second window for a single follow-up byte. Inside that window:

ChordAction
^W vVertical split — the focused pane is split into left/right children.
^W sHorizontal split — focused pane split into top/bottom.
^W w / ^W ^WCycle focus to the next pane (pre-order traversal of the layout tree).
^W cClose the focused pane. Its exec thread is joined; in-flight turn is cancelled. Last remaining pane cannot be closed.

If the chord byte doesn't match any of the above, it's silently dropped — the editor returns to the normal input state. ^W followed by a regular character does not fall through to insertion; the chord window always consumes its byte.