Mesh LLM: Run Any Model Across Multiple Machines With One OpenAI-Compatible API

Ab
Aby Varghese
Published Jul 13, 2026 7 min read
Mesh LLM: Run Any Model Across Multiple Machines With One OpenAI-Compatible API

Running large language models locally is getting more interesting — and more constrained — by the day. A 70B-parameter model won't fit on a single consumer GPU, and even professional setups regularly run out of VRAM for the biggest open-weight models. Mesh LLM is an open-source project that takes a different approach: instead of optimizing for one machine, it pools GPUs and memory across machines and exposes the whole cluster as a single, OpenAI-compatible API endpoint at http://localhost:9337/v1.

The result is a runtime where you can start with one node today, add more nodes later, and let the mesh decide whether a model runs locally, routes to a peer, or gets split across machines using its Skippy stage-split system. Here's how it works — and how to get started.

What Is Mesh LLM?

Mesh LLM is a distributed inference runtime for GGUF-format models. It wraps the complexity of cross-machine model serving behind a familiar API surface: anything that speaks OpenAI's /v1/chat/completions format works with it out of the box, including Goose, OpenCode, Claude Code, and curl.

Its three core ideas are:

  • Mesh routing: Every node exposes the same /v1 API. Requests are routed by the model field to whichever peer can serve that model. If a model fits on one machine, it stays there; otherwise, it's distributed.
  • Skippy stage splits: Large dense models are broken into contiguous layer ranges (stages) and spread across multiple nodes. The coordinator plans the stage layout, starts downstream stages first, waits for readiness, then publishes the stage-0 route. Only the model layers each node needs are fetched.
  • Public and private meshes: You can join an existing public mesh with --auto, create a private mesh with an invite token, or publish your own. Public meshes use Nostr for discovery; private meshes are invite-token based.

Quick Start: Up and Running in Minutes

Installation is a single curl command on Linux/macOS:

curl -fsSL https://raw.githubusercontent.com/Mesh-LLM/mesh-llm/main/install.sh | bash

On Windows PowerShell:

irm https://raw.githubusercontent.com/Mesh-LLM/mesh-llm/main/install.ps1 | iex

After installation, run the setup wizard:

mesh-llm setup

Then join the public mesh and start serving:

mesh-llm serve --auto

That single command picks a backend, downloads a suitable model if you don't have one, joins the best available public mesh, starts the local API on port 9337, and opens the web console on port 3131. For headless server deployments, add --headless to suppress the web UI while keeping the management API alive.

Verify available models and send your first request:

# List available models
curl -s http://localhost:9337/v1/models | jq '.data[].id'

# Send a chat completion
curl http://localhost:9337/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"GLM-4.7-Flash-Q4_K_M","messages":[{"role":"user","content":"hello"}]}'

Workflow Cheat Sheet

Mesh LLM covers a range of deployment patterns through simple CLI flags:

  • Try the public mesh: mesh-llm serve --auto
  • Start a private mesh: mesh-llm serve --model Qwen3-8B-Q4_K_M
  • Publish your own mesh: mesh-llm serve --model Qwen3-8B-Q4_K_M --publish
  • Join by invite token: mesh-llm serve --join <token>
  • Run an API-only client: mesh-llm client --auto
  • Split a large model across nodes: mesh-llm serve --model hf://meshllm/<repo>@<rev> --split

Skippy Stage Splits: Running Models Too Big for One Box

The most technically interesting part of Mesh LLM is its Skippy runtime. When a model's full GGUF is too large for any single node — like DeepSeek3 or EXAONE-MoE — Skippy splits it into package-backed layer stages. Each package repository contains a model-package.json file plus GGUF fragments, so peers only fetch the slices needed for their assigned stage.

The coordinator plans contiguous layer ranges, starts downstream stages first (so data flows properly), waits for each to signal readiness, then publishes the stage-0 route. The calling node sees a single, transparent inference endpoint regardless of how many machines are doing the work underneath.

Split multimodal serving is certified for Qwen2-VL, Qwen3-VL, Qwen3-VL-MoE, HunyuanOCR/Hunyuan-VL, and DeepSeek-OCR using real GGUF plus projector fixtures.

Mixture-of-Agents Gateway (Experimental)

