All keyboard shortcuts can be customized via ~/.pi/agent/keybindings.json. Each action can be bound to one or more keys.
The config file uses the same namespaced keybinding ids that pi uses internally and that extension authors use in keyHint() and injected keybindings managers.
Older configs using pre-namespaced ids such as cursorUp or expandTools are migrated automatically to the namespaced ids on startup.
After editing keybindings.json, run /reload in pi to apply the changes without restarting the session.
modifier+key where modifiers are ctrl, shift, alt (combinable) and keys are:
Letters: a-z
Digits: 0-9
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, ctrl+1, etc.
TUI Editor Cursor Movement
Keybinding id
Default
Description
tui.editor.cursorUp
up
Move cursor up
tui.editor.cursorDown
down
Move cursor down
tui.editor.cursorLeft
left, ctrl+b
Move cursor left
tui.editor.cursorRight
right, ctrl+f
Move cursor right
tui.editor.cursorWordLeft
alt+left, ctrl+left, alt+b
Move cursor word left
tui.editor.cursorWordRight
alt+right, ctrl+right, alt+f
Move cursor word right
tui.editor.cursorLineStart
home, ctrl+a
Move to line start
tui.editor.cursorLineEnd
end, ctrl+e
Move to line end
tui.editor.jumpForward
ctrl+]
Jump forward to character
tui.editor.jumpBackward
ctrl+alt+]
Jump backward to character
tui.editor.pageUp
pageUp
Scroll up by page
tui.editor.pageDown
pageDown
Scroll down by page
Keybinding id
Default
Description
tui.editor.deleteCharBackward
backspace
Delete character backward
tui.editor.deleteCharForward
delete, ctrl+d
Delete character forward
tui.editor.deleteWordBackward
ctrl+w, alt+backspace
Delete word backward
tui.editor.deleteWordForward
alt+d, alt+delete
Delete word forward
tui.editor.deleteToLineStart
ctrl+u
Delete to line start
tui.editor.deleteToLineEnd
ctrl+k
Delete to line end
Keybinding id
Default
Description
tui.input.newLine
shift+enter
Insert new line
tui.input.submit
enter
Submit input
tui.input.tab
tab
Tab / autocomplete
Keybinding id
Default
Description
tui.editor.yank
ctrl+y
Paste most recently deleted text
tui.editor.yankPop
alt+y
Cycle through deleted text after yank
tui.editor.undo
ctrl+-
Undo last edit
TUI Clipboard and Selection
Keybinding id
Default
Description
tui.input.copy
ctrl+c
Copy selection
tui.select.up
up
Move selection up
tui.select.down
down
Move selection down
tui.select.pageUp
pageUp
Page up in list
tui.select.pageDown
pageDown
Page down in list
tui.select.confirm
enter
Confirm selection
tui.select.cancel
escape, ctrl+c
Cancel selection
Keybinding id
Default
Description
app.interrupt
escape
Cancel / abort
app.clear
ctrl+c
Clear editor
app.exit
ctrl+d
Exit (when editor empty)
app.suspend
ctrl+z
Suspend to background
app.editor.external
ctrl+g
Open in external editor ($VISUAL or $EDITOR)
app.clipboard.pasteImage
ctrl+v (alt+v on Windows)
Paste image from clipboard
Keybinding id
Default
Description
app.session.new
(none)
Start a new session (/new)
app.session.tree
(none)
Open session tree navigator (/tree)
app.session.fork
(none)
Fork current session (/fork)
app.session.resume
(none)
Open session resume picker (/resume)
app.session.togglePath
ctrl+p
Toggle path display
app.session.toggleSort
ctrl+s
Toggle sort mode
app.session.toggleNamedFilter
ctrl+n
Toggle named-only filter
app.session.rename
ctrl+r
Rename session
app.session.delete
ctrl+d
Delete session
app.session.deleteNoninvasive
ctrl+backspace
Delete session when query is empty
Keybinding id
Default
Description
app.model.select
ctrl+l
Open model selector
app.model.cycleForward
ctrl+p
Cycle to next model
app.model.cycleBackward
shift+ctrl+p
Cycle to previous model
app.thinking.cycle
shift+tab
Cycle thinking level
app.thinking.toggle
ctrl+t
Collapse or expand thinking blocks
Display and Message Queue
Keybinding id
Default
Description
app.tools.expand
ctrl+o
Collapse or expand tool output
app.message.followUp
alt+enter
Queue follow-up message
app.message.dequeue
alt+up
Restore queued messages to editor
Keybinding id
Default
Description
app.tree.foldOrUp
ctrl+left, alt+left
Fold current branch segment, or jump to the previous segment start
app.tree.unfoldOrDown
ctrl+right, alt+right
Unfold current branch segment, or jump to the next segment start or branch end
app.tree.editLabel
shift+l
Edit the label on the selected tree node
app.tree.toggleLabelTimestamp
shift+t
Toggle label timestamps in the tree
Create ~/.pi/agent/keybindings.json:
{
"tui.editor.cursorUp" : [" up" , " ctrl+p" ],
"tui.editor.cursorDown" : [" down" , " ctrl+n" ],
"tui.editor.deleteWordBackward" : [" ctrl+w" , " alt+backspace" ]
}
Each action can have a single key or an array of keys. User config overrides defaults.
{
"tui.editor.cursorUp" : [" up" , " ctrl+p" ],
"tui.editor.cursorDown" : [" down" , " ctrl+n" ],
"tui.editor.cursorLeft" : [" left" , " ctrl+b" ],
"tui.editor.cursorRight" : [" right" , " ctrl+f" ],
"tui.editor.cursorWordLeft" : [" alt+left" , " alt+b" ],
"tui.editor.cursorWordRight" : [" alt+right" , " alt+f" ],
"tui.editor.deleteCharForward" : [" delete" , " ctrl+d" ],
"tui.editor.deleteCharBackward" : [" backspace" , " ctrl+h" ],
"tui.input.newLine" : [" shift+enter" , " ctrl+j" ]
}
{
"tui.editor.cursorUp" : [" up" , " alt+k" ],
"tui.editor.cursorDown" : [" down" , " alt+j" ],
"tui.editor.cursorLeft" : [" left" , " alt+h" ],
"tui.editor.cursorRight" : [" right" , " alt+l" ],
"tui.editor.cursorWordLeft" : [" alt+left" , " alt+b" ],
"tui.editor.cursorWordRight" : [" alt+right" , " alt+w" ]
}