v0 · experimental · Apache 2.0 · वह binary protocol जिसे Prowl इस्तेमाल करता है

कोई भी URL पढ़ें। कोई भी API invoke करें। एक binary protocol।

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 होता है।

daemon live · myc://mycelio.prowl.world:4242 100 tests · Apache 2.0 v0 — अभी कोई बड़ा agent runtime इसे नहीं बोलता

01कोई भी URL पढ़ें

Mycelio को कोई भी public URL दें। daemon उसे fetch करता है, trafilatura से मुख्य content को locally Markdown में निकालता है, ज़रूरत पड़ने पर SPAs और PDFs के लिए Jina Reader पर fallback करता है, और उसे एक signed binary envelope में लौटाता है। कोई API key नहीं। vendor की ओर कोई SDK नहीं। 24 घंटे cached।

या अपने terminal से: 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 पर चले जाते हैं।

HTTP + raw HTML
~80 KB
LLM को ~20,000 tokens · प्रति fetch · uncached
Mycelio FETCH
~4 KB
~700 tokens · 24h cached · 50 typed affordances

2026-05-23 को news.ycombinator.com पर मापा गया। आंकड़े page के अनुसार बदलते हैं — content से भरी docs sites ज़्यादा compress होती हैं; static landing pages कम। पैटर्न वही रहता है: साफ़ Markdown अपने स्रोत HTML से कहीं छोटा होता है।

02कोई भी API invoke करें

पूरा 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 नहीं।

03हम ईमानदारी से कहाँ हैं

यह 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 कर सकते हैं।

04MCP से तुलना

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 अलग हैं:

सादा HTTP+JSON MCP Mycelio
Vendor को चाहिए अपना API चलाना (पहले से) एक MCP server चलाना 400-byte की file sign करना
Trust model TLS + DNS TLS + operator install Ed25519 dual-signed
Connection model हर call पर हर server पर एक TCP, कई services
Discovery Out of band Out of band Built-in (DISCOVER)
Wire format Text JSON JSON-RPC Binary frames
सबसे अहम row: “Vendor को चाहिए…” जिस protocol में vendor की भागीदारी के लिए code deploy करना पड़े, वह SaaS APIs की long tail तक scale नहीं कर सकता — ज़्यादातर vendors वह काम नहीं करेंगे। Mycelio के होने की पूरी वजह यही है कि यह ऐसी layer बने जहाँ vendor adoption के लिए बस एक file sign करनी हो, नया infra चलाना नहीं।

हम agent runtimes के अंदर tool-use के लिए MCP, agent-to-agent messaging के लिए A2A, या proprietary tool syntax के लिए OpenAI के function-calling की जगह लेने की कोशिश नहीं कर रहे। Mycelio एक layer पहले बैठता है: पहले से HTTP बोलने वाले backends के लिए public discovery और signature-आधारित invocation।

05Agent builders के लिए

पूरा 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.

06Verbs

आज सात verbs end-to-end implemented हैं; चार भविष्य के लिए spec में reserved हैं। Reserved का मतलब “जल्द आ रहा है” नहीं — इसका मतलब है “byte आवंटित है ताकि कोई implementation बाद में compatibility तोड़े बिना उसे अपना सके।”

Manifest format: manifest-v0.md

07Open spec, Prowl द्वारा संचालित

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 कर सकते हैं।

08हमें आपसे क्या चाहिए