A window manager for your terminal
Open panes, tile them, and switch between nine workspaces without leaving the terminal you already use. A daemon keeps your sessions running when you detach, reaches your other machines, and shows what the coding agents in your panes are doing.
What it does
Everything a multiplexer does, drawn like a desktop
Keyboard first
Window mode moves and resizes panes. Terminal mode sends every key to the program in the pane. Every binding can be changed in the config.
Tiling or floating
BSP tiling with preselection, master-stack and scrolling layouts. Turn tiling off and drag windows around with the mouse instead.
Sessions that stay
A daemon owns the panes. Detach, close the terminal, and attach again later from this machine or over SSH.
Other machines
Name a host once with tuios hosts add. Then attach to its sessions in this client, or run a single pane on it.
Built for coding agents
Panes running an agent show whether it is working, idle or waiting for you. Agents can message each other and fan out across git worktrees.
Scriptable
Drive a session from outside with send-keys, capture-pane and a JSON control protocol, or replay a tape script.
Also: kitty graphics passthrough, a vim-style copy mode, a command palette, 340+ themes, and a browser terminal.
Get started
Install it, run it, press n
Install
$ brew install tuiosStart a session
Run tuios. It starts the daemon if it is not running and attaches you to a session.
Learn five keys
The table has the ones you need on day one. The keybindings page lists the rest, or run tuios keybinds list. Or learn them hands on, in your browser, before you install anything.
default keys
- n
- New window
- iorEnter
- Enter terminal mode
- Ctrl+BthenEsc
- Back to window mode
- t
- Toggle tiling
- Ctrl+P
- Command palette
- Ctrl+Bthend
- Detach, keep running
- ?
- Help
From the blog
All postsA full scrollback cost 232MB per pane, twice: once in the daemon and once in each client
A 112-byte cell made every scrollback line cost the full pane width. Packing cells, then storing lines as text, took a full ring from 232MB to 2.2MB.
Agents drive tuios through one-shot commands, so the event bus could not reach them
A hub only reaches whoever is subscribed right now, and agents almost never are. How tuios got a mailbox, ask-agent and an inbox for the person.
The pane ran on another machine, and ctrl+D waited for the next keypress
tuios daemons now talk to each other over one ssh link per machine. It shipped in stages, and each stage had a bug that taught me something.