Using the TUI
seal (with no subcommand) opens an interactive terminal UI in the current project. Most user time in seal is spent here.
Layout
Section titled “Layout”- Transcript — the rolling message history, with the agent’s reasoning, tool calls, and final responses.
- Composer — the multi-line input box at the bottom.
- Status bar — session name, context-window usage (live token count), current model, daemon connection state.
- Footer pane — task list (when the agent has populated one), inline permission prompts, and slash-command results.
Composer
Section titled “Composer”The composer is multi-line by default. Standard readline-style editing — every shortcut bash users know works the same way, plus a few seal-specific cascades on Up/Down and End.
Typing and submission
Section titled “Typing and submission”| Key | What it does |
|---|---|
| Enter | Submit the message. |
| Shift+Enter | Insert a newline without submitting. |
| Alt+Enter | Same — insert a newline. |
| Esc | Cancel the in-flight turn → clear input → no-op (Esc never quits). |
| Ctrl+C | Same ladder as Esc, plus double-tap (within 1.5s) on idle + empty input to quit seal. |
Cursor movement
Section titled “Cursor movement”| Key | What it does |
|---|---|
| Left / Right | Move one character. |
| Option+Left (Mac), Ctrl+Left (Linux/WSL2) | Move one word left. |
| Option+Right (Mac), Ctrl+Right (Linux/WSL2) | Move one word right. |
| Cmd+Left (Mac), Home (Linux/WSL2) | Jump to start of line. |
| Cmd+Right (Mac), End (Linux/WSL2) | Jump to end of line. At end-of-buffer with the chat scrolled up, this snaps the chat pane to the bottom (one-key recovery from being scroll-locked while the agent streamed past you). |
The Mac shortcuts work because macOS terminals translate them into readline byte sequences on the way out — Cmd+Left ships as Ctrl+A, Option+Left ships as Esc+B, etc. We bind the readline chords directly (Ctrl+A / Ctrl+E for line start/end, Alt+B / Alt+F for word movement), so Mac users get their Cmd / Option shortcuts, Linux/WSL2 users get Home / End / Ctrl+arrow, and the raw readline chords work on any platform. Ctrl+B / Ctrl+F (single-char moves) and Ctrl+H (backspace) are bound for the same reason.
Deleting
Section titled “Deleting”| Key | What it does |
|---|---|
| Backspace, Ctrl+H | Delete one character backward. |
| Delete | Delete one character forward. |
| Alt+Backspace, Ctrl+W | Delete one word backward. |
| Alt+Delete, Alt+D | Delete one word forward. |
Up / Down cascade
Section titled “Up / Down cascade”Up and Down don’t just move the cursor — they cascade through a priority ladder so multi-line editing, history, the message queue, and scrollback all share two keys. Up:
- Visual-line move within the current input.
- If the cursor is on the first visual line: jump to start of buffer.
- If the input is empty and a queued message exists: pop the most recent queued message back into the composer for editing.
- If the input is empty and no queue: page through prompt history (most recent first).
- Otherwise: scroll the conversation up by 3 rows.
Down is the symmetric mirror: visual-line move → jump to end of buffer → step forward in history → scroll the conversation down. Ctrl+P / Ctrl+N alias Up / Down for the history-nav case (readline previous-history / next-history).
Paste detection is bracketed-paste-aware with a timing fallback for terminals that don’t emit the escapes. Long pastes (more than a few lines) collapse to a [Pasted text #N +M lines] placeholder in the composer; the agent receives the full content at send time.
Global shortcuts
Section titled “Global shortcuts”These work anywhere in the TUI, not just the composer:
| Key | What it does |
|---|---|
| Ctrl+O | Toggle full tool-call input/output visibility. Tool calls render folded by default (a one-line summary); Ctrl+O flips the whole transcript to show the full arguments + result for every call. |
| Ctrl+R | Reconnect to the daemon. Only active when the TUI is showing a “disconnected” banner; the auto-reconnect path with exponential backoff is always running underneath, this just resets the attempt counter and forces an immediate retry. |
| Ctrl+C twice (idle + empty) | Quit seal. First tap arms the quit prompt; second tap within 1.5s commits. |
Message queue
Section titled “Message queue”You can type into the composer while the agent is mid-turn. Submitted messages queue and run as soon as the current turn finishes. The status bar shows the queue depth.
Slash commands
Section titled “Slash commands”Type / at the start of the composer to invoke a command. The TUI handles these directly; they don’t go to the LLM.
| Command | What it does |
|---|---|
/help | List every registered slash command with a one-line description. |
/clear | Drop the session’s message history and visible transcript. clear --tasks also wipes the persisted task list (prompts inline before doing so). |
/compact | Trigger compaction on demand, regardless of [compact] threshold_pct. Reports before/after token counts. |
/reload | Re-sign and reload seal.toml for the current session. Shows the same approval modal the startup flow uses. |
/rename <name> | Update the session’s display name. Updates the terminal title + status bar. |
/restart | Stop the daemon and exec into seal --resume <session> so the new process picks up whatever seal binary is on PATH. Useful after upgrades. /restart --daemon restarts only the daemon, keeping the TUI process alive. |
Permission prompts
Section titled “Permission prompts”When the agent issues a call that isn’t covered by an existing grant, an inline prompt appears in the footer pane with four options — Allow, Allow always, Deny, Deny always. See Permission model for the four-way semantics and Specificity scores for narrowing the suggested pattern.
| Key | What it does |
|---|---|
| 1 / 2 / 3 / 4 | Pick the matching option. |
| Up / Down | Move between options; Enter to commit. |
| Left / Right | Walk the suggested pattern across scale levels (broader / narrower). |
| Tab | Snap pattern back to the daemon’s recommended level. |
| Home / Cmd+Left | Jump to the broadest pattern. |
| End / Cmd+Right | Jump to the narrowest (the exact command). |
Rendering
Section titled “Rendering”The transcript renders:
- Markdown — headings, fenced code blocks (with syntax highlighting), tables, lists, inline code, blockquotes.
- Tool calls — folded by default to a one-line summary; press Ctrl+O to flip the whole transcript to full input/output visibility.
- Diff blocks — for
file_editresults, rendered as red/green hunk view inline. - Task lists — pinned to the footer pane when the agent has used the
task_*tools.
Selection and clipboard
Section titled “Selection and clipboard”- Mouse selection — click + drag to select a region; double-click selects a word; triple-click selects a line.
- Drag-to-scroll — dragging past the transcript edge auto-scrolls.
- System clipboard — selected text is mirrored to the system clipboard via OSC 52, which works over SSH and inside tmux without extra configuration.
Daemon reconnect
Section titled “Daemon reconnect”If the daemon dies or is restarted mid-session, the TUI auto-reconnects with exponential backoff. Scrollback and session state survive; the next message you submit lands against the fresh daemon. Use Ctrl+R from the disconnected state to skip the backoff and retry immediately.
For manual daemon control, see CLI commands → Daemon lifecycle.
Locale
Section titled “Locale”The TUI uses unicode box-drawing characters everywhere. On a non-UTF-8 locale they render as garbage — set LC_ALL to a UTF-8 locale (e.g. en_US.UTF-8) before launching. See Troubleshooting if you hit it.