एक एजेंट जो अपना काम दिखाता है।
io-cli एक टर्मिनल कोडिंग एजेंट है। io-harness उसके नीचे चलने वाला embeddable Rust रनटाइम है। दोनों ओपन सोर्स हैं, दोनों आपकी ही provider keys पर चलते हैं, और कोई भी यह नहीं छिपाता कि हुआ क्या।
Every artifact is checked against SHA256SUMS before it is unpacked
License
Apache-2.0
Core
Rust 1.95+
Pricing
शुरुआत ₹0 से
Keys
keys आपके पास ही
अभी बन रहा है
एक रनटाइम। उसके ऊपर एक टर्मिनल।
हम नींव वाली परत बनाते हैं और मुफ़्त देते हैं। उसके ऊपर आप जो बनाएँ, वह आपका है।
io-harness
on crates.ioयही आधार है। Rust के लिए embeddable एजेंट रनटाइम। आप एक contract देते हैं — काम, वह workspace जिसे छूने की इजाज़त है, और क्या पढ़ा, लिखा, चलाया और dial किया जा सकता है — और यह लूप चलाकर नतीजा लौटाता है।
- Cargo.toml में एक लाइन: cargo add io-harness। कोई daemon, कोई अकाउंट, कोई telemetry नहीं
- OpenRouter, Anthropic और OpenAI सीधे, साथ में 21 OpenAI-जैसे presets — जिनमें 8 लोकल रनटाइम
- हर step, हर refusal और हर बजट ख़र्च एक SQLite trace में, जो आपका है
io-cli
terminalइसी पर बना टर्मिनल एजेंट। हर पूरी हुई लाइन आपके टर्मिनल के अपने scrollback में जाती है; ऊपर दो पंक्तियाँ बताती रहती हैं कि अभी क्या हो रहा है, कितना ख़र्च हुआ, और इजाज़त क्या है।
- लिखने से पहले run रुकता है और diff दिखाता है: y, a या n, फिर Enter — वहीं जहाँ पूछा गया
- posture footer पर दिखती है, और Shift+Tab अगली बारी से उसे बदल देता है
- /resume पुराना session खोलकर वही सवाल पूछता है जिस पर उसका run रुका था
01 — harness
Embeddable, होस्टेड नहीं
crate के रूप में जोड़िए और उसी प्रोसेस में चलाइए। कोई binary, कोई daemon, कोई UI, कोई अकाउंट और कोई telemetry नहीं — डिफ़ॉल्ट बिल्ड में एक भी optional dependency नहीं।
02 — harness
हर step पर टिकाऊ
हर पूरे हुए step के बाद trace, बजट ख़र्च और एक checkpoint — सब एक ही transaction में। क्रैश के बाद पूरा पेड़ वहीं से चलता है: न step दोहराए जाते हैं, न दोबारा पैसा लगता है।
03 — harness
कोई भी provider
OpenRouter, Anthropic और OpenAI क्रेट के अपने HTTP+SSE क्लाइंट पर, किसी भी OpenAI-जैसे endpoint के लिए एक Compatible provider, 21 वेंडर presets, और उनके बीच fallback।
04 — harness
सीमा, trace के साथ
पढ़ने, लिखने, चलाने और नेटवर्क पर परतदार deny-first नियम। हर refusal trace में है, उस नियम और उस परत के नाम के साथ जिसने उसे रोका।
05 — cli
टर्मिनल आपसे नहीं छीनता
कोई alternate screen नहीं, कोई mouse capture नहीं — किसी भी mode में, किसी भी flag के पीछे। सर्च, सेलेक्शन और tmux copy-mode चलते रहते हैं, और यह बदले तो एक टेस्ट बिल्ड फ़ेल कर देता है।
06 — cli
मंज़ूरी वहीं, जहाँ पूछी गई
लिखने से पहले run रुकता है और प्रस्तावित diff दिखाता है। y, a या n चुनिए और Enter से पक्का कीजिए — इसलिए वाक्य के बीच का कोई अक्षर लिखने का फ़ैसला नहीं कर सकता। 'इस session के लिए' उसी act को उसी target पर याद रखता है।
07 — cli
आपकी key, स्क्रीन पर कभी नहीं
wizard key को लाइव endpoint पर जाँचता है, फ़ाइल 0600 पर लिखता है, और provider का env var पहले से सेट हो तो key कहीं लिखता ही नहीं।
08 — cli
ख़र्च, और नतीजा
/cost पैसा और टोकन — run, session, मॉडल और दिन के हिसाब से; /stats नतीजे, पहली कोशिश, gate फ़ेल और latency। कुछ भी अंदाज़े से नहीं।
एक रिपॉज़िटरी पर टिकाऊ बातचीत
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());छत्तीस कमांड, चार समूहों में
ioबिना subcommand, इसी रिपॉज़िटरी में एक session खुल जाता है/modelअगली बारी किस मॉडल को जाए, यह बदलिए — सिर्फ़ इस session के लिए/resumeपुराना session खोलिए और उसका run जिस पर रुका था, उसका जवाब दीजिए/statusपूरी session स्थिति scrollback में: policy परतें, sandbox backend, caps, बजट, कनेक्शनरिलीज़ और स्थिरता
भारत पहले
यहाँ बना। यहाँ के हिसाब से दाम।
भारत में बना, दुनिया के लिए।
ज़्यादातर एजेंट टूलिंग डॉलर में बिकती है और सिर्फ़ गीगाबिट अंग्रेज़ी पर टेस्ट होती है। हम दूसरे सिरे से शुरू करते हैं: कोयंबटूर का एक छात्र साझा वाई-फ़ाई पर, इंदौर की चार लोगों की टीम ₹3,000 के बजट में, और मुंबई का एक बैंक जिसका कोड इमारत से बाहर नहीं जा सकता।
01 — रुपये में
बिलिंग रुपये में, चेकआउट पर UPI। डेव टूल पर कोई FX मार्कअप नहीं।
02 — धीमे नेट पर भी
रुका हुआ run फिर चल पड़ता है: /resume उसी सवाल का जवाब देकर उसी step से आगे बढ़ता है, शुरू से नहीं।
03 — भारतीय भाषाएँ
prompt और eval पैक जो हिंदी, तमिल और मिली-जुली अंग्रेज़ी पर टिकें — अभी खुले में बन रहे हैं।
04 — डेटा यहीं रहता है
पूरी तरह लोकल चलाइए, या भारतीय रीजन में सेल्फ़-होस्ट कीजिए। शुरू से DPDP का ध्यान।
कीमत · ₹ में, कन्वर्ट करके नहीं
फ़्री कोई ट्रायल नहीं है।
अपने provider जोड़िए और सब कुछ इस्तेमाल कीजिए। Apache-2.0, सेल्फ़-होस्ट, कोई seat गिनती नहीं, कोई साइन-अप दीवार नहीं।
- अपनी keys लाइए — कोई भी provider, लोकल मॉडल भी
- अपनी मशीन पर असीमित sessions
- पूरा io-harness रनटाइम, अपने कोड में embed करने योग्य
- परतदार permission boundary और हर run का SQLite trace
- GitHub Discussions पर कम्युनिटी सपोर्ट
पेड प्लान आने पर फ़्री ख़राब हो जाएगा?
नहीं। आज जो चलता है, वह paywall के पीछे नहीं जाएगा। पेड प्लान होस्टिंग और टीम फ़ीचर हैं, रनटाइम नहीं।
io अकाउंट ज़रूरी है?
फ़्री के लिए नहीं। इंस्टॉल कीजिए, provider key डालिए, चलाइए।
मॉडल का ख़र्च शामिल है?
फ़्री में आप सीधे अपने provider को देते हैं — हम टोकन पर मार्कअप नहीं लगाते। मैनेज्ड इनफ़रेंस Go प्लान में जुड़ता है।
इंस्टॉल
एक कमांड, चारों प्लैटफ़ॉर्म पर।
दोनों स्क्रिप्ट आपकी मशीन के लिए सही बिल्ड चुनती हैं, unpack करने से पहले SHA256SUMS से जाँचती हैं, और आपकी ही डायरेक्टरी में इंस्टॉल करती हैं — न administrator अधिकार, न shell profile या PATH में कोई बदलाव। tap और bucket इसी रिपॉज़िटरी में रहते हैं, इसीलिए brew tap और scoop bucket add में URL देना पड़ता है। crates.io पर publish नहीं है: सोर्स से बनाने के लिए Rust 1.95 या ऊपर।
छत्तीस कमांड, चार समूह
जो कुछ आप टाइप कर सकते हैं।
समूह इस बात से बने हैं कि आप क्या कर रहे हैं, न कि harness का कौन हिस्सा जवाब देता है — और कोई समूह दस से ऊपर नहीं जाता। इनमें ग्यारह चलती turn के बीच चल जाती हैं, बाकी मना कर दी जाती हैं: नियम यह है कि कमांड करती क्या है, दिखती कितनी मासूम है यह नहीं।
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
crate के साथ क्या आता है
दोनों के नीचे वही रनटाइम।
io-cli, io-harness पर बना एक प्रोग्राम है। यह वह है जो crate ख़ुद लेकर आती है — वही boundary, वही ledger और वही trace, चाहे turn टर्मिनल से आया हो, एडिटर से या CI जॉब से।
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.
लॉन्च की ख़बर पाइए।
io-harness के 1.0 पर और Go प्लान खुलने पर एक ईमेल। और कुछ नहीं।