github Gaurav-Gosain/tuios v0.13.1

37 minutes ago

tuios 0.13.1 is a big one, so I skipped 0.12.2 and gave it a new minor number. It is the first 0.13 release: the v0.13.0 tag exists, but its release build failed, so nothing was published from it. Agents get a task board that runs itself, from a card to a pull request, and an agent can hand work to a child agent and get the answer back by mail. You can now move the daemon to a new build without ending a single pane, and the client on your machine follows it. Linking another machine is one command, tuios hosts setup. You can write your own actions and change the right-click menus in config.toml. Frames are written as cells now, so a typed key costs about a fifth of what it did. Quick look reads much more, plugins get a full toolkit, and bash and zsh panes get prompt marks with no change to your files. What's new has the short version, with a link to each page.

Upgrading from v0.12.1: one restart

A v0.12.1 daemon predates live upgrades, so it cannot hand its panes over. After you install, move it to the new build once:

tuios restart-server

The restart stops the programs in your panes. Each session comes back with its layout, the last 1000 lines of each pane's history and new shells. From v0.13.1 on, the next upgrade is live on macOS and Linux: tuios daemon upgrade moves the daemon to the new build and every program keeps running. On Windows, tuios restart-server stays the way to move. Upgrading to v0.13.0 lists what to check.

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.13.1
docker run -it --rm ghcr.io/gaurav-gosain/tuios:v0.13.1

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

