The smallest thing between your terminal and a model.

iota is an agent CLI written in Rust. You configure agents — a model, a prompt, a set of tools — and run them: iota run <agent>.

$curl -fsSL https://iota.sh/install.sh | sh

v0.7.5  ·  MIT  ·  macOS, Linux and Windows

iota run coder~/work/iota
ι> iota v0.7.5
agent · session 8g6h55dk3wsz
~/work/iota
❯ why does the resume test hang on linux?
[shell cargo test --test session resume 2>&1 | tail -3]
⎿ test resume::linked_worktree ... hung after 60s
error: test failed, exit 101
The hang is in the session writer, not the test.
session::writer keeps the pipe's write end open until the
bundle flushes, so read_to_end never sees EOF:
  let (rx, tx) = pipe()?;  drop(tx);            // before the await, not after  let n = read_to_end(rx).await?;
WhereWhat it holdsFix
writer.rs:88the write enddrop before awaiting
resume.rs:41a clone of ittake by value
The timeout is the retry back-off summing to a minute:
5 k
T = ∑ 2 ⋅ 1s = 63s
k = 0
so the 60 s budget is exceeded by one retry, 2⁵ = 32 s of it.
❯ paint the evening this fix ships: dusk over two hills
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
🖼 saved: /home/me/.iota/images/20260922-183012-1.png
❯
claude-sonnet-4 · ↑ 4k ↓ 253 · 1% / 200k

The shapes are the real ones: a shell call and its receipt, a table, display math laid out in two dimensions, a picture drawn inline.

# what it does

run an agent you named in one YAML file — its model, its prompt, its tools

talk to OpenAI, Anthropic, Gemini, or any endpoint that speaks their APIs — yours included

run bash under an OS sandbox, edit code, call MCP tools — and ask before it writes

stream a reply while you keep typing; render markdown, tables and math inline

save every session as plain files you can resume, grep or export

run child agents from bash: iota run <agent> -m "<task>"

# what it does not

run a daemon or a server, or leave anything running after you quit

ask you to sign in, or phone home

write outside the project root unless you say so

wrap the model in a framework you have to learn first