Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Keybindings reference

Quick lookup for the default Veyyon TUI shortcuts. Every row below is taken from the default binding tables in code (KEYBINDINGS in config/keybindings.ts and TUI_KEYBINDINGS in @veyyon/tui), so it matches what a fresh profile does. Run /hotkeys in a session for the live list after your remaps. For the full guide on customizing, see Keybindings and Vim mode.

App

BindingAction
escInterrupt the current operation (app.interrupt)
ctrl+cClear screen or cancel (app.clear)
ctrl+dExit the application (app.exit)
ctrl+zSuspend the application (app.suspend)
ctrl+bMove the running foreground command to a background job (app.bash.background); active only while a foreground bash call is waiting, otherwise it keeps its editor meaning (cursor left)
ctrl+lReset the terminal display (app.display.reset)
shift+tabCycle thinking level (app.thinking.cycle)
ctrl+tToggle thinking mode (app.thinking.toggle)
ctrl+p / shift+ctrl+pCycle model forward / backward (app.model.cycleForward / app.model.cycleBackward)
alt+mSelect model (app.model.select)
alt+pSelect a temporary model for the current session (app.model.selectTemporary)
ctrl+oExpand tool output (app.tools.expand)
ctrl+gOpen the draft in an external editor (app.editor.external)
ctrl+q or ctrl+enterSend a follow-up message (app.message.followUp)
alt+rRetry the last failed assistant turn (app.retry)
alt+upDequeue a queued message back into the editor (app.message.dequeue)
alt+shift+pToggle plan mode (app.plan.toggle)
alt+aOpen the subagent dashboard (app.agents.hub)
ctrl+rSearch prompt history (app.history.search)
alt+shift+lCopy the current line (app.clipboard.copyLine)
alt+shift+cCopy the whole prompt (app.clipboard.copyPrompt)
ctrl+v (alt+v fallback on Windows, super+v on macOS)Paste from the clipboard, image preferred (app.clipboard.pasteImage)
ctrl+shift+v or alt+shift+vPaste clipboard text raw, no collapse (app.clipboard.pasteTextRaw)

You can also set the effort by name with the /effort command (its alias is /thinking). With no argument it opens a picker; /effort high sets the level directly. The choice lasts for this session; the saved default lives under Settings → Model → Default Effort.

Unbound by default, remappable: app.session.new, app.session.tree, app.session.fork, app.session.resume, and app.stt.toggle (speech-to-text; hold Space to record by default).

Composer

BindingAction
enterSubmit the current message (tui.input.submit)
shift+enter or ctrl+jInsert a new line (tui.input.newLine)
tabAutocomplete (tui.input.tab)

The composer does not copy. Use alt+shift+l to copy the current line and alt+shift+c to copy the whole prompt, both listed under Clipboard above. ctrl+c interrupts the running turn.

Editor

BindingAction
up / downMove cursor up / down
left or ctrl+bMove cursor left
right or ctrl+fMove cursor right
alt+left, ctrl+left, or alt+bMove cursor left by one word
alt+right, ctrl+right, or alt+fMove cursor right by one word
home or ctrl+aMove cursor to the start of the line
end or ctrl+eMove cursor to the end of the line
ctrl+] / ctrl+alt+]Jump forward / backward to a character
page-up / page-downPage up / down
backspaceDelete the character to the left
delete or ctrl+dDelete the character to the right
ctrl+w, alt+backspace, ctrl+backspace, or super+alt+backspaceDelete the word to the left
alt+delete, alt+d, super+alt+delete, or super+alt+dDelete the word to the right
ctrl+uDelete from the cursor to the start of the line
ctrl+kDelete from the cursor to the end of the line
ctrl+y / alt+yYank / yank-pop the kill buffer
ctrl+- or ctrl+_Undo

Lists and selectors

BindingAction
up / downMove the selection up / down
page-up / page-downMove the selection by one page
enterConfirm the selection
esc or ctrl+cCancel and close

Vim mode

Modal (vim-style) composer editing does not exist. There is no /vim command or toggle_vim_mode action; the composer uses the bindings above.

Customizing (real path: keybindings.yml)

Custom bindings are shipped, but the config surface is its own file, not a tui.keymap block in config.yml. Set bindings by action ID in ~/.veyyon/profiles/default/agent/keybindings.yml (YAML map of action ID → chord or chord list). A single string, a list of chords, or an empty list (disables the action) are all valid values:

app.model.cycleForward: Ctrl+P
app.history.search: []   # disables the action
app.clipboard.copyLine: [Ctrl+C, Alt+C]

Action IDs are namespaced (app.model.cycleForward, app.plan.toggle, tui.select.pageUp, …). Older flat legacy names and keybindings.json files migrate automatically to the namespaced .yml form on load. Run /hotkeys in a session to see active chords.

Full action-ID list and status-line gestures: Keybindings and Vim mode and repository docs/handbook/src/reference/keybindings-config.md.