Upgrading to v0.13.1

Move from v0.12.1 to v0.13.1 with one restart of the daemon, live upgrades from then on, and the changes to check after the move.

There is no v0.12.2. Everything that was on its way to 0.12.2 ships in 0.13.1, so this page is the one to read when you come from v0.12.1. Most of it needs nothing from you. The parts that can surprise you are first.

Move the daemon: one restart, then live upgrades

Install the new build the way you installed the old one: brew upgrade tuios, yay -S tuios-bin, the install script, or tuios update for a binary from the script or an archive. The daemon keeps running the old build until you move it.

A v0.12.1 daemon cannot hand its panes over, so this one move is a restart:

tuios restart-server

It lists the programs that stop and what comes back, and asks first. Each session comes back with its layout, the last 1000 lines of each pane's history, and new shells. tuios daemon upgrade on a v0.12.1 daemon says the same thing and changes nothing.

From v0.13.1 on, the next move is live. tuios daemon upgrade hands the panes to the new binary, and every program keeps running with the same process and the same screen. Your client on this machine reattaches and runs the new build too. scripts/install.sh --upgrade-server and tuios hosts sync --restart do the same. A live upgrade is refused, and nothing changes, on Windows, while a pane runs for another machine or on another machine, or while a tuios fan verify check runs. See Upgrade in place.

Mixed versions

A v0.12.1 client can attach to a v0.13.1 daemon, and a v0.13.1 client to a v0.12.1 daemon: the wire protocol is the same version. A client that is older than the daemon does not show what is new, such as the limit_reached state.

Things you may notice

  • Cell frames are the default. The client writes each frame as cells and sends the terminal only the cells that changed, on every terminal except on Windows. It looks the same and costs less. If text lands in the wrong place or stale cells stay after a redraw, set cell_frames = "off" in [appearance], or start tuios with TUIOS_CELL_FRAME=0, and please report your terminal's name and version. See How frames reach the terminal.
  • Go-to holds the switchers. The session switcher, the workspace switcher and the window list are now go-to. A pane row ends with the pane's folder, and you can filter by the folder. Every list takes the keys in [keybindings.lists], including the ones that had j, k and a page of ten built in. See List keys.
  • Popups sit in the middle of the screen, clear of the rail. The agents view no longer dims the dock and the rail.
  • Minimized panes in the dock follow window order, so dock pill N and restore N always pick the same pane, on every client.
  • bash and zsh get prompt marks. tuios turns on OSC 133 marks in the shells it starts, with no edit to your files. Set integration = "off" in [shell] to start shells as before. See Shell prompt marks.
  • A child agent asks its parent first. A question from an agent started with start-agent is mailed to the agent that started it before it reaches you.
  • tuios task claim --next leaves the cards that were added with --ask-first. Claim one of those by its id.

Names that changed

Each action has one name now. The older names still work in config.toml, in a preset, in a tape and over the protocol, so you do not have to edit anything. tuios keybinds list shows them after the description as "(also: ...)". The full table is in Older action names. The common ones:

Older nameName now
prefix_new_window, window_prefix_newnew_window
prefix_close_window, window_prefix_closeclose_window
window_prefix_tilingtoggle_tiling
terminal_focus_up, terminal_focus_downfocus_up, focus_down
prefix_settingsopen_settings
prefix_helptoggle_help
debug_prefix_cancel and the other five *_prefix_cancelprefix_cancel

A keybinding that names an action tuios does not know now gets a warning when the config loads. Before, it did nothing in silence. If you see one, check the name for a typo.

Scripts and agents

  • Usage limits have their own state. An agent that stops on a usage or rate limit is limit_reached, not errored. set-agent-state errored --kind usage_limit lands as limit_reached too. A script that waits for errored should also look for limit_reached. See A usage limit.
  • Hooks talk to the daemon. Run tuios integration install again. Where the machine has nc -U or socat, each hook and the Claude Code status line become one line of sh that sends the event to the daemon, so a hook no longer starts a whole tuios. Without those programs, the hooks stay as they were.
  • Mail from your lead. Mail from the agent that started you is marked "from your lead". Mail that only says it comes from there is not.

New options, all off or as before

OptionDoes
[[actions]] and [menus.NAME]Actions and menus of your own. See Actions and menus of your own
[shell] login = trueStarts new panes as login shells. See Login shells
[agents] name_hint = "off"Leaves the advice to name the pane out of an agent's start hint
[agents] acp_version = 2Speaks the draft version 2 of the Agent Client Protocol. See ACP version
[daemon] client_follows_upgrade = falseKeeps the old client running after a live upgrade
mouse.double_click_ms, mouse.drag_threshold, appearance.whichkey_delay_ms, appearance.idle_fps and moreTimings that were fixed. Each default is the old value

Every option, with its default and the version that added it, is in the Option Explorer.

Building from source

  • The toolchain is Go 1.27.4. go install fetches it for you when your Go is older.
  • The release turns inlining off in the packages no hot path calls, through scripts/goflags.sh. A plain go install skips that, so its binary is about 0.8 MB larger. The installers, the justfile and the Dockerfile read the list. The Nix package does not yet, so it is the larger binary too.
  • The ghostty backend is on libghostty-vt 1.0.1. Rebuild it with scripts/install.sh ghostty.

Going back to v0.12.1

Install v0.12.1 again and run tuios restart-server. A live upgrade from v0.13.1 down to v0.12.1 is refused, because v0.12.1 cannot read the newer handoff, so the restart stops the programs in your panes. Your sessions and layouts come back, with the last 1000 lines of each pane's history, as after any restart.

tuios lives only at tuios.dev and github.com/Gaurav-Gosain/tuios. tuios has no X or Twitter account. An account that offers a tuios token or presale is not this project.

On this page