latest stable 1.7.0 · Apache-2.0

Own YourInference

All local. All yours.

Chat, speech, images, embeddings — every modality, served from one OpenAI-compatible API on your Strix Halo box or any Linux machine.

Read the docs →★ Star on GitHubApache-2.0 · Linux + systemd
hal0-api:8080 ready·all slots up·GTT 9.2 / 96 GB·probe strix-halo
host strix-halo-01·128 GB UMA · iGPU + XDNA SSE connected
agent
qwen3.8-27b-ud-q4-k-xl
serving
24 tok/s
embed
nomic-embed-text-v2-moe-Q4_K_M
serving
116 tok/s
rerank
bge-reranker-v2-m3-q4_k_m
ready
warm
stt
whisper-v3:turbo (NPU)
idle
:8083
tts
kokoro-82M-v1.0
idle
:8084
img
sdxl-turbo
ready
warm
Unified memory (GTT)9.2 / 96 GB carveout · 128 GB DIMM
agent 6.5Gembed 2.3Grerank 0.4Gkernel + ZFS ARC 3.8G
dispatch p50
174ms
install.sh
Linux x86_64 · Python ≥3.12
$curl -fsSL https://hal0.dev/install.sh | sudo bash
/ runner images

Six default runners,
one /v1/* surface.

Chat, embeddings, rerank, speech both ways and image generation, each served by a runner image on the accelerator that suits it, behind one OpenAI-compatible API. Every tag is immutable and hardware-gated. Six runners ship by default; Qwen3 TTS and CUDA are opt-in.

Runner
What it runs
Hardware
Endpoints
Standardllama.cpp b11596
llama.cpp for AMD GPUs, on ROCm or Vulkan. The default on AMD; runs plain GGUF models.
ROCm (default) · Vulkan
/v1/chat/v1/embeddings/v1/rerank
CPUllama.cpp b11596
llama.cpp on the processor, no GPU needed. A slow fallback for boxes without a supported GPU.
CPU
/v1/chat/v1/embeddings
NPU (FastFlowLM)FastFlowLM 0.9.44
Runs supported models on the AMD XDNA 2 NPU, leaving the GPU free.
AMD XDNA NPU (opt-in)
/v1/chat/v1/embeddings/v1/audio/transcriptions
Kokoro speechpinned 0.4.9
Text-to-speech on the CPU. Works on any box, no GPU needed.
CPU
/v1/audio/speech
Moonshine transcriptionpinned 20251121
Speech-to-text on the CPU. Works on any box, no GPU or NPU needed.
CPU
/v1/audio/transcriptions
ComfyUIpinned 0.28.0
Image and video generation on the GPU (ROCm).
ROCm
/v1/images/generations
Qwen3 TTSoptional · pinned 0.1.1
Higher-quality multilingual text-to-speech on the GPU (ROCm). Opt-in; a large download (about 10 GB).
ROCm
/v1/audio/speech
NVIDIA CUDAoptional · llama.cpp b11580
llama.cpp for NVIDIA GPUs. Pick it on a box with an NVIDIA card.
CUDA (experimental)
/v1/chat/v1/embeddings
/ what's in the box

More than models.
A whole AI stack.

Agents, profiles, memory, voice and image generation ship in the box and come up wired to each other. Not a model runner you then spend a weekend assembling a platform around.

agents
An agent and an operator on board

Hermes installs itself on first run, prewired to the local /v1 API, with your own model screening its risky shell commands. hal0-brain is a resident operator you ask about the box in plain language. Both run as contained units on the box.

profiles
Model = facts, profile = tune, slot = placement

A model records facts about its file. A profile holds every tune: flags, context, thinking, vision, MTP and the runtime. A slot holds placement. One model runs several ways through several profiles, and the launch command is shown layer by layer.

memory
Memory that never leaves the box

A local Hindsight engine bound to loopback holds it, embeddings included. A write lands or is refused up front with a reason, never dropped quietly, and you set the extraction limits in Settings. Destructive operations write an attributable audit row.

voice
Speech in and out, device-keyed

One stt slot and one tts slot, each resolving by device. Moonshine on the CPU or FastFlowLM on the XDNA NPU listens; Kokoro on the CPU or the optional Qwen3 TTS runner on the GPU speaks. Switch the engine, not the plumbing.

images
Image generation on the same API

POST /v1/images/generations runs SDXL, SD 1.5 or Flux through a ComfyUI engine. Generating flips the iGPU into exclusive image mode and back, so chat and images share one accelerator without fighting over it.

prewired
Wired up before you log in

One command brings up the API, a coherent set of slots, ComfyUI, the agent and Open WebUI on :3001. Open WebUI arrives wired for chat, voice, documents (RAG on hal0 embeddings) and images through ComfyUI.

/ what people run it for

One box,
three day jobs.

The same install serves all three at once — the slots share the accelerator instead of taking turns with it.

/ local coding stack

Point your editor at your own box

Aim any OpenAI-compatible client at :8080/v1 — chat, completions, and a dedicated coder slot. Your code never leaves the LAN, and there's no per-token bill.

/ private knowledge & RAG

Retrieval grounded on your data

Embeddings, reranking, Open WebUI document uploads that go through RAG on hal0 embeddings, and a bundled agent with memory and MCP tools. Retrieval runs on your hardware, not someone else's server.

/ voice & image lab

Speech and images, one control plane

Transcription, text-to-speech and local image generation behind the same API. STT runs on the XDNA NPU or the CPU, TTS on the CPU or the GPU, and ComfyUI on the iGPU, switched cleanly so they share the box.

first-party sweep

what this box does

all 26 models · sweep 2026-06-19 →
169.8
fastest decode · tok/s
26
models measured
6248
peak prefill · tok/s
modelparamsdecode ▼prefillgb
qwen3.5-0.8b0.8B169.862480.6
chadrock3-6-35b-uncensored-mtp-strix-lean35B MoE102.189019
chadrock-35b-ace-saber35B-A3B100.590319
qwopus3-5-4b-coder-mtp-q6-k4B85.08893.6
qwen3.6-35b-a3b-crown-halo-mtp-dynamic35B-A3B84.487322.6
/ hardware

Strix Halo native.
Not Strix-Halo-only.

The probe is UMA-aware on Strix Halo and falls back to portable parsers on every other host. The dashboard only labels memory "unified" when it actually is. Linux + systemd is the only hard requirement.

reference deployment
Ryzen AI Max+ 395
"Strix Halo" iGPU + XDNA NPU + 128 GB LPDDR5X-8000 unified memory
128GB
unified · BIOS-tunable to ~96 GB GPU
96K
default context, Qwen3.8 27B
All published perf numbers come from this box. Q4 70B fits with room to spare; Q4 MoE 100B+ with a 17–22B active path becomes feasible.
first-class
Ryzen AI Max 385 / 390
Strix Halo with 64 GB unified
64GB
unified memory
~70B
Q4 ceiling, shorter context
Same install path. Every small + mid tier fits; 70B Q4 works with tighter context windows.
experimental
NVIDIA RTX 30 / 40 / 50
10–32 GB dedicated VRAM · CUDA runner, optional tier
32GB
RTX 5090 VRAM ceiling
~30B
Q4 comfortable
The CUDA runner is opt-in and used when the NVIDIA container toolkit is present. It is not in the release gate yet, so treat it as experimental. Same slot lifecycle, dedicated VRAM instead of UMA.
supported
AMD Radeon RX 7000
16–24 GB discrete · Standard runner on ROCm or Vulkan
24GB
7900 XTX VRAM
ROCm
· Vulkan
Discrete AMD path on the same Standard runner and hal0-slot@<name> lifecycle as Strix Halo, on either lane.
fallback
CPU-only x86_64
CPU runner · llama.cpp on the processor
0.5–4B
practical model size
0GPU
needed for Kokoro + Moonshine
A real CPU-only llama.cpp runner ships, so a box with no supported GPU installs and serves. Fine for small models, speech and smoke tests, not the headline experience.
supported
Proxmox LXC
privileged Ubuntu LXC · iGPU + XDNA passthrough
1script
quick-start builds the LXC
segmented
host-pressure overlay
The quick-start script builds a privileged LXC with GPU and NPU passthrough already wired. Add a read-only PVEAuditor token in Settings and the memory bar shows other tenants and ZFS ARC pressure.
/ vs. the alternatives

The orchestration layer
around your inference engine.

Slots survive hal0-api restarts. Embeddings, rerank, STT, TTS, and image gen all sit behind the same/v1/* surface. UMA-aware hardware probe and slot-fit warnings are first-class, not a slash command in a chat window.

hal0 (this)
ollama
LM Studio
OpenAI cloud
OpenAI-compatible /v1/*
chat · embed · rerank · STT · TTS · img
chat · embed
chat · embed
chat · embed · STT · TTS · img
Concurrent slots
as memory fits
one at a time
one at a time
fully concurrent
Slot lifecycle state machine
typed, atomic, SSE-streamed
no
no
—
UMA-aware hardware probe
Strix Halo · NPU · platform-aware
CPU / GPU only
CPU / GPU only
—
XDNA NPU support
first-class via FLM
no
no
—
Tune portability
named profiles you fork, export, import
per-model flags
GUI presets
n/a
Dispatcher with upstreams
OpenRouter · Anthropic · OpenAI · custom
no
no
—
Signed updates + component convergence
signed, converges every component, one-flag rollback
no
auto-update
—
Headless / Linux-first
systemd-required, headless
cross-platform
GUI required
cloud
Your data, your hardware
yes
yes
yes
no
Cost per million tokens
$0 + electricity
$0 + electricity
$0 + electricity
$0.50 – $60

Competitor capabilities reflect each project's published docs as of October 2026 and move fast — treat this as a snapshot, not a live scorecard.

/ the console

Slots, profiles and memory,
one console.

Slots, models, profiles, image generation, agent memory, an agent task board, MCP and logs: every surface in one React operator console. SSE-backed, dark by default. Real screenshots from a live hal0 instance.

hal0 dashboard overview with slots, throughput and live service health
Slots view with a card per slot, each showing its model, profile and context
Slots: each card carries a model picker, a profile picker and a context chip, so you see what runs where and swap it in place.
Profiles tab listing the seed templates with their context, thinking, vision, MTP, runner and flags
Profiles: the whole tune (context, thinking, vision, MTP, flags, runtime) is a named object a slot picks. Seed templates ship with hal0; duplicate one to make it yours.
Agent memory rendered as a navigable semantic and temporal knowledge graph
Graph memory: facts become a navigable semantic and temporal graph, shared or private per agent.

Plus the Hermes agent, the Operator Board kanban wired to it, the Runner Images page and the Services page. See what's newfor recent changes.

/ agents, tools + memory

Agents that
live on the box.

Hermes installs and bootstraps itself on first run, confined by its own systemd unit and prewired to the local /v1 API, hal0's MCP servers and memory. Reach it from Telegram or Discord; it chains tool calls unattended for hours and writes each run back to memory.

  • Self-bootstraps: env probe → model wiring → MCP memory → persona.
  • [email protected]: NoNewPrivileges, ProtectSystem=strict, a pinned ReadWritePaths set, and the terminal off by default.
  • Smart command approvals: your local hal0/agent model pre-screens risky shell commands and falls back to asking you. Manual mode asks every time.
  • Gated MCP tools wait in an approval queue for a human.
Agents & memory →hover to tilt · click to flip
Hermes — the bundled hal0 agent
Hermes
qwen3.8-27b
ctx0/64K
remote control · self-improving · orchestration
READYtap · abilities
Hermes · abilities
Ghost Relay40pwr
Reach it from any Telegram or Discord thread.
Engram60pwr
Writes each run back to memory — never relearns it.
Deep Run90pwr
Chains tool calls unattended for hours.
Skills
voice · ttsspeech · sttimage-genvisionembeddings
logspersona
Run agents →
hal0-brain

A resident operator, not a chatbot

hal0's own small always-on model, wired to hal0's admin catalog and reachable from the dashboard's Agent Chat or hal0 chat --brain on a headless box. Ask it what's loaded, what the box is doing, what's eating the memory pool. It ships read-only: it reads and explains out of the box, and one config line lets it act.

its own small model · no dependency on Hermes
mcp

The platform is the tool catalog

Two Streamable-HTTP servers mount onto the API,/mcp/admin and /mcp/memory, so any MCP client can drive the box: models, slots, profiles, stacks, memory, bench, telemetry and the updater. A validator keeps the gating tiers from overlapping, so the catalog cannot drift quietly.

destructive calls wait in an approval queue for a human
memory

Recall that reaches no one

Memory runs on a local Hindsight engine bound to loopback, local embeddings included. Writes go to a shared namespace by default or to an agent's private one; recall merges, ranks and fits the result to a token budget.

26 memory tools · destructive ops write an attributable audit row

Key auth is optional and off by default, the trusted-LAN posture. Once you set an admin key, off-box callers need it for admin routes. hal0 has no TLS of its own: put your reverse proxy in front and allow its origin with hal0 network public-url set. Updates are signed, the agent runs in a contained unit, and destructive memory operations are audited.

forum.hal0.dev

what users are talking about

open the forum ↗
community profiles

optimized model & hardware recipes from the community

all profiles →
learn

latest from the blog

all posts →
/ get hal0

Put the whole stack
on your own box.

One command on a fresh Linux box brings up the API, the slots, voice, image gen, and the agent. Apache-2.0, signed releases, no telemetry.

install.sh
Linux x86_64 · Python ≥3.12
$curl -fsSL https://hal0.dev/install.sh | sudo bash
Apache-2.0Linux + systemdno telemetry by defaultsigned releases