A mycelial network for LLMs: your machines seed models to each other and serve inference peer-to-peer — no cloud in the loop. One OpenAI-compatible endpoint over the whole pool, so the tools you already use point at it unchanged. CLI to native iPhone & iPad app, organic cypherpunk throughout. Brand, protocol, and product grown together.
Brand · Protocol · Product — open source, Apache-2.0
mycellm.ai →
Most people who run models locally have more than one machine and use one at a time. The idea is to pool them: contribute capacity, draw on it, and treat a desktop, a laptop and a tablet as one endpoint. The hard part is not the inference — it is that consumer machines sit behind NAT, sleep without warning, and differ wildly in what they can hold.
The aim is a BitTorrent-style protocol for inference. What actually runs is a QUIC overlay with NAT-friendly reverse connections: seeders dial out, and the gateway routes inference back down the live session. That is not a shortcut — hole-punching does not survive symmetric NAT, which is what a lot of home routers do, so a design that depends on it works in a demo and fails at a friend’s house. Public, private and federated networks are all first-class. It presents as one OpenAI-compatible endpoint for the whole pool — existing tools point at it unchanged — and behind that a node either serves local weights through MLX or llama.cpp, or brokers a compatible upstream. The caller cannot tell which, and that indifference is the point: it is what lets a pool of uneven machines act as one address instead of a list of special cases.
mlx-lm’s own BatchGenerator; the existing project that solves this is credited as prior art in NOTICE instead of copied. Fewer layers to debug when a Metal queue misbehaves.Two findings changed the design more than any feature did. Small local models fail at structured tool calling for reasons of output format, not ability — the same 1.5B model scored 0/3 with native tool calls and 5/5 with the tools described in the prompt, on identical hardware. And a total time figure is close to meaningless unless it says whether the model was already resident: the same 30B on the same machine, four hours apart, took 370s and 34s. The per-task breakdown shows why — the first run was paying to load the model.
Open source under Apache-2.0, on PyPI, with a shipped iOS and iPadOS app, at mycellm.ai. The coding agent built on it ships in the repo as an example.
Transcript
An agent I built. It answers from my résumé and the pages of this site — nothing else — and says so when it does not know.
It can also open and scroll to whatever it is describing, so the answer and the evidence arrive together.
Type a question, or press the mic and talk to it.