InitOrigin
io-cli · Apache-2.0 · open source

Ek agent jo apna kaam dikhata hai.

io-cli ek terminal coding agent hai. io-harness uske neeche ka embeddable Rust runtime hai. Dono open source, dono aapki hi provider keys pe — aur kuch bhi chhupta nahi.

Every artifact is checked against SHA256SUMS before it is unpacked

io-cli · ~/scratchpad/demo-run3 · run 165done · 39s
The billing test suite has one failing test. Find the root cause, fix it in the source rather than in the test, and run the suite again to confirm all five tests pass.
· thought · 12.4s · 21 tok
List . · 3 entries · ~0ms
Search billing · 3 hits · ~0ms
List billing · 2 entries · ~0ms
List tests · 2 entries · ~0ms
Read billing/windows.py · ~0ms
Read tests/test_windows.py · ~0ms
· thought · 1.6s · 97 tok
· a sandbox was created · macos-sandbox-exec
Run · python unavailable · ~37ms
no python on PATH. This machine cannot run that command; try another, or carry on without it.
· thought · 3.8s · 385 tok
Run · python3 exit 1 · ~102ms
..F..
FAIL: test_heartbeat_run_collapses_to_one_window
AssertionError: 6 != 1
· thought · 1.7s · 81 tok
Edit billing/windows.py · edited · ~0ms
billing/windows.py · +1 -1 · edit_file
@@ -33,7 +33,7 @@
35 last = merged[-1]
36 - if window.start < last.end:
36 + if window.start <= last.end:
37 merged[-1] = Window(last.start, max(last.end, window.end))
· a sandbox was created · macos-sandbox-exec
Run · python3 exit 0 · ~62ms
..... Ran 5 tests in 0.001s OK
· thought · 13.4s · 371 tok · confirms it once more
Run · python3 exit 0 · ~57ms
..... Ran 5 tests in 0.001s OK
Fixed. The failing test was test_heartbeat_run_collapses_to_one_window, and the root cause was in merge_windows in billing/windows.py:42: the merge condition was window.start < last.end, so end-to-start touching windows (a 10-second heartbeat ending exactly when the next starts) were not collapsed.
· thought · 1.8s · 41 tok
Changed it to window.start <= last.end so touching windows merge into one. The suite now passes all 5 tests (python3 -m unittest discover -s tests → OK).
· run 165 · 9 steps · 11 tool calls · 85,694 tok · 51% cached · $0.0036 · 39s · exit 0
>
ready · deepseek/deepseek-v4-flash-0731 · openrouter39s
9 steps · 85.7k tok · ctx 37% · $0.0036 · boundary verified · / for commandsworkspace · workspace-write/macos-sandbox-exec

License

Apache-2.0

Core

Rust 1.95+

Pricing

₹0 se shuru

Keys

Keys aapke paas

Abhi ship ho raha hai

Ek runtime. Uske upar ek terminal.

Hum neeche ki bhaari layer banate hain aur free dete hain. Uske upar jo banao, wo aapka.

io-harness

on crates.io

Yeh base hai. Rust ke liye embeddable agent runtime. Aap ek contract dete ho — kaam, wo workspace jise chhuna allowed hai, aur kya padha, likha, chalaya aur dial kiya ja sakta hai — aur yeh loop chalakar outcome wapas deta hai.

  • Cargo.toml mein ek line: cargo add io-harness. Koi daemon, koi account, koi telemetry nahi
  • OpenRouter, Anthropic aur OpenAI seedhe, plus 21 OpenAI-shaped presets — 8 unmein local runtimes
  • Har step, har refusal aur har budget kharcha ek SQLite trace mein — jo aapka hai

io-cli

terminal

Isi pe bana terminal agent. Har poori hui line aapke terminal ke apne scrollback mein jaati hai; upar do rows batati rehti hain ki abhi kya ho raha hai, kitna kharcha hua, aur ijaazat kya hai.

  • Likhne se pehle run rukta hai aur diff dikhata hai: y, a ya n, phir Enter — wahi jahaan poocha gaya
  • Posture footer pe dikhti hai, aur Shift+Tab next turn se use badal deta hai
  • /resume purana session kholta hai aur wahi sawaal poochta hai jispe uska run ruka tha

01 — harness

Embeddable, hosted nahi

Crate ki tarah add karo aur usi process mein chalao. Koi binary, koi daemon, koi UI, koi account aur koi telemetry nahi — default build mein ek bhi optional dependency nahi.

02 — harness

Har step pe durable

Har poore hue step ke baad trace, budget kharcha aur ek checkpoint — sab ek hi transaction mein. Crash ke baad poora tree wahi se chalta hai: na steps dohraye jaate hain, na dobara paisa lagta hai.

03 — harness

Koi bhi provider

