Models and providers
Model references use provider/model-id. The first slash separates the provider,
so nested model IDs such as openrouter/google/gemini-3.1-flash-lite work as-is.
For a temporary selection, no model config is needed:
OPENROUTER_API_KEY=... topchester -m openrouter/google/gemini-3.1-flash-lite
OpenRouter and Codex are built-in providers. Topchester can materialize their
provider defaults in memory when a CLI or slash-command reference uses them.
Custom provider IDs must be defined under providers in JSONC.
Topchester has three user-facing model slots:
defaultruns the main agent and fills in unspecified model work.fastruns quick checks and lightweight agent calls.kb.summarizeruns knowledge-base summarization.
If fast or kb.summarize is omitted, Topchester uses default.
One OpenRouter model
{
"models": {
"default": "openrouter/google/gemini-3.1-flash-lite",
},
}
Separate fast and KB models
{
"models": {
"default": "openrouter/anthropic/claude-sonnet-4.5",
"fast": "openrouter/google/gemini-3.1-flash-lite",
"kb.summarize": "openrouter/google/gemini-3.1-pro",
},
}
Custom provider
Use this shape for OpenAI-compatible endpoints such as OpenRouter, LiteLLM, vLLM, LM Studio, Ollama, or local OpenAI-compatible proxies:
{
"models": {
"default": "anthropic/claude-sonnet-4.5",
},
"providers": {
"default": "openrouter",
"openrouter": {
"type": "openai-compatible",
"baseURL": "https://openrouter.ai/api/v1",
"apiKeyEnv": "OPENROUTER_API_KEY",
"supportsStructuredOutputs": true,
},
},
}
Prefer apiKeyEnv over apiKey so secrets stay out of config files.
Interactive selection
/model provider/model-id selects that exact model for the current session,
even when it is not in models.choices. Bare /model and /models open the
saved choices picker. /model all [search] browses the OpenRouter catalog and
can add a choice. /effort and /reasoning set a provider-level effort override
for the current session. These controls never write the effective merged config
back to disk.
The root -m, --model option and topchester run -m, --model use the same
reference rules. Session model and effort selections survive --resume,
/restore, and /fork; an explicit CLI model wins over the restored model.
/new starts from the loaded JSONC defaults. For durable defaults, edit
models.default or the provider's reasoningEffort in the intended JSONC file.
For a local OpenAI-compatible proxy, including VibeProxy, a selected profile can contain:
{
"models": {
"default": { "name": "gpt-5.5(low)", "provider": "openai" },
"choices": ["openai/gpt-5.5(low)", "openai/gpt-5.5(high)"],
},
"providers": {
"default": "openai",
"openai": {
"type": "openai-compatible",
"baseURL": "http://127.0.0.1:8317/v1",
"apiKey": "dummy-not-used",
},
},
}
Start it with topchester --config ./vibeproxy.jsonc. A model-id effort suffix remains part of the model name; a Topchester /effort override is also shown separately in the status line, and proxy-specific precedence remains the proxy's responsibility.