02 / terminal · Apache-2.0
io-cli
A terminal agent that shows you what it is allowed to do, what it is spending, and what it refused — while it works. The agent loop, the providers, the tools, the sandbox and the session store are all io-harness; none of them are reimplemented here.
git clone https://github.com/initorigin/io-cli
cargo build --releaseIt never takes your terminal
No alternate screen and no mouse capture, in any mode, behind any flag. Your terminal's search, selection and tmux copy-mode keep working, and a test fails the build if that changes.
Approvals in place
A write stops the run and shows the diff it proposes. Answer y, a or n and confirm with Enter, where it was asked — so a letter inside a sentence cannot decide a write. Allow for this session remembers that act on that target.
Your key, never on screen
The wizard verifies a key against the live endpoint, writes the file at mode 0600, and writes no key at all when the provider's own environment variable is already set.
Spend, and whether it worked
/cost commits the money and the token split by run, session, model and day; /stats commits the outcomes, first-try counts, gate failures and latencies. Nothing is estimated.
Thirty-six commands, in four groups
ioWith no subcommand, opens an interactive session in this repository/modelChange the model the next turn is sent to — this session only/resumeReopen an earlier session and answer whatever its last run stopped on/statusCommit the whole session state into the scrollback: policy layers, sandbox backend, caps, budgets, connectionsIt never takes your terminal
io does not enter the alternate screen and does not capture the mouse, in any mode, behind any flag. Every finished message, tool call and system line is committed into the terminal's own scrollback; only a few rows at the bottom repaint.
So when the session ends the whole conversation is still there: your terminal's search finds it, tmux copy-mode scrolls it, a mouse drag selects it — none of which is implemented here. tests/structure.rs captures every byte io writes over a scripted session and fails if the alternate-screen or mouse-capture sequences appear.
Install
curl -fsSL https://raw.githubusercontent.com/initorigin/io-cli/main/install.sh | shirm https://raw.githubusercontent.com/initorigin/io-cli/main/install.ps1 | iexbrew tap initorigin/io-cli https://github.com/initorigin/io-cli
brew install initorigin/io-cli/ioscoop bucket add io-cli https://github.com/initorigin/io-cli
scoop install iogit clone https://github.com/initorigin/io-cli
cargo build --release · binary at target/release/io · Rust 1.95+Both scripts pick the right build for your machine, verify it against the published SHA256SUMS before unpacking, and install into a directory you own — no administrator rights, and no edit to your shell profile or PATH. The tap and the bucket live in this repository rather than in two of their own, which is why brew tap and scoop bucket add name a URL. There is no crates.io publish: Rust 1.95 or later to build from source.
Thirty-six commands, four groups
the session
/clear · /resume · /fork · /profile · /contain · /setup · /exit
this turn
/model · /effort · /undo · /plan · /steer · /compact · /image · /copy · /copy diff · /commit
inspect
/help · /status · /context · /expand · /fleet · /skills · /cost · /stats · /store · /export
configure
/config · /theme · /remember · /memory · /mcp · /provider · /plugin · /gates · /import
Grouped by what you are doing rather than by which part of the harness answers, and each group is capped at ten. Eleven of them run while a turn is in flight and the rest are refused — the rule is what a command does, not how harmless it looks.
Keys
The argv surface
-C, -m, --profile, --plain, on either side of a subcommand.--json, --sandbox, --policy, --provider.--list shows what is waiting.Exit codes
io resume, except an approval.Platform support
aarch64-apple-darwinmacOS, Apple silicon · io-harness’s own sandbox-execx86_64-apple-darwinmacOS, Intel · as abovex86_64-unknown-linux-muslLinux, statically linked · Landlock, bwrap, namespaces, floorx86_64-pc-windows-msvcWindows · Job Object, with AppContainer opt-inThe four artifacts and their SHA256SUMS are attached to every GitHub Release, and the full test suite runs on Ubuntu, macOS and Windows in CI. What confines a command is io-harness's, not this product's — io shows you which backend actually answered on this host, in the footer, because the mode asked for and the backend that applied are not the same fact.
Skills, five shipped
- io-mcp
- io-permissions
- io-provider
- io-remember
- io-update
Each one is a markdown file the agent reads when it needs it. Add and remove your own with /skills or io skill; the claimed name is the frontmatter name, and a duplicate costs the later one.
Guides
- the-session
- keys
- commands
- import
- resume
- accounting
- skills
- plugins
- hooks
- fleet
- verification
- providers
- git
- media
- accessibility
- headless
- editors
- configuration
- store
- limits