Any endpoint
Adding a provider is a base URL, not adapter code โ they all speak the same wire format.
One Go binary, no runtime, no server. Point it at Ollama, LM Studio, llama.cpp, vLLM, OpenRouter โ anything that speaks the OpenAI /v1/chat/completions format. It reads and writes files, runs commands, and keeps the conversation where you can see it.
curl -fsSL https://raw.githubusercontent.com/devjasha/raunen/main/install.sh | shmacOS and Linux, Intel and ARM ยท verified against the release checksums ยท about 3 MB ยท free to run
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 10:42 โ what does main.go do? โบ read main.go โณ 84 lines It parses flags, loads the config, and starts either the TUI or a single one-shot turn. โข --continue resumes the last session for the directory โข a prompt as an argument skips the UI entirely โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ โบ โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ auto ยท โ main ยท qwen3.5-8k:latest ยท โโโโโโโโโโ 22% ยท 1.8k
An agent that works in the directory you start it in. Tools are rooted there, so raunen in a project is what gives it something to read. There is no separate window and no web UI โ a running agent has nowhere else to put things.
Adding a provider is a base URL, not adapter code โ they all speak the same wire format.
read, write, edit, list, bash โ plus anything an MCP server brings along.
tab cycles auto, accept edits and plan. The mode goes into the system prompt, so the model knows the rules.
Investigation is delegated to a sub-agent with its own empty context, which returns only its answer. Several run at once.
The conversation is saved per directory. raunen --continue picks it back up tomorrow.
A bar in the status row, because running out of room is the most common cause of a bad answer.
Everything runs on the local model โ free, unmetered, private โ until a conversation outgrows its window, at which point it moves to a roomier one without dropping anything it has already found.
That is the whole design in one exchange: cheapest thing that works, a bigger one only when the work demands it, and no memory lost in between.
auto ยท โ main ยท qwen3.5-8k:latest โบ read README.md โณ 210 lines โบ read internal/ui/ui.go โณ 196 lines The UI is a terminal user interface that takes the alternate screen โฆ โ switched to omniroute/auto/best-coding โ context full at 8192 tokens auto ยท โ main ยท auto/best-coding ยท โโโโโโโโโโ 0% ยท 5.9k
/status answers the questions that otherwise need guessing: whether an endpoint is actually up, which ones are missing a key, how close the context is to full, and what the agent will switch to when it runs out of room.
Everything known locally appears at once and the endpoints fill in as they answer, because a report you have to wait for is a worse report.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ status version v0.1.0 model ollama/qwen3.5-8k:latest ยท 8192 mode auto context 940 of 8.2k (11%) ladder 18 models subagents on providers ollama 3 models :11434 lmstudio unreachable :1234 openrouter 411 models needs key
The dragon is not decoration: it grows on the one thing every provider charges in, which is context. Feed it enough โ across every model, every session โ and you climb from a quiet Hush to a roaring Thunder.
It is yours, not a model's, and it carries forward between sessions, so the work you put in shows up next time you open raunen.
Three steps, and the third one is asking it something.
# 1. have a model to talk to โ anything speaking the OpenAI API $ ollama pull qwen3.5 # 2. run it in the directory you want to work in $ cd ~/Projects/my-thing $ raunen raunen: no default model set, using ollama/qwen3.5:latest # 3. ask it something. /help lists everything, ctrl+c leaves.
The first run writes ~/.config/raunen/config.json and, since no model is configured yet, asks your endpoints what they have and picks one โ preferring anything local. Read the docs or the full README.