OMP Docs
Reference

Keybindings

The shortcuts that control an omp session, where they apply, and how to remap them.

Keybindings let you send or queue prompts, interrupt work, navigate the editor, and open common session controls without leaving the keyboard. Start with the small set below; use /hotkeys when you forget a chord.

First-session shortcuts

KeyWhat it does
EnterSend the prompt. While omp is working, this sends a steering message to the active turn.
Shift+Enter, Ctrl+J, or Alt+EnterInsert a newline instead of sending.
Ctrl+Q or Ctrl+EnterQueue a follow-up for after the current turn finishes.
EscapeDismiss autocomplete or interrupt the active operation.
Ctrl+OExpand or collapse tool output.
Ctrl+RSearch prompt history.
Ctrl+CClear the editor. Press it again within half a second to exit.
Ctrl+DExit immediately; a non-empty prompt is saved as a resumable draft.
Alt+AOpen the Agent Hub.

Discover the active shortcuts

Enter this in any interactive session:

/hotkeys

The resulting table uses your platform's key names and resolves application remaps from the active keybindings.yml. For example, macOS displays Option and Cmd where the configuration syntax uses alt and super.

/hotkeys is a quick everyday list, not the complete configuration registry. Its editor navigation rows describe the standard defaults, and extension-added shortcuts are not appended to it. Use the action tables below when remapping editor or selection controls.

Where a shortcut applies

The focused surface decides what a key means. Reusing a key in separate contexts is normal: Ctrl+O expands tool output in the transcript but cycles filters inside /tree, for example.

ContextControls
Main prompt editorApplication actions (app.*) plus editor actions (tui.editor.* and tui.input.*).
Autocomplete, history, and most pickersSelection actions (tui.select.*): arrows move, PageUp/PageDown page, Enter confirms, and Escape cancels.
@ file pickerType to fuzzy-filter project files, use Up/Down, accept with Tab, and dismiss with Escape.
Plan approvalEscape cancels approval and returns to plan-mode iteration.

Full-screen surfaces

These pages add controls specific to the surface. Their fixed controls are not separate action IDs in keybindings.yml; remappable selection and interrupt actions still apply where shown.

SurfaceControls
/treeUp/Down move; Alt+Up/Down jump between user or assistant turns; Left/Right or PageUp/PageDown page; Home/End jump to the first/last visible item; Enter selects; Shift+Enter summarizes and switches directly; Ctrl+O/Shift+Ctrl+O cycle filters; Escape clears search, then closes.
/extensionsTab/Shift+Tab or Left/Right switch provider tabs; arrows or j/k move; Space or Enter toggles the selected row; typing filters; Escape clears the filter, then closes; Ctrl+C closes immediately.
/agentsTab/Shift+Tab or Left/Right switch between scope and list; arrows move; Enter opens or activates; Space toggles the selected agent when the search is empty; typing filters; Ctrl+R reloads; Escape clears the filter, then closes.
Agent HubArrows or j/k select; Enter opens an agent; t toggles flat/tree views; Tab shows the inspector on narrow terminals; r revives a parked agent; x kills and releases an agent; Escape closes the inspector, then the Hub.

Complete application defaults

These action IDs control the main omp session. An Unbound action works once you assign it a chord.

Action IDDefaultUser-visible action
app.interruptescapeCancel autocomplete or interrupt active work.
app.clearctrl+cClear the editor; a second press within 500 ms exits.
app.exitctrl+dExit and save the current prompt as a draft.
app.suspendctrl+zSuspend omp on POSIX systems; resume with fg.
app.display.resetalt+lReset and repaint the terminal display.
app.thinking.cycleshift+tabCycle the thinking level.
app.thinking.togglectrl+tShow or hide thinking blocks.
app.model.cycleForwardctrl+pCycle role models forward: slow, default, smol.
app.model.cycleBackwardshift+ctrl+pCycle role models backward.
app.model.selectTemporaryalt+pChoose a temporary model for this session.
app.model.selectalt+mOpen the model selector and set model roles.
app.tools.expandctrl+oExpand or collapse tool output.
app.tools.toggleVisibilityctrl+shift+oShow or hide tool activity.
app.editor.externalctrl+gEdit the draft with $VISUAL, falling back to $EDITOR.
app.message.followUpctrl+q, ctrl+enterQueue a follow-up message.
app.retryalt+rRetry the last failed assistant turn.
app.message.dequeuealt+up, shift+upMove the most recently queued message back into the editor.
app.clipboard.pasteImageLinux: ctrl+v; macOS: ctrl+v, super+v; Windows: ctrl+v, alt+vPaste an image from the clipboard, or text when no image is present.
app.clipboard.pasteTextRawctrl+shift+v, alt+shift+vPaste text without collapsing a large paste.
app.clipboard.copyLinealt+shift+lCopy the current prompt line.
app.clipboard.copyPromptalt+shift+cCopy the whole prompt.
app.agents.hubalt+aOpen or close the Agent Hub.
app.session.observectrl+sOpen or close the Agent Hub using the legacy session-observe chord.
app.session.newUnboundStart a new session, like /new.
app.session.treeUnboundOpen the session tree.
app.session.forkUnboundOpen the message picker used to fork the session.
app.session.resumeUnboundOpen the session resume picker.
app.plan.togglealt+shift+pToggle plan mode.
app.history.searchctrl+rSearch prompt history.
app.stt.toggleUnboundToggle speech-to-text recording. By default, hold Space to record and release it to transcribe when speech-to-text is enabled.
app.live.togglectrl+lStart or stop live voice mode, like /live.

