Skip to content

Using the TUI

seal (with no subcommand) opens an interactive terminal UI in the current project. Most user time in seal is spent here.

  • 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.

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.

KeyWhat it does
EnterSubmit the message.
Shift+EnterInsert a newline without submitting.
Alt+EnterSame — insert a newline.
EscCancel the in-flight turn → clear input → no-op (Esc never quits).
Ctrl+CSame ladder as Esc, plus double-tap (within 1.5s) on idle + empty input to quit seal.
KeyWhat it does
Left / RightMove 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.

KeyWhat it does
Backspace, Ctrl+HDelete one character backward.
DeleteDelete one character forward.
Alt+Backspace, Ctrl+WDelete one word backward.
Alt+Delete, Alt+DDelete one word forward.

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:

  1. Visual-line move within the current input.
  2. If the cursor is on the first visual line: jump to start of buffer.
  3. If the input is empty and a queued message exists: pop the most recent queued message back into the composer for editing.
  4. If the input is empty and no queue: page through prompt history (most recent first).
  5. 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.

These work anywhere in the TUI, not just the composer:

KeyWhat it does
Ctrl+OToggle 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+RReconnect 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.

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.

Type / at the start of the composer to invoke a command. The TUI handles these directly; they don’t go to the LLM.

CommandWhat it does
/helpList every registered slash command with a one-line description.
/clearDrop the session’s message history and visible transcript. clear --tasks also wipes the persisted task list (prompts inline before doing so).
/compactTrigger compaction on demand, regardless of [compact] threshold_pct. Reports before/after token counts.
/reloadRe-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.
/restartStop 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.

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.

KeyWhat it does
1 / 2 / 3 / 4Pick the matching option.
Up / DownMove between options; Enter to commit.
Left / RightWalk the suggested pattern across scale levels (broader / narrower).
TabSnap pattern back to the daemon’s recommended level.
Home / Cmd+LeftJump to the broadest pattern.
End / Cmd+RightJump to the narrowest (the exact command).

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_edit results, rendered as red/green hunk view inline.
  • Task lists — pinned to the footer pane when the agent has used the task_* tools.
  • 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.

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.

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.