Configuration
June 27, 2026 · View on GitHub
English | 简体中文 | 繁體中文 | 日本語 | Русский
devo onboard is the recommended setup path. For manual configuration, Devo
merges settings in this order:
- Built-in defaults
DEVO_HOME/config.toml- user-level config, defaulting to~/.devo/config.tomlon macOS/Linux andC:\Users\yourname\.devo\config.tomlon Windows<workspace>/.devo/config.toml- project-level config- CLI flags
Credentials live separately in DEVO_HOME/auth.json; config.toml should refer
to credential ids instead of storing API keys directly.
Minimal shape:
[defaults]
model_binding = "deepseek-v4-flash-api-deepseek-com"
[providers."api.deepseek.com"]
enabled = true
name = "api.deepseek.com"
base_url = "https://api.deepseek.com"
credential = "api_deepseek_com_api_key"
wire_apis = ["openai_chat_completions"]
[model_bindings.deepseek-v4-flash-api-deepseek-com]
enabled = true
model_slug = "deepseek-v4-flash"
provider = "api.deepseek.com"
model_name = "deepseek-v4-flash"
display_name = "DeepSeek V4 Flash"
invocation_method = "openai_chat_completions"
default_reasoning_effort = "high"
The important separation is:
model_slugselects Devo's local model metadata frommodels.json.providerselects the configured connection record.model_nameis the provider-specific model string sent on the wire.invocation_methodselects the provider protocol, such asopenai_chat_completions,openai_responses, oranthropic_messages.
Custom Models
If the model you want to use is not in the built-in list, add it to
models.json, then bind it through config.toml.
User-level model catalog:
- macOS/Linux:
~/.devo/models.json - Windows:
C:\Users\yourname\.devo\models.json
Project-level overrides can also be placed at <workspace>/.devo/models.json.
Catalog precedence is <workspace>/.devo/models.json, then
<DEVO_HOME>/models.json, then the built-in catalog.
In models.json, provider is the default wire API metadata for the model; the
actual endpoint is still selected by the provider field in config.toml.
Example models.json entry:
[
{
"slug": "my-coding-model",
"display_name": "My Coding Model",
"channel": "Custom",
"provider": "openai_chat_completions",
"description": "Custom OpenAI-compatible coding model.",
"reasoning_capability": "unsupported",
"context_window": 200000,
"effective_context_window_percent": 95,
"max_tokens": 4096,
"input_modalities": ["text"],
"base_instructions": "You are Devo, a coding agent. Help the user edit and understand code."
}
]
Then reference that slug from a model binding:
[model_bindings.my-coding-model-example]
enabled = true
model_slug = "my-coding-model"
provider = "my.provider"
model_name = "provider-specific-model-name"
display_name = "My Coding Model"
invocation_method = "openai_chat_completions"