Skip to main content

v0.3.2

The model knows where it is. Every agent with tools now sends a built-in harness paragraph ahead of its own prompt — who it runs inside, what the machine looks like, and how iota's own command line is driven — and iota itself runs outside the shell sandbox, so a child agent or an iota mcp add from the chat just works. A first run writes the starter config; add --url logs in on the spot; /mcp leaves the chat; the reference moves to iota.sh.

Added

  • A built-in harness prompt. An agent with tools: sends a short paragraph of iota's own ahead of its system: — two sentences of identity and two rules (a declined tool call is not retried; a command the sandbox refused is reported as such, not rewritten), an <environment> block (project root, platform, shell, date, the iota binary, the user and project config files or the -c file, a missing one marked (absent)), and with the shell set an <iota_cli> block: that iota itself runs outside the sandbox, its verbs (mcp add|list|get|remove|login|logout, config check|path|init, list …, run <agent> -m), and the three rules — MCP servers through iota mcp, everything else by editing the config file and iota config check, every change from the next session. Under 1.5 KB; your prompt follows inside <instructions>, the AGENTS.md overlay after it. Composed at send time like the overlay and never stored: a resumed session and an upgraded binary get the current one, and /model's System tab shows the prompt exactly as sent. An agent without tools: sends nothing extra. No configuration key (X-43).

Changed

  • The README is an introduction. The reference — every config key, the system prompt in full, every tool parameter, MCP, agent mode, slash commands — lives at https://iota.sh/docs; the README keeps what a first look needs, and the two config errors that pointed at a README section point at the site. How a release is cut moved to docs/RELEASING.md.
  • A first run writes the starter config itself. With no -c and no .iota.yaml in the home or the project, iota (and iota run …) writes ~/.iota.yaml — the file iota config init writes — names it on stderr, and goes on: OPENAI_API_KEY=… iota is a working first run on a fresh install, and without the key the key error says what to set. Nothing is written when a config exists in either spelling, when -c names one, or without a home. The two refusals that used to send you to config init now say where an agents: entry goes instead — a run without a config no longer reaches them.
  • iota runs outside the shell sandbox. A shell call whose first word is the running binary — iota mcp add …, iota mcp login <name>, a child agent's iota run <agent> -m "<task>" — is spawned without the sandbox, so it can write the config file, open the browser and reach an API. Only that shape leaves: iota in a pipe, a chain, a $(…) or a backtick stays in. Approval is as it was — a sandboxed set without auto_run asks about such a call, the prompt and the call header marked (outside the sandbox); auto_run: true asks nothing. A parent agent no longer needs network: true to dispatch a child: the child is isolated by its own agent's configuration (X-44).
  • add --url logs in on the spot. Once the entry is written, iota mcp add <name> --url <url> probes the endpoint with one bare initialize: a 401 starts the OAuth login right there — the same steps as iota mcp login, with --no-browser printing the URL instead of opening the browser — a server that answers without a credential is left at Added, and one that could not be reached keeps the iota mcp login <name> hint. --auth oauth or --client-id skips the probe and logs in at once; --auth none, an entry with its own Authorization header, and the new --no-login (a script, CI, a machine without a desktop) write the entry and stop. A login that fails keeps the entry, prints Retry with: iota mcp login <name> and exits non-zero. login stays for logging in again, or for the login --no-login skipped (X-41).

Removed

  • /mcp leaves the chat. The /mcp panel and /mcp login|logout <name> of 0.3.1 are gone. The MCP tab of /tools already shows every server's state — a server waiting for a login reads not logged in: run iota mcp login <name> — and the login is iota mcp login <name> from a shell (a chat already running does not pick the token up; start it again). The startup notice names that command now, and the 80-column banner's command row fits on one line again. No management command is planned for the chat: configuration is headed for a toolset the model calls on your behalf, not for slash commands (X-42).