Skip to main content
Every action in Herm is backed by a named, rebindable key chord. The default bindings are designed to stay out of your way — a two-stroke leader prefix (default Ctrl+X) gates the most common session-management actions so they never collide with your text input. You can view all bindings at any time, remap anything that conflicts with your muscle memory, and your changes persist automatically in ~/.hermes/herm/tui.json.

Opening the keybinding editor

1

Open /keys from the composer

Type /keys in the composer and press Return. The keybinding editor opens as an overlay.
2

Browse and select an action

Use the arrow keys to scroll through the action list. Each row shows the action name, its current chord, and a short description.
3

Press the new chord

Highlight the action you want to change and press the key or sequence you want to assign. Herm records the chord immediately.
4

Changes save automatically

Your rebindings are written to ~/.hermes/herm/tui.json as soon as you make them. There is no separate save step.
You can also press F1 at any time to open a read-only quick-reference of all active bindings.

The leader key

The leader key is a two-stroke prefix that gates a large set of session and UI actions. It works like Vim’s leader or tmux’s prefix: you press the leader first, release it, then press the action key. The default leader is Ctrl+X. For example, the default binding to open a new session is <leader>n, which means: press Ctrl+X, then press n. The leader key itself is rebindable — change the leader action in /keys to any chord you prefer. A popular alternative is Ctrl+\ for users who find Ctrl+X conflicts with their readline habits.
Secondary alternates are shown in parentheses throughout the table below. For example, editor.open advertises <leader>e but also accepts Ctrl+G as a fallback so existing muscle memory keeps working while you learn the leader pattern.

OpenCode-compatible bindings

If you are migrating from OpenCode, Herm ships a compatible binding preset. Run /keys and look for the OpenCode import option to apply those chords in one step without remapping each action individually.

Default keybindings

The following tables list every default binding, grouped by scope. Global bindings fire regardless of which tab is focused. List bindings are active whenever a navigable list is on screen. Composer bindings apply inside the text input. Tab-specific bindings are only active when that particular tab has focus.

Global

ActionDefault chordDescription
leaderCtrl+XLeader prefix (two-stroke gate)
app.exitCtrl+CQuit Herm
input.clearCtrl+CClear input (fires when buffer is empty)
app.suspendCtrl+ZSuspend to shell
app.redrawCtrl+LClear and force-repaint terminal
app.sidebar<leader>bToggle sidebar
palette.openCtrl+KOpen command palette
help.openF1Keyboard shortcuts reference
tab.nextAlt+RightNext tab
tab.prevAlt+LeftPrevious tab
focus.cycleTabCycle focus (double-tap → composer)
editor.open<leader>e / Ctrl+GOpen $EDITOR on current prompt
reply.copy<leader>y / Ctrl+YCopy last assistant reply
clipboard.attachCtrl+VAttach clipboard image
queue.flush<leader>uInterrupt and send queued prompt now
session.interruptEscapeInterrupt streaming (double-tap)
session.new<leader>nStart a new session
session.redo<leader>rRedo last undone message
session.compress<leader>cCompress context
session.steer<leader>sInject a steering note mid-turn
session.timeline<leader>gOpen session timeline
input.stash<leader>pStash the current prompt draft
theme.pick<leader>tOpen the theme picker
model.pick<leader>mSwitch active model
status.open<leader>iShow status panel

List

These bindings are shared across all tabs and dialogs that display a scrollable list.
ActionDefault chordDescription
list.upUpMove selection up
list.downDownMove selection down
list.pageUpPage UpPage up
list.pageDownPage DownPage down
list.homeHomeJump to first item
list.endEndJump to last item
list.activateReturnActivate / open selected item
list.deleted / DeleteDelete selected item
list.refreshrReload the list
list.newnCreate a new item
list.search/Filter the list
list.toggleSpaceToggle selected item

Dialog

These bindings are active when a modal overlay is open.
ActionDefault chordDescription
dialog.acceptReturnAccept / confirm
dialog.cancelEscapeCancel or close
dialog.confirmyAnswer yes
dialog.denynAnswer no
dialog.copycCopy dialog body

Composer

These bindings fire inside the text input area.
ActionDefault chordDescription
input.submitReturnSend message
input.newlineShift+Return / Ctrl+Return / Alt+Return / Ctrl+JInsert a newline

Tab-specific

The following bindings only apply when the named tab is focused.
ActionDefault chordDescription
sessions.renameCtrl+RRename the selected session
sessions.prevLeftWalk lineage back (continues from)
sessions.nextRightWalk lineage forward (compressed to)
ActionDefault chordDescription
agents.killkKill the selected subagent
agents.historyhOpen subagent spawn history
agents.installiInstall a distribution
ActionDefault chordDescription
config.saveCtrl+SWrite config to disk
config.modemToggle form view ↔ YAML view
ActionDefault chordDescription
eikon.saveCtrl+SSave the current eikon
eikon.marketplacemOpen the eikon marketplace

Where rebindings are saved

All customized chords are stored in:
~/.hermes/herm/tui.json
You can inspect this file to see only your overrides — actions you have not changed are not written, so the file stays small. Deleting an entry from the file reverts that action to its default chord on the next launch.