v0.2.0
Free models, resilience, and a dragon that grows.
Install
curl -fsSL https://raw.githubusercontent.com/devjasha/raunen/main/install.sh | shFree models everywhere
- OpenRouter's free models are found automatically from its own pricing, so the list stays current rather than being maintained by hand.
- Groq, Cerebras and NVIDIA NIM ship in the default config. None of them publish pricing, so a provider can be declared free with
"free": true. - Ollama Cloud is configured out of the box.
- Local models count as free too, and join the ladder without needing a pricing field to say so.
"free_fallback": truebuilds a ladder from everything free, roomiest first.
Context windows, discovered rather than declared
- OpenRouter reports
context_length, so its models no longer need windows written down. - Ollama's native API reports
num_ctx— the window it actually serves, not the model's maximum. qwen3.5 advertises 262144 and is served 4096; using the larger number would make a ladder escalate downward. - Windows are per model now. A provider-level
contextis only a default, because one endpoint serves many models with very different limits.
Growing beats dropping
Escalation now happens before trimming. Dropping earlier tool results makes the model forget what it found and investigate the same thing again — so every rung of the ladder is tried before anything is discarded, and trimming says plainly when it had nowhere left to climb.
Resilience
Three layers, because failures differ in what they imply:
| Failure | Response |
|---|---|
429/402 rate limit |
cool that model down — 30s, doubling to 15 min |
refused connection, 5xx |
after 3 in a row, the whole endpoint rests 2 min |
400/404 rejected |
lock that model out for the session |
A success clears the cooldown and the failure count. Sub-agents share the tracker with their caller, so neither learns the same thing twice.
New in the interface
/status— model, window, mode, context, ladder, and every endpoint with whether it answered and what it still needs./companion— the mascot levels up on context, across every session and provider. Ten levels from Hush to Thunder, and the dragon grows through three stages as you go.- Click a reply to answer it, the way a messaging app does. The whole message is quoted, not the line under the pointer. The mouse wheel scrolls the transcript.
- A searchable model list. Terms are space-separated and all must match, and each matches as a substring or a subsequence, so
nemlightfindsnemotron-3.5-lightning. - An API key prompt when a provider needs one, masked, rather than a
401several seconds later. Providers whose catalogue cannot be listed without a key offer to take one. - The model you choose is remembered between sessions, and a resumed session reopens on the model it was held with.
Fixes worth naming
- The config is written
0600now that it can hold API keys — and explicitlychmoded, becauseWriteFileonly applies its mode when creating a file, so an existing0644config would have left a key world-readable. - Pasted text goes where you are looking. Bracketed paste arrives as its own message rather than as key presses, so it bypassed the key handler and a pasted API key was typed into the conversation.
- Models that cannot hold a conversation are filtered out — 61
:batchvariants, image and music models. A model counts as usable only if everything it outputs is text; a music model declarestext+audioand slipped through a looser test. - A truncated response is no longer mistaken for an empty one.
bufio.Scannerends cleanly at EOF, so a dropped connection looked exactly like a model choosing to say nothing. - Token estimates include the tool schemas, which are not in the message list but are very much in the prompt — they were understating a small model's usage by around 560 tokens and skewing both trimming and escalation.
Full Changelog: v0.1.0...v0.2.0