Free · open source
GPLv3, royalty-free or commercial — your choice$0forever
- Fit check before any download
- Local GGUF and cloud APIs, same controls
- OpenAI-compatible runa serve
Local-first AI CLI — fit-check a GGUF before you download it, run it locally via ggml / llama.cpp, or hit OpenAI and Anthropic.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pyrlyn/runa/releases/latest/download/runa-installer.sh | sh
runa has no published release yet, so the installer above works from the first GitHub release. Until then, build from source (see Install below).
See it run
$ runa fit hf:unsloth/Qwen3-30B-A3B-GGUF:Q4_K_M --ctx 16384 --kv q8_0 $ runa fit --recommend --use code $ runa fit --recommend --offline --top 5 $ runa run qwen "explain KV-cache quantization in one paragraph" $ runa chat qwen --tui $ runa serve --port 8080
Overview
runa is one CLI binary that runs AI models locally (GGUF via ggml / llama.cpp) or through the
OpenAI and Anthropic APIs. Thinking controls, structured output, tools and runa serve work the
same way on both sides.
Before you download a model, runa fit tells you whether it runs on this machine and how fast,
and the forecast calibrates to your device as you record runa bench runs. Release binaries are
portable CPU builds for macOS arm64, Linux x86_64 and Windows x86_64; Metal, Vulkan and CUDA
builds are extra artifacts. No telemetry.
runa is in development: the v0.1.0 tag has no GitHub release yet, so the installer and the Homebrew formula below work from the first release. Until then, build from source.
Features
runa fit gives a memory and speed forecast before any download, calibrated by real runa bench runs. runa fit --recommend ranks a curated catalog for your hardware, offline too.
Deep thinking (off / on / budget / effort), structured output and tools work the same way for GGUF models and for the OpenAI and Anthropic APIs.
Force an answer into a JSON Schema or a GBNF grammar; local models use llama.cpp grammar sampling, so the output always matches.
--mcp starts stdio MCP servers and the model calls them in a loop in run and chat; runa serve supports tool calling.
Audio and video through native mmproj, ASR (whisper.cpp) or the cloud; runa media probe|video|transcribe.
An OpenAI-compatible HTTP server (runa serve) and a local daemon socket for snappy run / chat; compute modes cpu / gpu / hybrid plus auto placement.
Shrinks toward a floor when idle, with a bounded pre-grow when a task is heavy.
Install
From a GitHub Release (portable CPU archives; Metal / Vulkan / CUDA are extra artifacts):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pyrlyn/runa/releases/latest/download/runa-installer.sh | sh
Or Homebrew from the formula on that Release:
brew install ./runa.rb
Host-tuned local build:
RUSTFLAGS='-C target-cpu=native' cargo build --release --features native
Fit-check a model before downloading it, and find the best catalog models for this machine:
runa fit hf:unsloth/Qwen3-30B-A3B-GGUF:Q4_K_M --ctx 16384 --kv q8_0
runa fit --recommend --use code
runa fit --recommend --offline --top 5
More examples below.
Usage examples
Run, chat, or serve an OpenAI-compatible HTTP API:
runa run qwen "explain KV-cache quantization in one paragraph"
runa chat qwen --tui
runa serve --port 8080
Calibrate speed predictions with a measured run:
runa bench qwen2.gguf --mode cpu --pp 512 --tg 128
runa fit qwen2.gguf --json
Cap reasoning tokens, or let the model call MCP tools:
runa run qwen3-8b.gguf "What is 2+2?" --think-budget 32 --max-tokens 48 --json
runa run qwen3 "What is the weather in Paris?" --mcp 'python3 weather_server.py'
Transcribe audio with whisper.cpp:
runa media transcribe --model base --lang auto clip.wav
Links
You can use runa under any of the following licenses, at your choice:
Pricing
Pro is a placeholder$0forever
$9 / moper seat
Placeholder — the Pro waitlist is not open yet.
Free and open source. Star it, file an issue, or send a pull request.