Skip to content

Configuration Schema

Caboose uses TOML configuration files with a layered override system. Project-level settings take precedence over global defaults, and CLI flags override both.

Most of these values are managed automatically through the TUI — /connect saves API keys, /model updates the default provider, /mcp toggles servers, and /settings adjusts behavior options. This reference is for when you want to edit the files directly or understand what each field does.

FilePurpose
~/.config/caboose/config.tomlGlobal defaults (apply to all projects)
.caboose/config.tomlProject overrides (checked into version control)
~/.config/caboose/auth.jsonAPI keys and secrets (never commit this)

Project config is merged on top of global config field-by-field. Unset project fields inherit the global value.

API keys are stored in ~/.config/caboose/auth.json, not in config files. You can also set them via environment variables.

{
"anthropic": "sk-ant-...",
"openai": "sk-..."
}

Supported environment variables: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, OLLAMA_HOST.

Top-level provider settings.

FieldTypeDefaultDescription
defaultstring"anthropic"Default provider to use. One of anthropic, openai, gemini, ollama.
modelstring"claude-sonnet-4"Default model across all providers.

Per-provider overrides. Supported sections: provider.anthropic, provider.openai, provider.gemini, provider.ollama.

FieldTypeDefaultDescription
modelstring(inherits provider.model)Model to use for this specific provider.
FieldTypeDefaultDescription
allowstring[](all built-in tools)Allowlist of tool names the agent may use. Built-in tools: read_file, write_file, edit_file, glob, grep, bash, list_directory, fetch.
FieldTypeDefaultDescription
auto_handoff_promptbooltruePrompt user to hand off when context reaches 90% capacity.
max_session_costfloat(off)Pause the agent when cumulative session cost reaches this dollar amount.
FieldTypeDefaultDescription
enabledbooltrueEnable persistent memory across sessions.
FieldTypeDefaultDescription
enabledbooltrueEnable the skills system.

Register custom MCP servers. Each server entry requires a command and optional arguments.

FieldTypeDefaultDescription
commandstring(required)Executable to launch the MCP server.
argsstring[][]Arguments passed to the command.
disabledboolfalseTemporarily disable this server without removing its config.

Override built-in MCP presets (e.g. fetch, context7).

FieldTypeDefaultDescription
disabledboolfalseDisable a built-in preset.
removedboolfalseHide a preset entirely so it never loads.

Embedded WebSocket server for mobile and web clients.

FieldTypeDefaultDescription
enabledboolfalseStart the embedded server on launch.
portint9090Port to listen on.
bindstring"127.0.0.1"Bind address.

Budget and concurrency settings for background agents spawned via /bg.

FieldTypeDefaultDescription
max_agentsint3Maximum concurrent background agents.
per_agent_budgetint100000Per-agent token budget.
global_budgetint500000Global token budget across all background agents.

Web search backend configuration for the web_search tool.

FieldTypeDefaultDescription
providerstring(required)Backend to use: "searxng" or "tavily".
base_urlstring(required for searxng)URL of your SearXNG instance.
user_agentstring"Caboose/1.0 (SearchService)"User-Agent header for SearXNG requests.
api_key_envstring"TAVILY_API_KEY"Environment variable containing the Tavily API key.
max_resultsint5Maximum search results to return.
enabledbooltrueEnable or disable this service.
[provider]
default = "anthropic"
model = "claude-sonnet-4"
[provider.anthropic]
model = "claude-sonnet-4"
[provider.openai]
model = "gpt-4.1"
[tools]
allow = ["read_file", "write_file", "edit_file", "glob", "grep", "bash", "list_directory", "fetch"]
[behavior]
auto_handoff_prompt = true
max_session_cost = 10.0
[memory]
enabled = true
[skills]
enabled = true
[mcp.servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
[mcp.servers.context7]
disabled = false
[mcp.presets.fetch]
removed = true
[server]
enabled = false
port = 9090
bind = "127.0.0.1"
[background_agents]
max_agents = 3
per_agent_budget = 100000
global_budget = 500000
[services.web_search]
provider = "searxng"
base_url = "https://search.example.com"
user_agent = "Caboose/1.0 (SearchService)"
max_results = 5