One of the more novel features is the Mixture-of-Agents (MoA) gateway, activated by setting "model": "mesh" in your request. Instead of routing to one model, the proxy fans the prompt out to every model available in the mesh in parallel, arbitrates the responses with deterministic logic, and returns one OpenAI-compatible reply.

curl http://localhost:9337/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"mesh","messages":[{"role":"user","content":"What is the capital of Japan?"}]}'

The arbiter runs in code — not as another model call — and only escalates to a reducer LLM when there's a genuine conflict between responses. Tool calls flow through the full pipeline. The project marks this as experimental and recommends using a specific model ID when stable semantics matter. It requires at least two distinct models in the mesh.

Model Family Support

Mesh LLM's Skippy runtime tracks llama.cpp family parity across a wide set of reviewed GGUF models. The current support set covers 72 P0/P1 family rows, with 89 certified rows in the full parity inventory. Supported families include:

  • Qwen, Llama, Gemma, Mistral, DeepSeek, GLM, MiniMax
  • Phi, Granite, Hunyuan, EXAONE, Cohere, Falcon, RWKV
  • And many more — see docs/skippy/FAMILY_STATUS.md in the repo for the full matrix

Platform and Build Support

Tagged releases ship prebuilt bundles for a broad range of targets:

  • macOS (Metal, CPU)
  • Linux CPU, Linux ARM64 CPU, Linux ARM64 CUDA
  • Linux CUDA, Linux CUDA Blackwell, Linux ROCm, Linux Vulkan
  • Windows CPU, Windows CUDA, Windows ROCm, Windows Vulkan

To build from source, clone the repo and run just build. Source builds require just, cmake, Rust, and Node.js 24 + npm. CUDA builds need nvcc, ROCm builds need ROCm/HIP, and Vulkan builds need Vulkan dev files plus glslc.

Mesh LLM also ships with release attestation for packaged executables. You can verify a binary with:

cargo run -p xtask -- release-attestation inspect \
  --binary <path-to-packaged-mesh-llm> \
  --public-key-file <release-signing-public-key.json>

A packaged binary reports valid, an unstamped local build reports missing, and a binary modified after packaging reports invalid.

Agent Integrations

Mesh LLM has first-class CLI wrappers for popular agentic tools. If you use Claude Code, Goose, OpenCode, or Pi, you can wire them to your mesh with a single command:

  • mesh-llm claude — wire Claude Code to your mesh endpoint
  • mesh-llm goose — integrate with the Goose agent
  • mesh-llm opencode — integrate with OpenCode
  • mesh-llm pi — integrate with the Pi assistant

This pairs naturally with the agentic engineering workflows covered in our 6-month Agentic AI Engineer roadmap — Mesh LLM can serve as the local inference backbone for agents you're building across each of those stages.

How Mesh LLM Compares to Running a Single Local Model

Most local LLM setups — like the single-file C inference engine we covered in colibri's approach to running a 744B MoE model on 25 GB of RAM — optimize heavily for single-machine efficiency. That's the right call when you have one well-specced machine. Mesh LLM is the complement to that: it's the right tool when you have multiple machines, a model that won't fit on any one of them, or you want to aggregate spare GPU capacity across a team or homelab.

If you're building production AI agents rather than running one-off inference, the infrastructure layer matters enormously — as explored in Loop Engineering: The Four Layers That Separate Toy Agents from Production Agents. Having a reliable, OpenAI-compatible local inference endpoint — one that can transparently scale across machines — removes a significant reliability bottleneck from the agent loop.

Getting Started

Mesh LLM is experimental distributed-systems software. The team asks that bug reports include the command you ran, platform and backend flavor, /api/status output if available, and whether the node was private, published, or joined with --auto.

The project is open-source and available at github.com/Mesh-LLM/mesh-llm. Full documentation lives in the docs/ folder, with docs/MESHES.md, docs/SKIPPY_SPLITS.md, and docs/CLI.md being the most useful starting points.

If you've been waiting for a clean, OpenAI-compatible way to pool your local GPU resources without managing a full orchestration stack, Mesh LLM is worth a close look.

Related Reading

When you purchase through links in our articles, we may earn a small commission. This doesn’t affect our editorial independence.

You can now subscribe to our AImagazine WhatsApp channel - Follow the AImagazine channel on WhatsApp

Share:

Comments (0)

No comments yet. Be the first to share your thoughts!

Leave a Comment