A few months ago I wrote a cheerful post about running AI on your own hardware — models on your own GPU, subtitles and captions generated locally, the mesh sharing a model between nodes. It worked, it was genuinely fun to build, and this week I took almost all of it back out. Here's why that's the right call.
Killing a darling
MeshHold had quietly become two products. One was a private, self-hosted cloud — storage, sync, sharing, chat, calls, an office. The other was an AI appliance — a model runtime, a GPU manager, a catalogue of weights to download, inference jobs auctioned across the mesh, plus subtitle, caption, OCR, text-to-speech, image-generation and audio-separation pipelines, each dragging in its own third-party tooling and its own slice of a very large image.
The AI half roughly doubled the complexity and the download size of the whole thing — and none of it was what MeshHold is for. A private cloud's job is to hold your data safely and move it between the machines you own. After last week's security audit, "smaller and easier to trust" started to sound a great deal more valuable than "also does transcription."
So I cut it. The node runs no models any more: the model runtime, the GPU manager, the on-device inference, the mesh model-sharing — all deleted, along with everything that existed only to feed them. Image generation, read-aloud, voice-and-music separation: gone outright. Subtitles, captions, OCR and search-by-meaning briefly moved to calling an external model server before coming out too. The node is AI-free again, and a good few megabytes and a whole category of maintenance lighter for it.
What that leaves
What remains is the thing I actually set out to build: a private cloud you run on your own machines. Your files, versioned and encrypted and synced; vaults you can mount as a drive; sharing by link; chat; voice and video calls and meetings; an S3 endpoint; a mesh VPN; a real office for your documents. All of it on networking that's now entirely our own, and none of it needing a GPU, a model download, or a multi-gigabyte image.
Document search survives, honestly scoped: it finds the words in your files — including the text pulled out of PDFs and scans — behind a switch you turn on, with no model and nothing leaving your node. "Search by meaning" needed an embedding model, and that model is exactly the kind of thing I just decided MeshHold shouldn't carry.
The coding agents — Claude, Gemini, OpenCode, Codex — are still here, because they're a thin driver over tools you already run and sign into with your own accounts, not a model baked into the daemon.
If you do want AI on your data
I'm not religious about this; I just don't think it belongs inside every node. The right shape, when I come back to it, is for MeshHold to point at a model server you run — Ollama, or a Whisper server, on the one machine in the house that has a GPU — reachable by name over your mesh, as an opt-in client rather than a runtime baked into every daemon. I built and measured exactly that this week before deciding even it could wait until after a first release. The design is written down; the node ships clean.
And some actual polish
Not all of it was deletion. Sending a file to another device got a proper desktop life: an incoming transfer now rings with an Accept / Decline toast you answer in one press, a finished one tells you what arrived with Open and Show-in-folder, and "Send with MeshHold" from Explorer's right-click handles a whole selection in one picker instead of one window per file. Calls got another safety fix, too — a meeting participant can no longer seal frames in another member's name.
Knowing what to leave out is a feature. 0.8 is close, and a surprising amount of what being close looks like is subtraction.
Since last week
- The node runs no models: the model runtime, GPU manager, on-device inference and mesh model-sharing are deleted; image generation, read-aloud (TTS) and voice/music separation are gone entirely
- AI-powered media features removed: subtitles, photo captions, scanned-page OCR and search-by-meaning are out — they briefly routed to an external model server before that came out too
- Document search stays, words-only: full-text search over your files (PDF and scan text included) behind an opt-in switch, with no model and nothing leaving the node
- Jobs are local-only now: remote dispatch, the auction, node descriptors and preemption are deleted — a job runs on the node that asked for it; the local sweeps (transcode, enrich) stay
- The coding agents remain: Claude, Gemini, OpenCode and Codex are a thin driver over tools you run and sign into yourself, so they stayed
- File-transfer desktop UX: an incoming transfer rings with Accept/Decline toast buttons, a received one offers Open / Show-in-folder, and a multi-select "Send with MeshHold" opens one picker for the whole selection
- Call security: a meeting participant can no longer seal frames under another member's identity; a callee's reads are sealed before it accepts
- A lighter tree: dead-code sweeps after the AI removal, and the site stops sizing and selling a node's own models