~/.config/raunen/config.json, written on first run. XDG rather than ~/Library/Application Support, which is not where terminal tools are usually configured.
{
"default": "",
"providers": {
"ollama": { "base_url": "http://localhost:11434/v1" },
"lmstudio": { "base_url": "http://localhost:1234/v1" },
"llamacpp": { "base_url": "http://localhost:8080/v1" },
"openrouter": { "base_url": "https://openrouter.ai/api/v1",
"api_key_env": "OPENROUTER_API_KEY" }
},
"models": {}
}Adding a provider is a base URL โ no adapter code, because they all speak the same wire format. Models are provider/model, split on the first / so names containing slashes (hf.co/user/repo) still work.
default may be left empty, in which case the first run asks the configured endpoints what they serve and picks one, preferring anything local.
Providers added to the defaults in later versions are merged into an existing config on load, so new endpoints appear without a rewrite. Anything you have edited is left alone.
There is no way to ask an OpenAI-compatible endpoint how big a model's window is, so it has to be declared. Per-model wins over the provider default.
"models": { "ollama/qwen3.5-8k:latest": { "context": 8192 } }
Getting this wrong is the most common cause of a bad answer. See local models for why Ollama in particular reports a window it is not serving.
api_key_env reads the key from the environment, which is the better place for a secret. A key can also be stored in the config, which is written 0600.
Choosing a model whose provider has no key would otherwise fail with a 401 a few seconds later, by which time the moment has passed. Instead a masked prompt opens โ /key <provider> opens it directly.
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ api key for groq โ paste it and press enter โ โ saved to the config, written 0600 โ or set โ โ GROQ_API_KEY instead โ โ โบ ********* โ โ enter to save ยท esc to cancel โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
~/.config/raunen/mcp.json โ MCP servers, kept apart so a definition carrying a token is not next to the model defaults. See MCP.~/.local/share/raunen/ โ sessions and the companion's state.raunen -config prints the config path.