vtcode 0.14.1

A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers
Documentation
# VTCode Configuration
# Minimal configuration with only actively used settings

[agent]
# Provider to use: one of "gemini", "openai", "anthropic", "openrouter"
# API key environment variable is automatically inferred from provider
provider = "openrouter"
# Default model for single-agent mode
# Please also check router.models below if change default_model
default_model = "x-ai/grok-4-fast:free"

[router.models]
simple = "x-ai/grok-4-fast:free"
standard = "x-ai/grok-4-fast:free"
complex = "x-ai/grok-4-fast:free"
codegen_heavy = "x-ai/grok-4-fast:free"
retrieval_heavy = "x-ai/grok-4-fast:free"


# Max conversation turns per session (prevents infinite loops)
max_conversation_turns = 150
# Reasoning effort for models that support it: "low" | "medium" | "high"
reasoning_effort = "medium"
# Prompt refinement settings (optimize GPT-5 prompts; can apply to all models)
refine_prompts_enabled = false
refine_prompts_max_passes = 1
refine_prompts_model = ""
# Enable a self-review refinement pass for final responses
enable_self_review = false
# Maximum number of self-review passes (only used if enable_self_review = true)
max_review_passes = 1

[agent.onboarding]
enabled = true
intro_text = "VT Code"               # VT Code
include_project_overview = false
include_language_summary = false
include_guideline_highlights = false
guideline_highlight_limit = 4
# [
#    "Share the outcome you need or ask for a quick /status summary.",
#    "Reference AGENTS.md expectations before changing files.",
# ]
usage_tips = []

# suggestion:
# [
#   "Request a workspace orientation or describe the task you want to tackle.",
#    "Confirm priorities or blockers so I can suggest next steps.",
# ]
recommended_actions = []

# suggestion: "Implement {feature}..."
chat_placeholder = ""

[security]
# Enable human-in-the-loop mode (requires confirmation for destructive actions)
human_in_the_loop = true
# Require write tool confirmation for claims about file changes
require_write_tool_for_claims = true
# Auto-apply patches detected in responses (use with caution)
auto_apply_detected_patches = false

[automation.full_auto]
# Disable by default; must be enabled intentionally per workspace
enabled = false
# Require presence of an acknowledgement/profile file before autonomous runs
require_profile_ack = true
# Path is resolved relative to the workspace when not absolute
profile_path = "automation/full_auto_profile.toml"
# Restrictive default allow-list focused on read-only tools
allowed_tools = ["read_file", "list_files", "grep_search", "simple_search"]

[tools]
# Default tool policy for tools not explicitly listed below
# Values: "allow" | "deny" | "prompt" (require confirmation)
default_policy = "prompt"

# Limit the number of inner tool-call loops per user turn (prevents infinite cycles)
max_tool_loops = 100

# Per-tool policy overrides (more specific takes precedence)
[tools.policies]
# File system tools
read_file = "allow"
list_dir = "allow"
grep_search = "allow"
run_terminal_cmd = "allow"
curl = "prompt"
create_file = "allow"
edit_file = "allow"
delete_file = "deny"

# Code analysis tools
semantic_search = "allow"
tree_sitter_analyze = "allow"
ast_grep_search = "allow"

# Build and test tools
cargo_check = "allow"
cargo_build = "prompt"
cargo_test = "allow"
cargo_clippy = "allow"
cargo_fmt = "allow"

# Git tools
git_status = "allow"
git_diff = "allow"
git_log = "allow"
git_commit = "prompt"
git_push = "prompt"

# Code modification tools
srgn = "prompt"

[commands]
# Allow-list commands (exact matches, executed without confirmation)
allow_list = [
    "ls",
    "pwd",
    "cat",
    "grep",
    "find",
    "head",
    "tail",
    "wc",
    "git status",
    "git diff",
    "git log",
    "cargo check",
    "cargo tree",
    "cargo metadata",
    "which",
    "echo",
]

# Deny-list commands (always blocked, cannot be executed)
deny_list = [
    "rm -rf /",
    "rm -rf ~",
    "rm -rf /*",
    "shutdown",
    "reboot",
    "halt",
    "poweroff",
    "sudo rm",
    "sudo chmod",
    "sudo chown",
    "format",
    "fdisk",
    "mkfs",
    "dd if=",
    "wget",
    "curl",
    ":(){ :|:& };:", # Fork bomb
]

# Glob-based allow patterns (commands matching these patterns are allowed)
allow_glob = [
    "git *",
    "cargo *",
    "rustc *",
    "python -m *",
    "node *",
    "npm *",
    "yarn *",
    "pnpm *",
]

# Glob-based deny patterns (commands matching these patterns are blocked)
deny_glob = [
    "rm *",
    "sudo *",
    "chmod *",
    "chown *",
    "kill *",
    "pkill *",
    "systemctl *",
    "service *",
    "mount *",
    "umount *",
    "docker run *",
    "kubectl *",
]

# Regex-based allow patterns (advanced users only)
allow_regex = [
    "^(ls|pwd|cat|grep|find|head|tail|wc)\\b",
    "^git (status|diff|log|show|branch)\\b",
    "^cargo (check|build|test|doc|clippy|fmt)\\b",
]

# Regex-based deny patterns (commands matching these patterns are blocked)
deny_regex = [
    "rm\\s+(-rf|--force)",
    "sudo\\s+.*",
    "chmod\\s+.*",
    "chown\\s+.*",
    "docker\\s+run\\s+.*--privileged",
    "kubectl\\s+(delete|drain|uncordon)",
]

[pty]
# Enable PTY (pseudo-terminal) for interactive commands
enabled = true
# Default terminal size (rows x columns)
default_rows = 24
default_cols = 80
# Maximum concurrent PTY sessions (prevents resource exhaustion)
max_sessions = 10
# Command timeout in seconds (prevents hanging commands)
command_timeout_seconds = 300

# Dynamic Router: choose model and engine based on task complexity
[router]
enabled = true
heuristic_classification = true
llm_router_model = ""

[telemetry]
# Enable trajectory logging to logs/trajectory.jsonl
trajectory_enabled = true