Release Notes
Changed
/tools is one list of where the tools come from. The two tabs, Tools
and MCP, are now one list: built in (the tools iota ships with) and then
each MCP server, with how many tools it has and how it stands —
connected, connecting…, down, needs login or failed, with the
reason in a few words. Enter opens a page for that source: for a server
its endpoint, transport, login, tool names, call timeout, the full reason
it failed (its stderr included) and its tools; Esc goes back to the list.
- 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 stays down with
them, showing why the new start failed, and you can try again. A server you
have just logged in to with iota mcp login no longer needs a restart of
the chat to use the new login.
- MCP failures say what happened and what to do. A server that did not
connect used to be reported with the library's own words — generic Rust
type names, when send initialize request, and 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 /tools. A 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 chain and the server's stderr are on
the server's page in /tools, and under the warning in a headless run.
- rustls is 0.23.46 (RUSTSEC-2026-0346, -0347, -0348, -0349). iota keeps
no session store of its own, does not use Encrypted Client Hello and does
not enable the brotli feature, so the first three never applied. The
fourth did: 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.
Fixed
- Resizing a slow or busy iota no longer breaks the screen for good.
When iota was starved of CPU — run at background priority, or on a machine
under heavy load — and the terminal took more than two seconds to answer
one of the cursor-position questions a resize asks, every later answer was
the one before it. After that, resizing the window could draw the prompt
in the middle of the screen with its top line gone and lose the last lines
of a reply, and every later resize in that session could do it again. iota
now tells its own answer from a late one, ignores the late one and waits
a little longer for its own. A slow machine now 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 herdr pane no longer stays "working" after an agent is run from the
chat. When the model ran another agent from the shell — claude -p …,
say — that agent's herdr integration took over iota's pane, and herdr then
ignored iota for good: the pane showed working with the chat idle until
the pane was closed. Inside herdr, the shell tool's commands and the MCP
servers now start without HERDR_ENV, so an agent started there leaves
the pane to iota. The model is told this in its environment, and the
herdr command line works as before — a pane it opens with herdr still
gets its own herdr identity, so an agent started in a pane of its own
reports there as it should.
- A job that finished while no model was chosen no longer keeps the host
busy. If a background job's result woke a chat that had no model yet,
and the model choice was then cancelled, the host (herdr, cmux, the
terminal's progress indicator) went on showing the chat as busy until the
next turn. It now shows it idle.
- An MCP server that stops mid-session is shown as stopped. A stdio
server that exited — killed, or crashed — used to stay connected in
/tools, with nothing said in the chat. Now it shows as down as soon as
/tools is opened or a call finds it gone, and the chat says so once, with
the last line the server 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 /tools. Its tools
stay available to the model, and every call to them answers with a
sentence that says the server has exited and that it can be reconnected
from /tools — instead of Transport closed. This holds for a server
reconnected from /tools too, even when no server connected when the
chat started.
- 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 its mcp_servers entry.
Install iota 0.7.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/iotash/iota/releases/download/v0.7.3/iota-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/iotash/iota/releases/download/v0.7.3/iota-installer.ps1 | iex"
Install prebuilt binaries via Homebrew
brew install iotash/tap/iota
Download iota 0.7.3