# v0.10.1

URL: https://tuios.dev/releases/v0-10-1

> A reply editor with line breaks, long pastes and images, and an agents view of every agent you run. A theme editor, light and dark theme pairs, styles for every part of the chrome, tuios look for shared setups, and keybind presets for tmux, screen and zellij. An idle tuios now runs no timer.

tuios 0.10.1 is a big one for a point release. You can now write a real reply to an agent, with line breaks, long pastes and images, and see every agent you run in one list. tuios also got much easier to make your own: a theme editor inside tuios, light and dark theme pairs, styles for the borders, the titles, the rail and the dock, and `tuios look` to apply a setup that someone shared. If you come from tmux, screen or zellij, a keybind preset gives you the keys you know. And an idle tuios now does almost nothing: no timer runs while nothing changes.

Read [Upgrading](https://tuios.dev/releases/v0-10-1#upgrading) before you update. The clock, the prefix badge and the pane environment changed.

The full list is at [tuios.dev/releases](https://tuios.dev/releases).

## Watch

[![Screen recording: twelve tuios setups made only with config files, then the theme editor changes the accent colour live](https://tuios.dev/releases/v0.10.1/show-your-setup.jpg)](https://tuios.dev/releases/v0-10-1)

1. Omarchy style, cozy Catppuccin, synthwave, paper and amber CRT.
2. Everforest, scrolling Nord columns, Kanagawa ink and a hacker wall.
3. Zen, maximal Gruvbox and mono.
4. The theme editor gives the accent role a new colour, applied at once.

[![Screen recording: tuios finds a tmux.conf and offers the tmux keys, the mode pill shows the prefix, the zellij preset runs, and the tmux shim gives tmux tools tuios panes](https://tuios.dev/releases/v0.10.1/coming-from-tmux.jpg)](https://tuios.dev/releases/v0-10-1)

1. tuios finds your tmux.conf and offers its keys.
2. ctrl+b, then a key. The mode pill shows the prefix.
3. zellij and screen keys too. Change them any time.
4. Tools that call tmux get tuios panes through tuios tmux-shim.

The clips have music and no narration. Each clip has captions.

Show me your setup in [discussion #849](https://github.com/Gaurav-Gosain/tuios/discussions/849), and tell me what you still miss from tmux in [discussion #850](https://github.com/Gaurav-Gosain/tuios/discussions/850).

## Install

```bash
brew install tuios                     # Homebrew (macOS, Linux)
yay -S tuios-bin                       # AUR (tuios-web-bin for the web server)
nix run github:Gaurav-Gosain/tuios     # Nix
curl -fsSL https://raw.githubusercontent.com/Gaurav-Gosain/tuios/main/install.sh | bash
go install github.com/Gaurav-Gosain/tuios/cmd/tuios@v0.10.1
docker run -it --rm ghcr.io/gaurav-gosain/tuios:v0.10.1
```

A binary installed by the script or from an archive updates with `tuios update`.

## Highlights

### The reply editor

[](https://tuios.dev/shots/composer.webp)

The Inbox reply is now a full editor ([#769](https://github.com/Gaurav-Gosain/tuios/pull/769), [#770](https://github.com/Gaurav-Gosain/tuios/pull/770), [#771](https://github.com/Gaurav-Gosain/tuios/pull/771)).

- It has more than one line. `enter` sends. `ctrl+j`, `shift+enter` or `alt+enter` adds a line. The word keys, `ctrl+u`, `ctrl+k`, undo (`ctrl+z`) and redo work as in a shell.
- A long paste becomes one block, such as `[Pasted text #1 · 42 lines]`. `ctrl+o` opens the block, `ctrl+e` makes it editable text, and `backspace` removes it.
- A reply can carry a paste of up to 8 MB. When the message is too large to type, tuios writes each block to a file and gives the agent the path ([#812](https://github.com/Gaurav-Gosain/tuios/pull/812)).
- `up` brings back what you sent to this agent before, and `ctrl+r` searches it. `ctrl+g` opens the draft in your `$EDITOR` ([#832](https://github.com/Gaurav-Gosain/tuios/pull/832)).
- `@` names a pane, an agent or a file of the pane's folder ([#826](https://github.com/Gaurav-Gosain/tuios/pull/826)).
- `esc` keeps the draft. `r` on the same pane opens it again.
- You can reply to an agent on a linked machine. Before, the Inbox said "Attach there to reply" ([#835](https://github.com/Gaurav-Gosain/tuios/pull/835)).
- The mailbox and the Inbox's other text fields use the same editor ([#828](https://github.com/Gaurav-Gosain/tuios/pull/828), [#830](https://github.com/Gaurav-Gosain/tuios/pull/830)).

### Image paste

- `ctrl+v` in the reply editor attaches the image on the clipboard. A dropped image file works too ([#814](https://github.com/Gaurav-Gosain/tuios/pull/814)).
- The draft shows each image as a small preview above the text, and `ctrl+o` shows it larger ([#817](https://github.com/Gaurav-Gosain/tuios/pull/817)).
- tuios gives the image to Claude Code, Codex, OpenCode, Kilo, Crush and pi in the way each one reads it ([#814](https://github.com/Gaurav-Gosain/tuios/pull/814), [#833](https://github.com/Gaurav-Gosain/tuios/pull/833)).
- Limits: 8 images a message, and 8 MB for the whole message.

### The agents view

[](https://tuios.dev/shots/agents-view.webp)

`tab` in the Inbox shows every agent in one list: the agents of this session, of your other sessions, and of linked machines ([#819](https://github.com/Gaurav-Gosain/tuios/pull/819)).

- Each row shows the state, the session, what the agent does, how long it has been in that state, and what waits for it.
- `f` filters, `s` sorts and `/` searches.
- On a wide screen, the agent's thread shows beside the list: what you asked, what it said, and the tools it ran ([#822](https://github.com/Gaurav-Gosain/tuios/pull/822)).
- `ctrl+]` shows the agent's pane. `ctrl+b i` brings you back to the same agent, with your drafts ([#823](https://github.com/Gaurav-Gosain/tuios/pull/823)).
- `space` marks agents and `*` marks all. Then reply, allow, deny, dismiss or snooze all of them at once ([#825](https://github.com/Gaurav-Gosain/tuios/pull/825)).

### The theme editor

The theme editor is a side sheet that changes the colours of a theme while the whole screen shows the result ([#827](https://github.com/Gaurav-Gosain/tuios/pull/827), [#829](https://github.com/Gaurav-Gosain/tuios/pull/829)). Open it from the command palette with "Edit theme", or with `ctrl+o` in the theme picker for a new theme.

- The Quick tab makes a whole theme from two colours: an accent and a surface.
- The Roles and Pane colours tabs set each colour. Each row shows its contrast, and `f` fixes a colour that is too hard to read.
- When you move to a role, every part of the screen that uses it flashes.
- `u` undoes, `x` resets and `ctrl+s` saves to your themes folder.

### Ricing

Every part of the chrome now has a style you can set. All of these are in the settings page, and `set-config` changes them live.

- **Light and dark pairs.** `appearance.theme_light` is the theme for a light terminal. tuios follows your terminal when it switches between light and dark ([#818](https://github.com/Gaurav-Gosain/tuios/pull/818)).
- **Borders.** The focused border takes a colour for copy mode and for an agent that waits for you ([#820](https://github.com/Gaurav-Gosain/tuios/pull/820)). `appearance.border_focused_gradient` draws a gradient on it ([#821](https://github.com/Gaurav-Gosain/tuios/pull/821)).
- **Titles.** `appearance.window_title_style` is `pill`, `tab` or `plain`. `window_title_align` puts the title on the left, in the centre or on the right ([#824](https://github.com/Gaurav-Gosain/tuios/pull/824)).
- **The rail.** `appearance.sidebar.row_style` (`bar`, `marker`, `underline`, `pill`), `header_style` with section icons, and `density = "roomy"` ([#831](https://github.com/Gaurav-Gosain/tuios/pull/831), [#834](https://github.com/Gaurav-Gosain/tuios/pull/834), [#836](https://github.com/Gaurav-Gosain/tuios/pull/836)).
- **The dock.** Workspace tabs show a mark for a bell, for new output, and for an agent that waits ([#837](https://github.com/Gaurav-Gosain/tuios/pull/837)). The mode pill shows when the leader key waits ([#811](https://github.com/Gaurav-Gosain/tuios/pull/811)).
- **Theme roles.** A theme can colour each border state, the rule, the status colours, the dots and the grounds ([#815](https://github.com/Gaurav-Gosain/tuios/pull/815)).
- **Your terminal's colours.** With `theme = "none"`, the dialogs, the rail and the dock now use greys made from your terminal's own background ([#816](https://github.com/Gaurav-Gosain/tuios/pull/816)).
- **Themes from other themes.** A theme file can name a `base` and change only some colours ([#789](https://github.com/Gaurav-Gosain/tuios/pull/789)). tuios reloads a theme or glyph file when you save it. `tuios theme reload` is a hook for pywal and matugen ([#791](https://github.com/Gaurav-Gosain/tuios/pull/791)).
- **Share a theme.** `tuios theme export` prints a theme file, also as base16. `tuios theme share` prints the theme as one line you can paste ([#813](https://github.com/Gaurav-Gosain/tuios/pull/813)).
- **The theme picker.** `ctrl+f` shows dark or light themes only, `ctrl+r` picks one at random, `ctrl+y` copies the id, and `ctrl+d` deletes a theme of yours ([#792](https://github.com/Gaurav-Gosain/tuios/pull/792)).

### tuios look

`tuios look` applies a setup that someone shared, on top of your config ([#859](https://github.com/Gaurav-Gosain/tuios/pull/859), [#861](https://github.com/Gaurav-Gosain/tuios/pull/861)).

```bash
tuios look apply tuios.dev/r/<id>   # or an id, an https URL or a file
tuios look show
tuios look remove
```

- A look sets the theme, the glyphs, the borders, the dock, the rail, the layout and other parts of the look. It cannot set keys, hooks, commands, hosts or anything else that runs a program.
- tuios shows each change and asks first.
- The look goes in `config.d/look.toml`. Your `config.toml` does not change, and `tuios look remove` puts everything back.

The [gallery on tuios.dev](https://tuios.dev/gallery) has looks to try in your browser, with the command to apply each one.

### Keybind presets

`keybindings.preset` gives you the keys of another multiplexer ([#800](https://github.com/Gaurav-Gosain/tuios/pull/800), [#801](https://github.com/Gaurav-Gosain/tuios/pull/801), [#802](https://github.com/Gaurav-Gosain/tuios/pull/802)).

- `tmux`: `ctrl+b`, then `%` and `"` to split, `z` to zoom, `c`, `n` and `p` for workspaces, and the rest of the tmux keys.
- `screen`: `ctrl+a`, with `ctrl+a a` to send `ctrl+a` to the pane.
- `zellij`: `ctrl+g`, then a mode key.
- The tuios features that a preset moves are under the leader, then `ctrl+t`.
- `U` in window mode opens the preset picker. It shows the keys that your shell loses with each preset.
- On first start, tuios finds your `tmux.conf`, `.screenrc` or zellij folder and offers the preset. It never switches by itself.
- Your own bindings win over the preset. `tuios keybinds doctor` lists the preset keys that your bindings take ([#806](https://github.com/Gaurav-Gosain/tuios/pull/806)).
- `keybindings.repeat` sets which actions stay armed after the leader, as tmux `bind -r` does ([#796](https://github.com/Gaurav-Gosain/tuios/pull/796)).
- New actions with no default key: `last_workspace`, `break_pane`, `last_session` and `send_prefix` ([#795](https://github.com/Gaurav-Gosain/tuios/pull/795)).

### Images in screenshots

A screenshot that you take in tuios now shows the images in a pane: kitty graphics, kitty images in Unicode placeholder cells, and sixel. Before, the screenshot showed blank cells ([#855](https://github.com/Gaurav-Gosain/tuios/pull/855), fixes [#678](https://github.com/Gaurav-Gosain/tuios/issues/678)). The image previews of the reply editor and the launcher icons show too ([#863](https://github.com/Gaurav-Gosain/tuios/pull/863)). `tuios screenshot` from the command line still draws no images, because the daemon does not keep them.

### tuios.dev/shot

[](https://tuios.dev/docs/libraries)

The screenshot renderer of tuios is now a Go library, `tuios.dev/shot` ([#846](https://github.com/Gaurav-Gosain/tuios/pull/846)). It turns a grid of terminal cells into SVG, PNG, HTML, ANSI or text. It has fallback fonts for glyphs that the main font does not have, and v0.2.0 draws images on the grid ([#862](https://github.com/Gaurav-Gosain/tuios/pull/862)). It reads the screen of a `tuios.dev/vt` emulator directly.

## Features

- **Wait for a program.** `tuios new-window NAME --keep-open --wait -- CMD` runs a program in a pane, waits for it, and exits with its status. `--keep-open` keeps the pane after the program exits, with its exit status under the output ([#764](https://github.com/Gaurav-Gosain/tuios/pull/764)).
- **Cleaner captures.** `tuios capture-pane --unwrap` joins the rows that the terminal wrapped, and `--trim` drops the blank lines at the end ([#766](https://github.com/Gaurav-Gosain/tuios/pull/766)).
- **Pause focus follows mouse.** `appearance.focus_follows_mouse_pause = "ctrl"` or `"alt"` keeps the focus where it is while you hold that key ([#768](https://github.com/Gaurav-Gosain/tuios/pull/768), fixes [#750](https://github.com/Gaurav-Gosain/tuios/issues/750)).
- **Spaces in the rail.** The rail's sessions section has a heading for each space ([#760](https://github.com/Gaurav-Gosain/tuios/pull/760)). `tuios ls` with no daemon and `tuios ls --all-hosts` group sessions by space too ([#761](https://github.com/Gaurav-Gosain/tuios/pull/761)). Thanks to @abhijit-s.
- **Close a workspace from its tab.** A right-click on a workspace tab in the dock has a Close row ([#786](https://github.com/Gaurav-Gosain/tuios/pull/786)). Thanks to @abhijit-s.
- **A skill for your agent.** `tuios integration install` now also installs a short tuios skill for Claude Code, Codex, opencode and Pi ([#765](https://github.com/Gaurav-Gosain/tuios/pull/765)). At the start of a session, Claude Code and Codex learn which tuios pane they run in ([#767](https://github.com/Gaurav-Gosain/tuios/pull/767)).
- **Tapes without the player.** `[tape] show_status = false` hides the tape's RUNNING pill, for screen recordings ([#841](https://github.com/Gaurav-Gosain/tuios/pull/841)).
- **The browser build.** A page that runs tuios in the browser can set the look and input options with `set`, and load a look's theme with `themeJSON` ([#843](https://github.com/Gaurav-Gosain/tuios/pull/843), [#860](https://github.com/Gaurav-Gosain/tuios/pull/860)).
- **Live demos that fit.** In the browser, the practice shell lays its output out again when a pane changes width. The logo of `fastfetch` no longer breaks apart after a split ([#864](https://github.com/Gaurav-Gosain/tuios/pull/864)).

## Fixes

- **The agent's environment.** When an agent's tool call started the daemon, every pane got the agent's `NO_COLOR` and session variables. Programs drew without colour, and Codex in a pane never reported its state. Panes now leave these variables out ([#799](https://github.com/Gaurav-Gosain/tuios/pull/799), fixes [#798](https://github.com/Gaurav-Gosain/tuios/issues/798)). Thanks to @syz51.
- **Kitty images that ask for one side.** An image placed with only a width or only a height now keeps its aspect. Before, a cover in go-musicfox showed as a thin strip ([#853](https://github.com/Gaurav-Gosain/tuios/pull/853), fixes [#851](https://github.com/Gaurav-Gosain/tuios/issues/851)). Thanks to @ryan4yin.
- **Colours at 256 and 16 colours.** Theme colours now step down to the right palette entry. Nord's background was teal at 256 colours, and Latte's red was grey ([#858](https://github.com/Gaurav-Gosain/tuios/pull/858), fixes [#510](https://github.com/Gaurav-Gosain/tuios/issues/510)).
- **Panels over a full-screen pane.** Over one pane that filled the screen, the close dialog, the Copies panel, the glyph picker, the dock and section editors and the copy dialog took the keys and drew nothing. They show now ([#786](https://github.com/Gaurav-Gosain/tuios/pull/786), [#838](https://github.com/Gaurav-Gosain/tuios/pull/838)). Thanks to @abhijit-s.
- **Theme reload on macOS.** A themes folder that is a symlink, as home-manager and stow make, and `tuios theme reload` now reach a client on macOS and the BSDs ([#839](https://github.com/Gaurav-Gosain/tuios/pull/839)). Thanks to @abhijit-s.
- **Repeat after the leader.** The resize and scroll actions now repeat after the leader as they should. Before, a second press went to the pane ([#773](https://github.com/Gaurav-Gosain/tuios/pull/773)).
- **Picker previews on served clients.** Over `tuios ssh` and `tuios-web`, an arrow key in the theme or glyph picker changed the look for every other guest. The pickers now preview only for a local client ([#788](https://github.com/Gaurav-Gosain/tuios/pull/788)).
- **Settings saves.** Two saves in a row could land in the wrong order and put the old value back. They now land in order ([#840](https://github.com/Gaurav-Gosain/tuios/pull/840)).
- **The ZOOM notice** goes away when the pane leaves zoom ([#856](https://github.com/Gaurav-Gosain/tuios/pull/856)).
- **Smooth animations.** The theme transition and the other animations now keep a steady 60 frames a second ([#774](https://github.com/Gaurav-Gosain/tuios/pull/774)).
- **Tapes.** The which-key menu shows after a tape's leader key, and a tape that ends on `Sleep` waits for it ([#854](https://github.com/Gaurav-Gosain/tuios/pull/854)).
- **`--pprof` with start-server** now reaches the daemon ([#775](https://github.com/Gaurav-Gosain/tuios/pull/775)). Thanks to @abhijit-s.

## Performance

An idle tuios now sleeps. No timer runs in the client or the daemon while nothing changes.

- **The client.** The frame ticker stops at idle, and the maintenance tick runs only when a job is due ([#781](https://github.com/Gaurav-Gosain/tuios/pull/781), [#782](https://github.com/Gaurav-Gosain/tuios/pull/782), [#787](https://github.com/Gaurav-Gosain/tuios/pull/787)). With one idle client, CPU went from 0.20% to 0.05%, and context switches from about 130 a second to 9. With the clock on, from 0.5% to 0.17%.
- **The clock** draws minutes by default, so it wakes the client once a minute, not every second ([#790](https://github.com/Gaurav-Gosain/tuios/pull/790)).
- **The daemon.** The state saver, the agent monitor, the stall monitor and the cleanup loop sleep until something happens ([#776](https://github.com/Gaurav-Gosain/tuios/pull/776), [#777](https://github.com/Gaurav-Gosain/tuios/pull/777), [#778](https://github.com/Gaurav-Gosain/tuios/pull/778), [#779](https://github.com/Gaurav-Gosain/tuios/pull/779)). The daemon tells the client when the session list changes, so the client no longer asks every 3 seconds ([#794](https://github.com/Gaurav-Gosain/tuios/pull/794)). Daemon context switches with a client attached went from about 25 a second to under 2.
- **Memory.** The daemon's queue for each pane and client starts small and grows with the backlog. With 50 idle panes, the live heap went from 30 MB to 15 MB ([#785](https://github.com/Gaurav-Gosain/tuios/pull/785)). The client frees the spare buffers of its panes, as the daemon does since v0.10.0 ([#762](https://github.com/Gaurav-Gosain/tuios/pull/762)). Thanks to @abhijit-s.
- **Output.** The daemon no longer allocates for each chunk of pane output. A coloured flood scans about twice as fast ([#783](https://github.com/Gaurav-Gosain/tuios/pull/783)).
- **Binary size.** The size budget is now 37,988,000 bytes on linux/amd64 and 35,719,000 on darwin/arm64. In v0.10.0 it was 36,620,000 and 34,465,000. The reply editor, the agents view, the theme editor, the styles, the presets, `tuios look` and images in screenshots take the difference. The which-key menus got 24 KB smaller to pay for part of it ([#805](https://github.com/Gaurav-Gosain/tuios/pull/805)). The ceiling stays at 40 MB.

## Upgrading

### The daemon

A v0.10.0 daemon works with a v0.10.1 client, and the reverse. The new fields are optional in both directions. Images in a reply, replies to another machine, the session list push and the idle changes need the new daemon. To get them, restart the daemon:

```bash
tuios kill-server
```

This closes every pane in every session, so save your work first.

### The clock

The dock clock now shows `15:04`, with no seconds. To get the seconds back:

```toml
[appearance]
clock_format = "15:04:05"
```

### The prefix badge

While the leader waits for a key, the dock's mode pill shows it. The floating `PREFIX` badge no longer shows. To get the badge back:

```toml
[appearance]
dock_prefix_indicator = "badge"
```

The badge still shows when the dock is hidden.

### The pane environment

Panes no longer get `NO_COLOR`, `CLICOLOR`, `CLICOLOR_FORCE` and `FORCE_COLOR`, or the session variables of Claude Code and Codex, from the command that started the daemon. If you want `NO_COLOR` in your panes, set it in your shell's startup file.

### Colours at 16 colours

At 16 colours, a pane's ANSI colours now go to your terminal as slots 0 to 15, and your terminal paints them. Before, tuios sent the theme's colours stepped down, and some came out wrong. A theme ground paints nothing at 16 colours.

### New config keys

The defaults keep the old behaviour, except for the clock and the prefix badge above.

```toml
[keybindings]
preset = ""                         # tmux, screen, zellij
# repeat = ["..."]                  # the actions that repeat after the leader. [] turns repeat off

[appearance]
theme_light = ""                    # a theme for a light terminal
border_focused_gradient = ""        # "accent accent_bright"
border_gradient_angle = 45
window_title_style = "pill"         # pill, tab, plain
window_title_align = "auto"         # auto, left, center, right
dock_prefix_indicator = "pill"      # pill, badge
focus_follows_mouse_pause = "off"   # ctrl, alt, off

[appearance.sidebar]
row_style = "bar"                   # bar, marker, underline, pill
header_style = "auto"               # auto, plain, rule, pill, icon
density = "normal"                  # normal, roomy

[dock.tabs]
attention_fg = ""
bell_marker = ""
activity_marker = ""

[tape]
show_status = true
```

See [CONFIGURATION.md](https://github.com/Gaurav-Gosain/tuios/blob/main/docs/CONFIGURATION.md) and [THEMES.md](https://github.com/Gaurav-Gosain/tuios/blob/main/docs/THEMES.md).

### For developers

- The screenshot renderer moved from `internal/shot` to `shot/`, the `tuios.dev/shot` module, and `internal/mosaic` to `tuios.dev/shot/mosaic`. `go.work` now holds `shot` too.
- The reply editor is in `internal/composer`, with no import of a tuios package. I plan to tag it as `tuios.dev/composer` after this release ([#848](https://github.com/Gaurav-Gosain/tuios/pull/848)).
- The binary size budgets went up in commits of their own. See `docs/perf.md`.

## Contributors

Thank you to everyone who sent a pull request for this release:

- @abhijit-s: space headings in the rail ([#760](https://github.com/Gaurav-Gosain/tuios/pull/760)), spaces in every `tuios ls` ([#761](https://github.com/Gaurav-Gosain/tuios/pull/761)), the client's spare buffers ([#762](https://github.com/Gaurav-Gosain/tuios/pull/762)), `--pprof` with start-server ([#775](https://github.com/Gaurav-Gosain/tuios/pull/775)), closing a workspace from its tab ([#786](https://github.com/Gaurav-Gosain/tuios/pull/786)), panels over a full-screen pane ([#838](https://github.com/Gaurav-Gosain/tuios/pull/838)) and theme reload on macOS ([#839](https://github.com/Gaurav-Gosain/tuios/pull/839))
- @syz51: the agent's environment in panes ([#799](https://github.com/Gaurav-Gosain/tuios/pull/799))
- @ryan4yin: kitty images that ask for one side ([#853](https://github.com/Gaurav-Gosain/tuios/pull/853))

And thanks to everyone who reported bugs and asked for features: @kdnk for the focus follows mouse pause ([#750](https://github.com/Gaurav-Gosain/tuios/issues/750)), @syz51 for the agent's environment ([#798](https://github.com/Gaurav-Gosain/tuios/issues/798)), @iTerminate for images in screenshots ([#678](https://github.com/Gaurav-Gosain/tuios/issues/678)) and @ryan4yin for the go-musicfox cover ([#851](https://github.com/Gaurav-Gosain/tuios/issues/851)).

***

**Full Changelog**: <https://github.com/Gaurav-Gosain/tuios/compare/v0.10.0...v0.10.1>
