Skip to main content

Keybindings

All keyboard shortcuts can be customized via ~/.pi/agent/keybindings.json. Each action can be bound to one or more keys.

Key Format

modifier+key where modifiers are ctrl, shift, alt (combinable) and keys are:

  • Letters: a-z
  • Special: escape, esc, enter, return, tab, space, backspace, delete, insert, clear, home, end, pageUp, pageDown, up, down, left, right
  • Function: f1-f12
  • Symbols: `, -, =, [, ], \, ;, ', ,, ., /, !, @, #, $, %, ^, &, *, (, ), _, +, |, ~, {, }, :, <, >, ?

Modifier combinations: ctrl+shift+x, alt+ctrl+x, ctrl+shift+alt+x, etc.

All Actions

Cursor Movement

ActionDefaultDescription
cursorUpupMove cursor up
cursorDowndownMove cursor down
cursorLeftleft, ctrl+bMove cursor left
cursorRightright, ctrl+fMove cursor right
cursorWordLeftalt+left, ctrl+left, alt+bMove cursor word left
cursorWordRightalt+right, ctrl+right, alt+fMove cursor word right
cursorLineStarthome, ctrl+aMove to line start
cursorLineEndend, ctrl+eMove to line end
jumpForwardctrl+]Jump forward to character
jumpBackwardctrl+alt+]Jump backward to character
pageUppageUpScroll up by page
pageDownpageDownScroll down by page

Deletion

ActionDefaultDescription
deleteCharBackwardbackspaceDelete character backward
deleteCharForwarddelete, ctrl+dDelete character forward
deleteWordBackwardctrl+w, alt+backspaceDelete word backward
deleteWordForwardalt+d, alt+deleteDelete word forward
deleteToLineStartctrl+uDelete to line start
deleteToLineEndctrl+kDelete to line end

Text Input

ActionDefaultDescription
newLineshift+enterInsert new line
submitenterSubmit input
tabtabTab / autocomplete

Kill Ring

ActionDefaultDescription
yankctrl+yPaste most recently deleted text
yankPopalt+yCycle through deleted text after yank
undoctrl+-Undo last edit

Clipboard

ActionDefaultDescription
copyctrl+cCopy selection
pasteImagectrl+vPaste image from clipboard

Application

ActionDefaultDescription
interruptescapeCancel / abort
clearctrl+cClear editor
exitctrl+dExit (when editor empty)
suspendctrl+zSuspend to background
externalEditorctrl+gOpen in external editor ($VISUAL or $EDITOR)

Session

ActionDefaultDescription
newSession(none)Start a new session (/new)
tree(none)Open session tree navigator (/tree)
fork(none)Fork current session (/fork)
resume(none)Open session resume picker (/resume)

Models & Thinking

ActionDefaultDescription
selectModelctrl+lOpen model selector
cycleModelForwardctrl+pCycle to next model
cycleModelBackwardshift+ctrl+pCycle to previous model
cycleThinkingLevelshift+tabCycle thinking level

Display

ActionDefaultDescription
expandToolsctrl+oCollapse/expand tool output
toggleThinkingctrl+tCollapse/expand thinking blocks

Message Queue

ActionDefaultDescription
followUpalt+enterQueue follow-up message
dequeuealt+upRestore queued messages to editor

Selection (Lists, Pickers)

ActionDefaultDescription
selectUpupMove selection up
selectDowndownMove selection down
selectPageUppageUpPage up in list
selectPageDownpageDownPage down in list
selectConfirmenterConfirm selection
selectCancelescape, ctrl+cCancel selection

Session Picker

ActionDefaultDescription
toggleSessionPathctrl+pToggle path display
toggleSessionSortctrl+sToggle sort mode
toggleSessionNamedFilterctrl+nToggle named-only filter
renameSessionctrl+rRename session
deleteSessionctrl+dDelete session
deleteSessionNoninvasivectrl+backspaceDelete session (when query empty)

Custom Configuration

Create ~/.pi/agent/keybindings.json:

{
"cursorUp": ["up", "ctrl+p"],
"cursorDown": ["down", "ctrl+n"],
"deleteWordBackward": ["ctrl+w", "alt+backspace"]
}

Each action can have a single key or an array of keys. User config overrides defaults.

Emacs Example

{
"cursorUp": ["up", "ctrl+p"],
"cursorDown": ["down", "ctrl+n"],
"cursorLeft": ["left", "ctrl+b"],
"cursorRight": ["right", "ctrl+f"],
"cursorWordLeft": ["alt+left", "alt+b"],
"cursorWordRight": ["alt+right", "alt+f"],
"deleteCharForward": ["delete", "ctrl+d"],
"deleteCharBackward": ["backspace", "ctrl+h"],
"newLine": ["shift+enter", "ctrl+j"]
}

Vim Example

{
"cursorUp": ["up", "alt+k"],
"cursorDown": ["down", "alt+j"],
"cursorLeft": ["left", "alt+h"],
"cursorRight": ["right", "alt+l"],
"cursorWordLeft": ["alt+left", "alt+b"],
"cursorWordRight": ["alt+right", "alt+w"]
}