For developers

Serve it. Debug it. Measure it.

Every model OrionPod runs is a local server with an OpenAI- and Anthropic-compatible API. Drive it from a terminal, put your coding agent on it, and see exactly what the model was sent and what it said.

Instances

One model, one port. As many as fit.

Every model runs as its own server. Start instances from the app or a terminal, put them all behind one gateway, and watch each one work.

Live demo Click a client to send a request. Stop an instance and the gateway starts it again when it's needed.
Gateway :8400 routes by model
qwen3-coder :8420 idle · terminal
REQUESTS318
TOK/S41.2
MEMORY~18.4 GB
UPTIME-
llama-3.2-1b :8421 idle · app
REQUESTS42
TOK/S96.5
MEMORY~1.3 GB
UPTIME-
nomic-embed :8422 idle · gateway
REQUESTS127
TOK/S-
MEMORY~312 MB
UPTIME-

One list for everything

The Instances page shows every running model server, whether the app or a terminal started it: health, port, uptime, requests, speed, memory and logs.

One port for every model

The gateway on :8400 routes each request by its model, starts an instance when one is needed and stops idle ones.

Keeps serving

Quit the app and choose whether instances stop or keep serving. An engine that crashes is restarted on its own.

On your network

Share an instance with other devices: it announces itself over the LAN, needs an API key and can serve HTTPS. No account involved.

Tune the engine

Context length, KV-cache precision, flash attention, speculative decoding, MoE offload and GPU layers, per instance, per model or as defaults.

Several requests at once

An instance serves requests in parallel and reuses the cached prompt across turns, so agents and other clients don't queue behind each other.

Command line

Everything the app does, from a terminal

The orionpod command ships inside the app. Pull a model, serve it, point an agent at it, and see what's running.

Models
Run
Monitor
orionpod
$ orionpod serve --model qwen3-coder
OrionPod serving on http://127.0.0.1:8420
  OpenAI base URL:    http://127.0.0.1:8420/v1
  Anthropic base URL: http://127.0.0.1:8420
  Model:              qwen3-coder (loading)
  Metrics:            http://127.0.0.1:8420/metrics
  Log:                ~/.orionpod/logs/instances/serve-48213.log
Press Ctrl-C to stop.

Example output. Speeds and sizes depend on your model and hardware.

Already installed

It comes with the app. Instances → Install command line tool puts orionpod on your PATH, once.

Same instances, both ways

What you start in a terminal shows up in the app, and the other way round. orionpod stop stops one by port, pid or model.

And more

list, rm, doctor, lan, requests, network, mcp and plugins, with --json where a script would want it.

Agents & API

Works with the tools you already use

Every instance speaks the OpenAI and Anthropic APIs. Change one base URL and your coding agent, SDK or script runs on a model on your machine.

Coding agents on local models

One command starts the agent wired to a local instance, and starts one sized for agents if none is running.

Claude Code
$ orionpod launch claude
Codex
$ orionpod launch codex
OpenCode
$ orionpod launch opencode

Is this model up to it?

orionpod check
Chat
Streaming
Tool call
Tool result round trip
JSON schema output
Anthropic Messages + tools
OpenAI Responses
Long-context recall

Eight checks tell you whether a model can do agent work before you hand it your repo. Results show as a badge on the model.

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8420/v1",
    api_key="unused",
)