OpenRouter, Anthropic aur OpenAI crate ke apne HTTP+SSE client pe, kisi bhi OpenAI-shaped endpoint ke liye ek Compatible provider, 21 vendor presets, aur unke beech fallback.

04 — harness

Boundary, trace ke saath

Padhne, likhne, chalane aur network pe layered deny-first rules. Har refusal trace mein hai — us rule aur us layer ke naam ke saath jisne roka.

05 — cli

Terminal aapse nahi cheenta

Koi alternate screen nahi, koi mouse capture nahi — kisi bhi mode mein, kisi bhi flag ke peeche. Search, selection aur tmux copy-mode chalte rehte hain, aur yeh badle to ek test build fail kar deta hai.

06 — cli

Approval wahi, jahaan poochi gayi

Likhne se pehle run rukta hai aur proposed diff dikhata hai. y, a ya n chuno aur Enter se confirm karo — isliye kisi sentence ke beech ka ek letter likhne ka faisla nahi kar sakta. 'Is session ke liye' usi act ko usi target pe yaad rakhta hai.

07 — cli

Aapki key, screen pe kabhi nahi

Wizard key ko live endpoint pe verify karta hai, file 0600 pe likhta hai, aur provider ka env var pehle se set ho to key kahin likhta hi nahi.

08 — cli

Kharcha, aur nateeja

/cost paisa aur token — run, session, model aur din ke hisaab se; /stats outcomes, first-try, gate failures aur latency. Kuch bhi andaaze se nahi.

Ek repository pe durable baatcheet

src/main.rs
use io_harness::{ApproveAll, OpenRouter, Policy, Session, Store};

let provider = OpenRouter::from_env()?;
let store = Store::open("runs.db")?;

let policy = Policy::default()
    .layer("app")
    .allow_read("*")
    .allow_write("src/*")
    .deny_read("secrets/*")
    .allow_exec("cargo test*")
    .deny_exec("cargo publish*");

let mut session = Session::open(&store, "/path/to/repo")?;
let turn = session
    .turn("the test suite is failing; why?", &provider, &store, &policy, &ApproveAll)
    .await?;

println!("{}", turn.reply.unwrap_or_default());

Chhattis commands, chaar groups mein

ioBina subcommand, isi repository mein ek session khul jaata hai
/modelNext turn kis model ko jaaye, wo badlo — sirf is session ke liye
/resumePurana session kholo aur uska run jispe ruka tha, uska jawaab do
/statusPoori session state scrollback mein: policy layers, sandbox backend, caps, budgets, connections

Releases aur stability

Abhiio-harness crates.io pe. io-cli har GitHub Release pe checksum-verified binaries ki tarah — macOS, Linux, Windows — aur wo usi harness release pe pinned hai jispe bana.
1.0 se pehleKoi bhi minor release session ki shakal badal sakta hai. Har badlav CHANGELOG.md mein likha hai, aur purani release ke liye likhi config file chalti rehti hai.
1.0Jab owner kahe, usse pehle nahi. Tab tak CONTRACT.md hi wo hai jispe koi script bharosa kar sakti hai: argv, exit codes, config keys aur wo paths jahaan io likhta hai.

India first

Yahaan bana. Yahaan ke hisaab se price.

Zyada tar agent tooling dollars mein bikti hai aur sirf gigabit English pe test hoti hai. Hum doosre sire se shuru karte hain: Coimbatore ka student shared wifi pe, Indore ki chaar logon ki team ₹3,000 budget mein, aur Mumbai ka bank jiska code building se bahar nahi ja sakta.

01 — Rupee-native

Billing rupees mein, checkout pe UPI. Dev tool pe koi FX markup nahi.

02 — Slow net friendly

Ruka hua run resume ho jaata hai: /resume usi sawaal ka jawaab deta hai aur usi step se aage badhta hai, shuru se nahi.

03 — Indic bhi chalega

Prompt aur eval packs jo Hindi, Tamil aur code-mixed English pe tikein — abhi khule mein ban rahe hain.

04 — Data ghar pe rehta hai

Poora local chalao, ya Indian region mein self-host karo. Day one se DPDP-aware defaults.

Pricing · ₹ mein, convert karke nahi

Free koi trial nahi hai.

Apne providers jodo aur sab kuch use karo. Apache-2.0, self-host, koi seat count nahi, koi sign-up wall nahi.

  • Apni keys laao — koi bhi provider, local models bhi
  • Apni machine pe unlimited sessions
  • Poora io-harness runtime, apne code mein embeddable
  • Layered permission boundary aur har run ka SQLite trace
  • GitHub Discussions pe community support

Paid plans aane pe Free kharab ho jaayega?

Nahi. Aaj jo chalta hai wo paywall ke peeche nahi jaayega. Paid plans hosting aur team features hain, runtime nahi.

io account chahiye?

Free ke liye nahi. Install karo, provider key daalo, chalao.

Model ka kharcha included hai?

