Mycelio वह binary layer है जिसे agents HTTP+JSON की जगह इस्तेमाल करते हैं। एक persistent connection से agent को दो चीज़ें मिलती हैं: FETCH कोई भी public URL साफ़ Markdown के रूप में (raw HTML से ~30× कम tokens), और ROUTE signed vendor manifests में calls, उनके docs छुए बिना। हर response पर directory का Ed25519 signature होता है।
myc://mycelio.prowl.world:4242
100 tests · Apache 2.0
v0 — अभी कोई बड़ा agent runtime इसे नहीं बोलता
Mycelio को कोई भी public URL दें। daemon उसे fetch करता है, trafilatura से मुख्य content को locally Markdown में निकालता है, ज़रूरत पड़ने पर SPAs और PDFs के लिए Jina Reader पर fallback करता है, और उसे एक signed binary envelope में लौटाता है। कोई API key नहीं। vendor की ओर कोई SDK नहीं। 24 घंटे cached।
curl https://mycelio.prowl.world/r/<any-url># pip install "mycelio @ git+https://github.com/opcastil11/mycelio.git"
import asyncio
from mycelio import MycelioClient
ROOT_PUBKEY = bytes.fromhex(
"23f6ebbc8faddb7ee8c9dedf2ef8e81057fb7d0bbace6ba26523452ef739c20c"
)
async def main():
async with MycelioClient.connect(
"mycelio.prowl.world", 4242, root_pubkey=ROOT_PUBKEY,
) as cli:
page = await cli.fetch("https://news.ycombinator.com")
print(page.content[:400])
print(f"\n→ {len(page.affordances)} affordances extracted")
asyncio.run(main())
Response में साफ़ Markdown होता है और typed affordances (links, forms) की एक सूची जिन पर agent action ले सकता है — relative URLs पहले से ही page के हिसाब से resolve होते हैं। जिन SPAs और PDFs को trafilatura parse नहीं कर पाता, वे पारदर्शी रूप से Jina Reader पर चले जाते हैं।
2026-05-23 को news.ycombinator.com पर मापा गया। आंकड़े page के अनुसार बदलते हैं — content से भरी docs sites ज़्यादा compress होती हैं; static landing pages कम। पैटर्न वही रहता है: साफ़ Markdown अपने स्रोत HTML से कहीं छोटा होता है।
पूरा invoke path एक ही artifact पर टिका है: एक छोटी signed file जो उस HTTP API की ओर इशारा करती है जिसे vendor पहले से serve करता है। यह रहा एक प्रतिनिधि Mycelio manifest, पढ़ने योग्य रूप में decoded:
# stripe-payments.myc · 412 bytes signed
service: stripe.com
title: Stripe Payments API
backend: https://api.stripe.com/v1
auth: bearer-token (Authorization header)
endpoints:
- op: charge
method: POST /charges
in: { amount: int, currency: str, source: str }
out: { id: str, status: str }
- op: refund
method: POST /refunds
in: { charge_id: str, amount: int }
out: { id: str, status: str }
signatures:
vendor: ed25519:9f8a3d...
directory: ed25519:1b4c7e...
Binary frames के रूप में wire-encoded यह 412 bytes है। आप इसे अपनी Ed25519 key से sign करते हैं। directory इसे root key से co-sign करती है। आपका HTTP backend जस का तस रहता है — Mycelio बस बताता है कि उस तक कैसे पहुँचा जाए। कोई SDK नहीं, चलाने को कोई server नहीं, maintain करने को कोई integration नहीं।
यह v0 है। reference daemon यहाँ चलता है:
myc://mycelio.prowl.world:4242। Python SDK GitHub से install होता है (PyPI release बाकी है)। 100 tests end-to-end pass होते हैं। wire format इतना stable है कि उस पर build किया जा सके।
Shipped: spec v0, binary frame codec, TLS support, async daemon, Ed25519 dual signing वाले vendor manifests,
INSPECT, ROUTE, और FETCH
verbs end-to-end काम कर रहे हैं (affordance extraction + Jina fallback के साथ FETCH)। आगे:
Prowl Design — अपने मौजूदा OpenAPI से signed manifests अपने-आप generate करें।
लेकिन साफ़ कहें तो, यह अभी नहीं है:
यह FETCH वाला हिस्सा chicken-and-egg से बच जाता है — यह पहले दिन से public web के किसी भी URL पर काम करता है, vendor adoption की ज़रूरत नहीं। इसीलिए हमने इसे पहले ship किया।
हमारा दाँव किस पर है: जैसे-जैसे agents “IDE के अंदर tool-loop” से “autonomous, हर session में हज़ारों APIs call करने” की ओर बढ़ेंगे, chicken-and-egg उलट जाएगा। “इंटरनेट के हर SaaS” तक scale करने वाला protocol वही हो सकता है जिसमें vendor को कुछ implement न करना पड़े — क्योंकि vendors की long tail हर agent runtime के लिए अलग server deploy नहीं करेगी। अगर यह thesis सही है, तो यही उसकी layer बनेगा।
अगर thesis गलत है: directory का HTTP API तब भी काम करता है, आपका मौजूदा OpenAPI तब भी काम करता है, और आप Mycelio को नज़रअंदाज़ कर सकते हैं। इस protocol पर दाँव की कीमत बस एक manifest file है जिसे आप पाँच मिनट में sign और कभी भी revoke कर सकते हैं।
MCP और Mycelio अलग-अलग layers पर काम करते हैं और हमारे हिसाब से वे एक-दूसरे के पूरक हैं, प्रतिस्पर्धी नहीं। MCP तब बेहतरीन है जब agent operator आपका tool पहले ही चुन चुका हो — user ने आपका MCP server install किया है, agent tool-loop में है, parameters ज्ञात हैं। Mycelio उससे पहले की layer के लिए है: उन services में public discovery और invocation जिनके बारे में agent को startup पर पता नहीं था।
फिर भी, अहम जगहों पर technical trade-offs अलग हैं:
DISCOVER)
हम agent runtimes के अंदर tool-use के लिए MCP, agent-to-agent messaging के लिए A2A, या proprietary tool syntax के लिए OpenAI के function-calling की जगह लेने की कोशिश नहीं कर रहे। Mycelio एक layer पहले बैठता है: पहले से HTTP बोलने वाले backends के लिए public discovery और signature-आधारित invocation।
पूरा composition — services discover करना, page fetch करना, op invoke करना — एक TCP connection में होता है। verbs के बीच कोई अतिरिक्त TLS handshake नहीं, एक signature chain, एक auth context:
async with MycelioClient.connect(
"mycelio.prowl.world", 4242, root_pubkey=ROOT_PUBKEY,
) as cli:
# 1. find payment APIs
matches = await cli.discover(query="payment", min_score=80)
# 2. read a candidate's site to evaluate it
page = await cli.fetch(f"https://{matches.results[0].name}")
if "x402" in page.content.lower():
# 3. pull the manifest and invoke it
m = await cli.inspect(matches.results[0].service_id)
resp = await cli.route(m, "charge", {"amount": 500, "currency": "usd"})
print(resp.json())
DISCOVER + FETCH + INSPECT +
ROUTE एक session में। End-to-end signature verification। पूरे demos यहाँ:
examples/। Wire spec:
protocol-v0.md.
आज सात verbs end-to-end implemented हैं; चार भविष्य के लिए spec में reserved हैं। Reserved का मतलब “जल्द आ रहा है” नहीं — इसका मतलब है “byte आवंटित है ताकि कोई implementation बाद में compatibility तोड़े बिना उसे अपना सके।”
Manifest format: manifest-v0.md
Mycelio है Apache 2.0। wire spec, frame codec, Python SDK और reference daemon सभी public GitHub repoमें हैं। Go, Rust, JS में implementations का स्वागत है।
ईमानदार बात: अभी production में Mycelio चलाने वाली सिर्फ़ एक directory है, और वह है
Prowl।
myc://mycelio.prowl.world:4242 पर चलने वाला daemon Prowl का है। हर manifest को co-sign करने वाली Ed25519 root key Prowl की है। spec एक ही operator मानकर नहीं चलता, लेकिन जब तक कोई और अपनी directory नहीं चलाता, व्यवहार में “Mycelio” और “Prowl का binary protocol” एक ही चीज़ हैं। हम दिखावा करने के बजाय यह खुलकर कहना पसंद करते हैं।
Lock-in की चिंता: आपका manifest भविष्य की किसी भी directory से serve हो सकता है, आपका मौजूदा HTTP API ही source of truth है जो हर हाल में बना रहता है, और आप कभी भी revoke कर सकते हैं।
cli.fetch(url) ताकि web को प्रति page 20,000 की जगह ~700 tokens में पढ़ सकें। Python SDK GitHub से install होता है (PyPI release बाकी है): pip install "mycelio @ git+https://github.com/opcastil11/mycelio.git".