Configuration reference

An exhaustive index of every key accepted by config.toml and the agent-definition files. Keys are grouped by section, each linking to the page that explains the concept in depth. Use this as a lookup; use Configuration to learn how the file works.

Top-level keys

Top-level keys

All keys live at the root of config.toml unless noted.

KeyTypeDefaultDescription
default_agentstring"accept-edits"Agent used when you don't pass --agent, in interactive and programmatic sessions. See Agents
active_modelstringModel alias currently in use. Set to a [[models]] alias or a built-in model ID
allowed_modelsarray<string>Allow-list of model name patterns (exact, glob, or re: regex), matched against the model names sent to the inference API, not their aliases. When non-empty, only matching models are selectable
compaction_modeltableModel that summarizes the conversation during /compact and automatic compaction. Must use the active model's provider; otherwise Vibe warns and uses the active model. Defaults to the active model
auto_compact_thresholdnumberToken count that triggers automatic compaction for models that don't set their own. Ignored for a model when it's at or above the model's max_context_length. When unset, models compact at 80% of max_context_length, or at 200,000 tokens when the window is unknown. 0 disables automatic compaction
compaction_max_output_tokensnumber80000Output token cap for compaction requests. Never exceeds the model's own output cap. 0 gives compaction the same cap as other requests
compaction_thinkingstringThinking level for the first compaction request: off, low, medium, high, or max. When unset, the compaction model keeps its own level. The fallback request always runs without reasoning
compaction_reasoning_limit_tokensnumber32000Approximate reasoning tokens after which Vibe abandons the first compaction request for a simpler fallback request without tools or reasoning. 0 disables the limit
output_limit_retriesnumber6Number of times per turn Vibe discards an answer cut off at the output token limit and asks for it again, with feedback asking for a shorter response. 0 ends the turn on the first cut-off answer
output_token_reservenumber4096Tokens kept free when Vibe lowers a request's output cap to fit the room its input leaves in the context window. Applies to models that set max_context_length
vision_modeltableVision-capable model that describes attached images when the active model doesn't support images. Defaults to any vision-capable model on the provider of the active model. Set it to use a model from another provider
enabled_agentsarray<string>Allow-list of agent name patterns. When non-empty, only matching agents are available
disabled_agentsarray<string>Deny-list of agent name patterns, applied when enabled_agents is empty
agent_pathsarray<string>Extra directories to discover custom agents from
system_prompt_idstring"cli"System prompt to use. Set it to the name of a Markdown file in ~/.vibe/prompts/ or .vibe/prompts/, without the .md extension
compaction_prompt_idstring"compact"Prompt used to summarize the conversation during compaction. Resolved like system_prompt_id
title_prompt_idstring"session_title"Prompt used to generate session titles. Resolved like system_prompt_id
skill_pathsarray<string>Extra directories to discover skills from. See Skills
enabled_skillsarray<string>Allow-list of skill name patterns (exact, glob, or re: regex). When non-empty, only matching skills load
disabled_skillsarray<string>Deny-list of skill name patterns, applied when enabled_skills is empty
enabled_toolsarray<string>Allow-list of tool name patterns. See Safety, approvals, and permissions
disabled_toolsarray<string>Deny-list of tool name patterns, applied after enabled_tools
enable_mcpbooleantrueAllows MCP servers. When false, Vibe blocks adding, removing, enabling, signing in to, and loading tools from MCP servers, including servers provided by plugins. See Admin config
enable_connectorsbooleantrueAllows connectors, including the built-in web search. See Block connectors
enable_auto_approvebooleantrueAllows the auto-approve mode. When false, Vibe hides the auto-approve agent and every custom agent with safety = "yolo", and ignores --auto-approve, --yolo, and bypass_tool_permissions. Per-tool permissions still apply. Meant for admin config
enable_subagentsbooleantrueLets the agent delegate work to subagents. See Agents
enable_background_processesbooleantrueLets the agent run commands in the background. When false, commands run to completion in the foreground
enable_update_checksbooleantrueChecks once a day for a new release and offers to install it
enable_notificationsbooleantrueRings the terminal bell and updates the terminal title when Vibe finishes or needs your input while the terminal isn't focused
enable_telemetrybooleantrueSends anonymous usage and error telemetry to Mistral. Disable for offline-only setups
enable_system_trust_storebooleanfalseValidates HTTPS certificates against the operating system trust store instead of Vibe's bundled roots. See Corporate certificate authorities
api_stream_idle_timeoutnumber0Seconds of silence, once the model starts answering, before Vibe treats the response as stalled. 0 disables the limit
ask_confirmation_on_exitbooleantrueAsks for a second Ctrl+D before quitting. Ctrl+C always asks
autocopy_to_clipboardbooleantrueCopies text to the clipboard when you release a mouse selection
cursor_blinkbooleantrueBlinks the input cursor. Set to false for a steady cursor
themestring"auto"Terminal theme. auto follows the terminal background or the OS light or dark preference. Change it with /theme
show_subagent_status_listbooleantrueShows the list of running subagents above the prompt
worktree_limitnumber15Maximum number of recent Vibe-managed git worktrees kept locally
log_levelstring"WARNING"Log level for ~/.vibe/logs/vibe.log: DEBUG, INFO, WARNING, ERROR, or CRITICAL. Change it with /log-level
experimental_enable_model_catalogbooleanfalseExperimental. Fetches Mistral's curated model catalog at session start and adds its models to the model list. Your [[models]] presets still override their settings. When you haven't picked a model, Vibe runs the catalog's recommended model, unless an experiment assigns you another one
[[providers]]table arrayProvider presets. Fields listed below. See API keys and profiles
[[models]]table arrayModel presets. Fields listed below. See API keys and profiles
[[mcp_servers]]table arrayMCP server definitions. Fields listed below. See MCP servers
[utility_models]tableModels for background tasks such as the smart approve classifier and session titles. Fields listed below
[session_logging]tableSession storage settings. Fields listed below