Free mein aap seedha apne provider ko dete ho — hum tokens pe markup nahi lagate. Managed inference Go plan mein judta hai.

Install

Ek command, chaaron platforms pe.

Dono scripts aapki machine ke liye sahi build chunti hain, unpack karne se pehle SHA256SUMS se verify karti hain, aur aapki hi directory mein install karti hain — na administrator rights, na shell profile ya PATH mein koi badlav. Tap aur bucket isi repository mein rehte hain, isiliye brew tap aur scoop bucket add mein URL dena padta hai. crates.io pe publish nahi hai: source se banane ke liye Rust 1.95 ya upar.

macOS · Linuxcurl -fsSL https://raw.githubusercontent.com/initorigin/io-cli/main/install.sh | sh
Windowsirm https://raw.githubusercontent.com/initorigin/io-cli/main/install.ps1 | iex
Homebrewbrew tap initorigin/io-cli https://github.com/initorigin/io-cli brew install initorigin/io-cli/io
Scoopscoop bucket add io-cli https://github.com/initorigin/io-cli scoop install io
From sourcegit clone https://github.com/initorigin/io-cli cargo build --release · Rust 1.95+
cargo installNot a path — there is no crates.io publish. The channel is the GitHub Release
IO_VERSION · IO_INSTALL_DIRA specific version, and somewhere other than ~/.local/bin or %LOCALAPPDATA%\io\bin
aarch64-apple-darwinmacOS, Apple silicon · sandbox-exec
x86_64-apple-darwinmacOS, Intel · as above
x86_64-unknown-linux-muslLinux, static · Landlock, bwrap, namespaces, floor
x86_64-pc-windows-msvcWindows · Job Object, AppContainer opt-in
SHA256SUMSEvery artifact is checked before it is unpacked
io upgradePrints the command for the way you installed it. No auto-update, no version check

Chhattis commands, chaar groups

Jo kuch aap type kar sakte ho.

Groups is baat se bane hain ki aap kya kar rahe ho, na ki harness ka kaunsa hissa jawaab deta hai — aur koi group das se upar nahi jaata. Inmein gyaarah chalti turn ke beech chal jaati hain, baaki mana kar di jaati hain: rule yeh hai ki command karti kya hai, dikhti kitni maasoom hai wo nahi.

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

Shift+TabChange the permission posture, from the next turn
Esc EscRewind the last turn: its files, its memory, the conversation head
Ctrl+FThe tree of children this turn has spawned, and what it costs
Ctrl+TCommit the last step’s full detail into the scrollback
--plainNothing turns, nothing moves; every state change committed as text
io exec "<goal>"One goal to completion, no terminal interaction · --json
io resumeCarries on a run parked on a question, a plan or an interrupted call
io acpThe Agent Client Protocol on stdio, for Zed or a JetBrains IDE
io mcp · plugin · config · skillThe same words from a shell as from the composer
exit 0 1 2 3 4 6ok · failed · refused · ceiling · paused · unverified

Crate ke saath kya aata hai

Dono ke neeche wahi runtime.

io-cli, io-harness pe bana ek program hai. Yeh wo hai jo crate khud lekar aati hai — wahi boundary, wahi ledger aur wahi trace, chahe turn terminal se aaya ho, editor se ya CI job se.

Permission boundary

Layered, deny-first rules over read, write, exec and network. Every refusal is attributed to the rule and the layer.

Containment

Commands run in the host’s own sandbox backend, writing to the workspace and nowhere else, with per-host egress.

Durable runs

Trace, budget draw and checkpoint commit in one transaction after every completed step. A crash resumes the whole tree.

Budgets

Steps, wall-clock and token spend, from one ledger a whole tree shares and no child can raise.

Verification

The project’s own test command, a second model against a rubric, or no gate at all.

Composition

Nested sub-agents over a shared workspace, inherit-and-narrow — and every agent in the tree has an address.

Accounting

Token split, latency and TTFT per call; cost derived on read from a price table you own. An unpriced model makes a total a floor.

Extensibility

The Tool trait in-process, MCP over stdio and streamable HTTP, markdown skills, capability bundles and hooks.

Reach

A browser under the policy, LSP navigation, provider-executed web search, documents, images and fixed-argv git.

Native providersOpenRouter · Anthropic · OpenAI, over the crate’s own HTTP+SSE client
13 hosted presetsGroq · xAI · Mistral · DeepSeek · Together · Fireworks · Cerebras · Perplexity · Gemini · Moonshot · Zhipu · Qwen · MiniMax
8 local runtimesOllama · llama.cpp · vLLM · LM Studio · LocalAI · Jan · SGLang · KoboldCpp
Your toolchaincargo · deno · node · go · python · maven · gradle · mix · bundler · composer · swift · cmake · dotnet · make

Launch ki khabar le lo.

io-harness 1.0 pe aur Go plan khulne pe ek email. Bas.