TUIOSTUIOS

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].

PlatformNext WindowPrevious WindowExit Terminal Mode
macOSOpt+TabOpt+Shift+TabOpt+Esc
Linux/WindowsAlt+NAlt+PAlt+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:

EdgeAction
Top centerFullscreen
Left edgeSnap to left half
Right edgeSnap to right half
Top-left cornerSnap to top-left quarter
Top-right cornerSnap to top-right quarter
Bottom-left cornerSnap to bottom-left quarter
Bottom-right cornerSnap 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
  • 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 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.

KeyAction nameDoes
cprefix_new_windowCreate new window
xprefix_close_windowClose current window
rprefix_rename_windowRename window
,prefix_settingsOpen the settings page
kprefix_keybindsOpen the keybind manager
n or Tabprefix_next_windowNext window
p or Shift+Tabprefix_prev_windowPrevious window
0-9prefix_select_0 to prefix_select_9Jump to window
Spaceprefix_toggle_tilingToggle tiling mode
zprefix_fullscreenToggle zoom on current pane
-prefix_split_horizontalSplit horizontally (top/bottom)
| or \prefix_split_verticalSplit vertically (left/right)
Rprefix_rotate_splitRotate split direction
=prefix_equalize_splitsEqualize all split ratios
[prefix_selectionEnter copy mode
sprefix_scrollbackOpen the scrollback browser
Sprefix_session_switcherOpen the session switcher
Pprefix_command_paletteOpen the command palette
Lprefix_layoutEnter layout prefix menu
wprefix_workspaceEnter workspace prefix menu
mprefix_minimizeEnter minimize prefix menu
tprefix_windowEnter window prefix menu
Dprefix_debugEnter debug prefix menu
Tprefix_tapeEnter tape prefix menu
Xprefix_close_sessionClose the current session
bprefix_toggle_sidebarToggle the session rail
Wprefix_workspace_switcherOpen the workspace switcher
eprefix_exploreFocus the session rail
jprefix_jump_notifJump to the pane a notification came from
dprefix_detachDetach; a daemon session keeps running
Escprefix_exit_modeLeave terminal mode, never detaches
qprefix_quitQuit; in daemon mode this kills the session
?prefix_helpToggle 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_1 to minimize_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_1 to workspace_prefix_switch_9, switch to workspace
  • ! @ # $ % ^ & * ( - workspace_prefix_move_1 to workspace_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.

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+b

Keybind 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.

On this page