Config Field Reference

July 30, 2026 · View on GitHub

Generated from vtcode-config schema (VTCodeConfig) for complete field coverage.

Regenerate:

python3 scripts/generate_config_field_reference.py
FieldTypeRequiredDefaultDescription
acp.enabledbooleannofalseGlobally enable the ACP bridge
acp.zed.auth.auth_urlnull | stringnonullURL where users can get their API key (optional, for UI display)
acp.zed.auth.default_methodstringno"agent"Default authentication method for ACP agents Options: "agent" (default - agent handles auth), "env_var", "terminal"
acp.zed.auth.env_var_namenull | stringnonullEnvironment variable name for auth (used when default_method is "env_var") Examples: "OPENAI_API_KEY", "ANTHROPIC_API_KEY"
acp.zed.enabledbooleannofalseEnable Zed integration
acp.zed.tools.list_filesbooleannotrueToggle the list_files function bridge
acp.zed.tools.read_filebooleannotrueToggle the read_file function bridge
acp.zed.transportstringno"stdio"Transport used to communicate with the Zed client
acp.zed.workspace_truststringno"full_auto"Desired workspace trust level when running under ACP
agent.api_key_envstringno"OPENROUTER_API_KEY"Environment variable that stores the API key for the active provider
agent.checkpointing.enabledbooleannotrueEnable automatic checkpoints after each successful turn
agent.checkpointing.max_age_daysinteger | nullno30Maximum age in days before checkpoints are removed automatically (None disables)
agent.checkpointing.max_snapshotsintegerno50Maximum number of checkpoints to retain on disk
agent.checkpointing.storage_dirnull | stringnonullOptional custom directory for storing checkpoints (relative to workspace or absolute)
agent.circuit_breaker.enabledbooleannotrueEnable circuit breaker functionality
agent.circuit_breaker.failure_thresholdintegerno7Number of consecutive failures before opening circuit
agent.circuit_breaker.max_open_circuitsintegerno3Number of open circuits before triggering pause
agent.circuit_breaker.pause_on_openbooleannotruePause and ask user when circuit opens (vs auto-backoff)
agent.circuit_breaker.recovery_cooldownintegerno60Cooldown period between recovery prompts (seconds)
agent.codex_app_server.argsarrayno["app-server"]Arguments passed before VT Code appends --listen stdio://.
agent.codex_app_server.args[]stringno--
agent.codex_app_server.commandstringno"codex"Executable used to launch the official Codex app-server sidecar.
agent.codex_app_server.experimental_featuresbooleannofalseEnable experimental Codex app-server sidecar features.
agent.codex_app_server.startup_timeout_secsintegerno10Maximum startup handshake time when launching the sidecar.
agent.credential_storage_modestringno"keyring"Preferred storage backend for credentials (OAuth tokens, API keys, etc.) - keyring: Use OS-specific secure storage (macOS Keychain, Windows Credential Manager, Linux Secret Service). This is the default as it's the most secure. - file: Use AES-256-GCM encrypted file with machine-derived key - auto: Try keyring first, fall back to file if unavailable
agent.custom_api_keysobjectno-Provider-specific API keys captured from interactive configuration flows Note: Actual API keys are stored securely in the OS keyring. This field only tracks which providers have keys stored (for UI/migration purposes). The keys themselves are NOT serialized to the config file for security.
agent.custom_api_keys.*stringno--
agent.default_modelstringno"xiaomi/mimo-v2.5-pro"Default model to use
agent.enable_self_reviewbooleannofalseEnable an extra self-review pass to refine final responses
agent.enable_split_tool_resultsbooleannotrueEnable split tool results for massive token savings (Phase 4) When enabled, tools return dual-channel output: - llm_content: Concise summary sent to LLM (token-optimized, 53-95% reduction) - ui_content: Rich output displayed to user (full details preserved) Applies to: exec_command, code_search, apply_patch, and retained internal helpers Default: true (opt-out for compatibility), recommended for production use
agent.harness.async_approval.auto_approve_below_usdnumberno0.1Auto-approve tool calls whose estimated cost is below this threshold (USD). Set to 0.0 to require approval for everything.
agent.harness.async_approval.auto_approve_timeout_secsinteger | nullnonullWhen set, auto-approve after this many seconds if no explicit answer. The blocker file is updated with the auto-approval decision.
agent.harness.async_approval.enabledbooleannofalseMaster switch. Default: false (opt-in).
agent.harness.async_approval.notify_commandnull | stringnonullOptional command invoked with the blocker file path as argument when an approval request is deferred (e.g. /usr/local/bin/notify-approval).
agent.harness.async_approval.timeout_secsintegerno3600Maximum time in seconds before a deferred approval is auto-denied.
agent.harness.auto_compaction_enabledbooleannotrueEnable automatic context compaction when token pressure crosses threshold. Enabled by default. When disabled, no automatic compaction is triggered.
agent.harness.auto_compaction_instructionsnull | stringnonullOptional custom instructions for the compaction summarization prompt. When set, replaces the default Anthropic compaction prompt entirely. Useful for tool-use scenarios to prevent the model from calling tools during summarization. Only applies to Anthropic provider.
agent.harness.auto_compaction_pause_afterbooleannofalseWhether to pause after compaction (Anthropic only). When true and compaction triggers, the API returns early with stop_reason: "compaction" and only the compaction block. The caller can then insert additional messages before the model generates its text response.
agent.harness.auto_compaction_threshold_tokensinteger | nullnonullOptional absolute compact threshold (tokens) for Responses server-side compaction. When unset, VT Code derives a threshold from the provider context window.
agent.harness.budget_warning_thresholdnumberno0.75Fraction of max_budget_usd at which VT Code emits a one-time near-budget warning. Ignored when max_budget_usd is unset.
agent.harness.compact_on_model_switchbooleannotrueAutomatically compact conversation context when the main session model or provider is switched mid-conversation, so the newly selected model starts from a summary instead of the outgoing model's raw trace. Default: true. Disable to keep the full history across a model switch.
agent.harness.confidence_escalation.always_escalate_toolsarrayno["delete_file", "remove", "rm"]Tool names that always trigger escalation regardless of confidence. These are matched against the tool call's function name.
agent.harness.confidence_escalation.always_escalate_tools[]stringno--
agent.harness.confidence_escalation.confidence_thresholdnumberno0.7Minimum p_success threshold (0.0–1.0). Tools whose estimated success probability falls below this threshold trigger escalation.
agent.harness.confidence_escalation.cost_threshold_usdnumberno0.05Maximum estimated cost in USD before escalation. Tool calls whose estimated cost exceeds this threshold trigger escalation.
agent.harness.confidence_escalation.enabledbooleannofalseMaster switch. Default: false (opt-in).
agent.harness.confidence_escalation.max_replan_attemptsintegerno3Maximum number of re-plan attempts via conversation injection before prompting the user. The agent sees a structured message explaining which tools were blocked and is asked to try a different approach.
agent.harness.confidence_escalation.max_total_escalationsintegerno5Maximum total escalations (across all chain steps) before aborting with partial results. Must be >= max_replan_attempts.
agent.harness.confidence_escalation.plan_mode_onlybooleannofalseWhen true, only escalate during PlanBuildEvaluate orchestration mode. During single-mode or other orchestration modes, escalation is skipped.
agent.harness.confidence_escalation.prompt_user_on_exhaustbooleannotrueWhether to prompt the user when the escalation chain is exhausted. When false, the chain falls through directly to abort-with-partial-results.
agent.harness.confidence_escalation.use_llm_confidencebooleannofalseWhether to solicit LLM-based confidence estimation alongside heuristics. When false (default), only heuristic signals (error history, tool class) are used to estimate p_success.
agent.harness.context_reset_modestringno"off"When to trigger a context reset — starting a clean session from external artifacts only, discarding conversation history. Distinct from compaction (which preserves conversational continuity). Default: off (carry forward history as before).
agent.harness.context_reset_stall_thresholdintegerno2Number of consecutive stall turns before on_stall context reset triggers. Ignored unless context_reset_mode = "on_stall". Default: 2.
agent.harness.continuation_policystringno"all"Controls whether harness-managed continuation loops are enabled.
agent.harness.event_log_pathnull | stringnonullOptional JSONL event log path for harness events. Defaults to ~/.vtcode/sessions/ when unset.
agent.harness.max_budget_usdnull | numbernonullOptional maximum estimated API cost in USD before VT Code stops the session.
agent.harness.max_parallel_tool_callsintegerno4Maximum number of tool calls that may execute concurrently within a single parallel batch. Set to 0 to disable the cap (unlimited concurrency). Default: 4.
agent.harness.max_revision_roundsintegerno2Maximum generator revision rounds after evaluator rejection.
agent.harness.max_tool_calls_per_turnintegerno120Maximum number of tool calls allowed per turn. Set to 0 to disable the cap.
agent.harness.max_tool_retriesintegerno2Maximum retries for retryable tool errors
agent.harness.max_tool_wall_clock_secsintegerno600Maximum wall clock time (seconds) for tool execution in a turn
agent.harness.orchestration_modestringno"plan_build_evaluate"Select the exec/full-auto harness orchestration path.
agent.harness.tool_result_clearing.clear_at_least_tokensintegerno30000-
agent.harness.tool_result_clearing.clear_tool_inputsbooleannofalse-
agent.harness.tool_result_clearing.enabledbooleannotrue-
agent.harness.tool_result_clearing.keep_tool_usesintegerno3-
agent.harness.tool_result_clearing.trigger_tokensintegerno100000-
agent.idle_turn_limitintegerno3Maximum consecutive idle turns (no tool calls, no meaningful response) before the agent runner treats the session as stalled and aborts the loop.
agent.include_structured_reasoning_tagsboolean | nullnonullControls inclusion of the structured reasoning tag instructions block. Behavior: - Some(true): always include structured reasoning instructions. - Some(false): never include structured reasoning instructions. - None (default): include only for default and specialized prompt modes. This keeps lightweight/minimal prompts smaller by default while allowing explicit opt-in when users want tag-based reasoning guidance.
agent.include_temporal_contextbooleannotrueInclude current date/time in system prompt for temporal awareness Helps LLM understand context for time-sensitive tasks (default: true)
agent.include_working_directorybooleannotrueInclude current working directory in system prompt (default: true)
agent.instruction_excludesarrayno[]Instruction files or globs to exclude from AGENTS.md and rules discovery
agent.instruction_excludes[]stringno--
agent.instruction_filesarrayno[]Additional instruction files or globs to merge into the hierarchy
agent.instruction_files[]stringno--
agent.instruction_import_max_depthintegerno5Maximum recursive @path import depth for instruction and rule files
agent.instruction_max_bytesintegerno16384Maximum bytes of instruction content to load from AGENTS.md/CLAUDE.md hierarchy
agent.max_conversation_turnsintegerno150Maximum number of conversation turns before auto-termination
agent.max_review_passesintegerno1Maximum number of self-review passes
agent.max_system_prompt_tokensintegerno8000Soft token budget for the fully composed system prompt (character-based estimate, ~4 chars/token). Includes workspace instructions, guidelines, and runtime addenda on top of the base prompt.
agent.max_task_retriesintegerno2Maximum number of retries for agent task execution (default: 2) When an agent task fails due to retryable errors (timeout, network, 503, etc.), it will be retried up to this many times with exponential backoff
agent.onboarding.chat_placeholdernull | stringnonullPlaceholder suggestion for the chat input bar
agent.onboarding.enabledbooleannotrueToggle onboarding message rendering
agent.onboarding.guideline_highlight_limitintegerno3Maximum number of guideline bullets to surface
agent.onboarding.include_guideline_highlightsbooleannotrueWhether to include AGENTS.md/CLAUDE.md highlights in onboarding message
agent.onboarding.include_language_summarybooleannofalseWhether to include language summary in onboarding message
agent.onboarding.include_project_overviewbooleannotrueWhether to include project overview in onboarding message
agent.onboarding.include_recommended_actions_in_welcomebooleannofalseWhether to surface suggested actions inside the welcome text banner
agent.onboarding.include_usage_tips_in_welcomebooleannofalseWhether to surface usage tips inside the welcome text banner
agent.onboarding.intro_textstringno"Let's get oriented. I preloaded workspace context so we can move fast."Introductory text shown at session start
agent.onboarding.recommended_actionsarrayno["Review the highlighted guidelines and share the task you want to tackle.", "Ask for a workspace tour if you need mo...Recommended follow-up actions to display
agent.onboarding.recommended_actions[]stringno--
agent.onboarding.usage_tipsarrayno["Describe your current coding goal or ask for a quick status overview.", "Reference AGENTS.md/CLAUDE.md guidelines w...Tips for collaborating with the agent effectively
agent.onboarding.usage_tips[]stringno--
agent.open_responses.emit_eventsbooleannotrueEmit Open Responses events to the event sink When true, streaming events follow Open Responses format (response.created, response.output_item.added, response.output_text.delta, etc.)
agent.open_responses.enabledbooleannofalseEnable Open Responses specification compliance layer When true, VT Code emits semantic streaming events alongside internal events Default: false (opt-in feature)
agent.open_responses.include_extensionsbooleannotrueInclude VT Code extension items (vtcode:file_change, vtcode:web_search, etc.) When false, extension items are omitted from the Open Responses output
agent.open_responses.include_reasoningbooleannotrueInclude reasoning items in Open Responses output When true, model reasoning/thinking is exposed as reasoning items
agent.open_responses.map_tool_callsbooleannotrueMap internal tool calls to Open Responses function_call items When true, command executions and MCP tool calls are represented as function_call items
agent.persistent_memory.auto_writebooleannotrueWrite durable memory after completed turns and session finalization
agent.persistent_memory.directory_overridenull | stringnonullOptional user-local directory override for persistent memory storage
agent.persistent_memory.enabledbooleannofalseToggle main-session persistent memory for this repository
agent.persistent_memory.memories.consolidation_modelnull | stringnonullOverrides the model used for global memory consolidation.
agent.persistent_memory.memories.extract_modelnull | stringnonullOverrides the model used for per-thread memory extraction.
agent.persistent_memory.memories.generate_memoriesbooleannotrueControls whether newly completed threads can be stored as memory-generation inputs.
agent.persistent_memory.memories.use_memoriesbooleannotrueControls whether VT Code injects existing memories into future sessions.
agent.persistent_memory.startup_byte_limitintegerno25600Startup byte budget scanned from memory_summary.md before VT Code renders a compact startup summary
agent.persistent_memory.startup_line_limitintegerno200Startup line budget scanned from memory_summary.md before VT Code renders a compact startup summary
agent.project_doc_fallback_filenamesarrayno[]Additional filenames to check when AGENTS.md is absent at a directory level.
agent.project_doc_fallback_filenames[]stringno--
agent.project_doc_max_bytesintegerno16384Maximum bytes of AGENTS.md/CLAUDE.md content to load from project hierarchy
agent.prompt_suggestions.enabledbooleannotrueEnable inline prompt suggestions in the chat composer.
agent.prompt_suggestions.modelstringno""Lightweight model to use for suggestions. Leave empty to auto-select an efficient sibling of the main model.
agent.prompt_suggestions.show_cost_noticebooleannotrueWhether VT Code should remind users that LLM-backed suggestions consume tokens.
agent.prompt_suggestions.temperaturenumberno0.30000001192092896Temperature for inline prompt suggestion generation.
agent.providerstringno"openrouter"AI provider for single agent mode (gemini, openai, anthropic, openrouter, zai)
agent.reasoning_effortstringno"none"Reasoning effort level for models that support it (none, minimal, low, medium, high, xhigh, max) Applies to: Claude, GPT-5 family, Gemini, Qwen3, DeepSeek with reasoning capability
agent.refine_prompts_enabledbooleannofalseEnable prompt refinement pass before sending to LLM
agent.refine_prompts_max_passesintegerno1Max refinement passes for prompt writing
agent.refine_prompts_modelstringno""Optional model override for the refiner (empty = auto pick efficient sibling)
agent.refine_temperaturenumberno0.30000001192092896Temperature for prompt refinement (0.0-1.0, default: 0.3) Lower values ensure prompt refinement is more deterministic/consistent Keep lower than main temperature for stable prompt improvement
agent.require_plan_confirmationbooleannotrueRequire user confirmation before executing a plan generated in planning workflow When true, exiting planning workflow shows the implementation blueprint and requires explicit user approval before enabling edit tools.
agent.shell_prompt_profilestringno"auto"Shell syntax profile used in model-facing command examples. This controls prompt wording only; command policy remains in the runtime. Values: auto, unix_like, powershell.
agent.small_model.enabledbooleannotrueEnable small model tier for efficient operations
agent.small_model.modelstringno""Small model to use (e.g., claude-4-5-haiku, "gpt-4-mini", "gemini-2.0-flash") Leave empty to auto-select a lightweight sibling of the main model
agent.small_model.temperaturenumberno0.30000001192092896Temperature for small model responses
agent.small_model.use_for_git_historybooleannotrueEnable small model for git history processing
agent.small_model.use_for_large_readsbooleannotrueEnable small model for large file reads (>50KB)
agent.small_model.use_for_memorybooleannotrueEnable small model for persistent memory classification and summary refresh
agent.small_model.use_for_web_summarybooleannotrueEnable small model for web content summarization
agent.system_prompt_budget_warningbooleannotrueWarn when the composed system prompt exceeds max_system_prompt_tokens.
agent.system_prompt_modestringno"default"System prompt mode controlling prompt verbosity and token overhead. Options target lean base prompts: minimal (~150-250 tokens), lightweight/default (~250-350 tokens), specialized (~350-500 tokens) before dynamic runtime addenda.
agent.temperaturenumberno0.699999988079071Temperature for main LLM responses (0.0-1.0) Lower values = more deterministic, higher values = more creative Recommended: 0.7 for balanced creativity and consistency Range: 0.0 (deterministic) to 1.0 (maximum randomness)
agent.temporal_context_use_utcbooleannofalseUse UTC instead of local time for temporal context in system prompts
agent.themestringno"ciapre"UI theme identifier controlling ANSI styling
agent.todo_planning_modebooleannotrueEnable TODO planning helper mode for structured task management
agent.tool_documentation_modestringno"progressive"Tool documentation mode controlling token overhead for tool definitions Options: minimal (~800 tokens), progressive (~1.2k), full (~3k current) Progressive: signatures upfront, detailed docs on-demand (recommended) Minimal: signatures only, pi-coding-agent style (power users) Full: all documentation upfront (current behavior, default)
agent.trim_system_promptbooleannofalseTrim low-priority system prompt sections when over budget. Opt-in: silently dropping instructions changes agent behavior, so the default only warns.
agent.ui_surfacestringno"inline"Preferred rendering surface for the interactive chat UI (inline by default; auto, alternate, inline)
agent.user_instructionsnull | stringnonullCustom instructions provided by the user via configuration to guide agent behavior
agent.verbositystringno"medium"Verbosity level for output text (low, medium, high) Applies to: GPT-5.4-family Responses workflows and other models that support verbosity control
agent.vibe_coding.enable_conversation_memorybooleannotrueEnable conversation memory for pronoun resolution
agent.vibe_coding.enable_entity_resolutionbooleannotrueEnable fuzzy entity resolution
agent.vibe_coding.enable_proactive_contextbooleannotrueEnable proactive context gathering
agent.vibe_coding.enable_pronoun_resolutionbooleannotrueEnable pronoun resolution (it, that, this)
agent.vibe_coding.enable_relative_value_inferencebooleannotrueEnable relative value inference (by half, double, etc.)
agent.vibe_coding.enabledbooleannofalseEnable vibe coding support
agent.vibe_coding.entity_index_cachestringno".vtcode/entity_index.json"Entity index cache file path (relative to workspace)
agent.vibe_coding.max_context_filesintegerno3Maximum files to gather for context (default: 3)
agent.vibe_coding.max_context_snippets_per_fileintegerno20Maximum code snippets per file (default: 20 lines)
agent.vibe_coding.max_entity_matchesintegerno5Maximum entity matches to return (default: 5)
agent.vibe_coding.max_memory_turnsintegerno50Maximum conversation turns to remember (default: 50)
agent.vibe_coding.max_recent_filesintegerno20Maximum recent files to track (default: 20)
agent.vibe_coding.max_search_resultsintegerno5Maximum search results to include (default: 5)
agent.vibe_coding.min_prompt_lengthintegerno5Minimum prompt length for refinement (default: 5 chars)
agent.vibe_coding.min_prompt_wordsintegerno2Minimum prompt words for refinement (default: 2 words)
agent.vibe_coding.track_value_historybooleannotrueTrack value history for inference
agent.vibe_coding.track_workspace_statebooleannotrueTrack workspace state (file activity, value changes)
auth.copilot.auth_timeout_secsintegerno300-
auth.copilot.available_toolsarrayno["view", "glob", "grep"]-
auth.copilot.available_tools[]stringno--
auth.copilot.commandnull | stringnonull-
auth.copilot.excluded_toolsarrayno[]-
auth.copilot.excluded_tools[]stringno--
auth.copilot.hostnull | stringnonull-
auth.copilot.startup_timeout_secsintegerno20-
auth.copilot.vtcode_tool_allowlistarrayno["exec_command", "write_stdin", "apply_patch", "code_search"]-
auth.copilot.vtcode_tool_allowlist[]stringno--
auth.openai.auto_refreshbooleannotrue-
auth.openai.callback_portintegerno1455-
auth.openai.flow_timeout_secsintegerno300-
auth.openai.preferred_methodstringno"auto"-
auth.openrouter.auto_refreshbooleannotrueWhether to automatically refresh tokens
auth.openrouter.callback_portintegerno8484Port for the local callback server
auth.openrouter.flow_timeout_secsintegerno300Timeout in seconds for completing the OAuth browser flow.
auth.openrouter.use_oauthbooleannofalseWhether to use OAuth instead of API key
automation.full_auto.allowed_toolsarrayno["exec_command", "write_stdin", "apply_patch", "code_search"]Allow-list of tools that may execute automatically.
automation.full_auto.allowed_tools[]stringno--
automation.full_auto.enabledbooleannofalseEnable the runtime flag once the workspace is configured for autonomous runs.
automation.full_auto.max_turnsintegerno100Maximum number of autonomous agent turns before the exec runner pauses.
automation.full_auto.profile_pathnull | stringnonullOptional path to a profile describing acceptable behaviors.
automation.full_auto.require_profile_ackbooleannotrueRequire presence of a profile/acknowledgement file before activation.
automation.full_auto.verify_mutationsbooleannofalseRun a read-only verifier sub-agent after each mutating tool call. When enabled, the harness spawns a verifier that re-reads the diff and either approves or rejects the change before it is committed. This doubles cost on mutating calls but catches propose-side errors.
automation.loop_engine.enabledbooleannofalseEnable loop engineering mode. When false, loop-specific features (reconciler, per-iteration skills) are inactive.
automation.loop_engine.max_iterationsinteger | nullnonullOptional circuit breaker: maximum loop iterations before the harness refuses further runs. None means unlimited.
automation.loop_engine.preload_skillsarrayno[]Skill names to preload into the agent context at the start of each loop iteration. Empty means no per-iteration skill injection.
automation.loop_engine.preload_skills[]stringno--
automation.loop_engine.reconcile_on_completebooleannotrueAfter a worktree-isolated subagent completes, run the reconciler (diff → verify → merge) automatically.
automation.scheduled_tasks.enabledbooleannofalseEnable scheduler tools and durable vtcode schedule jobs.
chat.askQuestions.enabledbooleannotrueEnable the Ask Questions tool in interactive chat
commands.allow_globarrayno[]Glob patterns allowed for shell commands (applies to Bash)
commands.allow_glob[]stringno--
commands.allow_listarrayno[]Commands that can be executed without prompting
commands.allow_list[]stringno--
commands.allow_regexarrayno[]Regex allow patterns for shell commands
commands.allow_regex[]stringno--
commands.approval_prefixesarrayno[]Command prefixes that skip future shell approval prompts when matched
commands.approval_prefixes[]stringno--
commands.deny_globarrayno[]Glob patterns denied for shell commands
commands.deny_glob[]stringno--
commands.deny_listarrayno[]Commands that are always denied
commands.deny_list[]stringno--
commands.deny_regexarrayno[]Regex deny patterns for shell commands
commands.deny_regex[]stringno--
commands.extra_path_entriesarrayno["$HOME/.cargo/bin", "$HOME/.local/bin", "/opt/homebrew/bin", "/usr/local/bin", "$HOME/.asdf/bin", "$HOME/.asdf/shims...Additional directories that should be searched/prepended to PATH for command execution
commands.extra_path_entries[]stringno--
context.dynamic.enabledbooleannotrueEnable dynamic context discovery features
context.dynamic.max_spooled_filesintegerno100Maximum number of spooled files to keep
context.dynamic.persist_historybooleannotrueEnable persisting conversation history during summarization
context.dynamic.retained_user_messagesintegerno4Maximum number of recent user messages to retain verbatim during local compaction
context.dynamic.spool_max_age_secsintegerno3600Maximum age in seconds for spooled tool output files before cleanup
context.dynamic.sync_mcp_toolsbooleannotrueEnable syncing MCP tool descriptions to .vtcode/mcp/tools/
context.dynamic.sync_skillsbooleannotrueEnable generating skill index in .agents/skills/INDEX.md
context.dynamic.sync_terminalsbooleannotrueEnable syncing terminal sessions to .vtcode/terminals/ files
context.dynamic.tool_output_thresholdintegerno8192Threshold in bytes above which tool outputs are spooled to files
context.ledger.enabledbooleannotrue-
context.ledger.include_in_promptbooleannotrueInject ledger into the system prompt each turn
context.ledger.max_entriesintegerno12-
context.ledger.preserve_in_compressionbooleannotruePreserve ledger entries during context compression
context.max_context_tokensintegerno90000Maximum tokens to keep in context (affects model cost and performance) Higher values preserve more context but cost more and may hit token limits This field is maintained for compatibility but no longer used for trimming
context.preserve_recent_turnsintegerno10Preserve recent turns during context management This field is maintained for compatibility but no longer used for trimming
context.trim_to_percentintegerno60Percentage to trim context to when it gets too large This field is maintained for compatibility but no longer used for trimming
custom_providersarrayno[]User-defined OpenAI-compatible provider endpoints. These entries are editable in /config and appear in the model picker using each entry's display_name.
custom_providers[].api_key_envstringno""Environment variable name that holds the API key for this endpoint (e.g., "MYCORP_API_KEY").
custom_providers[].authCustomProviderCommandAuthConfig | nullno-Optional command-backed bearer token configuration.
custom_providers[].base_urlstringyes-Base URL of the OpenAI-compatible API endpoint (e.g., <https://llm.corp.example/v1>).
custom_providers[].display_namestringyes-Human-friendly label shown in the TUI header, footer, and model picker (e.g., "MyCorporateName").
custom_providers[].modelstringno""Default model to use with this endpoint (e.g., "gpt-5-mini"). When models is empty, this single model is what the /model picker offers for this provider. When models is non-empty, this field is used as the default selection but the picker lists every entry in models.
custom_providers[].modelsarrayno[]Optional list of additional model identifiers offered by the provider. Useful for OpenAI-compatible aggregators such as Atlas Cloud that expose many models behind a single endpoint. When set, the /model picker shows one entry per model. When empty, the picker falls back to the single model field.
custom_providers[].models[]stringno--
custom_providers[].namestringyes-Stable provider key used for routing and persistence (e.g., "mycorp"). Must be lowercase alphanumeric with optional hyphens/underscores.
debug.debug_log_dirnull | stringnonullDirectory for debug logs
debug.enable_tracingbooleannofalseEnable structured logging for development and troubleshooting
debug.max_debug_log_age_daysintegerno7Maximum age of debug logs to keep (in days)
debug.max_debug_log_size_mbintegerno50Maximum size of debug logs before rotating (in MB)
debug.trace_levelstringno"info"Trace level (error, warn, info, debug, trace)
debug.trace_targetsarrayno[]List of tracing targets to enable Examples: "vtcode_core::agent", "vtcode_core::tools", "vtcode::*"
debug.trace_targets[]stringno--
default_primary_agentstringno"build"Primary agent selected at startup when no session override is active.
dotfile_protection.additional_protected_patternsarrayno[]Additional dotfile patterns to protect (beyond defaults).
dotfile_protection.additional_protected_patterns[]stringno--
dotfile_protection.audit_log_pathstringno"~/.vtcode/dotfile_audit.log"Path to the audit log file.
dotfile_protection.audit_logging_enabledbooleannotrueEnable immutable audit logging of all dotfile access attempts.
dotfile_protection.backup_directorystringno"~/.vtcode/dotfile_backups"Directory for storing dotfile backups.
dotfile_protection.block_during_automationbooleannotrueBlock modifications during automated operations.
dotfile_protection.blocked_operationsarrayno["dependency_installation", "code_formatting", "git_operations", "project_initialization", "build_operations", "test_...Operations that trigger extra protection.
dotfile_protection.blocked_operations[]stringno--
dotfile_protection.create_backupsbooleannotrueCreate backup before any permitted modification.
dotfile_protection.enabledbooleannotrueEnable dotfile protection globally.
dotfile_protection.max_backups_per_fileintegerno10Maximum number of backups to retain per file.
dotfile_protection.preserve_permissionsbooleannotruePreserve original file permissions and ownership.
dotfile_protection.prevent_cascading_modificationsbooleannotruePrevent cascading modifications (one dotfile change triggering others).
dotfile_protection.require_explicit_confirmationbooleannotrueRequire explicit user confirmation for any dotfile modification.
dotfile_protection.require_secondary_auth_for_whitelistbooleannotrueSecondary authentication required for whitelisted files.
dotfile_protection.whitelistarrayno[]Whitelisted dotfiles that can be modified (after secondary confirmation).
dotfile_protection.whitelist[]stringno--
features.memoriesbooleannofalseMaster toggle for the memories subsystem. When true, VT Code extracts durable context from completed threads and injects it into future sessions.
file_openerstringno"none"Codex-compatible clickable citation URI scheme.
history.max_bytesinteger | nullnonull-
history.persistencestringno"file"Local history persistence mode.
hooks.lifecycle.notificationarrayno[]Commands to run when VT Code emits a runtime notification event
hooks.lifecycle.notification[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.notification[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.notification[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.notification[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.notification[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.permission_requestarrayno[]Commands to run when VT Code is about to request interactive permission approval
hooks.lifecycle.permission_request[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.permission_request[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.permission_request[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.permission_request[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.permission_request[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.post_tool_usearrayno[]Commands to run immediately after a tool returns its output
hooks.lifecycle.post_tool_use[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.post_tool_use[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.post_tool_use[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.post_tool_use[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.post_tool_use[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.pre_compactarrayno[]Commands to run immediately before VT Code compacts conversation history
hooks.lifecycle.pre_compact[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.pre_compact[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.pre_compact[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.pre_compact[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.pre_compact[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.pre_tool_usearrayno[]Commands to run immediately before a tool is executed
hooks.lifecycle.pre_tool_use[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.pre_tool_use[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.pre_tool_use[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.pre_tool_use[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.pre_tool_use[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.quiet_success_outputbooleannofalseSuppress plain stdout from successful hooks unless they emit structured fields
hooks.lifecycle.session_endarrayno[]Commands to run when an agent session ends
hooks.lifecycle.session_end[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.session_end[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.session_end[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.session_end[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.session_end[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.session_startarrayno[]Commands to run immediately when an agent session begins
hooks.lifecycle.session_start[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.session_start[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.session_start[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.session_start[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.session_start[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.stoparrayno[]Commands to run after VT Code produces a final answer but before the turn completes
hooks.lifecycle.stop[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.stop[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.stop[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.stop[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.stop[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.subagent_startarrayno[]Commands to run when a delegated subagent starts
hooks.lifecycle.subagent_start[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.subagent_start[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.subagent_start[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.subagent_start[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.subagent_start[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.subagent_stoparrayno[]Commands to run when a delegated subagent stops
hooks.lifecycle.subagent_stop[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.subagent_stop[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.subagent_stop[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.subagent_stop[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.subagent_stop[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.task_completedarrayno[]Deprecated alias for stop
hooks.lifecycle.task_completed[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.task_completed[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.task_completed[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.task_completed[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.task_completed[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.task_completionarrayno[]Deprecated alias for stop
hooks.lifecycle.task_completion[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.task_completion[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.task_completion[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.task_completion[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.task_completion[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
hooks.lifecycle.user_prompt_submitarrayno[]Commands to run when the user submits a prompt (pre-processing)
hooks.lifecycle.user_prompt_submit[].hooksarrayno[]List of hook commands to execute sequentially in this group
hooks.lifecycle.user_prompt_submit[].hooks[].commandstringno""The shell command string to execute
hooks.lifecycle.user_prompt_submit[].hooks[].timeout_secondsinteger | nullnonullOptional execution timeout in seconds
hooks.lifecycle.user_prompt_submit[].hooks[].typestringno"command"Type of hook command (currently only 'command' is supported)
hooks.lifecycle.user_prompt_submit[].matchernull | stringnonullOptional regex matcher to filter when this group runs. Matched against context strings (e.g. tool name, project path).
ide_context.enabledbooleannotrue-
ide_context.include_selection_textbooleannotrue-
ide_context.inject_into_promptbooleannotrueInject active editor context into request-time model input.
ide_context.provider_modestringno"auto"-
ide_context.providers.generic.enabledbooleannotrue-
ide_context.providers.vscode_compatible.enabledbooleannotrue-
ide_context.providers.zed.enabledbooleannotrue-
ide_context.show_in_tuibooleannotrue-
mcp.allowlist.default.configurationnull | objectnonullConfiguration keys permitted for the provider grouped by category
mcp.allowlist.default.loggingarray | nullnonullLogging channels permitted for the provider
mcp.allowlist.default.logging[]stringno--
mcp.allowlist.default.promptsarray | nullnonullPrompt name patterns permitted for the provider
mcp.allowlist.default.prompts[]stringno--
mcp.allowlist.default.resourcesarray | nullnonullResource name patterns permitted for the provider
mcp.allowlist.default.resources[]stringno--
mcp.allowlist.default.toolsarray | nullnonullTool name patterns permitted for the provider
mcp.allowlist.default.tools[]stringno--
mcp.allowlist.enforcebooleannofalseWhether to enforce allow list checks
mcp.allowlist.providersobjectno{}Provider-specific allow list rules
mcp.allowlist.providers.*.configurationnull | objectnonullConfiguration keys permitted for the provider grouped by category
mcp.allowlist.providers.*.loggingarray | nullnonullLogging channels permitted for the provider
mcp.allowlist.providers.*.logging[]stringno--
mcp.allowlist.providers.*.promptsarray | nullnonullPrompt name patterns permitted for the provider
mcp.allowlist.providers.*.prompts[]stringno--
mcp.allowlist.providers.*.resourcesarray | nullnonullResource name patterns permitted for the provider
mcp.allowlist.providers.*.resources[]stringno--
mcp.allowlist.providers.*.toolsarray | nullnonullTool name patterns permitted for the provider
mcp.allowlist.providers.*.tools[]stringno--
mcp.connection_pooling_enabledbooleannotrueEnable connection pooling for better performance
mcp.connection_timeout_secondsintegerno30Connection timeout in seconds
mcp.enabledbooleannofalseEnable MCP functionality
mcp.experimental_use_rmcp_clientbooleannotrueToggle experimental RMCP client features
mcp.lifecycle.allow_model_controlbooleannofalseAllow model-callable tools to connect/disconnect MCP servers at runtime.
mcp.max_concurrent_connectionsintegerno5Maximum number of concurrent MCP connections
mcp.providersarrayno[]Configured MCP providers
mcp.providers[]objectno-Configuration for a single MCP provider
mcp.request_timeout_secondsintegerno30Request timeout in seconds
mcp.requirements.allowed_http_endpointsarrayno[]Allowed HTTP endpoints when enforcement is enabled
mcp.requirements.allowed_http_endpoints[]stringno--
mcp.requirements.allowed_stdio_commandsarrayno[]Allowed stdio command names when enforcement is enabled
mcp.requirements.allowed_stdio_commands[]stringno--
mcp.requirements.enforcebooleannofalseWhether requirement checks are enforced
mcp.retry_attemptsintegerno3Connection retry attempts
mcp.security.api_key_envnull | stringnonullAPI key for MCP server authentication (environment variable name)
mcp.security.auth_enabledbooleannofalseEnable authentication for MCP server
mcp.security.rate_limit.concurrent_requestsintegerno10Maximum concurrent requests per client
mcp.security.rate_limit.requests_per_minuteintegerno100Maximum requests per minute per client
mcp.security.validation.max_argument_sizeintegerno1048576Maximum argument size in bytes
mcp.security.validation.path_traversal_protectionbooleannotrueEnable path traversal protection
mcp.security.validation.schema_validation_enabledbooleannotrueEnable JSON schema validation for tool arguments
mcp.server.bind_addressstringno"127.0.0.1"Bind address for the MCP server
mcp.server.enabledbooleannofalseEnable vtcode's MCP server capability
mcp.server.exposed_toolsarrayno[]Tools exposed by the vtcode MCP server
mcp.server.exposed_tools[]stringno--
mcp.server.namestringno"vtcode-mcp-server"Server identifier
mcp.server.portintegerno3000Port for the MCP server
mcp.server.transportstringno"sse"Server transport type
mcp.server.versionstringno"0.135.11"Server version
mcp.startup_timeout_secondsinteger | nullnonullOptional timeout (seconds) when starting providers
mcp.tool_cache_capacityintegerno100Cache capacity for tool discovery results
mcp.tool_timeout_secondsinteger | nullnonullOptional timeout (seconds) for tool execution
mcp.ui.max_eventsintegerno50Maximum number of MCP events to display
mcp.ui.modestringno"compact"UI mode for MCP events: "compact" or "full"
mcp.ui.renderersobjectno{}Custom renderer profiles for provider-specific output formatting
mcp.ui.renderers.*stringno-Named renderer profiles for MCP tool output formatting
mcp.ui.show_provider_namesbooleannotrueShow MCP provider names in UI
model.loop_detection_interactivebooleannotrueEnable interactive prompt for loop detection instead of silently halting
model.loop_detection_thresholdintegerno2Maximum number of identical tool calls (same tool + same arguments) before triggering loop detection
model.model_supports_reasoningboolean | nullnonullManually enable reasoning support for models that are not natively recognized. Note: Setting this to false will NOT disable reasoning for known reasoning models (e.g. GPT-5).
model.model_supports_reasoning_effortboolean | nullnonullManually enable reasoning effort support for models that are not natively recognized. Note: Setting this to false will NOT disable reasoning effort for known models.
model.skip_loop_detectionbooleannofalseEnable loop hang detection to identify when model is stuck in repetitive behavior
notifyarrayno[]External notification command invoked for supported events.
notify[]stringno--
optimization.agent_execution.enable_performance_predictionbooleanyes-Enable performance prediction
optimization.agent_execution.idle_backoff_msintegeryes-Back-off duration in milliseconds when no work is pending This reduces CPU usage during idle periods
optimization.agent_execution.idle_timeout_msintegeryes-Idle detection timeout in milliseconds (0 to disable) When the agent is idle for this duration, it will enter a low-power state
optimization.agent_execution.max_execution_time_secsintegeryes-Maximum execution time in seconds
optimization.agent_execution.max_idle_cyclesintegeryes-Maximum consecutive idle cycles before entering deep sleep
optimization.agent_execution.max_memory_mbintegeryes-Maximum memory usage in MB
optimization.agent_execution.resource_monitor_interval_msintegeryes-Resource monitoring interval in milliseconds
optimization.agent_execution.state_history_sizeintegeryes-State transition history size
optimization.agent_execution.use_optimized_loopbooleanyes-Enable optimized agent execution loop
optimization.async_pipeline.batch_timeout_msintegeryes-Batch timeout in milliseconds
optimization.async_pipeline.cache_sizeintegeryes-Result cache size
optimization.async_pipeline.enable_batchingbooleanyes-Enable request batching
optimization.async_pipeline.enable_cachingbooleanyes-Enable result caching
optimization.async_pipeline.max_batch_sizeintegeryes-Maximum batch size for tool requests
optimization.command_cache.allowlistarrayyes-Allowlist of command prefixes eligible for caching
optimization.command_cache.allowlist[]stringno--
optimization.command_cache.enabledbooleanyes-Enable command caching
optimization.command_cache.max_entriesintegeryes-Maximum number of cached entries
optimization.command_cache.ttl_msintegeryes-Cache TTL in milliseconds
optimization.file_read_cache.enabledbooleanyes-Enable file read caching
optimization.file_read_cache.max_entriesintegeryes-Maximum number of cached entries
optimization.file_read_cache.max_read_linesintegerno400Absolute ceiling (in lines) for a single line-based read_file call. Any read requesting more lines is clamped to this value and the response exposes a next_read_args continuation to read the remainder.
optimization.file_read_cache.max_size_bytesintegeryes-Maximum cached file size (bytes)
optimization.file_read_cache.min_size_bytesintegeryes-Minimum file size (bytes) before caching
optimization.file_read_cache.ttl_secsintegeryes-Cache TTL in seconds
optimization.llm_client.cache_ttl_secsintegeryes-Response cache TTL in seconds
optimization.llm_client.connection_pool_sizeintegeryes-Connection pool size
optimization.llm_client.enable_connection_poolingbooleanyes-Enable connection pooling
optimization.llm_client.enable_request_batchingbooleanyes-Enable request batching
optimization.llm_client.enable_response_cachingbooleanyes-Enable response caching
optimization.llm_client.rate_limit_burstintegeryes-Rate limit burst capacity
optimization.llm_client.rate_limit_rpsnumberyes-Rate limit: requests per second
optimization.llm_client.response_cache_sizeintegeryes-Response cache size
optimization.memory_pool.enabledbooleanyes-Enable memory pool (can be disabled for debugging)
optimization.memory_pool.max_string_pool_sizeintegeryes-Maximum number of strings to pool
optimization.memory_pool.max_value_pool_sizeintegeryes-Maximum number of Values to pool
optimization.memory_pool.max_vec_pool_sizeintegeryes-Maximum number of Vec<String> to pool
optimization.profiling.auto_export_resultsbooleanyes-Auto-export results to file
optimization.profiling.enable_regression_testingbooleanyes-Enable regression testing
optimization.profiling.enabledbooleanyes-Enable performance profiling
optimization.profiling.export_file_pathstringyes-Export file path
optimization.profiling.max_history_sizeintegeryes-Maximum benchmark history size
optimization.profiling.max_regression_percentnumberyes-Maximum allowed performance regression percentage
optimization.profiling.monitor_interval_msintegeryes-Resource monitoring interval in milliseconds
optimization.rl.epsilonnumberno0.15Exploration constant for the bandit (higher = more exploration).
optimization.rl.latency_weightnumberno0.5Reward shaping weight for latency vs success trade-off (0.0..=1.0).
optimization.rl.strategystringno"bandit"Selection strategy: bandit (UCB / epsilon-greedy) or actor_critic.
optimization.tool_registry.default_timeout_secsintegeryes-Tool execution timeout in seconds
optimization.tool_registry.hot_cache_sizeintegeryes-Hot cache size for frequently used tools
optimization.tool_registry.max_concurrent_toolsintegeryes-Maximum concurrent tool executions
optimization.tool_registry.use_optimized_registrybooleanyes-Enable optimized registry
output_style.active_stylestringno"default"-
permissions.allowarrayno[]Rules that allow matching tool calls without prompting.
permissions.allow[]stringno--
permissions.askarrayno[]Rules that require an interactive prompt when they match.
permissions.ask[]stringno--
permissions.audit_directorystringno"~/.vtcode/audit"Directory for audit logs (created if not exists) Defaults to ~/.vtcode/audit
permissions.audit_enabledbooleannotrueEnable audit logging of all permission decisions
permissions.auto.allow_exceptionsarrayno["Allow read-only tools and read-only browsing/search actions.", "Allow file edits and writes inside the current work...Narrow allow exceptions applied after block rules.
permissions.auto.allow_exceptions[]stringno--
permissions.auto.block_rulesarrayno["Block destructive source-control actions such as force-pushes, direct pushes to protected branches, or remote branc...Classifier block rules applied in stage 2 reasoning.
permissions.auto.block_rules[]stringno--
permissions.auto.drop_broad_allow_rulesbooleannotrueDrop broad code-execution allow rules while auto permission review is active.
permissions.auto.environment.trusted_domainsarrayno[]-
permissions.auto.environment.trusted_domains[]stringno--
permissions.auto.environment.trusted_git_hostsarrayno[]-
permissions.auto.environment.trusted_git_hosts[]stringno--
permissions.auto.environment.trusted_git_orgsarrayno[]-
permissions.auto.environment.trusted_git_orgs[]stringno--
permissions.auto.environment.trusted_pathsarrayno[]-
permissions.auto.environment.trusted_paths[]stringno--
permissions.auto.environment.trusted_servicesarrayno[]-
permissions.auto.environment.trusted_services[]stringno--
permissions.auto.max_consecutive_denialsintegerno3Maximum consecutive denials before auto permission review falls back.
permissions.auto.max_total_denialsintegerno20Maximum total denials before auto permission review falls back.
permissions.auto.modelstringno""Optional model override for the transcript reviewer.
permissions.auto.probe_modelstringno""Optional model override for the prompt-injection probe.
permissions.cache_enabledbooleannotrueEnable permission decision caching to avoid redundant evaluations
permissions.cache_ttl_secondsintegerno300Cache time-to-live in seconds (how long to cache decisions) Default: 300 seconds (5 minutes)
permissions.denyarrayno[]Rules that deny matching tool calls.
permissions.deny[]stringno--
permissions.enabledbooleannotrueEnable the enhanced permission system (resolver + audit logger + cache)
permissions.log_allowed_commandsbooleannotrueLog allowed commands to audit trail
permissions.log_denied_commandsbooleannotrueLog denied commands to audit trail
permissions.log_permission_promptsbooleannotrueLog permission prompts (when user is asked for confirmation)
permissions.resolve_commandsbooleannotrueEnable command resolution to actual paths (helps identify suspicious commands)
prompt_cache.cache_dirstringno"~/.vtcode/cache/prompts"Base directory for local prompt cache storage (supports ~ expansion)
prompt_cache.cache_friendly_prompt_shapingbooleannotrueEnable prompt-shaping optimizations that improve provider-side cache locality. When enabled, VT Code keeps volatile runtime context at the end of prompt text.
prompt_cache.enable_auto_cleanupbooleannotrueAutomatically evict stale entries on startup/shutdown
prompt_cache.enabledbooleannotrueEnable prompt caching features globally
prompt_cache.gap_warning_enabledbooleannotrueWarn before a request when the pause since the previous request likely exceeded the provider prompt cache lifetime (advisory only).
prompt_cache.gap_warning_threshold_secsinteger | nullnonullOverride for the cache-gap warning threshold in seconds. When unset, a provider-specific default is used (Anthropic 300s, OpenAI 600s).
prompt_cache.max_age_daysintegerno30Maximum age (in days) before cached entries are purged
prompt_cache.max_entriesintegerno1000Maximum number of cached prompt entries to retain on disk
prompt_cache.min_quality_thresholdnumberno0.7Minimum quality score required before persisting an entry
prompt_cache.providers.anthropic.cache_system_messagesbooleannotrueApply cache control to system prompts by default
prompt_cache.providers.anthropic.cache_tool_definitionsbooleannotrueApply cache control to tool definitions by default Default: true (tools are typically stable and benefit from longer caching)
prompt_cache.providers.anthropic.cache_user_messagesbooleannotrueApply cache control to user messages exceeding threshold
prompt_cache.providers.anthropic.enabledbooleannotrue-
prompt_cache.providers.anthropic.extended_ttl_secondsinteger | nullno3600Extended TTL for Anthropic prompt caching (in seconds) Set to >= 3600 for 1-hour cache on messages
prompt_cache.providers.anthropic.max_breakpointsintegerno4Maximum number of cache breakpoints to use (max 4 per Anthropic spec). Default: 4
prompt_cache.providers.anthropic.messages_ttl_secondsintegerno300TTL for subsequent cache breakpoints (messages). Set to >= 3600 for 1-hour cache on messages. Default: 300 (5 minutes) - recommended for frequently changing messages
prompt_cache.providers.anthropic.min_message_length_for_cacheintegerno256Minimum message length (in characters) before applying cache control to avoid caching very short messages that don't benefit from caching. Default: 256 characters (~64 tokens)
prompt_cache.providers.anthropic.tools_ttl_secondsintegerno3600Default TTL in seconds for the first cache breakpoint (tools/system). Anthropic only supports "5m" (300s) or "1h" (3600s) TTL formats. Set to >= 3600 for 1-hour cache on tools and system prompts. Default: 3600 (1 hour) - recommended for stable tool definitions
prompt_cache.providers.deepseek.enabledbooleannotrue-
prompt_cache.providers.deepseek.surface_metricsbooleannotrueEmit cache hit/miss metrics from responses when available
prompt_cache.providers.gemini.enabledbooleannotrue-
prompt_cache.providers.gemini.explicit_ttl_secondsinteger | nullno3600TTL for explicit caches (ignored in implicit mode)
prompt_cache.providers.gemini.min_prefix_tokensintegerno1024-
prompt_cache.providers.gemini.modestringno"implicit"Gemini prompt caching mode selection
prompt_cache.providers.moonshot.enabledbooleannotrue-
prompt_cache.providers.openai.enabledbooleannotrue-
prompt_cache.providers.openai.idle_expiration_secondsintegerno3600-
prompt_cache.providers.openai.min_prefix_tokensintegerno1024-
prompt_cache.providers.openai.prompt_cache_key_modestringno"session"Strategy for generating OpenAI prompt_cache_key. Session-scoped keys derive one stable key per VT Code conversation.
prompt_cache.providers.openai.prompt_cache_retentionPromptCacheRetention | nullnonullOptional prompt cache retention policy to pass directly into OpenAI Responses API. Supported values are "in_memory" and "24h". If set, VT Code will include prompt_cache_retention in the request body to extend the model-side prompt caching window or request the explicit in-memory policy.
prompt_cache.providers.openai.surface_metricsbooleannotrue-
prompt_cache.providers.openrouter.enabledbooleannotrue-
prompt_cache.providers.openrouter.propagate_provider_capabilitiesbooleannotruePropagate provider cache instructions automatically
prompt_cache.providers.openrouter.report_savingsbooleannotrueSurface cache savings reported by OpenRouter
prompt_cache.providers.zai.enabledbooleannofalse-
provider.anthropic.advisor.cachingAdvisorCachingConfig | nullnonullEnables prompt caching for the advisor's own transcript across calls within a conversation. Only worthwhile for long agent loops (three or more expected advisor calls).
provider.anthropic.advisor.enabledbooleannofalseMaster toggle for the Anthropic server-side advisor tool.
provider.anthropic.advisor.max_tokensinteger | nullnonullCaps the advisor's total output (thinking plus text) per call. Minimum 1024. None lets the advisor model choose its own output cap.
provider.anthropic.advisor.max_usesinteger | nullnonullMaximum number of advisor invocations per request. None means unlimited (the API default). Once the executor reaches this cap, further advisor calls return an advisor_tool_result_error.
provider.anthropic.advisor.modelstringno""Advisor model id (must be an Anthropic/Claude model at least as capable as the executor). Empty or omitted falls back to a sensible default advisor for the executor model.
provider.anthropic.count_tokens_enabledbooleannofalseEnable token counting via the count_tokens endpoint When enabled, the agent can estimate input token counts before making API calls Useful for proactive management of rate limits and costs
provider.anthropic.effortstringno"xhigh"Effort level for adaptive thinking/token usage (low, medium, high, xhigh, max) Controls how many tokens Claude uses when responding, trading off between response thoroughness and token efficiency. The default config value keeps Claude Opus 4.7 on xhigh; models that do not support xhigh fall back to their supported model default, typically high.
provider.anthropic.extended_thinking_enabledbooleannotrueEnable adaptive or extended thinking for Anthropic models When enabled, Claude uses internal reasoning before responding, providing enhanced reasoning capabilities for complex tasks. Only supported by Claude 4, Claude 4.5, and Claude 3.7 Sonnet models. Claude Opus 4.7 uses adaptive thinking instead of budgeted extended thinking. Note: Extended thinking is now auto-enabled by default (31,999 tokens). Set MAX_THINKING_TOKENS=63999 environment variable for 2x budget on 64K models. See: https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking
provider.anthropic.interleaved_thinking_betastringno"interleaved-thinking-2025-05-14"Beta header for interleaved thinking feature
provider.anthropic.interleaved_thinking_budget_tokensintegerno31999Budget tokens for extended thinking (minimum: 1024, default: 31999) On 64K output models (Opus 4.5, Sonnet 4.5, Haiku 4.5): default 31,999, max 63,999 On 32K output models (Opus 4): max 31,999 Claude Opus 4.7 ignores this setting and uses adaptive thinking instead. Use MAX_THINKING_TOKENS environment variable to override.
provider.anthropic.interleaved_thinking_type_enabledstringno"enabled"Type value for enabling interleaved thinking
provider.anthropic.memory.enabledbooleannofalse-
provider.anthropic.task_budget_betastringno"task-budgets-2026-03-13"Beta header for Anthropic task budgets.
provider.anthropic.task_budget_tokensinteger | nullnonullOptional Anthropic task budget token total for Claude Opus 4.7. When set, VT Code sends output_config.task_budget = { type = "tokens", total = N } and the required beta header. Anthropic currently requires a minimum of 20,000 tokens.
provider.anthropic.thinking_displayThinkingDisplayMode | nullnonullControls how thinking content is returned in API responses. - "summarized": Thinking blocks contain summarized text (default on Opus 4.6 and earlier). - "omitted": Thinking blocks have an empty thinking field (default on Opus 4.7+). When set, this overrides the model-specific default. See: https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#controlling-thinking-display
provider.anthropic.tool_search.algorithmstringno"regex"Search algorithm: "regex" (Python regex patterns) or "bm25" (natural language)
provider.anthropic.tool_search.always_available_toolsarrayno[]Tool names that should never be deferred (always available)
provider.anthropic.tool_search.always_available_tools[]stringno--
provider.anthropic.tool_search.defer_by_defaultbooleannotrueAutomatically defer loading of all tools except core tools
provider.anthropic.tool_search.enabledbooleannotrueEnable tool search feature (requires advanced-tool-use-2025-11-20 beta)
provider.anthropic.tool_search.max_resultsintegerno5Maximum number of tool search results to return
provider.mimo_auth_methodMiMoAuthMethod | nullno-Xiaomi MiMo auth method: "payg" or "token-plan"
provider.openai.hosted_shell.container_idnull | stringno-Existing OpenAI container ID to reuse when environment = "container_reference".
provider.openai.hosted_shell.enabledbooleannofalseEnable OpenAI hosted shell instead of VT Code's local shell tool.
provider.openai.hosted_shell.environmentstringno"container_auto"Environment provisioning mode for hosted shell.
provider.openai.hosted_shell.file_idsarrayno-File IDs to mount when using container_auto.
provider.openai.hosted_shell.file_ids[]stringno--
provider.openai.hosted_shell.network_policy.allowed_domainsarrayno--
provider.openai.hosted_shell.network_policy.allowed_domains[]stringno--
provider.openai.hosted_shell.network_policy.domain_secretsarrayno--
provider.openai.hosted_shell.network_policy.domain_secrets[].domainstringyes--
provider.openai.hosted_shell.network_policy.domain_secrets[].namestringyes--
provider.openai.hosted_shell.network_policy.domain_secrets[].valuestringyes--
provider.openai.hosted_shell.network_policy.typestringno"disabled"Hosted shell network access policy.
provider.openai.hosted_shell.skillsarrayno-Hosted skills to mount when using container_auto.
provider.openai.hosted_shell.skills[]objectno-Hosted skill reference mounted into an OpenAI hosted shell environment.
provider.openai.manual_compaction.instructionsnull | stringno-Optional custom instructions appended to manual /compact requests.
provider.openai.responses_includearrayno-Optional Responses API include selectors. Example: ["reasoning.encrypted_content"] for encrypted reasoning continuity.
provider.openai.responses_include[]stringno--
provider.openai.responses_storeboolean | nullno-Optional Responses API store flag. Set to false to avoid server-side storage when using Responses-compatible models.
provider.openai.service_tierOpenAIServiceTier | nullno-Optional native OpenAI service_tier request parameter. Leave unset to inherit the Project-level default service tier. Options: "flex", "priority"
provider.openai.tool_search.always_available_toolsarrayno[]Tool names that should never be deferred (always available).
provider.openai.tool_search.always_available_tools[]stringno--
provider.openai.tool_search.defer_by_defaultbooleannotrueAutomatically defer loading of all tools except the core always-on set.
provider.openai.tool_search.enabledbooleannotrueEnable hosted tool search for OpenAI Responses-compatible models.
provider.openai.websocket_modebooleannofalseEnable Responses API WebSocket transport for non-streaming requests on native OpenAI and OpenAI-compatible Responses endpoints. This is an opt-in path designed for long-running, tool-heavy workflows.
provider_overridesobjectno{}Built-in provider overrides for model lists and endpoint configuration. Maps provider key (e.g., "opencode-zen", "opencode-go") to override config that extends the provider's hardcoded model list with custom models, and optionally overrides the base URL or API key env var.
provider_overrides.*.api_key_envnull | stringno-Optional environment variable name for the API key. When set, overrides the provider's default API key environment variable for models from this override.
provider_overrides.*.base_urlnull | stringno-Optional base URL override for the provider endpoint. When set, custom models from this override are routed to the specified endpoint instead of the provider's default.
provider_overrides.*.modelsarrayno[]Additional model identifiers to offer for this built-in provider. These models are appended to the provider's hardcoded model list and appear in the /model picker alongside built-in entries.
provider_overrides.*.models[]stringno--
providers_whitelistarrayno[]Restrict which providers may be used. When non-empty, only listed providers are visible in the model picker, selectable at first-run, and instantiable at runtime. Empty (default) allows all built-in and custom providers.
providers_whitelist[]stringno-Built-in provider key (e.g. "openai", "anthropic", "gemini", "opencode-zen") or a name from [[custom_providers]].
pty.command_timeout_secondsintegerno300Command timeout in seconds (prevents hanging commands)
pty.default_colsintegerno80Default terminal columns for PTY sessions
pty.default_rowsintegerno24Default terminal rows for PTY sessions
pty.enabledbooleannotrueEnable PTY support for interactive commands
pty.large_output_threshold_kbintegerno5000Threshold (KB) at which to auto-spool large outputs to disk instead of memory
pty.max_scrollback_bytesintegerno25000000Maximum bytes of output to retain per PTY session (prevents memory explosion)
pty.max_sessionsintegerno10Maximum number of concurrent PTY sessions
pty.preferred_shellnull | stringnonullPreferred shell program for PTY sessions (e.g. "zsh", "bash"); falls back to $SHELL
pty.scrollback_linesintegerno400Total scrollback buffer size (lines) retained per PTY session
pty.shell_zsh_forkbooleannofalseFeature-gated shell runtime path that routes shell execution through zsh EXEC_WRAPPER hooks.
pty.stdout_tail_linesintegerno20Number of recent PTY output lines to display in the chat transcript
pty.zsh_pathnull | stringnonullOptional absolute path to patched zsh used when shell_zsh_fork is enabled.
sandbox.default_policystringno"read_only"Default sandbox policy
sandbox.enabledbooleannofalseEnable sandboxing for command execution
sandbox.external.docker.cpu_limitstringno""CPU limit for container
sandbox.external.docker.imagestringno"ubuntu:22.04"Docker image to use
sandbox.external.docker.memory_limitstringno""Memory limit for container
sandbox.external.microvm.kernel_pathstringno""Kernel image path
sandbox.external.microvm.memory_mbintegerno512Memory size in MB
sandbox.external.microvm.rootfs_pathstringno""Root filesystem path
sandbox.external.microvm.vcpusintegerno1Number of vCPUs
sandbox.external.microvm.vmmstringno""VMM to use (firecracker, cloud-hypervisor)
sandbox.external.sandbox_typestringno"none"Type of external sandbox
sandbox.network.allowlistarrayno[]Domain allowlist for network egress. Following field guide: "Default-deny outbound network, then allowlist."
sandbox.network.allowlist[].domainstringyes-Domain pattern (e.g., "api.github.com", "*.npmjs.org")
sandbox.network.allowlist[].portintegerno443Port (defaults to 443)
sandbox.network.policystringyes-Network egress policy. Defaults to [NetworkPolicy::AllowlistOnly] (default-deny, then allowlist).
sandbox.resource_limits.cpu_time_secsintegerno0Custom CPU time limit in seconds (0 = use preset)
sandbox.resource_limits.max_disk_mbintegerno0Custom disk write limit in MB (0 = use preset)
sandbox.resource_limits.max_memory_mbintegerno0Custom memory limit in MB (0 = use preset)
sandbox.resource_limits.max_pidsintegerno0Custom max processes (0 = use preset)
sandbox.resource_limits.presetstringno"moderate"Preset resource limits profile
sandbox.resource_limits.timeout_secsintegerno0Custom wall clock timeout in seconds (0 = use preset)
sandbox.seccomp.additional_blockedarrayno[]Additional syscalls to block
sandbox.seccomp.additional_blocked[]stringno--
sandbox.seccomp.enabledbooleannotrueEnable seccomp filtering (Linux only)
sandbox.seccomp.log_onlybooleannofalseLog blocked syscalls instead of killing process (for debugging)
sandbox.seccomp.profilestringno"strict"Seccomp profile preset
sandbox.sensitive_paths.additionalarrayno[]Additional paths to block
sandbox.sensitive_paths.additional[]stringno--
sandbox.sensitive_paths.exceptionsarrayno[]Paths to explicitly allow (overrides defaults)
sandbox.sensitive_paths.exceptions[]stringno--
sandbox.sensitive_paths.use_defaultsbooleannotrueUse default sensitive paths (SSH, AWS, etc.)
security.auto_apply_detected_patchesbooleannofalseAutomatically apply detected patch blocks in assistant replies when no write tool was executed. Defaults to false for safety.
security.encrypt_payloadsbooleannofalseEncrypt payloads passed across executors.
security.gatekeeper.auto_clear_pathsarrayno[".vtcode/bin", "~/.vtcode/bin"]Paths eligible for quarantine auto-clear
security.gatekeeper.auto_clear_paths[]stringno--
security.gatekeeper.auto_clear_quarantinebooleannofalseAttempt to clear quarantine automatically (opt-in)
security.gatekeeper.warn_on_quarantinebooleannotrueWarn when a quarantined executable is detected
security.hitl_notification_bellbooleannotruePlay terminal bell notification when HITL approval is required.
security.human_in_the_loopbooleannotrueRequire human confirmation for critical actions
security.integrity_checksbooleannotrueEnable runtime integrity tagging for critical paths.
security.require_write_tool_for_claimsbooleannotrueRequire a successful write tool before accepting claims like "I've updated the file" as applied. When true, such claims are treated as proposals unless a write tool executed successfully.
security.zero_trust_modebooleannofalseEnable zero-trust checks between components.
skills.bundled.enabledbooleannotrueEnable bundled skills shipped with VT Code.
skills.enable-auto-triggerbooleannotrueEnable auto-trigger on $skill-name mentions
skills.enable-description-matchingbooleannotrueEnable description-based keyword matching for auto-trigger
skills.max-skills-in-promptintegerno10Maximum number of skills to show in system prompt
skills.min-keyword-matchesintegerno2Minimum keyword matches required for description-based trigger
skills.prompt-formatstringno"xml"Prompt format for skills section (Agent Skills spec) - "xml": XML wrapping for safety (Claude models default) - "markdown": Plain markdown sections
skills.render-modestringno"lean"Rendering mode for skills in system prompt - "lean": Codex-style minimal (name + description + path only, 40-60% token savings) - "full": Full metadata with version, author, native flags
subagents.auto_delegate_read_onlybooleannotrue-
subagents.background.auto_restorebooleannofalse-
subagents.background.default_agentnull | stringnonull-
subagents.background.enabledbooleannofalse-
subagents.background.refresh_interval_msintegerno2000-
subagents.background.toggle_shortcutstringno"ctrl+b"-
subagents.default_timeout_secondsintegerno300-
subagents.enabledbooleannotrue-
subagents.max_concurrentintegerno3-
subagents.max_depthintegerno1-
syntax_highlighting.cache_themesbooleannotrueEnable theme caching for better performance
syntax_highlighting.enabledbooleannotrueEnable syntax highlighting for tool output
syntax_highlighting.enabled_languagesarrayno[]Languages to enable syntax highlighting for
syntax_highlighting.enabled_languages[]stringno--
syntax_highlighting.highlight_timeout_msintegerno5000Performance settings - highlight timeout in milliseconds
syntax_highlighting.max_file_size_mbintegerno10Maximum file size for syntax highlighting (in MB)
syntax_highlighting.themestringno"base16-ocean.dark"Theme to use for syntax highlighting
telemetry.atif_enabledbooleannofalseEnable ATIF (Agent Trajectory Interchange Format) trajectory export. When enabled, sessions write an atif-trajectory.json alongside the existing .jsonl trajectory log.
telemetry.bottleneck_tracingbooleannofalseEmit bottleneck traces for slow paths
telemetry.dashboards_enabledbooleannotrueEnable real-time dashboards
telemetry.perf_eventsbooleannotrueEmit performance events for file I/O, spawns, and UI latency
telemetry.retention_daysintegerno14Retention window for historical benchmarking (days)
telemetry.sample_interval_msintegerno1000KPI sampling interval in milliseconds
telemetry.trajectory_enabledbooleannotrue-
telemetry.trajectory_max_age_daysintegerno14Maximum age in days for rotated trajectory log files
telemetry.trajectory_max_filesintegerno50Maximum number of rotated trajectory log files to keep per workspace
telemetry.trajectory_max_size_mbintegerno50Maximum total size in MB for all trajectory log files in a workspace
timeouts.adaptive_decay_rationumberno0.875Adaptive timeout decay ratio (0.1-1.0). Lower relaxes faster back to ceiling.
timeouts.adaptive_min_floor_msintegerno1000Minimum timeout floor in milliseconds when applying adaptive clamps.
timeouts.adaptive_success_streakintegerno5Number of consecutive successes before relaxing adaptive ceiling.
timeouts.default_ceiling_secondsintegerno180Maximum duration (in seconds) for standard, non-PTY tools.
timeouts.mcp_ceiling_secondsintegerno120Maximum duration (in seconds) for MCP calls.
timeouts.pty_ceiling_secondsintegerno300Maximum duration (in seconds) for PTY-backed commands.
timeouts.streaming_ceiling_secondsintegerno600Maximum duration (in seconds) for streaming API responses.
timeouts.warning_threshold_percentintegerno80Percentage (0-100) of the ceiling after which the UI should warn.
tools.client_tool_searchbooleannotrueEnables client-local deferred loading for providers without hosted tool search. The initial request keeps core execution/editing and search_tools; unused built-ins, MCP, skill, and plugin schemas are omitted until ranked discovery expands them in the next request segment. Set false to restore eager exposure.
tools.default_policystringno"prompt"Default policy for tools not explicitly listed
tools.editor.enabledbooleannotrueEnable external editor support for /edit, keyboard shortcuts, and TUI file links
tools.editor.preferred_editorstringno""Preferred editor command override (supports arguments, e.g. "code --wait")
tools.editor.suspend_tuibooleannotrueSuspend the TUI event loop while editor is running
tools.loop_thresholdsobjectno{}Tool-specific loop thresholds (Adaptive Loop Detection) Allows setting higher loop limits for read-only tools (e.g., ls, grep) and lower limits for mutating tools.
tools.loop_thresholds.*integerno--
tools.max_consecutive_blocked_tool_calls_per_turnintegerno8Maximum consecutive blocked tool calls allowed per turn before forcing a turn break. This prevents long blocked-call churn from consuming CPU.
tools.max_repeated_tool_callsintegerno2Maximum number of times the same tool invocation can be retried with the identical arguments within a single turn.
tools.max_sequential_spool_chunk_readsintegerno6Maximum sequential spool-chunk read_file calls allowed per turn before nudging the agent to switch to targeted extraction/summarization.
tools.max_tool_loopsintegerno40Maximum inner tool-call loops per user turn. Set to 0 to disable the limit. Planning raises smaller nonzero values to its planning floor; prompt-approved extensions remain bounded by ordinary and planning hard caps. This is separate from per-call, per-turn, full-auto-turn, and conversation-turn limits.
tools.max_tool_rate_per_secondinteger | nullnonullOptional per-second rate limit for tool calls to smooth bursty retries. When unset, the runtime defaults apply.
tools.plugins.allowarrayno[]Explicit allow-list of plugin identifiers permitted to load.
tools.plugins.allow[]stringno--
tools.plugins.auto_reloadbooleannofalseEnable hot-reload polling for manifests to support rapid iteration.
tools.plugins.default_truststringno"sandbox"Default trust level when a manifest omits trust metadata.
tools.plugins.denyarrayno[]Explicit block-list of plugin identifiers that must be rejected.
tools.plugins.deny[]stringno--
tools.plugins.enabledbooleannotrueToggle the plugin runtime. When disabled, manifests are ignored.
tools.plugins.manifestsarrayno[]Manifest paths (files or directories) that should be scanned for plugins.
tools.plugins.manifests[]stringno--
tools.policiesobjectno{}Specific tool policies
tools.policies.*stringno-Tool execution policy
tools.profilestringno"vt_code"Model-facing tool profile.
tools.web_fetch.allowed_domainsarrayno[]Inline whitelist - Domains to allow in restricted mode
tools.web_fetch.allowed_domains[]stringno--
tools.web_fetch.blocked_domainsarrayno[]Inline blocklist - Additional domains to block
tools.web_fetch.blocked_domains[]stringno--
tools.web_fetch.blocked_patternsarrayno[]Additional blocked patterns
tools.web_fetch.blocked_patterns[]stringno--
tools.web_fetch.modestringno"restricted"Security mode: restricted (blocklist) or whitelist (allowlist)
tools.web_fetch.strict_https_onlybooleannotrueStrict HTTPS-only mode
tools.web_search.cache_ttl_secsintegerno300How long successful search results are cached before a fresh request is made, in seconds. Defaults to 300s (5 min).
tools.web_search.cooldown_msintegerno3000Minimum gap between consecutive live requests, in milliseconds. Defaults to 3000ms (3s).
tools.web_search.max_resultsintegerno8Default cap on the number of results returned per call. Hard-capped at 20 by the runtime to keep responses inline-friendly.
tools.web_search.providerstringno"auto"Provider selection. Currently the only supported backend is DuckDuckGo; this field is kept for future extension.
tools.web_search.session_max_requestsintegerno12Hard cap on outbound network requests per tool instance. Defaults to 12 to stay well below DDG's soft session quotas.
tools.web_search.timeout_secsintegerno20Per-request timeout in seconds. Capped at 60s by the runtime.
tui.alternate_screenTuiAlternateScreen | nullnonull-
tui.animationsboolean | nullnonull-
tui.notification_conditionNotificationCondition | nullnonullWhen to deliver desktop notifications relative to terminal focus. Defaults to unfocused (only deliver when terminal is not focused). Set to always to deliver notifications even when the terminal is focused.
tui.notification_methodTerminalNotificationMethod | nullnonull-
tui.notificationsTuiNotificationsConfig | nullnonull-
tui.show_tooltipsboolean | nullnonull-
ui.allow_tool_ansibooleannofalseAllow ANSI escape sequences in tool output (enables colors but may cause layout issues)
ui.bold_is_brightbooleannofalseCompatibility mode for legacy terminals that map bold to bright colors. When enabled, avoids using bold styling on text that would become bright colors, preventing visibility issues in terminals with "bold is bright" behavior.
ui.color_scheme_modestringno"auto"Color scheme mode for automatic light/dark theme switching. - "auto": Detect from terminal (via OSC 11 or COLORFGBG env var) - "light": Force light mode theme selection - "dark": Force dark mode theme selection
ui.dim_completed_todosbooleannotrueDim completed todo items (- [x]) in agent output
ui.display_modestringno"minimal"UI display mode preset (full, minimal, focused)
ui.fullscreen.copy_on_selectbooleannotrueCopy selected transcript text immediately when the mouse selection ends. Can also be controlled via VTCODE_FULLSCREEN_COPY_ON_SELECT=0/1.
ui.fullscreen.mouse_capturebooleannotrueCapture mouse events inside the fullscreen UI. Can also be controlled via VTCODE_FULLSCREEN_MOUSE_CAPTURE=0/1.
ui.fullscreen.scroll_speedintegerno3Multiplier applied to mouse wheel transcript scrolling in fullscreen mode. Values are clamped to the range 1..=20. Can also be controlled via VTCODE_FULLSCREEN_SCROLL_SPEED.
ui.hide_headerbooleannotrueHide the full TUI header, showing only version info in a compact line.
ui.inline_viewport_rowsintegerno16Number of rows to allocate for inline UI viewport
ui.keyboard_protocol.disambiguate_escape_codesbooleannotrueResolve Esc key ambiguity (recommended for performance)
ui.keyboard_protocol.enabledbooleannotrueEnable keyboard protocol enhancements (master toggle)
ui.keyboard_protocol.modestringno"default"Preset mode: default, full, minimal, or custom
ui.keyboard_protocol.report_all_keysbooleannofalseReport all keys, including modifier-only keys (Shift, Ctrl)
ui.keyboard_protocol.report_alternate_keysbooleannotrueReport alternate key layouts (e.g. for non-US keyboards)
ui.keyboard_protocol.report_event_typesbooleannotrueReport press, release, and repeat events
ui.layout_modestringno"auto"Override the responsive layout mode
ui.message_block_spacingbooleannotrueAdd spacing between message blocks
ui.minimum_contrastnumberno4.5Minimum contrast ratio for text against background (WCAG 2.1 standard) - 4.5: WCAG AA (default, suitable for most users) - 7.0: WCAG AAA (enhanced, for low-vision users) - 3.0: Large text minimum - 1.0: Disable contrast enforcement
ui.notifications.backendstringno"auto"Preferred backend for desktop notification delivery.
ui.notifications.command_failureboolean | nullnonullNotify when a shell/command execution fails. If omitted, falls back to tool_failure for backward compatibility.
ui.notifications.completionbooleannotrueLegacy master toggle for completion notifications. New installs should prefer completion_success and completion_failure.
ui.notifications.completion_failureboolean | nullnonullNotify when a turn/session is partial, failed, or cancelled. If omitted, falls back to completion.
ui.notifications.completion_successboolean | nullnonullNotify when a turn/session completes successfully. If omitted, falls back to completion.
ui.notifications.delivery_modestringno"desktop"Notification transport strategy.
ui.notifications.enabledbooleannotrueMaster toggle for all runtime notifications.
ui.notifications.errorbooleannotrueNotify on runtime/system errors.
ui.notifications.hitlbooleannotrueNotify when human input/approval is required.
ui.notifications.max_identical_in_windowintegerno1Maximum identical notifications allowed within the suppression window.
ui.notifications.policy_approvalboolean | nullnonullNotify when policy approval is required. If omitted, falls back to hitl for backward compatibility.
ui.notifications.repeat_window_secondsintegerno30Suppression window for repeated identical notifications.
ui.notifications.requestboolean | nullnonullNotify on generic request events. If omitted, falls back to hitl for backward compatibility.
ui.notifications.suppress_when_focusedbooleannotrueSuppress notifications while terminal focus is active.
ui.notifications.tool_failurebooleannofalseNotify when a tool call fails.
ui.notifications.tool_successbooleannofalseNotify on successful tool calls.
ui.reasoning_display_modestringno"toggle"Reasoning display mode for chat UI ("always", "toggle", or "hidden")
ui.reasoning_visible_defaultbooleannotrueDefault visibility for reasoning when display mode is "toggle"
ui.reduce_motion_keep_progress_animationbooleannofalseKeep animated progress indicators while reduce_motion_mode is enabled.
ui.reduce_motion_modebooleannofalseReduce motion mode: minimizes shimmer/flashing animations. Can also be enabled via VTCODE_REDUCE_MOTION=1 environment variable.
ui.safe_colors_onlybooleannofalseRestrict color palette to the 11 "safe" ANSI colors portable across common themes. Safe colors: red, green, yellow, blue, magenta, cyan + brred, brgreen, brmagenta, brcyan Problematic colors avoided: brblack (invisible in Solarized Dark), bryellow (light themes), white/brwhite (light themes), brblue (Basic Dark). See: https://blog.xoria.org/terminal-colors/
ui.screen_reader_modebooleannofalseScreen reader mode: disables animations, uses plain text indicators, and optimizes output for assistive technology compatibility. Can also be enabled via VTCODE_SCREEN_READER=1 environment variable.
ui.show_diagnostics_in_transcriptbooleannofalseShow warning/error/fatal diagnostic lines in the TUI transcript and log panel. Also controls whether ERROR-level tracing logs appear in the TUI session log. Errors are always captured in the session archive JSON regardless of this setting.
ui.show_sidebarbooleannotrueShow the right sidebar (queue, context, tools)
ui.show_turn_timerbooleannofalseShow per-turn elapsed timer line after completed turns
ui.status_line.commandnull | stringnonull-
ui.status_line.command_timeout_msintegerno200-
ui.status_line.modestringno"auto"-
ui.status_line.refresh_interval_msintegerno1000-
ui.terminal_title.itemsarray | nullnonull-
ui.terminal_title.items[]stringno--
ui.thinking_displaystringno"collapsed"Default collapse state of agent thinking/reasoning blocks ("collapsed" or "extended")
ui.tool_output_max_linesintegerno30Maximum number of lines to display in tool output (prevents transcript flooding)
ui.tool_display_modestringno"expanded"Tool transition summary mode. Options: "expanded" or "compact"; expanded renders each summary separately, while compact groups adjacent semantically equivalent successful summaries.
ui.tool_output_modestringno"compact"Tool output display mode ("compact" or "full")
ui.tool_output_spool_bytesintegerno80000Maximum bytes of output to display before auto-spooling to disk
ui.tool_output_spool_dirnull | stringnonullOptional custom directory for spooled tool output logs
ui.vim_modebooleannofalseEnable Vim-style prompt editing in the interactive terminal UI.
workspace.include_contextbooleannotrueInclude workspace context in messages.
workspace.max_context_sizeinteger | nullnonullMaximum size of workspace context to include (in bytes).
workspace.use_root_configbooleannofalseWhen true, force the workspace root vtcode.toml as the sole active config layer, discarding system, user, project, and dot-dir layers.