What it costs
raunen is free and MIT-licensed. There is no account, no server and no telemetry, so there is nothing to bill you for. What can cost money is the model you point it at โ and the whole design is about letting that be nothing too.
raunen itself
ยฃ0Forever, for any use. MIT-licensed.
- every feature, no tiers
- no account, no sign-in
- no telemetry of any kind
- commercial use included
Local models
ยฃ0Ollama, LM Studio, llama.cpp, vLLM โ served from your own machine.
- unmetered, no rate limits
- nothing leaves the machine
- works offline
- costs electricity and RAM
Hosted models
providerBilled by whoever serves the model, on your own key. raunen never sees it.
- free tiers are used automatically
- your key, your bill, your limits
- mixes freely with local models
The short version. Install raunen, run Ollama, and the running total is zero. Everything below is about staying there while still having somewhere to escalate to when a conversation gets big.
Free is read from the endpoint, not from a list
Turning on free_fallback appends every model the providers report as free to the escalation ladder, roomiest first. On OpenRouter today that is 18 models, several with a 1M-token context โ so a local model that runs out of room can hand off to something far larger without a bill.
{ "auto_switch": true, "free_fallback": true }A model counts as free when both its prompt and completion prices are zero, read from the endpoint's own pricing rather than from a maintained list, so it stays current. Prices that cannot be reduced to a single number โ some models quote tiered pricing as an array โ are never assumed to be free.
Local models count as free too. Anything served from your own machine joins the ladder without needing pricing to say so.
Some endpoints have to be told
Most endpoints do not publish prices. OpenRouter does; Groq, Cerebras and NVIDIA simply do not โ and an unstated price cannot be assumed to be zero. For those, mark the provider free yourself:
"groq": { "base_url": "https://api.groq.com/openai/v1", "free": true }
Running out is a routing decision, not a failure
Free tiers refuse with 429 rather than a bill. raunen treats that as a signal to move to the next rung and retry, and remembers what failed so a rate-limited model is not tried again every turn.
| Failure | What it means | Response |
|---|---|---|
429 | throughput quota, clears on its own | cool down 30s, doubling to 15m |
402 | empty balance, waiting will not help | locked out for the session |
429 shared | the account's daily cap, not one model's | rest the whole provider 30m |
400/404 | a model name that will never exist | locked out for the session |
The distinctions are what keep a free setup usable. A daily cap belongs to the account rather than to one model, so recognising it from a single refusal turns eight doomed requests into one.
โ openrouter/nvidia/nemotron:free refused โ Rate limit exceeded: free-models-per-day. โ openrouter taken out of rotation โ its allowance is used up, retrying in 30m
The arrangement worth copying
Local by default, with one hosted rung for when a conversation genuinely outgrows it. Most turns cost nothing; the ones that cost something are the ones that needed the room.
{
"default": "ollama/qwen3.5-8k:latest",
"auto_switch": true,
"fallback": ["omniroute/auto/best-coding"]
}Nothing is lost in the handover โ the conversation carries across, so escalating does not mean starting again.
What you are charged for elsewhere
Every provider bills in context, which is why the status bar shows it. Two habits do more for a bill than any setting: /clear when a conversation is done, and letting sub-agents do the searching โ a task gets its own empty context and returns only its answer, so a long grep does not sit in the main conversation being re-sent every turn.
Delegating several at once costs no more than delegating them one after another โ the same tokens are spent either way โ but they run concurrently, so it costs a great deal less waiting.
Tool output is also cleaned before it is charged to the context โ ANSI codes, progress bars redrawn over themselves and repeated lines are stripped. On ordinary output that saves close to nothing; on noisy output it saves a lot. See the measured numbers, which are deliberately unflattering.