v0.7.3
/tools is now one list — the tools iota ships with, then each MCP
server, with its tool count and how it stands — and Enter opens a page for
one of them, from which a server can be reconnected without leaving the
chat. When a server does fail, the notice says what went wrong and what to
check instead of quoting the library. A server that dies mid-session is shown
as stopped, and a tool call it never answers no longer holds the turn
forever.
Changed
-
/toolsis one list of where the tools come from. The two tabs, Tools and MCP, are now one list:built infirst, then each MCP server, with how many tools it has and how it stands —connected,connecting…,down,needs loginorfailed, with the reason in a few words. Enter opens that source's page; Esc goes back to the list.4 MCP servers · 10 tools · Enter: open · Esc: close▸ built in 2 tools availabledead 3 tools down: exited (its last stderr line: "mock_mcp: <- tools/list") — its tools will fail until it …flaky 3 tools down: exited (its last stderr line: "mock_mcp: <- tools/list") — its tools will fail until it …ok 2 tools connectedrefused — failed: can't reach http://127.0.0.1:1/mcp: connection refused — check the url, and that the s…A server's page shows its endpoint, transport, login, the names its tools go by, its call timeout, the full reason it failed — its stderr included — and its tools.
-
An MCP server can be reconnected from
/tools. Press Enter on a server's page: it reconnects in the background, the page shows it happening and how it went, and the chat gets one line —MCP db reconnected · 3 tools, or why it did not. A reconnect that fails does not take a server's tools away: one that had tools staysdownwith them, showing why the new start failed, and you can try again. A server you have just logged in to withiota mcp loginno longer needs a new chat to use the login — reconnect it from its page. -
MCP failures say what happened and what to do. A server that did not connect used to be reported in the MCP library's own words — Rust type names,
when send initialize request, sometimes a proxy's whole HTML error page — with the actual reason buried or missing. Now the notice is one line that names the server, what went wrong and what to check:⚠ MCP nb: can't reach https://example.com/mcp: connection refused — check the url, and that the server is running · details in /toolsA 404, a 5xx, a web page where the MCP endpoint should be, a command that is not installed, a server that exits during startup (its last stderr line is shown), a handshake that never finishes and a rejected header are each worded the same way. The full cause and the server's stderr are on its page in
/tools, and under the warning in a headless run. -
rustls is 0.23.46 (RUSTSEC-2026-0346, -0347, -0348, -0349). Only the last one applied to iota: a network attacker who answered one connection could make later connections to the same host fall back from the post-quantum hybrid key exchange to X25519 alone — a loss of post-quantum protection, with no key exposed and no server authentication bypassed. The other three need a session store, Encrypted Client Hello or the
brotlifeature, none of which iota uses.
Fixed
-
An MCP server that stops mid-session is shown as stopped. A stdio server that was killed or crashed used to stay
connectedin/tools, with nothing said in the chat. Now it shows asdownas soon as/toolsis opened or a call finds it gone, and the chat says so once, with the last line it wrote to stderr:⚠ MCP db: exited (its last stderr line: "RuntimeError: database connection lost") — its tools will fail until it is reconnected from /tools · details in /toolsIts tools stay available to the model, and a call to them answers with a sentence saying the server has exited and can be reconnected from
/tools, instead ofTransport closed. -
A tool call an MCP server never answers no longer hangs forever. Every MCP tool call now has a deadline — 30 minutes by default — after which it is given up and the model is told why. A server whose tools legitimately run longer can raise it with
tool_timeout_sec:in itsmcp_serversentry. -
A herdr pane no longer stays
workingafter the chat runs another agent. When the model ran an agent from the shell —claude -p …, say — that agent's herdr integration took over iota's pane, and herdr then ignored iota: the pane showedworkingwith the chat idle until it was closed. Inside herdr, the shell tool's commands and the MCP servers now start withoutHERDR_ENV, so an agent started there leaves the pane to iota. Theherdrcommand line works as before, and an agent the model starts in a pane of its own still reports there. -
Resizing a slow or busy iota no longer breaks the screen for good. When iota was starved of CPU — at background priority, or on a heavily loaded machine — one late answer from the terminal during a resize could put every later one off by one: the prompt drawn mid-screen with its top line gone, the last lines of a reply lost, and the same again on every later resize. Now a slow machine makes a resize slower, and at worst a drag repeats a few of a reply's last lines in the scrollback; nothing is lost, and the prompt stays whole at the bottom.
-
A background job that finishes while no model is chosen no longer leaves the chat busy. If its result woke a chat with no model yet and you cancelled the model choice, herdr, cmux or the terminal's progress indicator kept showing the chat as busy until the next turn. It now shows it idle.