displayed_workdir, context_warnings, and raise_on_compaction_failure are deprecated. Vibe still accepts them in existing files, but they have no effect. enable_auto_update has no effect either: use enable_update_checks.

Providers ([[providers]])

Providers ([[providers]])

One [[providers]] table per provider preset.

KeyTypeDefaultDescription
namestringRequiredProvider preset identifier, referenced by a [[models]] provider
api_basestringRequiredBase URL for the provider's API
api_key_env_varstringEnvironment variable name holding the API key. Secrets must use this form in admin config
api_stylestring"openai"API style: "openai", "openai-responses", "reasoning", "anthropic", or "vertex-anthropic"
backendstring"generic"Backend type: "generic" or "mistral"
regionstringGoogle Cloud region for Vertex AI (api_style = "vertex-anthropic"). Requires project_id
project_idstringGoogle Cloud project for Vertex AI (api_style = "vertex-anthropic")
[providers.extra_headers]tableSubtable of extra HTTP headers, for example "x-acme-tenant" = "engineering"
Models ([[models]])

Models ([[models]])

One [[models]] table per model preset.

KeyTypeDefaultDescription
namestringRequiredModel ID, for example mistral-medium-latest
providerstringRequiredReferences a [[providers]] name
aliasstringnameLocal alias used by active_model. Defaults to name when omitted
display_namestringaliasLabel shown in the model picker. Falls back to alias when unset
temperaturenumber0.2Sampling temperature
top_pnumberNucleus sampling, between 0 (excluded) and 1. Unset leaves the provider's default
max_output_tokensnumberMaximum output tokens per model request. Unset leaves the provider's default
input_pricenumberPer-million input token cost, used to cap costs in programmatic mode
output_pricenumberPer-million output token cost, used to cap costs in programmatic mode
cached_input_pricenumberPer-million cached input token cost. Omit to bill cached input at input_price
thinkingstringoffDefault thinking level for the model. One of the model's thinking_levels
thinking_levelsarray<string>Thinking levels available for this model. Defaults to off, low, medium, high, and max when omitted
supports_imagesbooleanfalseWhether the model is vision-capable. When true, you can @-mention images
max_context_lengthnumberContext window in tokens. Drives automatic compaction, and lowers each request's output cap to the room its input leaves, minus output_token_reserve
auto_compact_thresholdnumberToken count that triggers automatic compaction. Overrides the default trigger, 80% of max_context_length
Utility models ([utility_models])

Utility models ([utility_models])

Models for background tasks, one key per task. Each value is the alias of a [[models]] preset, or "active" to use the session's model. When a key is unset, Vibe uses a small, fast Mistral model if your Mistral provider serves one, and the session's model otherwise. If an alias doesn't match a configured model, or allowed_models excludes it, Vibe shows a warning and uses that automatic selection instead.

KeyTypeDefaultDescription
smart_approvestringAutomaticModel that classifies tool calls for the smart-approve agent. See Choose the smart approve model
titlestringAutomaticModel that generates session titles
Session logging ([session_logging])

Session logging ([session_logging])

Controls where Vibe saves sessions. --continue, --resume, and /resume need saved sessions. See Work with the CLI.

KeyTypeDefaultDescription
enabledbooleantrueSaves sessions to disk
save_dirstring~/.vibe/logs/sessionDirectory where sessions are saved
generate_titlesbooleantrueGenerates session titles in the background. When false, Vibe shows the first message instead
MCP servers ([[mcp_servers]])

MCP servers ([[mcp_servers]])

One [[mcp_servers]] table per server. Required fields depend on the transport (http, streamable-http, or stdio).