What changes for you

  • Cell frames are the default. The client writes frames as cells on every terminal you run tuios in, except on Windows, and on SSH and web clients. If the screen looks wrong, set appearance.cell_frames = "off" or start tuios with TUIOS_CELL_FRAME=0, and please tell me your terminal's name and version. (#2001)
  • One name per action. Actions that had two or more names, such as prefix_new_window and window_prefix_new for new_window, have one name now. The older names still work in your config, presets, tapes and over the protocol, and tuios keybinds list shows them as "(also: ...)". A keybinding that names an action tuios does not know now gets a warning when the config loads. The names an older tuios wrote into config.toml itself, such as nav_up, load quietly. (#2014, #1982, #2085)
  • Usage limits have their own state. An agent that stops on a usage or rate limit is limit_reached now, not errored. A script that waits for errored on a limit should look for limit_reached. (#2059)
  • Go-to holds the switchers. The session switcher, the workspace switcher and the window list are now go-to, and pane rows show their folder. Every list takes the keys of [keybindings.lists]. (#1989, #2012)
  • Popups sit in the middle of the screen, clear of the rail, and the agents view no longer dims the dock and the rail. (#1839, #1844)
  • The dock orders minimized panes by window order, so dock pill N and restore N pick the same pane on every client. (#1852)
  • Hooks talk to the daemon directly. Run tuios integration install again to get hook commands that send each event to the daemon socket with nc -U or socat, so a hook no longer starts a whole tuios. Without either program, nothing changes. (#1908, #1918, #1919)
  • bash and zsh panes get OSC 133 prompt marks. Set [shell] integration = "off" to start shells as before. (#1611)
  • The rarer Mermaid diagram types moved to the sketch plugin. Eight common types still draw in tuios. For the rest, run tuios plugins install sketch. (#1467, #1505)
  • Building from source needs the Go 1.27.4 toolchain, which go install fetches for you. A plain go install binary is about 0.8 MB larger than the release, which turns inlining off in the cold packages. The ghostty backend now uses libghostty-vt 1.0.1: rebuild it with scripts/install.sh ghostty. (#1876, #2053, #1775, #2009)

Agents

ctrl+b i is the agent cockpit: every agent on every machine, grouped by what it needs from you.

ctrl+b i: agents grouped as Needs you, Ready for review, Working and Idle. Each row shows its context size, and an agent on its plan's limit reads "limit reached".

  • An agent stopped on a usage limit shows "limit reached" with when it resets, and the agents view shows each agent's context size. (#2059)
  • Approvals that arrive while you type a reply are held, and a key asks before it answers a held approval. (#1560, #1621, #1712)
  • The risk rules mark the jj commands that push, rewind or drop work (jj git push, jj op restore, jj restore, jj abandon), the way they mark the git ones. Thanks to @tomasd. (#2081)

A risky approval, held whole: 3 says what it will do, and enter answers.

Threads and replies

  • A sent reply shows in the thread at once, with its state, and send now works on a Mac. Choose whether a reply is queued or sent now. (#1848, #1566)
  • The reply editor edits like a text field: select with Shift or the mouse, double and triple click, drag. The same mouse editing works in every multi-line editor. (#1854, #1857)
  • The thread shows pasted image files and the images a tool read. (#1735, #1591)
  • A finished turn folds to one summary line. The thread follows new output, anchors new prompts and marks prompts on a ruler. (#1561, #1569)
  • The thread shows what the agent is doing now (#1567) and the program a shell command runs (#1564). Tool rows open on a click or with e. (#1754)
  • A long thread opens quickly. The list column stays when the thread opens, and \ switches it. (#1729, #1606)
  • Text that tuios types to an agent (ask-agent, delegate, a dispatched card, a first prompt) loses the characters that can hide instructions: Unicode tag characters, bidi controls and zero-width spaces. The JSON result says how many with invisible_removed. send-text, send-keys and run still type exactly what they are given. (#2082)

A reply with a 40-line paste as one block, an image with its preview, and an @file mention.

Start agents anywhere, compare their tries

  • The New agent sheet shows launch choices and whether each agent is ready (#1698), offers "Any machine", which picks the machine with the most free cores (#1743), and adds a machine from the sheet (#1610).
  • tuios worktree new feat/retry --base main --agent claude --detach --prompt 'Add a retry.' starts an agent in its own worktree and session and gives it its first task. The skill now teaches that one route. (#2087)
  • Worktree sessions, worktree ls, ship and fan compare work in a jj repository, colocated or with no .git. Thanks to @tomasd. (#1688)

n, then 3 attempts on Any machine: each attempt goes to the machine with the most free cores.

Three attempts by claude, codex and gemini side by side, with each diff, check result and first changed lines

c compares the attempts side by side: the diff, the check and the first changed lines of each.

Agents that hand off work

  • An agent can delegate a task to a child agent and get the answer back by mail. Children are linked to their parent, show in its thread, and their approvals and questions route to the person. (#1565, #1574, #1575, #1576, #1562)
  • A child agent's question goes to the agent that started it first, and mail from that agent is marked "from your lead". (#1994, #1995)
  • A hook's mail or tuios queue wakes an idle agent. Thanks to @tomasd. (#1728)
  • Agents can ask you with a form: tuios tml show opens it as a popup, and the agent goes on with your answer.

An agent asks with a form. 1 picks the first answer, and the agent goes on.

The task board, from a card to a pull request

  • ctrl+b + adds a task from anywhere. The task board shows as kanban columns in the agents view, with project boards. (#1548, #1726)
  • Auto dispatch on the board, with a dispatch mode, Pause, and their chords: agents take the next card on their own. (#1746, #1733)
  • Cards have a lifecycle, with a Ready to merge stage. On a card in review, M then o pushes the branch and opens the pull request, and shows what it sends before enter sends it. (#1748)
  • A worktree session can run a setup before the agent starts, with a stages card. (#1568)

With Dispatch on Auto, agents take the next cards from Todo.

Ready to merge: the push plan, then "Verify passed" and the pull request with its checks.

More for agents

  • [agents] name_hint = "off" leaves the advice to name the pane out of an agent's start hint. (#2064)
  • [agents] acp_version = 2 speaks the draft version 2 of the Agent Client Protocol, and falls back to version 1 with an agent that has only that. (#2063)
  • Rex: tuios.lua puts tuios actions, your own actions and waiting agents in Rex's palette. (#1971, #2040, #2045, #2049, #1951, #1970)
  • A quiet mark keeps a pane out of the Inbox. Unseen rows are marked, and an agent alerts once per run. (#1422, #1570)
  • A session with no name shows its agent's title in the rail, and the machine stays awake while agents work. (#1541, #1547)
  • Pi's subagents show in the agents view. Thanks to @vvicaretti. (#1508)
  • Restored shells keep the terminal identity they had (TERM_PROGRAM), so a resumed Claude Code keeps Shift+Enter. Thanks to @tomasd. (#1727)

The terminal

  • Actions and menus of your own. [[actions]] in config.toml declares an action: a built-in one, a program with the focused pane's folder or title as an argument, or a plugin action. Bind it to a key, find it in the command palette, run it with tuios actions run. [menus.NAME] is one table for every menu: the which-key panels and the right-click menus, where add, after and remove change the rows tuios ships. (#2036, #2037)
[[actions]]
name = "open-in-editor"
label = "Open the folder in the editor"
key = "prefix+alt+e"
run = ["code", "{pane.cwd}"]
in = "silent"

tuios actions run open-in-editor --dry-run prints what it would run, with the placeholders filled.

  • Faster frames. The client writes each frame as cells and sends the terminal only what changed. With a typed key in a 200x60 window the frame went from 1023 us to 205 us, and from 792 to 376 allocations. (#2001, #2050)
  • Prompt marks in bash and zsh. tuios turns on OSC 133 marks in the shells it starts, without editing your files, so the scrollback browser, tuios run and copy mode know where each command starts and ends. (#1611)
  • Drag and drop with the desktop. Drags go to and from the desktop through kitty's drag and drop protocol. Thanks to @dschmidt. (#1374, #1530)
  • A press during a pane resize cancels the resize, so a drag can no longer leave two tiled panes on top of each other. (#2078, #2079)

A pane dragged by its title bar to the edge of another pane, which splits to take it

Drag a pane by its title bar to the edge of another pane, and that pane splits to take it.

Quick look and files

  • Move inside a previewed file, and read long files in windows. Search, go to a line, and wrap. (#1447, #1451)
  • PDF pages (#1452), film strips (#1455) and more file kinds (#1458). Markdown with HTML, alerts, footnotes and Mermaid (#1462). Copy mode over the preview (#1684).
  • The rail opens a file or folder with the system opener (#1604), and opens a copy of a file on another machine with o (#1614).
  • Review: [review] scope opens review on uncommitted changes (#1512). jj workspaces show in the rail, and review reads a jj workspace's whole stack, thanks to @tomasd (#1470, #1579). h and l scroll the focused panel (#1585).
  • The review details view reads only the part of a diff it shows, thanks to @Gsirawan (#1577). A folder change on another machine that lands before its watch starts is shown (#1426).

space on a file in the rail: quick look shows a folder, then a picture.

Find any pane

ctrl+b / searches every pane of every session by name, folder, command or screen text. Go-to (ctrl+b G) now holds the session switcher, the workspace switcher and the window list. (#1989, #1975, #1998)

ctrl+b /, then /FAIL: the navigator narrows to the pane with a failing test, in another session.

Copy mode and input

  • Block selection in copy mode, and s opens hints from copy mode. (#1421, #1678)
  • Shift+Left and Shift+Right move by word in copy mode, and can be bound again. Thanks to @neyfua. (#1753)
  • Declared menus open from the rail, the Inbox and the other overlays. (#1818)
  • Every short text field has the same editing keys and a caret, with the composer's home, end and word keys. (#1641, #2023, #2026, #2029)
  • Timings that were fixed are options now: double click and drag, which-key, tooltips, zen, chords, the idle frame rate, git refresh, notification rate limits and more, each with its unit on the settings page. (#1920, #1921, #1923, #1926, #1932, #1986)

Images, plugins and the CLI

  • Kitty images draw as block glyphs on a host terminal without graphics. Screenshots draw colour emoji. A pasted image shows in a card at the pane's cursor, thanks to @mjumelet. (#1817, #1809, #1674)
  • Plugins grow up: tuios plugins new, check, dev, update and stats, the first-party plugins install from the release, a ui grant with dock cells, native hooks, and a written plugin API. New first-party plugins: pr-status and ovnfs. (#1456, #1457, #1466, #1473, #1484, #1460, #1468, #1461, #1752)
  • herdr: a seen done pane reports idle, pane.focus shows the pane's session, and renames send workspace_renamed and tab_renamed. Thanks to @jonasws. (#1493, #1546, #1553, #1550)
  • tuios record-pane records a pane to an asciicast v2 file, and tuios whoami prints the pane, session and workspace a command runs in. (#2068, #1949)
  • tuios subscribe prints readable lines, with --state, --once and --timeout. (#1544)
  • [shell] login = true starts new panes as login shells. (#1829)
  • tuios run refuses a call from a pane that names no pane, and the CLI says so when it cannot read a daemon answer. tuios status reports to the daemon when there is no terminal. (#1532, #1686, #1545)
  • Tapes record every mode choice, and tuios-web panes get the build version. (#1736, #1638)
  • The skill shows run, start-agent and --cwd in the core, adds pane recipes, a lead topic for an agent that runs a crew, and how to clear a form that blocks a worker. (#1533, #1802, #1811)
  • screenshot.title_format expands its tokens. (#1997)

Machines

tuios hosts setup links another machine step by step. It asks for what it needs, picks tailnet machines from a list, and names an ssh failure with its fix. tuios offers to add a machine when a pane logs in to it with ssh. (#1601, #1608, #1612, #1616, #1597, #1609, #1633)

tuios hosts setup --tailnet

tuios hosts setup --tailnet: tick the machines, and each one gets a bar until it is ready.

  • tuios run --host runs one command on a linked machine. (#1806)
  • TML surfaces of a session on another machine draw and answer. (#1602)
  • [[links.rules]] turns text into links, thanks to @bitfoo1. A tuios://window link follows into another session, thanks to @tomasd. (#1589, #1755)
  • tuios cp counts the bytes the far side wrote, so its rate no longer runs ahead of the link. Transfer refusals name the machine. (#2091, #2000, #2008)

tuios cp ./testdata buildbox:~/ledgerd/: one bar for the file and one for the total.

The daemon

  • Live upgrade. From this release on, tuios daemon upgrade moves a running daemon to a new binary without ending your panes, and scripts/install.sh --upgrade-server and tuios hosts sync --restart use it. It names every pane that blocks it, runs the exact binary it checked, and open prompts survive it. A client on this machine follows the daemon and runs the new build too. Thanks to @abhijit-s and @Gsirawan. (#1858, #1333, #1398, #1480, #1593, #1464, #1510, #1425, #2015)

What the next upgrade looks like: tuios daemon upgrade, every program keeps running, and the window says it runs the new build too.

  • Install the daemon as a system service. (#1549)
  • Split, zoom, swap, move and resize a named pane with no client attached. (#1554)
  • set-config --no-save changes a setting for this run only. (#1586)
  • A new pane starts in the calling pane's folder, on its workspace, at the session's cell size. (#1551, #1502, #1497, #1619)
  • Layout templates live on the daemon, so every client of a machine sees the same ones. (#1856)
  • One --debug switch turns on debug logs everywhere. (#1643)
  • A panic in one pane's terminal emulator no longer ends the daemon. That pane gets a fresh emulator and a notice, and every other pane goes on. (#1993, #2060)

Your look

  • Choose how a workspace switch shows, including a slide. [motion] turns each motion on or off and times it on its own. (#1629, #1613, #1631)
  • [[theme]] in config.toml, theme plugins, and screen savers from a frames file. (#1499, #1500)
  • TML: enter and exit transitions, skeletons and a toast time to live (#1489), and a map chart component, thanks to @thecloudranger (#1423).
  • The host terminal's title follows the focused pane, thanks to @josephsintum. (#1454)
  • The main checkout's row is the repository's row in the rail. (#1446)

The theme picker: each theme you move to applies to every pane and the rail at once.

Faster and smaller

  • A typed key costs a row, not the screen: 1023 us to 205 us a frame. (#2050)
  • With nine tiled panes under a flood, the client uses about a third less CPU with cell frames. (#2001)
  • A change to a session nobody is attached to is not encoded: at 100 windows a publish went from 187 us to 1.34 us. Thanks to @Gsirawan. (#1967)
  • A state push leaves the task cards' bodies out, so a session with about a thousand long cards attaches again. Thanks to @Gsirawan. (#1871, landed in #1877)
  • A Done column of 2000 cards builds in 2.38 ms, not 91.55 ms. Thanks to @Gsirawan. (#2046)
  • A full scrollback ring keeps each slot the size of its line, which cuts the memory of 50 panes with 100,000 lines from 1,208 MB to 711 MB. (#1991)
  • The release binary turns inlining off in the packages no hot path calls, which saves about 830 KB on linux/amd64 with no measured cost. The binary is about 350 KB smaller again from out-of-line Errorf and JSON. (#2053, #1513, #1514)
  • The ghostty backend makes 2 cgo calls a write. The dock is drawn from parts of known width, and its workspace strip only when it changes. (#2021, #1972, #2002)
  • The emulator, quick look, the daemon's pushes, TML surfaces and worktree rows all do less work. Thanks to @Gsirawan and @davidreuss. (#1495, #1519, #1625, #1437, #1584, #1618, #1620, #1628, #1594, #1617, #1435, #1685, #1485, #1578, #1552, #1504)

Libraries for Go developers

Three more parts of tuios are Go modules you can use on their own:

  • tuios.dev/harness names the coding agent a process runs (Claude Code, Codex, Gemini CLI, opencode and 22 more) and reads its state from the screen, from one manifest per agent. (#2071)
  • tuios.dev/acp is the Agent Client Protocol client tuios uses for headless agents. (#2069)
  • tuios.dev/vt/dnd is the kitty drag and drop protocol codec, as a package of tuios.dev/vt. (#2066)
go get tuios.dev/harness@latest

Fixes

Agents and tasks

  • A Claude Code prompt that never sent a hook ends from the screen. Thanks to @abhijit-s. (#1429)
  • A Claude Code local command is not read as a turn, and unread mail is kept when the agent ring is full. Thanks to @zoneblaze. (#1491, #1479)
  • A form over Claude Code's input box reads as needs input. (#1803)
  • A transcript is found under the hook's CLAUDE_CONFIG_DIR or CODEX_HOME. Thanks to @abhijit-s. (#1397)
  • Codex rollouts join on macOS, and a Codex hook for a closed pane goes to the pane that runs it. (#1424, #1511)
  • An agent keeps its harness and state after a status reset, and the Inbox catches up on transcript changes when it opens again. Thanks to @orivej. (#1679, #1829)
  • A queued message the screen shows taken is taken. Thanks to @abhijit-s. (#1432)
  • An ask's reply is read from the agent's transcript, and a silent worker stays selectable as working. (#1801, #1813)
  • Mail finds a sender by name in the caller's own session, and a pane of another session can send mail and ask by its full id. (#1758, #1693)
  • The thread and checkpoints of an agent on another machine open. (#1605)
  • The focused agent pane is marked seen after a session switch, and a stopped session's transcript joins end. Thanks to @Gsirawan. (#1488, #1438)
  • A new agent started in its parent's folder no longer reads the parent's transcript, and a hookless claude --continue joins the conversation it goes on with. (#1987, #1999)
  • The New agent sheet and the New task sheet check their text for invisible characters, so a card holds only what you could read. Thanks to @Gsirawan. (#1906, #2075)
  • The Inbox peek keeps a dialog's menu cursor in place and lists only the options the matched rule can choose. (#2082)
  • Image cards cut by the thread's edge still draw, and a folded group keeps the agents view off its empty state. (#1845, #1849)
  • The composer and sheet text keep readable contrast. (#1694)
  • A card finishes only when its agent says the card is done. Pull cards are offered again when a switch lifts or a card comes free. A failed auto start closes what it opened. (#1767, #1771, #1782)
  • The board follows a session that is made, renamed or killed, and a card changed twice in a row lands in the right column. Thanks to @Gsirawan. (#1750, #1980)
  • tuios task claim --next leaves the cards added with --ask-first, and a claim that names no pane no longer hangs the daemon. (#1988, #1496)
  • A Dispatch Auto board shows its real run count. (#2091)

Sessions, machines and the daemon

  • Settings set with no client attached apply when a client attaches, and scrollback_lines and new_window_inherit_cwd apply on reload. (#1486, #1653)
  • tuios saves to the config file it loaded, and an edit that matches an earlier save still applies. (#1756, #1419)
  • A session switch made before the new pane arrives is kept, and a connection with no session can switch sessions. (#1596, #1525)
  • A subscribe can no longer ask for an unbounded queue, and a wait whose caller left ends. (#1520, #1524)
  • tuios refuses a background session whose daemon the pane itself started. Thanks to @abhijit-s. (#1414)
  • A restored pane's banner names the folder its shell started in, and a restored session is grouped under its repository from the first frame. Thanks to @maciej-lech. (#1777, #1761)
  • A restored pane gets the saved tab key in HERDR_TAB_ID, so herdr tab get finds its tab. Thanks to @maciej-lech. (#2089)
  • After a switch to a linked host and back, a session keeps its own windows and its split sizes. Thanks to @Gsirawan. (#1942, #2034)
  • One pane's stream can no longer stall a link. When a link drops, a viewer's pane keeps its size for 15 seconds, so it does not lose lines of its history. (#1515, #1573)
  • A pane on another machine that cannot come back says so and closes. hosts sync skips paired devices. (#2022, #1417)
  • hosts setup names an unknown host key right, a dry run with no --install shows the plan, and --tailnet draws its summary once in a pane. (#1833, #1838, #2091)
  • The config notice leaves the dock once tuios config apply fixes the file, and the agents view labels a daemon notice Notice. (#2091)
  • daemon.log records every pane exit and window close, with the exit code. (#1822)
  • A daemon started by an app reads a fish login shell's PATH. (#2039)
  • tuios-web closes a session's terminal only after its screen is closed, so the leave sequences reach the browser. (#2072)

Input and rendering

  • Pressing the leader twice closes its sub-menu, and a key goes to the top open panel, in both modes. (#1786, #1689)
  • A click on two panes at the same depth goes to the visible one. Thanks to @gezerui888. (#1670)
  • On macOS an Option chord runs the binding for the character it typed, and a Cmd or Hyper chord sends nothing to a plain pane. (#1821, #1717)
  • F3 reaches a kitty keyboard pane as CSI 13 ~. (#1763)
  • A choice made while the rail held the keyboard is kept. (#1794)
  • Palette rows run their own action, and help shows the copy mode key as the config binds it. (#1650, #1665, #1651)
  • A next_workspace bound to a reserved chord is reported, and every closed [appearance] value is checked. (#1676, #1659)
  • A drag stays on its pane, and stuck drops end. (#1526, #1521)
  • The pointer shape resets when the rail takes a motion, and the rail's tree bars stay still under pill rows. Thanks to @davidreuss. (#1563, #1587, #1482)
  • A file drag whose list has a space in a line no longer shows the crash screen. Thanks to @Gsirawan. (#1572)
  • A slash typed in the path picker walks the path again. (#2044)
  • Scrolling and master stack shells get their size before they start. Thanks to @syz51. (#1396)
  • Alternate-screen panes are not resized on attach, and a dock component refreshes on every agent state change. Thanks to @abhijit-s. (#1463, #1400)
  • A new or named pane shows whole in the scrolling layout, the zoom stays when the zoomed pane closes, and a served frame is laid out at the client's current size. (#1540, #1627, #1522)
  • An event-driven dock cell runs again when an event lands during a run. (#1420)
  • The rail: section scroll resets when it opens or closes, the files switch shows its state, the peek height holds, and a numbered worktree row leads with its tree mark. (#1639, #1690, #1443)
  • The colour picker opens on the colour an unset role shows, and the ghostty backend keeps the pen background on the cells it erases. (#1431, #1440)
  • A TML surface drops state older than its last answered input. (#1705)
  • A pane that kept its size gets no resize, so its program gets no SIGWINCH for nothing. A lasting badge takes its own row, off the first line of a pane. (#2079, #2083)
  • An unnamed workspace no longer repeats its number in a tab format with both {index} and {name}. (#2082)
  • Every popup is placed by one rule: it flips to the other side, then shifts to fit. (#2067)
  • A wrapped quick look row breaks at whole characters, and previews keep to their limits on crafted files. Thanks to @Gsirawan. (#1682, #1558)
  • A kitty picture stays on the host through a resize, a kitty patch is placed at its own pixels, and shared memory images work on macOS. (#1442, #1445, #1415, #1412)
  • Preview pictures sent to the terminal are freed, and quick look's picture cache is held to a budget. Thanks to @Gsirawan. (#1441, #1580)
  • A plugin reads only its own TML surfaces, and tuios asks again when a followed tag is replaced or moved. Thanks to @Gsirawan. (#1559, #1571, #1557)
  • Saver files are bounded, plugin files stay in their folder, and client events keep flowing after a plugin approval. (#1518, #1509)

Platforms

  • Windows: tuios starts when TERM is unset (#1439), and the host terminal is probed, thanks to @badmagick329 (#1448). CI runs Windows ConPTY, thanks to @badmagick329 (#1428).
  • A pasted path is quoted so fish behind tmux or script reads it. Thanks to @Gsirawan. (#1465)
  • A hung git ends at its deadline for every caller. (#1640)
  • A standalone pane takes the host's cell size, so its shell is not signalled at a size of its own. (#1816)
  • The binary size ceiling is now 50 MB. (#1555)
  • new-window is documented to default to the calling pane's workspace. Thanks to @zoneblaze. (#1498)
  • AGENTS.md and the contributor docs are up to date with main. (#1527)

About 150 more pull requests refactor, test or tidy with no change you can see.

Thanks

Thank you to everyone who sent a change for this release. @Gsirawan sent the most, from speed work on the board and the daemon to the invisible character checks. @abhijit-s built much of the live upgrade. @tomasd brought jj into worktrees, review and the risk rules. And thank you to @maciej-lech, @davidreuss, @jonasws, @dschmidt, @zoneblaze, @badmagick329, @neyfua, @vvicaretti, @bitfoo1, @thecloudranger, @syz51, @mjumelet, @josephsintum, @gezerui888 and @orivej.

Full changelog: v0.12.1...v0.13.1


Full Changelog: v0.13.0...v0.13.1

Don't miss a new tuios release

NewReleases is sending notifications on new releases.