reply = client.chat.completions.create(
    model="llama-3.2-1b",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(reply.choices[0].message.content)
POST/v1/chat/completions POST/v1/responses POST/v1/messages POST/v1/completions POST/v1/embeddings POST/v1/rerank POST/v1/messages/count_tokens GET/v1/models GET/metrics
Tool calling JSON-schema output Vision input Streaming Parallel requests Prompt caching across turns
Request inspector

See what the model actually saw

Every request an instance serves is on record, with its timings, tokens and cache hits. Open one to read the prompt exactly as the model got it, and how sure it was of every token.

Requests · qwen3-coder :8420 recording
IDROUTECODETIMETOK/S
12 /v1/messages 200 2.31 s 40.8
11 /v1/messages 200 1.12 s 41.6
10 /v1/chat/completions 200 0.48 s 42.3
9 /v1/responses 200 3.90 s 39.7
8 /v1/chat/completions 200 0.91 s 41.1
Kept in memory on your machine. Also orionpod requests 8420
Next release
Token probabilities · hover a token
The capital of Australia is Canberra, not Sydney.
perplexity 1.24 least certain " not" 44% stopped by end of sequence
sure less sure a coin toss

Every request, on record

Route, status, duration, first-token time, tokens, speed, cache hits and bodies. Search, filter and sort them.

Metrics and traces

Prometheus /metrics on every instance, shown as searchable cards in the app, and optional OpenTelemetry traces.

Logs you can read

Live instance and engine logs, colour-coded by level and source, with search, filters and sorting.

Replay and compare Next release

Send a request again, to this instance or another model, and see both side by side. Save real traffic as a session to replay later.

Model lab Next release

Change it. Measure it. Compare it.

Make a smaller quant of a model, measure what it cost and put the results side by side, all with llama.cpp's own tools. On macOS first.

Jobs

one at a time, in order
quantize qwen3-f16 → Q4_K_M Running
129 / 339 tensors then compares with the source
sensitivity qwen3-f16 · notes.txt Queued
perplexity qwen3-q8 · notes.txt 6.41
$ orionpod jobs quantize qwen3-f16 Q4_K_M --compare notes.txt

Jobs check the model fits in memory and on disk first, show their progress, wait their turn and keep running if you close the app. Start them from the Jobs page or any terminal.

Compare

qwen3-f16qwen3-q8qwen3-q4
Size15.2 GB8.1 GB4.7 GB
Bits per weight16.008.504.92
Generate18.4 tok/s31.0 tok/s44.6 tok/s
Perplexity6.386.416.59
KL divergencebase0.00210.0312
Same top tokenbase99.1%94.6%
Agent checks8 / 88 / 87 / 8

Each model's report card, side by side, with the best value in every row marked. Charts follow speed, perplexity and drift across engine updates, and it all exports as Markdown or JSON.

Example data.

Quantize

From Q8_0 down to IQ1_S, with an importance matrix from your own text if you like. The quant is saved as a new model that remembers what it was made from.

Measure

Perplexity on your own text, and KL divergence to see how far a quant drifts from its base model, token by token.

Inspect and edit

Read any GGUF file's header, diff two files and fix a model's metadata without touching its weights.

Adapters, live

Load LoRA adapters and control vectors with an instance, and change an adapter's scale while it runs.

Open Source

Built on an open core

The agent engine inside OrionPod is now its own project. Orion Agent Harness is a backend-agnostic agent harness for local LLMs so anyone can build on it.

orion-core
MIT Rust 1.95+ Backend-agnostic

Bring your own model runtime — llama.cpp, MLX, a cloud API, anything — and orion-core handles everything above it: the conversation loop, context management and token budgets, streaming events, chat templates, and an automatic tool-execution loop.

$ cargo add orion-core
Pluggable backends
Context management
Streaming events
Chat templates
Tool calling
Pin & summarize

Questions

Serving and building with OrionPod

Do I need the app open to serve models?

No. The orionpod command ships with the app, and orionpod serve --model <name> starts an instance from any terminal. Instances the app started can keep serving after you quit it, and everything running shows up on the Instances page and in orionpod ps, whoever started it.

Can I use it with Claude Code, Codex or OpenCode?

Yes. Every instance speaks the OpenAI and Anthropic APIs, so orionpod launch claude (or codex, opencode) starts the agent wired to a local model. orionpod check tests a model on tool calls, JSON output and long context first, so you know whether it is up to agent work.

Can other devices on my network use my models?

Yes. Bind an instance to the network and it announces itself to other OrionPod apps nearby, with no account involved. An instance reachable beyond your own machine needs an API key before it starts, and HTTPS is available with your own certificate.