I built a self-hosted three-Mac-mini cluster for my agent fleet.
Three Mac minis and a MacBook Pro running local LLMs and an always-on agent fleet — networked over Tailscale and SSH, moved cross-country, and audited back to health. Including an honest attempt at exo distributed inference that hit a real hardware wall. Knowing the limits of your hardware is part of the skill.
An always-on fleet needs real hardware it controls.
Cloud tokens aren’t a home. Hardware is.
Self-hosting three Mac minis gives me local inference at zero marginal cost, full control of the runtime, and a private network the agents live on.
The ambition was bigger than running one model per box. I wanted to bridge all three minis and run a single large model across them with distributed inference.
That goal is what pushed me into Thunderbolt bridging and the exo project — and it’s also where I hit a concrete, diagnosable hardware wall. This page is honest about both: what worked and what didn’t.
Build the network, attempt the bridge, pivot when it breaks.
Three minis on one network — Tailscale on each, key-based SSH between them, a planned Cloudflare tunnel for external reach.
To attempt distributed inference I bridged the minis with Thunderbolt 4 cables, intending to install exo and run one LLM across all three. That attempt failed for a concrete, diagnosable reason — so I pivoted to running a strong local model on a single node: Qwen 3.5 9B served from LM Studio on Mac mini 3, reachable across the network.
When I moved the cluster cross-country, I brought it back up and ran a read-only health-and-model-drift audit before changing anything — diagnose first, remediate second.
I tried to run one model across all three minis over Thunderbolt. It hit a hardware wall — so the honest outcome is a single-node local model that actually works, not a distributed cluster I can't stand behind.
— Design note · goal vs. achieved outcomeThe physical topology.
Three Mac minis and a MacBook Pro on a private Tailscale mesh with key-based SSH. A Thunderbolt 4 line bridge was attempted across the minis. The local model runs on a single node — mini 3 — not distributed across the cluster.
A MacBook Pro sync node and three Mac minis sit on a private Tailscale mesh with key-based SSH. The minis were joined by an attempted Thunderbolt 4 line bridge — two cables, third connection left unplugged to avoid a loop. The local Qwen 3.5 model runs on mini 03 only. exo distributed inference was researched and planned but never deployed — distributed inference across all three was the goal, not the outcome.
Hardware
Networking
Local LLM Serving
Agent Runtimes
Distributed Inference
Ops / Recovery
exo: attempted, not deployed.
The honest failure is an asset. It shows real hardware-limit diagnosis and a sound pivot — not a broken promise.
Distributed inference across the cluster was never achieved.
exo distributed inference was researched and planned but never installed or run. In the record: “I never was able to get exo set up… I never got to actually set up the software,” confirmed by ops as “exo was not involved. It was not installed / running.” Do not read this page as a working distributed-inference cluster — it isn’t one.
The single physical Thunderbolt-bridge attempt caused a heat event, diagnosed as normal macOS Thunderbolt / Bonjour multicast churn — not a thermal-throttle event (the OS logged ThermalPressure = 0). The hardware does not support RDMA. So the local model ended up running on a single node, and that single-node build is the part that actually works.
The facts of the build.
Descriptive facts from the internal record — not performance benchmarks. The cluster's value is control and cost, not throughput claims.
Offline, moved, and audited back to health.
Bridged the minis to try distributed inference. A heat event surfaced on one node, root-caused to macOS Thunderbolt / Bonjour multicast churn — not thermal throttling. Rolled back to the safe line topology.
The whole cluster went offline for about a week and was physically relocated cross-country. First post-move contact landed 2026-05-22.
Before changing anything, a read-only audit caught a dead local-Qwen endpoint, an inactive Slack gateway, failed crons, FileVault off on one node, and no recent Time Machine backup — 0 critical, 6 warnings.
LM Studio serving Qwen 3.5 9B on mini 3 went live and verifiably scored a synthetic job role in a live test, feeding the Hermes job-lead pipeline. ~9.9 GB of stale models were inventoried and cleaned.
Hands-on hardware, networking, and honest diagnosis.
I assembled the cluster, networked it, physically moved it across the country, and audited it back to health.
I attempted the exo distributed-inference build, diagnosed why the Thunderbolt bridge overheated, and made the call to pivot to a single-node local model. After the move I directed the read-only audit and the remediation — dead endpoints, FileVault, backups, model drift. This is real infrastructure work: hardware, networking, local model serving, and honest failure diagnosis. Knowing the limits of the hardware is part of the skill.