Reference

Key bindings

TUI input

TUI shortcuts, by context. Open selectors take over the keyboard; a live turn changes Enter and Esc.

Editing & cursor

Your input wraps as it grows. Line shortcuts follow line breaks, not visual wraps.

KeyAction
Printable textInsert at the cursor.
PasteBracketed paste inserts literal text; line breaks do not submit. A supported file path attaches the file (below).
← / →Move one codepoint.
Alt/Ctrl+← / →, Alt+B / FMove one word left / right.
Ctrl+A / Ctrl+EStart / end of the current logical line.
Home / EndStart / end of the whole input.
↑ / ↓Move one logical line. On the first line, ↑ recalls older input; on the last line, ↓ recalls newer input, then your draft.
Backspace / DeleteDelete the previous / next codepoint.
Alt+Backspace, Ctrl+Backspace, Ctrl+WDelete the previous word.
Ctrl+UDelete to the start of the current logical line.
  • Words split on space, tab, and newline. No undo or kill ring.
  • Legacy Esc-prefixed b / f also move left / right by word.
  • History records submitted input for this run, skipping empty entries and consecutive duplicates.

Pasting files

Paste a supported file path to attach the file when you submit its label.

  • Files: readable PNG, JPEG, GIF, BMP, WebP, or PDF under 24 MiB. PDFs must also be at most 22.5 MB.
  • Paths: plain, quoted, backslash-escaped, ~/-relative, or a local file:// URL. Paste only one path.
  • Result: an [Image-N] or [Attachment-N] label. Keep it in your message to attach the file; remove it to omit the file.
  • Literal text instead: unsupported, unreadable, oversized, or unconvertible files; input starting with / or !.

Submit, queue & interrupt

With no selector open, Enter queues input during a live turn.

KeyIdleLive turn
EnterSubmit.Queue as steering.
Ctrl+EnterSubmit.Queue a follow-up for after the turn.
Shift+EnterInsert a newline.
EscClear the input.Request cancellation; panto keeps running.
Ctrl+C / Ctrl+DQuit.Request cancellation; quit after the turn unwinds.
Ctrl+ZSuspend to the shell. Resume with fg; panto redraws.

When queued input runs:

InputSteering (Enter)Follow-up (Ctrl+Enter)
Plain textNext tool boundary, or turn end if none remainsAfter the turn
! shell lineNext tool boundary, or turn end if none remainsAfter the turn
Slash commandAfter the turnAfter the turn
  • Queued input echoes when it runs; the footer counts what is pending.
  • Selector open: Esc closes it without cancelling the turn; modified Enter accepts, rather than inserting a newline. In tree-row naming, any Enter saves.
  • During a live turn, Ctrl+Enter steers if your terminal reports it as plain Enter (Terminal support).
  • Semantics: Slash commands and shell lines.

App shortcuts

Use these shortcuts when no selector is open.

KeyAction
Ctrl+TModel selector. Same as /model with no argument.
Ctrl+RReasoning selector. Same as /reasoning with no argument.
Ctrl+YTheme picker with live preview. Same as /theme.
Ctrl+OCollapse or expand all tool output.
Ctrl+KHide or show thinking, including future thinking blocks.
Ctrl+LRebuild the display, clearing screen and scrollback.
Ctrl+PIdle only: run /proceed to continue without a new prompt. Your input stays.
Ctrl+GEdit the draft in your editor, then load it back. Ignored mid-turn.
TabComplete a slash command or file path (completion).

The Ctrl+T/R/Y/O/K/L/P shortcuts above are command bindings. Customize them in configuration: [keys]; Ctrl+G, Tab, editing, and selector-navigation keys are separate.

SettingPriority, first to last
Ctrl+G editor[tui] editor → $VISUAL → $EDITOR → vi
  • Remembered in state.toml: model, standard reasoning levels, theme, thinking visibility, tree view.
  • Model and reasoning apply from the next provider request. Reasoning levels vary by provider and model. Custom extension levels are not remembered.
  • Theme: Enter commits; Esc rolls back the preview.

