Workspace
Keybinds
Every default keybind in Verde, plus how to remap or disable each binding in verde.json.
Default keybinds
These are the defaults, read from packages/desktop/src/keybinds.zig. Override
any of them under keybinds in your Verde config — see Remapping
below.
App
| Combo | Action |
|---|---|
Ctrl+Shift+P / Cmd+Shift+P |
Command palette |
Ctrl+T / Cmd+T |
New chat thread |
Ctrl+W / Cmd+W, Alt+X |
Close the focused pane |
Ctrl+Shift+W / Cmd+Shift+W |
Close the current workspace (reopen from the command palette) |
Ctrl+R / Cmd+R, Ctrl+Shift+R, F5 |
Refresh / reload app |
Alt+O |
Open the default project |
Ctrl+Shift+O |
Open in external editor |
Sidebar & panes
| Combo | Action |
|---|---|
Ctrl+S / Cmd+S |
Toggle the sidebar (visible ↔ icon) |
Ctrl+Shift+S |
Toggle the sidebar's hidden mode |
Ctrl+B |
Toggle the embedded browser pane |
Tab |
Inside a chat pane, focus the prompt box |
Alt+1 … Alt+9, Alt+0 |
Jump between workspaces by sidebar order |
Alt+↑ / Alt+↓ |
Cycle to the previous / next workspace |
Focus (vim-style)
| Combo | Action |
|---|---|
Ctrl+H |
Focus the pane to the left |
Ctrl+L |
Focus the pane to the right |
Ctrl+K |
Focus the pane above |
Ctrl+J |
Focus the pane below |
Alt+arrow combos are no longer focus aliases — Alt+↑ / Alt+↓ now cycle
between workspaces (see the sidebar table above).
Swap (rearrange the tiling)
| Combo | Action |
|---|---|
Ctrl+Shift+H |
Swap focused pane with the left one |
Ctrl+Shift+L |
Swap focused pane with the right one |
Ctrl+Shift+K |
Swap focused pane with the one above |
Ctrl+Shift+J |
Swap focused pane with the one below |
Resize (grow)
| Combo | Action |
|---|---|
Alt+Shift+← |
Grow the focused pane left |
Alt+Shift+→ |
Grow the focused pane right |
Alt+Shift+↑ |
Grow the focused pane up |
Alt+Shift+↓ |
Grow the focused pane down |
Zoom
| Combo | Action |
|---|---|
Alt+Z |
Zoom the focused pane to fill the workspace; toggle again to restore |
Workspace splits
| Combo | Action |
|---|---|
Ctrl+Shift+T / Cmd+Shift+T |
Split a terminal pane next to the focus |
Vertical / horizontal chat splits, terminal-vertical splits, and minimize have
no default keybind. Use the pane header buttons: C| / C- for chat
vertical / horizontal, T| / T- for terminal vertical / horizontal, and the
minimize button. You can bind these actions yourself — see the table of
binding keys below.
Terminal (inside a focused terminal pane)
| Combo | Action |
|---|---|
Ctrl+Alt+T / Cmd+Alt+T |
New terminal tab |
Ctrl+Shift+R / Cmd+Shift+R |
Rename the active terminal tab |
Ctrl+Shift+PageUp |
Previous terminal tab |
Ctrl+Shift+PageDown |
Next terminal tab |
Ctrl+Alt+↑ / Cmd+Alt+↑ |
Focus the terminal split above |
Ctrl+Alt+↓ / Cmd+Alt+↓ |
Focus the terminal split below |
Ctrl+Alt+← / Cmd+Alt+← |
Focus the terminal split left |
Ctrl+Alt+→ / Cmd+Alt+→ |
Focus the terminal split right |
Ctrl+- / Ctrl+= |
Per-terminal zoom out / in |
Chat transcript scrolling
| Combo | Action |
|---|---|
↑ |
Scroll up one line |
↓ |
Scroll down one line |
PageUp |
Scroll up one page |
PageDown |
Scroll down one page |
Transcript scrolling is direct — no inertia or velocity decay. When input stops, the view stops. Do not expect a multi-frame glide.
Remapping
Override any binding under keybinds in your verde.json. On Unix it is under
$XDG_CONFIG_HOME/verde or ~/.config/verde; on Windows it is under
%APPDATA%\Verde. Use a string for one shortcut, or a string array for multiple
shortcuts on the same action:
{
"keybinds": {
"new_thread": "CommandOrControl+T",
"browser": "Ctrl+B",
"workspace": {
"close_current": "CommandOrControl+Shift+W",
"focus_up": "Ctrl+K",
"focus_down": "Ctrl+J",
"focus_left": "Ctrl+H",
"focus_right": "Ctrl+L",
"previous": "Alt+Up",
"next": "Alt+Down",
"move_left": "Ctrl+Shift+H",
"move_right": "Ctrl+Shift+L",
"move_up": "Ctrl+Shift+K",
"move_down": "Ctrl+Shift+J",
"toggle_maximize": "Alt+Z",
"close": ["CommandOrControl+W", "Alt+X"],
"select": ["Alt+1", "Alt+2", "Alt+3", "Alt+4", "Alt+5", "Alt+6", "Alt+7", "Alt+8", "Alt+9", "Alt+0"]
},
"terminal": {
"new_tab": "CommandOrControl+Alt+T",
"close": "CommandOrControl+Shift+W",
"rename_tab": "CommandOrControl+Shift+R",
"tab_previous": "CommandOrControl+Shift+PageUp",
"tab_next": "CommandOrControl+Shift+PageDown",
"focus_up": "CommandOrControl+Alt+Up",
"focus_down": "CommandOrControl+Alt+Down",
"focus_left": "CommandOrControl+Alt+Left",
"focus_right": "CommandOrControl+Alt+Right"
}
}
}Disabling a binding
Set the binding to null, an empty string, or an empty array to disable it:
{
"keybinds": {
"terminal": {
"toggle": null,
"split_up": null,
"split_down": null,
"split_left": null,
"split_right": null
}
}
}Binding keys reference
The keybinds config uses the same accelerator grammar as the desktop defaults. The top-level keys group actions by surface; the inner values are one shortcut or an array of shortcuts.
| Group | Keys (subset) |
|---|---|
| top | refresh, open_default, open_editor, new_thread, command_palette, toggle_sidebar, toggle_sidebar_hidden, toggle_browser, toggle_terminal |
| chat | chat_up, chat_down, chat_page_up, chat_page_down |
workspace |
split_chat_vertical, split_chat_horizontal, split_terminal_vertical, split_terminal_horizontal, toggle_maximize, minimize, close, close_current, focus_left, focus_right, focus_up, focus_down, focus_prompt, move_*, grow_*, select, previous, next |
terminal |
new_tab, close, rename_tab, tab_previous, tab_next, split_up, split_down, split_left, split_right, focus_up, focus_down, focus_left, focus_right |
Keybinds are loaded on startup and on app refresh. See Configuration &
state for the full verde.json schema and where state lives.