Repository navigation
Getting Started
Install TUIOS, open your first windows, and learn the keys you need on day one.
This page takes you from nothing to a working session in about five minutes.
Note
Want to try it first?
Learn tuios runs the real app in your browser, with a pretend shell. Press the keys yourself, five minutes, nothing to install.
You need a terminal with true color support. A Nerd Font makes the icons render; without one, start TUIOS with --ascii-only.
macOS and Linux:
brew install tuiosOn Linux, the tuios-ghostty cask installs tuios built with the libghostty-vt emulator. It installs a tuios binary, as the tuios formula does. Uninstall the formula before you install the cask:
brew uninstall tuios
brew install gaurav-gosain/tap/tuios-ghosttyThere is no macOS ghostty cask. On macOS, use a tuios-ghostty_*_Darwin_* archive from the releases page.
The tuios cask in gaurav-gosain/tap is deprecated. brew install tuios installs the formula from Homebrew core. If you installed the cask, move to the formula:
brew uninstall --cask tuios && brew install tuiosyay -S tuios-binLinux and macOS. Installs the tuios binary into /usr/local/bin, ~/.local/bin or ~/bin, whichever it can write to.
curl -fsSL https://raw.githubusercontent.com/Gaurav-Gosain/tuios/main/install.sh | bashnix run github:Gaurav-Gosain/tuios/v0.10.1#tuios # a release
nix run github:Gaurav-Gosain/tuios#tuios # the newest commit on mainPut a release tag after the repo name to build that release. Without a tag, Nix builds the newest commit on main.
The flake builds for x86_64-linux, aarch64-linux and aarch64-darwin. On an Intel Mac, use a release binary.
Needs Go 1.26.6 or newer, the version go.mod names.
go install github.com/Gaurav-Gosain/tuios/cmd/tuios@latestdocker run -it --rm ghcr.io/gaurav-gosain/tuios:latestPre-built binaries for Linux, macOS, Windows and FreeBSD are on the releases page.
These binaries use the pure Go terminal emulator. Archives named tuios-ghostty_* use the libghostty-vt emulator backend. From v0.8.1, they are available for Linux, Windows and macOS on Apple silicon and Intel. The v0.8.0 release had no macOS ghostty archive.
Check the install:
tuios --versionThe first line names the version and the terminal emulator backend the binary was built with, for example tuios version 0.10.0 [pure-Go backend].
Note
Keeping it up to date
If you installed with the script or a release binary, tuios update installs the newest release over the binary (tuios update --check only reports). For Homebrew, AUR, Nix and Go installs, use that tool to update. tuios update detects them and prints the right command instead.
The browser terminal is a separate binary, tuios-web. See Web Terminal to install it.
git clone https://github.com/Gaurav-Gosain/tuios.git
cd tuios
go build -o tuios ./cmd/tuios./scripts/install.sh builds and installs into ~/.local/bin. It builds the pure Go emulator by default, which needs nothing beyond Go. Run ./scripts/install.sh ghostty for the libghostty-vt emulator backend, which needs zig.
tuiosThe first run creates a session called session-0 and shows a welcome screen with four keys on it:
TUIOS
Terminal UI Operating System
n new window N new session ? help , settings
You are in window management mode. Keys here arrange windows. Nothing is sent to a shell yet.
The dock runs along the top edge, and the session rail down the right edge lists your sessions, panes and files, and later your agents. Ctrl+B b hides the rail.
Press n. A window opens with your shell in it.
Press i (or Enter) to enter terminal mode. Your keys now go to the shell. Run a command:
lsPress Alt+Esc (Opt+Esc on macOS), or Ctrl+B then Esc.
A bare Esc stays in terminal mode and goes to the program, so vim and other full-screen programs keep working.
Press n twice. Tiling is on by default, so each new window takes half of the focused one and all three stay visible.
Move between them with Tab and Shift+Tab, the number keys 1 to 9, or Alt+arrow keys to move to the neighbour in that direction. You can also click a window to focus it, and double-click it to start typing in it.
Press Alt+2 (Opt+2 on macOS) to switch to workspace 2. It is empty. Open a window there, then press Alt+1 to go back.
Press Ctrl+B then d. TUIOS exits, but the session and its shells keep running in the background daemon. Run tuios again and everything is where you left it.
Tip
When you forget a key
Press Ctrl+P in either mode to open the command palette and search every command by name. Press Ctrl+B and wait half a second: a panel lists every key the prefix accepts next. Ctrl+B then ? opens the full help.
| Mode | What your keys do | How to get there |
|---|---|---|
| Window management | Create, close, move, tile and switch windows | Alt+Esc, or Ctrl+B Esc |
| Terminal | Go to the program in the focused window | i or Enter |
Ctrl+B is the prefix key. It works in both modes: press it, release it, then press the next key. You can change it with keybindings.leader_key in the configuration.
On macOS, read Alt as Opt. If an Opt chord types a strange character instead, see the macOS notes.
Windows
| Key | Action |
|---|---|
| n | New window (window mode) |
| w or x | Close the focused window (window mode) |
| r | Rename the focused window (window mode) |
| Tab / Shift+Tab | Next / previous window (window mode) |
| Alt+N / Alt+P | Next / previous window (both modes) |
| Alt+arrow | Focus the window in that direction (both modes) |
| 1 to 9 | Focus window by number (window mode) |
| z | Zoom the focused window over the layout, and back (window mode) |
| m | Minimize to the dock (window mode). M restores all. |
The prefix versions work in both modes: Ctrl+B then c (new), x (close), r (rename), n/p (next/previous), an arrow key (focus that way), 0 to 9 (focus by number), z (zoom).
Tiling
| Key | Action |
|---|---|
| t or Ctrl+B Space | Turn tiling on or off |
| - / | | Split the focused window: new window below / to the right (window mode) |
| H J K L | Swap with the neighbour left / down / up / right (window mode) |
| = | Make all splits equal (window mode) |
BSP Tiling covers preselection, resizing and the other layouts.
Workspaces
| Key | Action |
|---|---|
| Alt+1 to 9 | Switch to workspace 1 to 9 |
| Alt+Shift+1 to 9 | Move the focused window there, and follow it |
| Ctrl+B w, then a digit | Switch workspace from the prefix menu |
Ctrl+B followed directly by a digit focuses a window, not a workspace.
Scrollback and copying
| Key | Action |
|---|---|
| Mouse wheel | Scroll the window's history. Typing, or scrolling back to the bottom, returns to live output. |
| Ctrl+B [ | Enter copy mode: move with vim keys, / to search, v to select, y to copy, Esc to leave |
| Drag with the mouse | Select text. It is copied when you release. |
| Ctrl+click a link | Open it. See Links. |
Everything else
| Key | Action |
|---|---|
| Ctrl+P | Command palette |
| Alt+Space or Ctrl+B a | App launcher: start any program on your $PATH in a new window |
| Ctrl+B S | Session switcher |
| Ctrl+B , | Settings page (, in window mode) |
| Ctrl+B ? | Help (? in window mode) |
| Ctrl+B d | Detach, leaving the session running |
| Ctrl+B q | Quit menu: detach, switch session, or kill this session |
The full list is on the Keybindings page, and tuios keybinds list prints the bindings in effect on your machine.
tuios on its own attaches to the session you used last, and creates one if there is none. To manage several:
tuios new work # create a session called "work" and attach to it
tuios ls # list sessions
tuios attach work # attach to "work"
tuios kill-session work # end "work" and every window in itInside TUIOS, Ctrl+B S switches between sessions and N (window mode) creates one.
If you want a session that lives and dies with this terminal and starts no daemon, run tuios --standalone. Sessions explains both kinds and exactly what survives a restart.
tuios config edit # open the config file in $EDITOR
tuios config path # print where it is
tuios --list-themes # list the built-in themes
tuios --theme dracula # start with a themeMost settings can also be changed live on the settings page, Ctrl+B ,. See Configuration for every option.
# Bash
tuios completion bash > /etc/bash_completion.d/tuios
# Zsh
tuios completion zsh > "${fpath[1]}/_tuios"
# Fish
tuios completion fish > ~/.config/fish/completions/tuios.fish
# PowerShell
tuios completion powershell > tuios.ps1TUIOS fills every cell that the terminal gives it. A blank border around TUIOS comes from the padding of the terminal window, not from TUIOS. To remove it, set the padding of your terminal to zero:
| Terminal | Setting |
|---|---|
| kitty | window_padding_width 0 |
| Ghostty |
window-padding-x = 0 and window-padding-y = 0
|
| WezTerm | window_padding = { left = 0, right = 0, top = 0, bottom = 0 } |
| Alacritty |
padding = { x = 0, y = 0 } under [window]
|
Some terminals also leave a thin gap when the window size is not a whole number of cells. Ghostty window-padding-balance = true spreads that gap evenly.
The spotlight is on. Press Esc in window mode, or Ctrl+B B in any mode. You can also click the Spotlight chip in the dock. See Spotlight.
Alerts are silent until you set notifications.agent.sound = true. With sound_mode = "bell", your terminal's bell setting decides if you hear it. See Hear an alert.
TUIOS ignores only the keys that it cannot read and loads the rest of the file. Open the log viewer with Ctrl+B D l, or run tuios keybinds doctor, to see each ignored key. See My config seems ignored on tuios.dev.
TUIOS tells you why the daemon refused a paste: The daemon was busy. Try again., The paste is too large. or This pane does not allow pastes. See The paste did not arrive on tuios.dev.
- Keybindings: Every default key and how to rebind it
- Sessions: Detach, reattach, share a session, and restore after a reboot
- BSP Tiling: Splits, preselection, resizing and layout modes
- Configuration: Themes, appearance and behaviour
- Tape Scripting: Record and replay workflows
- CLI Reference: Every command and flag
- Introduction
- Getting Started
- Learn tuios, hands on
- Keybindings
- Hints
- Finding a Pane
- Links
- TUIOS vs Others
Windows and Layout
Sessions and Machines
Agents
- Agents
- Inbox and Review
- Agent Messaging
- Program Status
- Worktrees
- Checkpoints
- Ship
- Push Notifications
- Turn Off Agent Features
Scripting
Recording
Reference