Skip to content

TUI Keybindings

Crucible’s terminal UI supports readline-style editing and custom shortcuts.

Global Keys

KeyAction
EnterSend message / confirm
Ctrl+CClear input; with empty input, press twice (within 300ms) to quit
EscCancel streaming / close popup or modal
Ctrl+EnterDuring streaming: cancel the turn, keeping your draft in the input
Shift+TabCycle mode: Normal → Plan → Auto
Ctrl+TToggle thinking/reasoning display
F1Open command palette

Input Editing (Emacs Mode)

Readline-style keybindings for the input box:

KeyAction
Ctrl+A / HomeMove to beginning of line
Ctrl+E / EndMove to end of line
Ctrl+B / Ctrl+FMove one character left / right
Alt+B / Ctrl+LeftMove word backward
Alt+F / Ctrl+RightMove word forward
Ctrl+WDelete word backward
Ctrl+UClear the entire input
DeleteDelete character forward
Ctrl+JInsert a newline (multi-line input)
Up / Ctrl+PPrevious input history entry
Down / Ctrl+NNext input history entry (back to draft at the end)

Up/Down recall previously submitted input; the draft you were typing is preserved and restored when you cycle past the newest entry.

Scrolling the Conversation

Completed conversation content graduates to the terminal’s own scrollback — the live viewport stays small. To review history, use your terminal’s native scrolling (mouse wheel, Shift+PageUp, tmux copy mode, etc.). The TUI does not capture the mouse, so terminal-native text selection and copying work as usual. PageUp/PageDown are not bound in the chat view (the shell modal and pager modals bind them — see Shell Execution).

Mode Switching

KeyAction
Shift+TabCycle mode: Normal → Plan → Auto → Normal

See Modes for details on what each mode does.

Thinking Display

When using models that support extended thinking (Claude with thinking budget, Qwen3-thinking, DeepSeek-R1, etc.), press Ctrl+T to show or hide thinking blocks. This works during streaming too, and applies retroactively to visible blocks. A toast confirms the new state.

Thinking Budget: Configure via :set thinkingbudget=<preset> using presets like high, medium, low. See Commands for details.

When a completion popup is open (commands, files, notes, models):

KeyAction
Up/DownNavigate items
Enter / TabAccept selection
EscapeClose popup
BackspaceNarrow filter (closes popup when the trigger is deleted)
TypeFilter items

Modals capture all input while open.

Permission modal

Shown when the agent needs approval for a tool call (see the footer hints):

KeyAction
yAllow this call
nDeny this call
aAllowlist: save the suggested pattern project-scoped and allow
Up/Down / k/jMove between Yes / No / Allowlist
EnterConfirm the highlighted option
Shift+EnterOn Allowlist: save the rule user-scoped (global) instead
TabEdit free text (deny reason, or the allowlist pattern)
hExpand/collapse the diff (file operations)
Esc / Ctrl+CDeny and close

While editing text: Enter sends, Esc returns to the options. :set perm.show_diff, perm.autoconfirm_session, and perm.full_commands tune this modal — see Commands.

Ask modals

Agent questions (single-select, multi-select, or free-text “other”):

KeyAction
Up/Down / k/jNavigate choices
SpaceToggle a choice (multi-select)
TabJump to free-text entry (when offered); in batched questions, next question
EnterConfirm selection / submit text
Esc / Ctrl+CCancel (sends a cancelled response)

Show (pager) modal

Read-only content the agent asks you to review:

KeyAction
j/k, Down/UpScroll one line
PageDown / Space, PageUpScroll one page
g / GJump to top / bottom
q / EscClose

Edit modal

Inline text editing with a small vim-like model: h/j/k/l or arrows move, i/a/o enter insert mode, Esc leaves insert mode (or cancels from normal mode), Ctrl+S saves and submits the edited content.

Command Prefixes

PrefixPurposeExample
/Slash commands/mode, /plan, /undo
@Attach a workspace file@src/main.rs, @notes/todo.md
[[Note references[[My Note]], [[Help/Config]]
:REPL commands:set, :model, :quit, :help
!Shell execution!ls -la, !git status
  • / triggers after whitespace or at line start
  • @ opens a popup to autocomplete workspace files. The file’s contents are attached to that message, so the agent reads them without a tool call — the path must be inside the workspace, and a big file is truncated with a note
  • [[ opens a popup to autocomplete notes from your kiln (wikilink syntax)
  • : triggers at line start for REPL commands
  • ! opens a shell modal with streaming output

See Also