Config reference
Every canonical key PK-Herdr reads from config.toml, flat and filterable. For guided setup
and the reasoning behind these options, see Configuration.
Print the full commented default config at any time:
pk-herdr --default-configCustom command bindings ([[keys.command]]) are user-defined tables and are not
listed per key here; see
Custom command keybindings.
General
onboardingbooleandefaultunsetShow first-run setup on startup. Missing or true shows onboarding; continuing from onboarding writes onboarding = false.
Theme
theme.namestringdefault"catppuccin"Built-in theme name.
theme.auto_switchbooleandefaultfalseFollow host terminal light/dark appearance and switch between theme names.
theme.dark_namestringdefaultunsetTheme name used when `auto_switch` selects a dark appearance.
theme.light_namestringdefaultunsetTheme name used when `auto_switch` selects a light appearance.
theme.custom.accentcolordefaultunsetOverride the accent color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.panel_bgcolordefaultunsetOverride the panel_bg color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.surface0colordefaultunsetOverride the surface0 color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.surface1colordefaultunsetOverride the surface1 color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.surface_dimcolordefaultunsetOverride the surface_dim color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.overlay0colordefaultunsetOverride the overlay0 color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.overlay1colordefaultunsetOverride the overlay1 color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.textcolordefaultunsetOverride the text color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.subtext0colordefaultunsetOverride the subtext0 color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.mauvecolordefaultunsetOverride the mauve color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.greencolordefaultunsetOverride the green color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.yellowcolordefaultunsetOverride the yellow color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.redcolordefaultunsetOverride the red color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.bluecolordefaultunsetOverride the blue color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.tealcolordefaultunsetOverride the teal color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
theme.custom.peachcolordefaultunsetOverride the peach color token on top of the base theme. Accepts hex, named colors, rgb(r,g,b), or reset aliases.
Terminal
terminal.default_shellstringdefault""Executable used for new interactive panes. Empty means SHELL, then /bin/sh.
terminal.shell_modeenumdefault"auto"Startup mode for new interactive pane shells.
autologinnon_loginterminal.new_cwdenumdefault"follow"CWD policy for new interactive panes, tabs, and workspaces.
followhomecurrentpath
Updates
update.channelenumdefault"stable" ("preview" on Windows)Update channel used by background version checks and pk-herdr update. Homebrew, mise, and Nix installs ignore the preview channel.
stablepreviewupdate.version_checkbooleandefaulttrueCheck herdr.dev for new PK-Herdr versions in the background.
update.manifest_checkbooleandefaulttrueCheck herdr.dev for remote agent-detection manifest updates in the background. Bundled manifests and local overrides still apply.
Keybindings
keys.prefixstringdefault"ctrl+b"Prefix key to enter prefix mode (e.g. "ctrl+b", "f12", "esc").
keys.helpkeybindingdefault"prefix+?"Open keybinding help.
keys.settingskeybindingdefault"prefix+s"Open settings.
keys.new_workspacekeybindingdefault"prefix+shift+n"Create a new workspace.
keys.new_worktreekeybindingdefault"prefix+shift+g"Create a Git worktree from the selected workspace.
keys.open_worktreekeybindingdefaultunsetOpen an existing Git worktree from the selected workspace. Unset by default.
keys.remove_worktreekeybindingdefaultunsetDelete the selected managed worktree checkout after confirmation. Unset by default.
keys.rename_workspacekeybindingdefault"prefix+shift+w"Rename the selected workspace.
keys.close_workspacekeybindingdefault"prefix+shift+d"Close the selected workspace.
keys.workspace_pickerkeybindingdefault"prefix+w"Open the workspace navigation surface.
keys.gotokeybindingdefault"prefix+g"Open the session navigator.
keys.navigate_workspace_upkeybindingdefault"up"Move workspace selection up in navigate mode.
keys.navigate_workspace_downkeybindingdefault"down"Move workspace selection down in navigate mode.
keys.navigate_pane_leftkeybindingdefault"h"Focus the pane to the left in navigate mode. Left arrow is always an alias.
keys.navigate_pane_downkeybindingdefault"j"Focus the pane below in navigate mode.
keys.navigate_pane_upkeybindingdefault"k"Focus the pane above in navigate mode.
keys.navigate_pane_rightkeybindingdefault"l"Focus the pane to the right in navigate mode. Right arrow is always an alias.
keys.detachkeybindingdefault"prefix+q"Detach from server/client mode, or exit --no-session mode.
keys.reload_configkeybindingdefault"prefix+shift+r"Reload config.toml in the running app/server.
keys.open_notification_targetkeybindingdefault"prefix+o"Focus the currently visible notification target.
keys.previous_workspacekeybindingdefaultunsetSelect the previous workspace. Unset by default.
keys.next_workspacekeybindingdefaultunsetSelect the next workspace. Unset by default.
keys.previous_agentkeybindingdefaultunsetFocus the previous agent shown in the agent panel. Unset by default.
keys.next_agentkeybindingdefaultunsetFocus the next agent shown in the agent panel. Unset by default.
keys.focus_agentkeybindingdefaultunsetFocus an agent by index 1-9. Unset by default.
keys.remote_image_pastestringdefault"ctrl+v"Local-client shortcut that sends a clipboard image to a remote PK-Herdr session.
keys.new_tabkeybindingdefault"prefix+c"Create a new tab in the active workspace.
keys.rename_tabkeybindingdefault"prefix+shift+t"Rename the active tab.
keys.previous_tabkeybindingdefault"prefix+p"Select the previous tab.
keys.next_tabkeybindingdefault"prefix+n"Select the next tab.
keys.switch_tabkeybindingdefault"prefix+1..9"Switch to tab 1-9.
keys.switch_workspacekeybindingdefaultunsetSwitch to workspace 1-9 from prefix mode. Unset by default.
keys.close_tabkeybindingdefault"prefix+shift+x"Close the active tab.
keys.rename_panekeybindingdefault"prefix+shift+p"Rename the focused pane.
keys.edit_scrollbackkeybindingdefault"prefix+e"Open the focused pane scrollback in $EDITOR.
keys.copy_modekeybindingdefault"prefix+["Enter keyboard copy mode for the focused pane.
keys.focus_pane_leftkeybindingdefault"prefix+h"Focus the pane to the left.
keys.focus_pane_downkeybindingdefault"prefix+j"Focus the pane below.
keys.focus_pane_upkeybindingdefault"prefix+k"Focus the pane above.
keys.focus_pane_rightkeybindingdefault"prefix+l"Focus the pane to the right.
keys.swap_pane_leftkeybindingdefault"prefix+shift+h"Swap the focused pane with the pane to the left.
keys.swap_pane_downkeybindingdefault"prefix+shift+j"Swap the focused pane with the pane below.
keys.swap_pane_upkeybindingdefault"prefix+shift+k"Swap the focused pane with the pane above.
keys.swap_pane_rightkeybindingdefault"prefix+shift+l"Swap the focused pane with the pane to the right.
keys.cycle_pane_nextkeybindingdefault"prefix+tab"Cycle to the next pane.
keys.cycle_pane_previouskeybindingdefault"prefix+shift+tab"Cycle to the previous pane.
keys.last_panekeybindingdefaultunsetFocus the last focused pane across workspaces and tabs. Unset by default.
keys.split_verticalkeybindingdefault"prefix+v"Split pane vertically (side by side).
keys.split_horizontalkeybindingdefault"prefix+minus"Split pane horizontally (stacked).
keys.close_panekeybindingdefault"prefix+x"Close the focused pane.
keys.zoomkeybindingdefault"prefix+z"Toggle zoom for the focused pane. The legacy key name `fullscreen` is accepted as an alias.
keys.resize_modekeybindingdefault"prefix+r"Enter resize mode.
keys.toggle_sidebarkeybindingdefault"prefix+b"Toggle sidebar collapse.
keys.indexed.tabsstringdefaultunsetModifier combo for tab shortcuts 1-9. Unset by default.
keys.indexed.workspacesstringdefaultunsetModifier combo for workspace shortcuts 1-9. Unset by default.
keys.indexed.agentsstringdefaultunsetModifier combo for agent shortcuts 1-9. Unset by default.
UI and sidebar
ui.sidebar_widthintegerdefault26Default expanded sidebar width in columns. Auto-scales based on workspace names.
ui.sidebar_min_widthintegerdefault18Minimum sidebar width (columns) when expanded.
ui.sidebar_max_widthintegerdefault36Maximum sidebar width (columns) when expanded.
ui.sidebar_start_collapsedbooleandefaultfalseStart PK-Herdr with the sidebar collapsed. Changes take effect on the next launch.
ui.sidebar_collapsed_modeenumdefaultcompactCollapsed sidebar presentation.
compacthiddenui.mobile_width_thresholdintegerdefault64Terminal width at or below which PK-Herdr uses the mobile single-column layout.
ui.mouse_capturebooleandefaulttrueCapture mouse input for PK-Herdr's mouse UI.
ui.copy_on_selectbooleandefaulttrueCopy text selected with the mouse.
ui.host_cursorenumdefaultautoHost cursor policy.
autonativedrawnui.right_click_passthrough_modifierstringdefault""Modifier that lets right-click gestures pass through to pane apps. Empty disables it. Accepts ctrl, alt, cmd, super, meta, hyper, or a + separated combination; shift is rejected because many terminals reserve Shift+mouse.
ui.redraw_on_focus_gainedbooleandefaulttrueForce a full host-terminal redraw when the outer terminal regains focus.
ui.mouse_scroll_linesintegerdefault3Lines to scroll per mouse wheel notch.
ui.confirm_closebooleandefaulttrueAsk for confirmation before closing a workspace.
ui.prompt_new_tab_namebooleandefaulttrueAsk for a tab name before creating a new tab.
ui.prompt_new_workspace_namebooleandefaultfalseAsk for a workspace name before interactive TUI creation.
ui.pane_bordersbooleandefaulttrueDraw borders around split panes.
ui.pane_gapsbooleandefaulttrueKeep split panes visually separated instead of sharing divider borders.
ui.show_agent_labels_on_pane_bordersbooleandefaultfalseShow agent labels in split pane borders when no manual pane label is set.
ui.hide_tab_bar_when_single_tabbooleandefaultfalseHide the tab row when the workspace has one tab.
ui.agent_panel_sortenumdefault"spaces"Agent sidebar ordering. Saved values are "spaces" or "priority"; "workspaces" is accepted as an alias for "spaces".
spacespriorityui.sidebar.agents.row_gapintegerdefault0Blank terminal rows between expanded Agent sidebar entries. Set to 1 to restore the previous spacing.
ui.sidebar.agents.rowslist of token rowsdefault[["state_icon", "workspace", "tab"], ["agent"]]Default expanded Agent sidebar layout. Entries may be token strings or inline { token, fg, bold, dim } style tables. Supports built-in and $name metadata tokens; at most 16 rows and 16 tokens per row.
ui.sidebar.agents.rows_by_agenttable of token rowsdefault{}Complete Agent-row overrides keyed by strict canonical agent id. Agents without an override use ui.sidebar.agents.rows.
ui.sidebar.spaces.row_gapintegerdefault0Blank terminal rows between expanded Space sidebar entries. Set to 1 to restore the previous spacing. Consecutive indented worktree children remain packed as one group.
ui.sidebar.spaces.rowslist of token rowsdefault[["state_icon", "workspace"], ["branch", "git_status"]]Expanded Space sidebar layout. Entries may be token strings or inline { token, fg, bold, dim } style tables. Supports built-in and $name metadata tokens; at most 16 rows and 16 tokens per row.
ui.accentcolordefault"cyan"Accent color for highlights, borders, and navigation UI. Accepts hex (#89b4fa), named colors (cyan, blue), or RGB (rgb(137,180,250)).
Notifications
ui.toast.deliveryenumdefault"off"Popup notification delivery. off disables popups, herdr shows in-app toasts, terminal asks the outer terminal for a desktop notification, system asks the OS notification service directly.
offherdrterminalsystemui.toast.delay_secondsintegerdefault1Seconds to wait before sending finished or needs-input agent notifications. PK-Herdr notifies only if the pane is still in the same state when the delay expires. 0 is instant; valid values are 0 through 3600.
ui.toast.herdr.positionenumdefault"bottom-right"In-app toast position, relative to the full PK-Herdr frame.
top-lefttop-rightbottom-leftbottom-rightui.toast.clipboard.enabledbooleandefaulttrueShow the copied-to-clipboard popup after a mouse copy.
ui.toast.clipboard.positionenumdefault"bottom-center"Copied-to-clipboard popup position.
top-lefttop-centertop-rightbottom-leftbottom-centerbottom-right
Sound
ui.sound.enabledbooleandefaulttruePlay sounds when agents change state in background workspaces.
ui.sound.pathpathdefaultunsetOptional mp3 file path used for all notification sounds. Relative paths are resolved from the config file's directory.
ui.sound.done_pathpathdefaultunsetOptional mp3 file path for "done" notifications. Relative paths are resolved from the config file's directory.
ui.sound.request_pathpathdefaultunsetOptional mp3 file path for "request" notifications. Relative paths are resolved from the config file's directory.
ui.sound.agents.pienumdefault"default"Sound override for detected Pi agents.
defaultonoffui.sound.agents.claudeenumdefault"default"Sound override for detected Claude Code agents.
defaultonoffui.sound.agents.codexenumdefault"default"Sound override for detected Codex agents.
defaultonoffui.sound.agents.geminienumdefault"default"Sound override for detected Gemini CLI agents.
defaultonoffui.sound.agents.cursorenumdefault"default"Sound override for detected Cursor Agent CLI agents.
defaultonoffui.sound.agents.devinenumdefault"default"Sound override for detected Devin agents.
defaultonoffui.sound.agents.agyenumdefault"default"Sound override for detected Agy agents.
defaultonoffui.sound.agents.clineenumdefault"default"Sound override for detected Cline agents.
defaultonoffui.sound.agents.open_codeenumdefault"default"Sound override for detected OpenCode agents.
defaultonoffui.sound.agents.github_copilotenumdefault"default"Sound override for detected GitHub Copilot CLI agents.
defaultonoffui.sound.agents.kimienumdefault"default"Sound override for detected Kimi Code CLI agents.
defaultonoffui.sound.agents.kiroenumdefault"default"Sound override for detected Kiro agents.
defaultonoffui.sound.agents.droidenumdefault"off"Sound override for detected Droid agents.
defaultonoffui.sound.agents.ampenumdefault"default"Sound override for detected Amp agents.
defaultonoffui.sound.agents.grokenumdefault"default"Sound override for detected Grok CLI agents.
defaultonoffui.sound.agents.hermesenumdefault"default"Sound override for detected Hermes Agent agents.
defaultonoffui.sound.agents.kiloenumdefault"default"Sound override for detected Kilo Code CLI agents.
defaultonoffui.sound.agents.qoderclienumdefault"default"Sound override for detected Qoder CLI agents.
defaultonoffui.sound.agents.makienumdefault"default"Sound override for detected Maki agents.
defaultonoff
Session
session.resume_agents_on_restorebooleandefaulttrueResume supported AI-agent panes into their native conversation sessions when restoring a PK-Herdr session.
Worktrees
worktrees.directorystringdefault"~/.herdr/worktrees"Root directory under which PK-Herdr creates <repo>/<branch-slug> checkouts.
Remote
remote.manage_ssh_configbooleandefaulttrueAdd keepalive fallbacks and private connection reuse for `pk-herdr --remote`. Set false to run plain ssh unchanged.
Advanced
advanced.scrollback_limit_bytesintegerdefault10000000Maximum scrollback buffer size in bytes retained per pane terminal. The legacy key name `scrollback_lines` is accepted as an alias.
Experimental
experimental.allow_nestedbooleandefaultfalseAllow launching herdr inside an existing pk-herdr pane.
experimental.kitty_graphicsbooleandefaultfalseExperimental local Kitty graphics rendering for attached clients.
experimental.pane_historybooleandefaultfalsePersist pane screen history to session-history.json.
experimental.reveal_hidden_cursor_for_cjk_imebooleandefaultfalseExpose the focused pane's cursor anchor to the outer terminal even when the pane requested `?25l`, so macOS native input methods keep tracking the candidate window when TUIs paint their own cursor (Claude Code, pi, codex, etc.). Default: false. When the pane reports no cursor position, falls back to the pane's top-left so a stable IME anchor is always available. Trade-off when enabled: an extra hardware cursor will be visible in the outer terminal for apps that hide the cursor without painting a replacement (vim normal mode, etc.). See #149.
experimental.cjk_ime_agentslist of stringsdefault[]Restrict `reveal_hidden_cursor_for_cjk_ime` to focused panes whose detected agent matches one of these names (case-insensitive). Empty list means apply to any focused pane. Unknown agent names are ignored; if the list contains no valid names, the reveal does not apply. Accepted names: pi, claude, codex, gemini, cursor, devin, cline, opencode, copilot, kimi, kiro, droid, amp, grok, hermes, kilo, qodercli, qoder, maki.
experimental.cjk_ime_cursor_shapeenumdefault"steady_block"Cursor shape rendered for the IME anchor when `reveal_hidden_cursor_for_cjk_ime` is enabled.
blocksteady_blockunderlinesteady_underlinebarsteady_barexperimental.switch_ascii_input_source_in_prefixbooleandefaultfalseWhile prefix mode is active, temporarily switch the macOS host input source to an ASCII-capable keyboard layout so prefix commands are read as ASCII even when a CJK IME is active, then restore the previous input source when prefix mode exits. macOS only; a no-op elsewhere and a best-effort no-op if the switch fails.
No keys match this filter.