LLM config JSON
The format of a file in
initial-data/llm-configs/. One file per config.
Example
llm-configs/claude-default.json
{
"id": "00000001-0000-0000-0000-000000000002",
"name": "claude-default",
"provider": "ANTHROPIC",
"model": "${CLAUDE_MODEL:claude-sonnet-4-6}",
"baseUrl": "https://api.anthropic.com",
"apiKey": "${ANTHROPIC_API_KEY}",
"defaultTemperature": 0.7,
"maxOutputTokens": 8192,
"additionalParams": {
"thinking": "adaptive",
"effort": "high"
},
"contextWindowTokens": 200000,
"capabilities": ["TOOL_CALLING", "VISION", "DOCUMENTS"],
"rateLimit": {
"maxConcurrentRequests": 3
},
"retry": {
"enabled": true,
"maxAttempts": 5,
"baseBackoffMillis": 2000,
"maxBackoffMillis": 30000
}
}
A minimal local config (no key needed):
llm-configs/agent-default.json
{
"id": "00000001-0000-0000-0000-000000000000",
"name": "agent-default",
"provider": "LM_STUDIO",
"model": "openai/gpt-oss-120b",
"baseUrl": "http://localhost:1234",
"apiKey": "lm-studio",
"defaultTemperature": 0.7,
"maxOutputTokens": 8192,
"additionalParams": {},
"contextWindowTokens": 131072
}
Fields
| Field | Type | Description |
|---|---|---|
id | UUID | Stable identifier. Use a fresh UUID for a new config. |
name | string | Unique name; what an agent references via llmConfigName. |
provider | enum | One of ANTHROPIC, OPENAI, AZURE_OPENAI, GOOGLE_GEMINI, LM_STUDIO, GROQ, OLLAMA, MISTRAL, DEEPSEEK, TOGETHER, OPENROUTER, PERPLEXITY, FIREWORKS. |
model | string | Model id. Supports ${VAR} / ${VAR:default}. |
baseUrl | string | API endpoint (override for proxies / local servers). |
apiKey | string | API key — almost always an env-var placeholder like ${ANTHROPIC_API_KEY}. Literal keys are stored encrypted in the Admin UI (the CLI stores them as-is — use placeholders there). |
type | enum? | CHAT (default) or EMBEDDING — embedding configs power the vector store. |
capabilities | string[]? | What the model reads and does: any of TOOL_CALLING, VISION (images), DOCUMENTS (PDF), AUDIO_INPUT. VISION and DOCUMENTS decide whether an image or PDF sent with a message reaches the model as content or as a placeholder line. Omitted means not declared — the provider's default applies (Anthropic and OpenAI: tool calling, vision, documents; Gemini: those plus audio; Azure OpenAI: tool calling, vision; local servers and routers: tool calling only). A declared list, [] included, always wins over that default. Chat configs only. |
defaultTemperature | number | Sampling temperature (e.g. 0.7). |
maxOutputTokens | int | Max tokens the model may generate per response. |
contextWindowTokens | int | Token budget used to size the working-memory window. |
additionalParams | object | Provider-specific options. For Anthropic e.g. thinking (adaptive/disabled) and effort (low, medium, high, xhigh, max). |
rateLimit | object? | Optional. maxConcurrentRequests caps in-flight calls. |
retry | object? | Optional. enabled, maxAttempts, baseBackoffMillis, maxBackoffMillis. Omitting the block means no retry at all — the built-in defaults only apply when the block is present and enabled. |
isAlias / delegatesTo | bool / string | Alias configs forward to another config by name — useful to give a stable name (agent-default) that you can repoint. |
Env-var placeholders
name, model, baseUrl and apiKey support ${VAR} / ${VAR:default},
resolved at use time — the raw placeholder stays in storage. See
how API keys resolve and the
environment variables page.
See also the LLM configuration reference for the bundled configs and supported providers.