raunen

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

ยฃ0

Forever, for any use. MIT-licensed.

  • every feature, no tiers
  • no account, no sign-in
  • no telemetry of any kind
  • commercial use included

Local models

ยฃ0

Ollama, 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

provider

Billed 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.

config.json
{ "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:

config.json
  "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.

FailureWhat it meansResponse
429throughput quota, clears on its owncool down 30s, doubling to 15m
402empty balance, waiting will not helplocked out for the session
429 sharedthe account's daily cap, not one model'srest the whole provider 30m
400/404a model name that will never existlocked 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.

a free tier running out
โœ— 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.

config.json
{
  "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.