KeyTypeDefaultDescription
namestringRequiredShort alias; prefixes this server's tool names
transportstringRequiredOne of http, streamable-http, or stdio
urlstringBase URL for HTTP transports
commandstringCommand for the stdio transport
argsarray<string>Arguments for the stdio transport
envtableEnvironment variables passed to the stdio process
startup_timeout_secnumber10Seconds to wait for the server to start
tool_timeout_secnumber60Seconds to wait for a tool call to complete
disabledbooleanfalseHides all tools from this server. /mcp toggles it
disabled_toolsarray<string>Tool names, without the server prefix, to hide from this server
[mcp_servers.auth]tableAuthentication for HTTP transports. Fields listed below

The [mcp_servers.auth] table sets how Vibe authenticates to an HTTP server:

KeyTypeDefaultDescription
typestring"static""static" for headers or an API key, "oauth" for browser sign-in
headerstablestatic only. Extra HTTP headers
api_key_envstringstatic only. Env var holding the API key. Distinct from providers' api_key_env_var
api_key_headerstring"Authorization"static only. Header name to set with the API key
api_key_formatstring"Bearer {token}"static only. Format string for the header value
scopesarray<string>Required for oauthoauth only. OAuth scopes to request. Pass an empty list to accept the server's default
client_idstringoauth only. Pre-registered public client ID, with http://127.0.0.1:<redirect_port>/callback as its redirect URI. Can't be combined with client_metadata_url. Without either, Vibe registers a client dynamically
client_metadata_urlstringoauth only. HTTPS URL of a client metadata document, with a path other than /. The document must list http://127.0.0.1:<redirect_port>/callback in redirect_uris. Used only if the server advertises client_id_metadata_document_supported; otherwise Vibe registers a client dynamically. Can't be combined with client_id
redirect_portinteger47823oauth only. Local port for the sign-in callback, from 1024 to 65535. Change it if 47823 is already in use

Vibe still accepts headers, api_key_env, api_key_header, and api_key_format at the top level of [[mcp_servers]] and treats them as static authentication.

Connectors ([[connectors]])

Connectors ([[connectors]])

One [[connectors]] table per connector you want to change. /connectors writes these entries when you enable or disable a connector or tool.

KeyTypeDefaultDescription
namestringRequiredConnector name, as listed in /connectors (for example, web_search)
disabledbooleanfalseHides all tools from this connector
disabled_toolsarray<string>Tool names, without the connector prefix, to hide from this connector
Per-tool permissions ([tools.<tool_name>])

Per-tool permissions ([tools.<tool_name>])

<tool_name> is a built-in tool (read_file, bash, etc.), an MCP tool named {server_name}_{tool_name}, or a connector tool named connector_{connector_name}_{tool_name}. One block per tool.

KeyTypeDefaultDescription
permissionstring"always" to auto-allow the tool, "ask" to prompt before use, "never" to block it
allowlistarray<string>Read-only commands for bashAllowed without approval. For bash, command prefixes such as ["git status", "pnpm test"]. For read_file, write_file, and edit, globs matched against absolute paths, such as ["/home/me/project/docs/*"]. Replaces the default list
denylistarray<string>Interactive commands for bashAlways denied. For bash, command prefixes such as ["rm -rf"]. For read_file, write_file, and edit, globs matched against absolute paths. Replaces the default list
Agent definition files

Agent definition files

These keys live in ~/.vibe/agents/<name>.toml or ./.vibe/agents/<name>.toml, not in config.toml. They define custom agents and subagents. Most top-level keys above (active_model, enabled_tools, disabled_tools, [tools.*] blocks) can also be set inside an agent file to override the global config for that agent.

KeyTypeDefaultDescription
agent_typestring"agent""agent" (user-facing, selectable via --agent) or "subagent" (delegation-only)
display_namestringHuman-readable label
descriptionstringFree-text description. Required for subagents
instructionsstringPrompt text written inline. For an agent, appended after the system prompt. For a subagent, replaces the system_prompt_id prompt
safetystring"neutral"Visual hint: safe, neutral, destructive, smart, or yolo. Changes the input border color; does not enforce permissions. enable_auto_approve = false hides yolo agents
system_prompt_idstringNames a Markdown prompt file in ./.vibe/prompts/ (trusted folders only) or ~/.vibe/prompts/, without the .md extension
active_modelstringModel alias for this agent (same key as global config)
enabled_toolsarray<string>Tool allow-list for this agent
disabled_toolsarray<string>Tool deny-list for this agent

See Agents for built-in agents and full examples.

Environment variables

Environment variables

Not config.toml keys, but part of the configuration model. See Configuration precedence for where VIBE_<KEY> variables sit.

VariablePurpose
VIBE_HOMEOverrides the ~/.vibe/ home directory for all state (config, prompts, agents, skills, logs)
VIBE_<KEY>Overrides the top-level config key <key>, for example VIBE_ACTIVE_MODEL. Use __ for nested keys. Vibe ignores and logs a value it can't parse
MISTRAL_API_KEYPrimary Mistral API key
<PROVIDER>_API_KEYAPI key referenced by a [[providers]] api_key_env_var (for example OPENROUTER_API_KEY)

See Configuration precedence and Admin config for how these layers combine.