Selectors

Model, reasoning, theme, command, session, and path pickers are modal: type to filter. Only quit and suspend get past them.

KeyAction
↑ / ↓, Ctrl+P / Ctrl+NMove up / down; wraps at either end.
EnterAccept (no-op with no match).
TabAccept, in command and path pickers.
EscCancel.
Backspace, Ctrl+HDelete one filter character.
Ctrl+WDelete the last filter word.
Ctrl+UClear the filter (picks a view in the tree).
  • Modifiers: modified arrows still navigate; modified Backspace still deletes one filter character. Alt+printable keys and other Ctrl chords are ignored.
  • Match order, case-insensitive: label prefix, label substring, label subsequence, detail substring, detail subsequence. Commands match by name only.

Command and path completion

Use Tab to complete the token before your cursor.

  • Command popup: type / into an empty input, or press Tab on the first token, starting with / and containing no second slash before the cursor.
  • Path completion: Tab anywhere else. Inserts the longest common prefix, then opens a picker if several remain. No matches leave your input unchanged.
  • Directories get a trailing slash. Dotfiles show only when the filename prefix starts with a dot.

Command popup keys (includes extension commands). As you type, the best-matching command is highlighted.

KeyAction
Tab / EnterAccept the highlighted command.
SpaceAccept and type arguments. With no match, keep the typed text.
Backspace on an empty filterRemove the leading slash.
EscClose; the typed text stays in the input.
PasteExtend the filter.

Session tree

/tree opens saved history so you can branch from a selected non-system message.

KeyAction
Ctrl+Tno_tools view: hide tool-only assistant calls and tool-result-only messages.
Ctrl+Ono_tool_use view: hide tool-only assistant calls, keep tool results.
Ctrl+Uuser view: user messages with text.
Ctrl+Aall view: every non-system message.
Ctrl+Lnamed view: rows you named.
Ctrl+FName the selected row in the input box. Enter saves; Esc or an empty name cancels.
EnterBranch the session at the selected row.
  • Filter and navigate like any selector. Rows represent messages, not content blocks.
  • Depth-first order, active branch first. System messages are hidden.
  • Opens in your configured or remembered view. Press the active view's key again to return to the view you opened with.
  • Row names last only for this panto process.
  • Branching at a user message with text branches just before it and puts its text back in the input.

Terminal support

Some bindings need your terminal to report modifiers.

  • Shift+Enter: works with Kitty, xterm modifyOtherKeys mode 2, or a distinct line feed. If your terminal sends plain Enter, you submit or queue instead.
  • Ctrl+Enter, Ctrl+Backspace: need distinct modifier reports. If sent as plain Enter or Backspace, they act like those keys.
  • Multi-line paste: needs bracketed paste; otherwise it arrives as keystrokes. Incomplete bracketed pastes wait for the closing marker.
  • Esc waits 30 ms when idle to rule out an escape sequence; mid-turn it acts at once.

Protocol negotiation

Panto enables bracketed paste and negotiates Kitty support, falling back to xterm modifyOtherKeys mode 2. Legacy key encodings still work.
  • No scroll keys. Output stays inline in native scrollback, with no alternate screen. Page Up/Down are ignored.
  • Routine changes to content above the viewport repaint visible rows without clearing native scrollback; the off-screen history can remain stale. The default /redraw, /collapse, and /thinking bindings (Ctrl+L, Ctrl+O, and Ctrl+K) explicitly clear scrollback and replay the retained transcript; customize these bindings in [keys]. A compaction that changes the transcript, session switches, and accepting a theme choice do the same. Resizes redraw even mid-turn and may clear scrollback.
  • No mouse tracking or focus events. Synchronized output is on unless TERM is empty or dumb.
  • The terminal is restored on SIGINT, SIGTERM, SIGHUP, and panic. Stdin must be an interactive terminal.

/help lists commands and keys; the keybind bar shows a context-specific subset. See also Command line.