v0.1.0
The first tagged release of iota as a Rust binary. It is an agent CLI: you configure agents — a model, a prompt, a set of tools — and run them. If you used the Go build, this is the list of things that changed under you.
What breaks
- The positional argument is a command, not a name.
run,list,resume,configandversionare the whole set, and a bareiotameansiota run.iota <name>used to be looked up in four namespaces — agents, models, providers, then the built-in provider types — so one word could mean four things. Nowiota run <agent>resolvesagents:alone, and a model or a provider is reached through an agent.--helpis the complete map, and a command added later can never shadow an agent you named. - Six flags are gone.
-k/--key,-u/--url,-t/--temperature,-S/--system-input,--context-windowand the boolean--agentare refused by the parser. A flag stays on the command line only if it describes THIS call: the key comes from an environment variable orproviders.<name>.key, the URL fromproviders.<name>.url, the temperature and the window frommodels:oragents:, the prompt fromagents.<name>.system, and agent mode fromagents.<name>.workspace. Nine flags remain, and only-c/--configis global. --resumeand-lbecame commands.iota resume [<id>]takes any unique id prefix and opens a picker with no id;iota list [agents|models|providers|sessions]reads the config and the session store — no key, no network.- The config has three layers, and they are enforced.
providers:says how to reach an API,models:which model and what its protocol looks like,agents:how it is driven. Every key is audited against the layer it was written in before the document is decoded: a key of another layer, a retired key, an unknown key, an unknown top-level key and an unknown toolset are all errors naming the coordinate and the file. There is no migration layer — a one-layerproviders.<name>block carryingmodel:,system:,tools:oragent:is refused, not split. - The
delegatetoolset is retired. A child agent is nowiota run <agent> -m "<task>"run frombash— a full run of thatagents:entry, with its own model, tools and session. defer_modemoved tomodels:. The provider — and so the dialect — is already fixed there, so a mode the provider cannot speak is refused when the config loads instead of silently degrading tonormal.
What is new
iota config.initwrites a commented starter config (refusing to overwrite one),pathprints the files a run reads, andcheckloads them and reports the three layers, warning when noagents.defaultexists. The zero-config start was given up on purpose;initis where it went.- Headless resume replays the session.
iota resume <id> -m "…"takes the model (when the session was recorded under the same provider type), temperature, reasoning effort, context window and image settings from the bundle; an explicit-Mstill wins. The banner goes to stderr, so stdout stays the reply — or the JSON report — alone, and the new turn is appended only when it succeeds. - Dedicated image providers.
type: imagenandtype: imagescarry models that only generate pictures, with/edit,/redo, reference images through/file, and per-dialect knobs on/model. - Background bash jobs.
"background": truereturns a job id at once and the result arrives later as a notice the model is handed. Up to 16 at a time, and they are killed when iota exits — a resumed session never inherits one. iota version. The Go build had no way to say its version;iota versionand--versionboth print it.- Windows.
x86_64-pc-windows-msvcis a release target, installed by one PowerShell line. There is no embedded interpreter: theshelltool drives Git Bash, PowerShell orcmd.exe— whichever the machine has — and says which one in its own description. There is no OS sandbox on Windows, so every command asks, and the binaries are not code-signed; see installation.
Fixes worth naming
--mcp ""and-m ""are errors with a message instead of a panic or a silent fall-through into the TUI.- A stream chunk whose
errorfield is literallynullis treated as absent, not as an in-band error. - Sparse tool-call indices in a chat-completions stream no longer drop the calls after the gap.
- Ctrl+C closes the MCP servers and exits 130; a
--output-format jsonrun prints its report with"error": "interrupted".
Upgrading
Start from iota config init and move what you had into the three layers: the
endpoint into providers:, the model into models:, the prompt and tools into
agents:. iota config check names anything still in the wrong place, with
the file and the coordinate — see the config file.