Keybindings
Complete keyboard shortcut reference for TUIOS
Keybindings Reference
Complete keyboard shortcut reference for TUIOS. All keybindings are customizable through the configuration file.
Quick Tip
Press Ctrl+B then ? from anywhere in TUIOS to see the help overlay!
Modes
Mode switching is configured in [keybindings.mode_control]. TUIOS has two main modes:
- Window Management Mode - Navigate and manage windows (default on startup)
- Terminal Mode - Input goes directly to the focused terminal
Mode Switching
- i or Enter - Enter Terminal Mode
- Alt+Esc or Opt+Esc - Exit Terminal Mode (direct shortcut)
- Ctrl+B then Esc - Return to Window Management Mode (from Terminal Mode)
- ? (Window Mode) or Ctrl+B then ? (universal) - Toggle help overlay
- q (Window Mode) or Ctrl+B then q (universal) - Quit TUIOS
Esc and d are not the same thing
Ctrl+B Esc leaves terminal mode and returns you to window mode. It never detaches.
Ctrl+B d detaches from a daemon session, leaving it running in the background. These were one action in older versions and are now separate: prefix_exit_mode and prefix_detach.
Terminal Mode Shortcuts
These shortcuts work directly in Terminal Mode without requiring the prefix key. Configured in [keybindings.terminal_mode].
| Platform | Next Window | Previous Window | Exit Terminal Mode |
|---|---|---|---|
| macOS | Opt+Tab | Opt+Shift+Tab | Opt+Esc |
| Linux/Windows | Alt+N | Alt+P | Alt+Esc |
Why different keybindings?
On Linux and Windows, Alt+Tab is captured by the OS window switcher, so TUIOS uses Alt+N/Alt+P instead. On macOS, Opt+Tab produces a unicode character that TUIOS can intercept.
Alt+←↑↓→ move focus directionally between panes without leaving terminal mode (terminal_focus_left, terminal_focus_right, terminal_focus_up, terminal_focus_down).
Window Management
Window mode, from [keybindings.window_management] (and [keybindings.restore_minimized] for the last row).
- z - Toggle zoom (fullscreen focused window). Shared borders hidden when zoomed, dockbar shows Z indicator.
- n - Create new window
- w or x - Close focused window
- r - Rename focused window
- m - Minimize focused window
- Shift+M - Restore all minimized windows
- Tab - Focus next window
- Shift+Tab - Focus previous window
- 1-9 - Select window by number
- Shift+1-9 or !@#$%^&*( - Restore minimized window by number
- c - Copy the current selection (
copy_selection) - s - Focus the session rail (
focus_sidebar) - Alt+Shift+N / Alt+Shift+P - Next and previous session (
next_session,prev_session) - Shift+S - Start the screen saver now (
start_screensaver)
Workspaces
TUIOS supports 9 workspaces for organizing windows. Configured in [keybindings.workspaces].
- Alt+1 through Alt+9 - Switch to workspace 1-9
- Alt+Shift+1 through Alt+Shift+9 - Move window to workspace and follow
macOS Users
Use Option+1 through Option+9 (automatically configured by default)
Window Layout
Manual Snapping (Non-Tiling Mode)
Keyboard Snapping
- h - Snap window to left half
- l - Snap window to right half
- f - Fullscreen window
- u - Unsnap/restore window
- 1 - Snap to top-left corner
- 2 - Snap to top-right corner
- 3 - Snap to bottom-left corner
- 4 - Snap to bottom-right corner
Mouse Edge Snapping
In floating mode (non-tiling), drag a window to the screen edges to snap it:
| Edge | Action |
|---|---|
| Top center | Fullscreen |
| Left edge | Snap to left half |
| Right edge | Snap to right half |
| Top-left corner | Snap to top-left quarter |
| Top-right corner | Snap to top-right quarter |
| Bottom-left corner | Snap to bottom-left quarter |
| Bottom-right corner | Snap to bottom-right quarter |
Edge Detection
Simply drag a window by its title bar and release when the cursor reaches the screen edge (within 5 pixels of the edge).
Tiling Mode
TUIOS uses Binary Space Partitioning (BSP) for automatic tiling. Windows are arranged in an alternating vertical/horizontal split pattern (spiral layout).
- t - Toggle automatic tiling mode
- Shift+H or Ctrl+Left - Swap with window to the left
- Shift+L or Ctrl+Right - Swap with window to the right
- Shift+K or Ctrl+Up - Swap with window above
- Shift+J or Ctrl+Down - Swap with window below
- < or Shift+, - Decrease master window width (from right edge)
- > or Shift+. - Increase master window width (from right edge)
- { or Shift+[ - Decrease focused window height (from bottom edge)
- } or Shift+] - Increase focused window height (from bottom edge)
- . - Increase master window width from the left edge
- [ - Decrease focused window height from the top edge
- ] - Increase focused window height from the top edge
One default binding you cannot reach
resize_master_shrink_left is bound to a bare , by default, and you will never trigger it. In window mode, , is intercepted for the settings page before any keybinding lookup runs.
Rebinding , in [keybindings.layout] does not help either, because the intercept is not registry-driven. Bind resize_master_shrink_left to a different key if you want it.
BSP Split Controls
In window mode, from [keybindings.layout]:
- - -
split_horizontal - | or \ -
split_vertical - R -
rotate_split - = -
equalize_splits - Alt+h Alt+j Alt+k Alt+l -
preselect_left/preselect_down/preselect_up/preselect_right, choosing where the next window lands (Opt on macOS)
The same four split operations are also on the prefix key, as separate actions in [keybindings.prefix_mode]:
- Ctrl+B then - -
prefix_split_horizontal - Ctrl+B then | or \ -
prefix_split_vertical - Ctrl+B then R -
prefix_rotate_split - Ctrl+B then = -
prefix_equalize_splits
Rebinding one does not rebind the other. They are two independent sets.
Split Indicator
The dock shows the next split direction (V for vertical, H for horizontal) when tiling mode is active.
Copy Mode
Enter copy mode with Ctrl+B then [ to navigate scrollback and select text using vim-style commands.
Vim Users
Copy mode supports 50+ vim motions including word movements, paragraph jumps, and search!
Basic Navigation
- Ctrl+B then [ - Enter copy mode
- h j k l - Move cursor left/down/up/right
- w b e - Word forward / word backward / word end
- 0 ^ $ - Start of line / first non-blank / end of line
- gg - Jump to top of scrollback
- G - Jump to bottom (live output)
- {number}G - Jump to line number (e.g., 10G)
- { } - Jump to previous/next paragraph
- Ctrl+U Ctrl+D - Half page up/down
- Ctrl+B Ctrl+F - Full page up/down
- i - Return to terminal mode
- q or Esc - Exit copy mode
Count Prefix
Prefix any motion with a number to repeat it:
- 10j - Move down 10 lines
- 5w - Move forward 5 words
- 3{ - Jump up 3 paragraphs
Character Search
- f{char} - Find next occurrence of char on line
- F{char} - Find previous occurrence of char on line
- t{char} - Move cursor before next char
- T{char} - Move cursor after previous char
- ; - Repeat last character search
- , - Repeat last search (opposite direction)
Search
- / - Search forward
- ? - Search backward
- n - Next match
- N - Previous match
- Ctrl+L - Clear search highlights
Visual Selection
- v - Enter visual character mode
- V - Enter visual line mode
- y or c - Yank (copy) selection to clipboard
- Esc or q - Exit visual mode
Command Palette
- Ctrl+P - Open Command Palette (works from any mode)
- Ctrl+B then P - Open Command Palette (prefix alternative)
The command palette provides fuzzy-searchable access to all TUIOS commands, keybindings, and actions, plus sessions and windows. An @ prefix filters panes by agent state, for example @n for needs input. Programs live in their own overlay, the app launcher, and the palette keeps one row that opens it.
App Launcher
- Alt+Space - Open the app launcher (works from any mode)
The launcher lists every executable on $PATH, fuzzy-matched and frecency-ranked, with names and icons from desktop entries on platforms that have them. Enter execs the selection in a new pane, with no shell in between, so what you launched is what runs. Tab types the command into the focused shell instead, for when you want to add arguments.
Both this key and Ctrl+P live in [keybindings.global], a section consulted in window mode and terminal mode alike.
Prefix Commands
Press Ctrl+B, release, then press the command key (tmux-style).
Leader Key
The leader key (Ctrl+B by default) is configurable. See Configuration Guide for details.
Main Prefix (Ctrl+B)
Every row below is an action in [keybindings.prefix_mode] and can be rebound.
| Key | Action name | Does |
|---|---|---|
| c | prefix_new_window | Create new window |
| x | prefix_close_window | Close current window |
| r | prefix_rename_window | Rename window |
| , | prefix_settings | Open the settings page |
| k | prefix_keybinds | Open the keybind manager |
| n or Tab | prefix_next_window | Next window |
| p or Shift+Tab | prefix_prev_window | Previous window |
| 0-9 | prefix_select_0 to prefix_select_9 | Jump to window |
| Space | prefix_toggle_tiling | Toggle tiling mode |
| z | prefix_fullscreen | Toggle zoom on current pane |
| - | prefix_split_horizontal | Split horizontally (top/bottom) |
| | or \ | prefix_split_vertical | Split vertically (left/right) |
| R | prefix_rotate_split | Rotate split direction |
| = | prefix_equalize_splits | Equalize all split ratios |
| [ | prefix_selection | Enter copy mode |
| s | prefix_scrollback | Open the scrollback browser |
| S | prefix_session_switcher | Open the session switcher |
| P | prefix_command_palette | Open the command palette |
| L | prefix_layout | Enter layout prefix menu |
| w | prefix_workspace | Enter workspace prefix menu |
| m | prefix_minimize | Enter minimize prefix menu |
| t | prefix_window | Enter window prefix menu |
| D | prefix_debug | Enter debug prefix menu |
| T | prefix_tape | Enter tape prefix menu |
| X | prefix_close_session | Close the current session |
| b | prefix_toggle_sidebar | Toggle the session rail |
| W | prefix_workspace_switcher | Open the workspace switcher |
| e | prefix_explore | Focus the session rail |
| j | prefix_jump_notif | Jump to the pane a notification came from |
| d | prefix_detach | Detach; a daemon session keeps running |
| Esc | prefix_exit_mode | Leave terminal mode, never detaches |
| q | prefix_quit | Quit; in daemon mode this kills the session |
| ? | prefix_help | Toggle help |
Ctrl+B then Ctrl+B sends a literal Ctrl+B to the terminal.
Copy mode and the scrollback browser are different
Ctrl+B [ enters copy mode, with vim motions and text selection. Ctrl+B s opens the scrollback browser, which is for reading back through history. They are separate actions with separate bindings.
Window Prefix (Ctrl+B then t)
Configured in [keybindings.window_prefix].
- n -
window_prefix_new, create new window - x -
window_prefix_close, close current window - r -
window_prefix_rename, rename window - Tab -
window_prefix_next, next window - Shift+Tab -
window_prefix_prev, previous window - t -
window_prefix_tiling, toggle tiling mode - Esc -
window_prefix_cancel, cancel
Minimize Prefix (Ctrl+B then m)
Configured in [keybindings.minimize_prefix].
- m -
minimize_prefix_focused, minimize the focused window - 1-9 -
minimize_prefix_restore_1tominimize_prefix_restore_9, restore minimized window by position - M -
minimize_prefix_restore_all, restore all minimized windows - Esc -
minimize_prefix_cancel, cancel
Tape Prefix (Ctrl+B then T)
Record and replay .tape automation scripts. Configured in [keybindings.tape_prefix].
- m -
tape_prefix_manager, open the tape manager - r -
tape_prefix_record, start recording - s -
tape_prefix_stop, stop recording - t -
tape_prefix_review, review a detected project tape - Esc -
tape_prefix_cancel, cancel
Workspace Prefix (Ctrl+B then w)
Configured in [keybindings.workspace_prefix].
- 1-9 -
workspace_prefix_switch_1toworkspace_prefix_switch_9, switch to workspace - ! @ # $ % ^ & * ( -
workspace_prefix_move_1toworkspace_prefix_move_9, move window to workspace and follow - r -
workspace_prefix_rename, rename the current workspace - Esc -
workspace_prefix_cancel, cancel
Debug Prefix (Ctrl+B then D)
Debug and development tools. Configured in [keybindings.debug_prefix].
- l -
debug_prefix_logs, toggle log viewer - c -
debug_prefix_cache, toggle cache statistics - k -
debug_prefix_showkeys, toggle showkeys overlay - a -
debug_prefix_animations, toggle animations - Esc -
debug_prefix_cancel, cancel
Layout Prefix (Ctrl+B then L)
Save and load window layout templates:
- Ctrl+B then L then l - Load layout template
- Ctrl+B then L then s - Save layout template
- Ctrl+B then L then Esc - Cancel
Layout loading is non-destructive: existing windows are repositioned to match the template rather than being killed. Extra windows are minimized.
The only prefix menu you cannot rebind
Entering this menu is the configurable prefix_layout action, but l and s inside it are literal. The layout sub-prefix has no config section of its own.
Mouse Controls
- Left Click - Focus window
- Left Drag - Move window (non-tiling) or swap windows (tiling)
- Right Drag - Resize window (non-tiling only)
- Title Bar Buttons - Minimize, maximize, or close window
- Click Dock Item - Restore minimized window
- Copy Mode Click - Move cursor to position
- Copy Mode Drag - Select text (enters visual mode). Dragging above/below the pane auto-scrolls via a timer.
- Mouse Wheel Up - Enter copy mode and scroll up (when the application is not tracking the mouse and is not on the alternate screen)
- Right Border Click/Drag - Interactive scrollbar for navigating scrollback history
Session Rail
When the rail owns the keyboard (s in window mode, or Ctrl+B then e), it has a keybinding section of its own, [keybindings.sidebar]: j/k move, g/G jump to the ends, Tab switches section, Enter activates, J/K reorder, f and o filter and sort the agents section, n makes a new session, / opens the palette, </> narrow and widen, 1-9 jump by number, and ? shows the rail's own help.
While the cursor is on a row of the files section, a second section answers first, [keybindings.sidebar_files]: a creates, r renames, d deletes to the trash, D deletes permanently, y copies, x cuts, and p pastes. They are a section of their own because three of them collide with a rail key that already exists, so the row under the cursor decides which map answers. See The files section.
Mouse links
Shift and the left mouse button on a link in a pane opens it. Shift is the terminal's own "this click is mine, not the program's" modifier, so it reaches past a program that is tracking the mouse. appearance.links decides what counts as a link. See links.
Customization
Every binding on this page lives in one of 19 sections under [keybindings] in config.toml, and every one is rebindable. The section is named next to each group above. See the Configuration Guide for the full list and the key syntax.
# Edit your keybindings
tuios config edit
# View current configuration
tuios keybinds list
# View your customizations
tuios keybinds list-custom
# Audit for conflicts, with evidence tiers
tuios keybinds doctor
# Everything one key does, and who else wants it
tuios keybinds explain ctrl+bKeybind Manager
Ctrl+B then k opens the keybind manager inside the app: four tabs over one analysis. Bindings lists every binding, searchable. Conflicts shows keys claimed twice inside TUIOS. Guests shows keys TUIOS takes that the pane's program also wants. Record captures the next key you press and reports all three answers for it.
The same analysis runs headlessly: tuios keybinds doctor reports duplicate claims and keys taken from the pane, each finding tagged with how it knows, certain from TUIOS routing, observed from the pane, or reference from a curated list of program defaults. tuios keybinds explain <key> answers for one key. Both take --json and --guest <program>.
Prefix bindings work now
Six sections used to be parsed and then ignored, so rebinding anything under the leader key silently did nothing: prefix_mode, window_prefix, minimize_prefix, workspace_prefix, debug_prefix, and tape_prefix. They all resolve properly now, as does terminal_mode. If you gave up on customizing your prefix menus, try again.
list-custom is not a full audit
tuios keybinds list-custom compares 9 of the 19 sections. It ignores navigation, restore_minimized, debug_prefix, tape_prefix, layout_prefix, terminal_mode, global, script, sidebar, and sidebar_files, and it never reports a customized leader_key. A config that changes only those prints "No custom keybindings configured".
Most keybinding changes need a restart
TUIOS hot-reloads the [appearance] table and leader_key, but the other keybindings are not in that subset. Restart the client after editing them.
Platform-Specific Notes
macOS
Default workspace switching uses Option key:
- Option+1 through Option+9 - Switch workspace
- Option+Shift+1 through Option+Shift+9 - Move window to workspace
Terminal mode shortcuts:
- Opt+Tab / Opt+Shift+Tab - Cycle windows
- Opt+Esc - Exit terminal mode
You can still type Option key unicode characters (¡™£¢∞§¶•ª) in Terminal Mode.
Linux/Windows
Uses standard Alt key for workspace switching:
- Alt+1 through Alt+9
- Alt+Shift+1 through Alt+Shift+9
Terminal mode shortcuts:
- Alt+N / Alt+P - Cycle windows (next/previous)
- Alt+Esc - Exit terminal mode
Note
Alt+Tab is not used on Linux/Windows because it conflicts with the OS window switcher.