Double-tapping Left in an empty editor also opens the Agent Hub when there is an agent to show. That gesture is fixed rather than a remappable action.

Complete editor and picker defaults

Editor navigation and editing

Action IDDefaultAction
tui.editor.cursorUpupMove the cursor up; in an empty main editor, browse older prompt history.
tui.editor.cursorDowndownMove the cursor down or browse newer prompt history.
tui.editor.cursorLeftleft, ctrl+bMove left one character.
tui.editor.cursorRightright, ctrl+fMove right one character.
tui.editor.cursorWordLeftalt+left, ctrl+left, alt+bMove left one word.
tui.editor.cursorWordRightalt+right, ctrl+right, alt+fMove right one word.
tui.editor.cursorLineStarthome, ctrl+aMove to the start of the line.
tui.editor.cursorLineEndend, ctrl+eMove to the end of the line.
tui.editor.jumpForwardctrl+]Read a character, then jump forward to it.
tui.editor.jumpBackwardctrl+alt+]Read a character, then jump backward to it.
tui.editor.pageUppageUpMove up one editor page.
tui.editor.pageDownpageDownMove down one editor page.
tui.editor.deleteCharBackwardbackspaceDelete the character before the cursor.
tui.editor.deleteCharForwarddelete, ctrl+dDelete the character after the cursor. In the main omp editor, app.exit takes ctrl+d, so use Delete.
tui.editor.deleteWordBackwardctrl+w, alt+backspace, ctrl+backspace, super+alt+backspaceDelete the previous word.
tui.editor.deleteWordForwardalt+delete, alt+d, super+alt+delete, super+alt+dDelete the next word.
tui.editor.deleteToLineStartctrl+uDelete to the start of the line.
tui.editor.deleteToLineEndctrl+kDelete to the end of the line.
tui.editor.yankctrl+yInsert the most recently deleted text.
tui.editor.yankPopalt+yReplace the last yank with the previous deleted-text entry.
tui.editor.undoctrl+-, ctrl+_Undo the last edit.
tui.editor.spellingSuggestionsctrl+.Show spelling replacements.

Generic input and selection

Action IDDefaultAction
tui.input.newLineshift+enter, ctrl+jInsert a newline. Alt+Enter is also a built-in newline fallback.
tui.input.submitenterSubmit the input.
tui.input.tabtabTab or accept autocomplete.
tui.input.copyctrl+cCopy a selection in inputs that support selection.
tui.select.upupMove a picker selection up.
tui.select.downdownMove a picker selection down.
tui.select.pageUppageUpMove a picker selection up one page.
tui.select.pageDownpageDownMove a picker selection down one page.
tui.select.confirmenterConfirm a picker selection.
tui.select.cancelescape, ctrl+cCancel a picker.

Remap shortcuts

Keybindings are separate from the main settings file:

  • Default profile: ~/.omp/agent/keybindings.yml
  • Named profile: ~/.omp/profiles/<name>/agent/keybindings.yml
  • Custom default-profile agent directory: $PI_CODING_AGENT_DIR/keybindings.yml

A named profile inherits the default profile's bindings, then overrides them action by action. See Settings for profile and directory configuration.

Create the file if it does not exist. It is a YAML mapping from an exact action ID to one chord, an array of chords, or an empty array:

# ~/.omp/agent/keybindings.yml
app.model.cycleForward: f6
app.plan.toggle: f7
tui.editor.undo: [ctrl+-, ctrl+_]
app.history.search: []

A remap replaces that action's complete default list; it does not add to it. Repeat any defaults you want to retain. An empty array disables the action.

Restart omp after saving the file. Run /hotkeys to verify application actions such as app.model.cycleForward; exercise the key directly to verify editor and picker actions, whose /hotkeys rows remain a compact defaults guide.

Chord syntax

  • Chords are simultaneous keys joined by +, such as ctrl+p, alt+shift+p, or ctrl+backspace. Multi-step sequences are not supported.
  • Names are case-insensitive. Lowercase is recommended in authored files.
  • Modifiers are ctrl, shift, alt, and super. On macOS, alt means Option and super means Command.
  • Base keys include letters, digits, punctuation, arrows, home, end, pageUp, pageDown, backspace, delete, insert, enter, escape, tab, space, and f1 through f12.
  • esc is accepted as an alias for escape; return is accepted as an alias for enter.
  • Avoid assigning the same chord to multiple actions in the same context. Which one wins can depend on the focused surface.

Legacy unqualified action names are migrated when loaded. A legacy keybindings.json is migrated to keybindings.yml; keybindings.yaml is also accepted. New configuration should use keybindings.yml and the namespaced IDs in this page.

Platform and terminal notes

  • macOS: write alt and super in YAML even though omp displays Option and Cmd. Some terminal profiles use Option for character composition and do not deliver Option + Up; use the Shift + Up dequeue fallback.
  • Windows: Ctrl + Z cannot suspend omp. Windows Terminal does not deliver a distinct Ctrl + Enter, so use Ctrl + Q for follow-ups. If it captures Ctrl + V, use Alt + V for clipboard images.
  • Newlines: if a terminal cannot distinguish Shift + Enter from Enter, use Ctrl + J or Alt + Enter.
  • Terminal-owned keys: your terminal, multiplexer, desktop, or shell may intercept a chord before omp receives it. Change that terminal binding or choose another omp chord.

Troubleshooting

OMP Docs· always in sync with upstream
oh-my-piomp.sh/docsContent MIT · Stencil Labs