Herdr keyboard shortcuts
By Flavio Copes
Herdr keyboard shortcuts cheat sheet: the ctrl+b prefix, splits, tabs, panes, renaming, copy mode, the session navigator, and how to change any key.
Herdr’s default prefix key is ctrl+b. Press ctrl+b, release it, then press the action key: ctrl+b c opens a new tab, ctrl+b v splits the pane to the right, and ctrl+b q detaches while everything keeps running.
To see every binding active in your session, press ctrl+b ?. Press / in that panel to filter it, for example by typing rename.
This post lists the default keymap, checked against the Herdr docs and source in September 2026. I use the defaults myself: my config.toml has a single line, onboarding = false. If Herdr is new to you, start with my deep dive into Herdr.
The quick answer
| What you want | Keys |
|---|---|
| Show every binding | ctrl+b, then ? |
| New tab | ctrl+b, then c |
| Split right | ctrl+b, then v |
| Split down | ctrl+b, then - |
| Move to another pane | ctrl+b, then h j k l |
| Zoom the focused pane | ctrl+b, then z |
| Close the focused pane | ctrl+b, then x |
| Rename the tab | ctrl+b, then shift+t |
| Rename the workspace | ctrl+b, then shift+w |
| New workspace | ctrl+b, then shift+n |
| Switch workspace | ctrl+b, then w |
| Scroll back and copy | ctrl+b, then [ |
| Detach | ctrl+b, then q |
How does the Herdr prefix key work?
The programs inside a pane already use most key combinations. ctrl+c interrupts, ctrl+r searches your shell history, and editors claim almost everything else. Herdr reserves one key, the prefix, and treats the next keypress as a command for itself.
So ctrl+b z is two steps. Hold Control and press b. Let go of both keys. Now press z, and the focused pane fills the whole tab. Do it again to bring the other panes back.
The Herdr docs and the config file write this as prefix+z. When a binding includes shift, like prefix+shift+t, the second key is a capital T.
Press Esc after the prefix to cancel it. A key that isn’t bound cancels it too, and Herdr drops that key instead of passing it to the pane.
To send a real ctrl+b to the program in the pane, press ctrl+b twice. Bash and zsh use it to move the cursor back one character, and Vim uses it to scroll up a page.
The complete Herdr cheat sheet
In every table with an After ctrl+b column, press the prefix first and then the key in that column.
Session and help
| Action | After ctrl+b, press |
|---|---|
| Show all bindings | ? |
| Detach and leave everything running | q |
| Open settings | s |
Reload config.toml | shift+r |
| Jump to the notification on screen | o |
Send a literal ctrl+b to the pane | ctrl+b |
There is no key that stops the server. Detaching keeps every process alive, and stopping is a CLI command, herdr server stop. I explain the difference in how to exit, close, and detach from Herdr.
Workspaces
| Action | After ctrl+b, press |
|---|---|
| New workspace | shift+n |
| Rename workspace | shift+w |
| Close workspace | shift+d |
| Workspace navigation | w |
| Session navigator | g |
| New Git worktree | shift+g |
| Show or hide the sidebar | b |
Closing a workspace asks for confirmation first, because it ends every process in its tabs.
ctrl+b w opens navigate mode. While it’s open, single keys work without the prefix:
| In navigate mode | Keys |
|---|---|
| Select the workspace above or below | up / down |
| Open the selected workspace | Enter |
| Jump to workspace 1 to 9 | 1 to 9 |
| Focus the pane left, down, up, right | h j k l |
| Cycle through panes | Tab / shift+Tab |
| Leave navigate mode | Esc |
The other prefix keys work in navigate mode too. ctrl+b w followed by c creates a tab without pressing ctrl+b again.
Tabs
| Action | After ctrl+b, press |
|---|---|
| New tab | c |
| Rename tab | shift+t |
| Next tab | n |
| Previous tab | p |
| Go to tab 1 to 9 | 1 to 9 |
| Close tab | shift+x |
A new tab asks for a name before it opens. If you’d rather skip that prompt, set prompt_new_tab_name = false in the [ui] table of your config.
Panes
| Action | After ctrl+b, press |
|---|---|
| Split right (side by side) | v |
| Split down (stacked) | - |
| Focus the pane left, down, up, right | h j k l |
| Next or previous pane | Tab / shift+Tab |
| Swap with the pane left, down, up, right | shift+h shift+j shift+k shift+l |
| Zoom the focused pane | z |
| Resize mode | r |
| Rename pane | shift+p |
| Close pane | x |
You get a new pane by splitting the one you’re in, since Herdr has no separate “new pane” key. From a script, the same split is:
herdr pane split --current --direction right
In resize mode, press h, j, k, l or the arrow keys to resize the focused pane, then Esc or Enter when you’re done.
Closing a pane ends the program running in it.
Herdr names splits the way Vim does. In the config, split_vertical is the side-by-side split and split_horizontal is the stacked one. tmux uses the opposite names, so keep that in mind when you edit the file.
Rename a tab, workspace, pane, or session
| Rename | After ctrl+b, press |
|---|---|
| Tab | shift+t |
| Workspace | shift+w |
| Pane | shift+p |
You can also right-click a tab, a pane, or a workspace in the sidebar and choose Rename. The sidebar lists workspaces under spaces, so if you’re looking for a way to rename a space, it’s the same thing.
From the CLI, read the IDs with herdr workspace list, herdr tab list or herdr pane list, then rename:
herdr tab rename w1:t2 tests
herdr workspace rename w1 api
herdr pane rename w1:p2 server
Named sessions can’t be renamed. A session gets its name when you create it with herdr session attach work, and Herdr keeps its files in ~/.config/herdr/sessions/work.
Scrollback and copy mode
| Action | After ctrl+b, press |
|---|---|
| Enter copy mode | [ |
Open the pane’s scrollback in $EDITOR | e |
Copy mode is how you read and copy a pane’s history with the keyboard. These keys work once you’re inside:
| In copy mode | Keys |
|---|---|
| Move | h j k l |
| Jump by word | w b e (or W B E for whitespace-separated words) |
| Page up and down | PageUp / PageDown, ctrl+u / ctrl+d |
| Search forward or backward | / / ? |
| Next or previous match | n / N |
| Start a selection | v or Space |
| Copy the selection | y or Enter |
| Leave | q or Esc |
The program in the pane keeps running while you scroll, and new output keeps arriving. Search ignores case unless your query has an uppercase letter.
Notice that ctrl+b inside copy mode starts the prefix instead of paging up.
Find a pane or an agent
ctrl+b g opens the session navigator, a searchable list of every workspace, tab, and pane in the session.
| In the session navigator | Keys |
|---|---|
| Search panes by name | /, then type |
| Show only blocked, working, idle, or done agents | b / w / i / d |
| Show everything again | a |
| Move up and down | k / j or the arrow keys |
| Jump to the selected row | Enter |
| Close | Esc |
Press b to list only the agents waiting for your input, then Enter to jump to one.
ctrl+b o jumps to whatever the notification on screen points at, like an agent that just finished in another workspace.
Herdr also has agent actions with no default key: next_agent, previous_agent and focus_agent. Bind them if you jump between agents often:
[keys]
next_agent = "prefix+a"
focus_agent = "prefix+alt+1..9"
Does Herdr support the mouse?
Yes. You can use Herdr without learning any of the keys above, because mouse capture is on by default:
- click a pane, tab, workspace, or agent to focus it
- drag the border between two panes to resize them
- right-click a pane for Split right, Split down, Zoom, Rename pane and Close pane
- right-click a tab or a workspace to rename or close it
- drag to select text, which copies it, or double-click to copy a word
- ctrl-click a link in a pane to open it
- use the scroll wheel to move through a pane’s output
At the bottom of the sidebar’s workspace list, new creates a workspace and menu opens settings, the keybinding list, reload config, and detach.
If you want your terminal’s own mouse selection back, turn mouse capture off:
[ui]
mouse_capture = false
How do I change the Herdr prefix key?
Herdr reads its config from ~/.config/herdr/config.toml (on Windows, %APPDATA%\herdr\config.toml). Keybindings go in a [keys] table.
This moves the prefix to ctrl+a, the default in GNU Screen:
[keys]
prefix = "ctrl+a"
Your shell uses ctrl+a to jump to the start of the line. After this change, press ctrl+a twice to send it.
Then check the file and apply it:
herdr config check
herdr server reload-config
config check prints any problem it finds in the file. reload-config applies the change to the running session without restarting your panes. Inside Herdr, ctrl+b shift+r reloads the config too.
If a value is invalid, Herdr falls back to the default and shows a warning when it starts.
How do I change a single Herdr keybinding?
Every action has a name, and you assign it a key string. A binding can also be a list, so you can keep the default and add a second shortcut.
This config brings back the tmux keys for detach, rename tab and both splits, and keeps Herdr’s own split keys working:
[keys]
detach = "prefix+d"
rename_tab = "prefix+comma"
split_vertical = ["prefix+v", "prefix+percent"]
split_horizontal = ["prefix+minus", "prefix+double_quote"]
A new value replaces the default, so after this ctrl+b q no longer detaches.
prefix+d means the prefix, then d. Punctuation can be written by name, like minus, comma, percent or double_quote. A binding without prefix+, like ctrl+alt+z, works as a direct shortcut with no prefix at all.
Direct shortcuts are faster, but your terminal and your desktop already own many of them. The Herdr docs suggest the ctrl+alt family because it’s almost always free:
[keys]
new_tab = ["prefix+c", "ctrl+alt+c"]
zoom = ["prefix+z", "ctrl+alt+z"]
Avoid bindings made of a single plain key like n. Herdr would catch that key every time you type it in a pane.
To see every action name with its default, print the full default config:
herdr --default-config
To start over, herdr config reset-keys backs up config.toml and removes your custom keybindings, so the defaults come back at the next reload.
Herdr shortcuts for tmux users
Herdr uses the same ctrl+b prefix as tmux, so a lot of muscle memory carries over. After the prefix, these keys do the same thing in both: c for a new tab (a window, in tmux), n and p for the next and previous one, z to zoom, x to close a pane, [ for copy mode, ? for the key list, and ctrl+b again to send the prefix to the program.
These are different:
| Action | tmux | Herdr |
|---|---|---|
| Split side by side | % | v |
| Split stacked | " | - |
| Detach | d | q |
| Rename the window or tab | , | shift+t |
| Rename the session | $ | not possible |
| Close the window or tab | & | shift+x |
| Move between panes | arrow keys | h j k l |
| Next pane | o | Tab |
| Numbered windows or tabs start at | 0 | 1 |
Be careful with q. In tmux it shows the pane numbers, and in Herdr it detaches. Detaching keeps everything running, but it surprises you the first time. Also, ctrl+b s opens Herdr’s settings, not a list of sessions.
For the bigger differences, read my Herdr vs tmux vs Zellij comparison, or my tmux tutorial for tmux itself.
Using Herdr shortcuts on a phone
On a phone, the hard part is typing ctrl+b at all. Most SSH apps have an extra row of keys with Control, so use that, or move the prefix to a key the app sends easily.
When the terminal is 64 columns wide or less, Herdr switches to a single-column mobile layout. My guide to using Herdr from a phone covers the SSH setup and the keys I’d use there.
What if a shortcut does nothing?
Your terminal or your operating system might grab the key before Herdr sees it. This happens more with direct shortcuts than with prefix keys.
Press ctrl+b ? to confirm the binding exists, then look for a conflicting shortcut in your terminal’s settings. The Herdr keyboard docs list the ctrl+alt chords that terminals and desktop environments already use.
Want me to talk about your product? You can sponsor this site.