• Rust 71.5%
  • TypeScript 17%
  • Shell 3.5%
  • Python 2.2%
  • JavaScript 1.5%
  • Other 4%
Find a file
Michael Neale b662a4ebff
Some checks failed
hf-download-smoke.yml / Fix misleading agentic descriptions in model catalog (#1013) (push) Failing after 0s
scripted-binary-smoke.yml / Fix misleading agentic descriptions in model catalog (#1013) (push) Failing after 0s
sdk-smoke.yml / Fix misleading agentic descriptions in model catalog (#1013) (push) Failing after 0s
smoke.yml / Fix misleading agentic descriptions in model catalog (#1013) (push) Failing after 0s
CI / changes (push) Has been cancelled
PR Quality Checks / changes (push) Has been cancelled
CI / Linux CPU (push) Has been cancelled
CI / Linux client-auto boot test (push) Has been cancelled
CI / HuggingFace download smoke (push) Has been cancelled
CI / inference_smoke_tests (push) Has been cancelled
CI / agent_live_smokes (push) Has been cancelled
CI / two_node_client_serving_smoke (push) Has been cancelled
CI / rust_sdk_smoke (push) Has been cancelled
CI / kotlin_sdk_smoke (push) Has been cancelled
CI / swift_sdk_smoke (push) Has been cancelled
CI / macos (push) Has been cancelled
CI / Linux CUDA slim (push) Has been cancelled
CI / Linux ROCm slim (push) Has been cancelled
CI / Linux Vulkan (push) Has been cancelled
CI / Windows CPU (push) Has been cancelled
CI / Windows CUDA (push) Has been cancelled
CI / Windows ROCm (push) Has been cancelled
CI / Windows Vulkan (push) Has been cancelled
PR Quality Checks / rust-fmt (push) Has been cancelled
PR Quality Checks / ui-quality (push) Has been cancelled
PR Quality Checks / cli-docs-sync (push) Has been cancelled
PR Quality Checks / summary (push) Has been cancelled
Fix misleading agentic descriptions in model catalog (#1013)
The catalog described sub-4B models (Llama-3.2-3B, Hermes-2-Pro) as strong
tool-calling / goose defaults, but they fall apart in real agentic harnesses
(goose, Fizz): wrong paths, repeated failing calls, hallucinated tools, and
leaked raw tool-call text. Meanwhile the Gemma 4 family survives the same
harness cleanly and stays snappy.

Update descriptions to reflect observed harness behavior: temper the sub-4B
agentic claims and mark Gemma-4-E4B as a good non-reasoning mini-class agent
default. Descriptions are mirrored in both embedded catalogs.

Co-authored-by: Michael Neale <14976+michaelneale@users.noreply.github.com>
2026-07-17 12:55:38 +10:00
.agents/skills feat: add plugin web UI extensions (#991) 2026-07-16 16:05:03 -04:00
.cargo mockup: Reserves high-fidelity UI mockup (#560) 2026-05-20 17:17:42 -04:00
.github Fix release version staging (#996) 2026-07-15 08:45:16 +10:00
.skills Consolidate agent skills and fix stale docs (Windows deploy, repo map, design docs) (#836) 2026-06-12 18:44:36 +10:00
.well-known fix(config): fundation configuration setup 2026-06-12 03:08:48 -04:00
ci fly automation of the web app (#928) 2026-06-30 14:16:52 +10:00
contrib/windows Add split readiness doctor (#723) 2026-05-29 10:44:16 +10:00
crates Fix misleading agentic descriptions in model catalog (#1013) 2026-07-17 12:55:38 +10:00
dist Load startup models from config.toml 2026-04-06 10:08:01 +10:00
docker feat: native rust SDK for rust consumers. (#736) 2026-06-03 12:39:19 +10:00
docs feat: add plugin web UI extensions (#991) 2026-07-16 16:05:03 -04:00
evals clarify skippy prompt cache reuse (#856) 2026-06-15 21:43:37 +10:00
fly fly automation of the web app (#928) 2026-06-30 14:16:52 +10:00
scripts Fix release version staging (#996) 2026-07-15 08:45:16 +10:00
sdk chore: synchronize release version management (#934) 2026-06-30 22:42:09 -04:00
third_party/llama.cpp Update llama.cpp patch queue (#1014) 2026-07-17 10:20:45 +10:00
tools Fix release version staging (#996) 2026-07-15 08:45:16 +10:00
website feat: add plugin web UI extensions (#991) 2026-07-16 16:05:03 -04:00
.dockerignore docker: multi-stage images for most architectures, CI, and fly rewrite (#220) 2026-04-12 16:17:59 -04:00
.gitignore Add meshllm.cloud website, catalog viewer, and onboarding docs (#806) 2026-06-10 05:18:25 -04:00
.nvmrc Upgrade GitHub Actions and enforce Node 24 2026-03-30 10:35:30 +11:00
AGENTS.md update guides for dev loop (#895) 2026-06-22 14:37:34 +10:00
Cargo.lock Add SkippyBench external eval pack (#865) 2026-07-15 06:06:23 +10:00
Cargo.toml feature: add benchmark 'tune' option (#948) 2026-07-07 02:33:19 -04:00
clippy.toml chore(code-quality): Set max 200 line limit for long methods (#595) 2026-05-19 18:22:47 -04:00
CONTRIBUTING.md Add meshllm.cloud website, catalog viewer, and onboarding docs (#806) 2026-06-10 05:18:25 -04:00
install.ps1 feature: Refactor setup-first installer flow (#933) 2026-07-10 07:13:20 -04:00
install.sh Validate installer bundles before replacing binaries (#957) 2026-07-11 10:11:00 +10:00
Justfile feat: add plugin web UI extensions (#991) 2026-07-16 16:05:03 -04:00
LICENSE Add Apache 2.0 license 2026-04-07 10:52:27 +10:00
mesh.png chore(docs): update docs to match planned updates 2026-05-12 17:52:17 -04:00
package-lock.json Add meshllm.cloud website, catalog viewer, and onboarding docs (#806) 2026-06-10 05:18:25 -04:00
Package.swift feat: native rust SDK for rust consumers. (#736) 2026-06-03 12:39:19 +10:00
playwright.config.js mesh-llm crate decomposition (#459) 2026-05-08 12:11:14 +10:00
README.md feature: Refactor setup-first installer flow (#933) 2026-07-10 07:13:20 -04:00
RELEASE.md Rely on cargo publish for crate status (#935) 2026-07-01 09:57:01 +10:00
ROADMAP.md Upgrade demanded local models during reconciliation (#754) 2026-05-30 15:00:35 -07:00
SKIPPY_PROTOCOL_TODO.md actually have done these (#903) 2026-06-24 11:09:26 +10:00

Mesh LLM

Mesh LLM web console

Mesh LLM pools GPUs and memory across machines and exposes the result as one OpenAI-compatible API at http://localhost:9337/v1. Start one node, add more nodes later, and let the mesh decide whether a model runs locally, routes to a peer, or uses Skippy stage splits for models that are too large for one box.

Quick start

Install the latest release executable:

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

On Windows, use PowerShell:

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

Finish setup:

mesh-llm setup

On Windows PowerShell, use mesh-llm.exe setup.

To remove an executable install later, preview the cleanup first:

mesh-llm uninstall --dry-run
mesh-llm uninstall --yes

Uninstall preserves ~/.mesh-llm configuration and identity data unless you explicitly pass --purge-config.

Join the public mesh and start serving:

mesh-llm serve --auto

That command chooses a backend flavor, downloads a suitable model if needed, joins the best discovered public mesh, starts the local API on port 9337, and starts the web console on port 3131.

Check available models:

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

Send an OpenAI-compatible request:

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"}]}'

For server deployments, add --headless to hide the web UI while keeping the management API on the --console port:

mesh-llm serve --auto --headless

Pick the workflow you need

Goal Command Full guide
Try the public mesh mesh-llm serve --auto docs/MESHES.md
Start a private mesh mesh-llm serve --model Qwen3-8B-Q4_K_M docs/MESHES.md
Publish your own mesh mesh-llm serve --model Qwen3-8B-Q4_K_M --publish docs/MESHES.md
Join by invite token mesh-llm serve --join <token> docs/MESHES.md
Run an API-only client mesh-llm client --auto docs/MESHES.md
Run a big model with splits mesh-llm serve --model hf://meshllm/<repo>@<rev> --split docs/SKIPPY_SPLITS.md
Attach a Flash-MoE SSD backend mesh-llm serve with [[plugin]] name = "flash-moe" docs/plugins/flash-moe.md
Fan out one prompt to every model in the mesh curl ... -d '{"model":"mesh", ...}' docs/design/MOA_GATEWAY.md
Use Goose, OpenCode, Claude Code, or Pi mesh-llm goose, mesh-llm opencode, mesh-llm claude, mesh-llm pi docs/AGENTS.md
Build or contribute just build CONTRIBUTING.md

How the mesh works

  • Single-machine fit first. If one node can host the full model, it serves the model locally without stage traffic.
  • Mesh routing. Every node exposes the same /v1 API. Requests are routed by the model field to the peer that can serve that model.
  • Owner-control plane. Operator config and inventory actions use an additive mesh-llm-control/1 lane with explicit endpoint bootstrap, while public mesh join, gossip, routing, and inference stay on the public mesh plane for mixed-version compatibility.
  • Skippy stage splits. Large dense models can load as package-backed layer stages. The coordinator plans contiguous layer ranges, starts downstream stages first, waits for readiness, then publishes the stage-0 route.
  • Layer packages. Package repositories contain model-package.json plus GGUF fragments so peers fetch only the pieces needed for their assigned stage.
  • Public discovery. Published meshes advertise through Nostr discovery; private meshes stay invite-token based.

For a deeper operator guide, see docs/USAGE.md. For every CLI command and switch, see docs/CLI.md.

Mixture-of-Agents (model: "mesh") — experimental

⚠️ Experimental. The MoA gateway is new in this release. Behavior, routing heuristics, error shapes, and tuning knobs may change between versions while we tune it. Treat model: "mesh" as a preview feature rather than a stable production path; use a specific model id when you need stable semantics.

Send a request with "model": "mesh" and the proxy fans it out to every model available in the mesh in parallel, arbitrates their responses with deterministic logic, and returns one OpenAI-compatible reply. The arbiter runs in code (not as another model call) and only escalates to a reducer LLM on genuine conflict. Tool calls flow through the full pipeline.

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?"}]}'

Requires at least two distinct models in the mesh. See docs/design/MOA_GATEWAY.md for the architecture, arbitration rules, and tuning knobs.

Supported model families

Mesh LLM's Skippy runtime tracks llama.cpp family parity with reviewed GGUF representatives. The current reviewed support set covers 72 P0/P1 family rows, with 89 certified rows in the full parity inventory, including Qwen, Llama, Gemma, Mistral, DeepSeek, GLM, MiniMax, Phi, Granite, Hunyuan, EXAONE, Cohere, Falcon, RWKV, and many others.

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. DeepSeek3 and EXAONE-MoE use package-backed stages because the full GGUFs are too large for the cheap local baseline.

See docs/skippy/FAMILY_STATUS.md for the full artifact, split, wire dtype, cache policy, and exception matrix. See docs/skippy/LLAMA_PARITY.md for the remaining llama.cpp parity queue.

Install and build notes

Tagged releases publish macOS bundles plus Linux CPU, Linux ARM64 CPU, Linux ARM64 CUDA, Linux CUDA, Linux CUDA Blackwell, Linux ROCm, Linux Vulkan, Windows CPU, Windows CUDA, Windows ROCm, and Windows Vulkan bundles. Metal is macOS-only. The Linux ARM64 CPU artifact is mesh-llm-aarch64-unknown-linux-gnu.tar.gz; the Linux ARM64 CUDA artifact is mesh-llm-aarch64-unknown-linux-gnu-cuda.tar.gz. In install and release contexts, arm64 and aarch64 mean the same 64-bit ARM target.

Build from source with just:

git clone https://github.com/Mesh-LLM/mesh-llm
cd mesh-llm
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.

The shipped mesh-llm executable uses embedded release attestation for provenance and admission hardening only. It does not apply to SDK, XCFramework, or other native artifacts, and it is not a runtime integrity proof. Verify a stamped packaged executable with cargo run -p xtask -- release-attestation inspect --binary <path-to-packaged-mesh-llm> --public-key-file <release-signing-public-key.json>. A packaged release binary reports valid, an unstamped local or dev build reports missing, and a binary that changed after packaging reports invalid. Bare inspect --binary ... is only enough to classify an unstamped binary as missing; stamped binaries require --public-key-file and otherwise report invalid with an explicit error. Post-download mutation can flip a stamped binary to invalid, but default startup still allows it.

Documentation hub

Doc Use it for
docs/MESHES.md Private meshes, public discovery, publishing, invite tokens, API-only clients
docs/SKIPPY_SPLITS.md Running big models with package-backed Skippy stage splits
docs/LAYER_PACKAGE_REPOS.md Contributing and publishing layer package repositories
docs/AGENTS.md Goose, Claude Code, OpenCode, Pi, curl, and blackboard
docs/EXO_COMPARISON.md Balanced comparison with Exo
docs/CLI.md Command reference and JSON automation
docs/USAGE.md Longer operational usage guide, runtime control, owner-control operator flows
docs/design/TESTING.md Testing playbook, mixed-version QA, remote deploy checks
docs/plugins/flash-moe.md Optional Flash-MoE SSD expert streaming backend setup
docs/skippy/FAMILY_STATUS.md Certified Skippy model-family status
docs/specs/layer-package-repos.md Manifest and artifact format spec
docs/specs/mesh-setup-installer.md Installer/bootstrap and setup command behavior spec

Community

Mesh LLM is experimental distributed-systems software. When you report bugs, include the command you ran, platform/backend flavor, /api/status output if available, and whether the node was private, published, or joined with --auto.