local-first coding router

Run the easy work free on your own GPU. Pay only for the hard parts.

promptrouter scores every coding task with a small local judge, keeps the tasks it rates easy on hardware you already own, and reaches for a cloud model only when the score crosses a threshold you set.

93%
judge agreement
1
static binary
~0.3s
warm judge call
route live
how it works

Judge, then route.

Three moving parts, one YAML file. The judge is small and local, so scoring a task adds no cloud cost.

01 / judge

A local judge scores it

A small model on Ollama scores each task on difficulty, typically in about a third of a second once it is warm. The scoring runs on your own machine, so it adds no cloud cost.

02 / route

Levels are chains you define

Score mode lets you set your own 0-100 thresholds and name each level; tier mode gives three fixed buckets. Either way each level is an ordered engine chain with fallbacks. You own the mapping.

03 / engine

Easy stays home, hard goes out

Tasks that score below your threshold run on your local model with no cloud bill. Only the ones above it reach your cloud provider. route --stats shows your actual split.

install

One static binary, no runtime.

Grab it however you like. Packages are built on every tagged release.

curl
Arch
Debian / Ubuntu
Fedora
NixOS
source
# drops the binary on your PATH
curl -fsSL https://raw.githubusercontent.com/taynotfound/promptrouter/main/install.sh | bash
# build the package from the shipped PKGBUILD
git clone https://github.com/taynotfound/promptrouter
cd promptrouter/packaging/aur && makepkg -si
sudo dpkg -i promptrouter_*_amd64.deb
sudo rpm -i promptrouter_*_amd64.rpm
nix run github:taynotfound/promptrouter
go install github.com/taynotfound/promptrouter/cmd/route@latest
benchmarks

Measured, not claimed.

route bench runs the real judge over a labeled task set and reports how often it agreed with the labels, plus per-call latency. Nothing here is hand-waved. These are the author's numbers on an RTX 2070, built-in 15-task set, and you can reproduce them.

Judge modelAccuracyLatencyNote
qwen2.5:7b-instruct 93% 0.32s recommended default
qwen2.5:3b-instruct 67% 0.28s weak on hard tasks
qwen2.5:1.5b-instruct 60% 0.26s no faster, less accurate
llama3.2:1b 33% 0.34s worse than guessing
$ route bench judge: qwen2.5:7b-instruct mode: score task set: built-in (15 tasks) [ ok ] want EASY got EASY(25) 0.3s rename the variable userId to accountId [MISS] want HARD got EASY(25) 0.3s fix the off-by-one error in this for loop [ ok ] want HARD got HARD(50) 0.3s add retry with exponential backoff to thi [ ok ] want EXPERT got EXPERT(75) 0.3s prove this concurrent stack is linearizabl ... 15 tasks total accuracy: 14/15 (93%) judge avg: 0.32s per task per label: EASY 5/5, EXPERT 5/5, HARD 4/5
reading it right

What the number means

Accuracy is agreement with a hand-labeled set, not a measure of answer quality. It tells you the judge routes the way a human would, nothing more.

Smaller is not faster here. Below 7B the latency floor is inference warmup, not model size, so you lose accuracy for no real speed. 7B is the smallest judge that still routes reliably.

Bring your own tasks. route bench --set mine.json scores the judge on your workload, on your hardware.

setup & fit

One command to configure everything.

The wizard picks your models, stores any tokens locked down, and writes the config for you.

route init

Pick models, drop in tokens

# write a locked-down config $ route init Local Ollama model? qwen3-coder:30b Judge model? qwen2.5:7b-instruct Cloud engine? openrouter API key? saved 0600 to secrets.env ok wrote models.yaml $ route doctor ok ollama reachable ok network online
where it fits

The local tier others skip

You run local models. If you have Ollama and a GPU, promptrouter keeps the tasks it scores easy on your own machine and only spends money when a task clears the threshold you set.

Local first, by default. Most routers choose between cloud providers. promptrouter puts your own machine at the front of the chain, so the free path is the default and the cloud is the exception.

config generator

Build your models.yaml without touching a wizard.

An interactive builder: pick a routing mode, wire local and cloud engines into fallback chains, choose a provider preset for the OpenAI-compatible kind, and copy or download a valid config. It runs entirely in your browser.

Open the config generator tier or score mode · five engine kinds · OpenAI, Groq, Together, vLLM and more · live YAML preview