vtcode 0.13.0

A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers
Documentation
# VTCode Configuration File (Example)
# This is a minimal configuration example for getting started with vtcode.
# Copy this file to vtcode.toml and customize as needed.

[agent]
# Basic agent settings
max_conversation_turns = 1000
max_session_duration_minutes = 60
verbose_logging = false

# AI Provider configuration (supports "gemini", "openai", "anthropic", "openrouter", "xai")
provider = "gemini"
default_model = "gemini-2.5-flash"
api_key_env = "GEMINI_API_KEY"
default_system_instruction = "You are a helpful coding assistant."
refine_prompts_enabled = false
refine_prompts_max_passes = 1
refine_prompts_model = ""
enable_self_review = false
max_review_passes = 1

# UI theme applied to ANSI output (options: "ciapre-dark", "ciapre-blue")
theme = "ciapre-dark"

[agent.onboarding]
enabled = true
intro_text = "Welcome! I preloaded workspace context so you can focus on decisions."
include_project_overview = true
include_language_summary = true
include_guideline_highlights = true
guideline_highlight_limit = 3
usage_tips = [
    "Share your goal or ask for /status to recap configuration.",
    "Reference AGENTS.md norms before editing.",
    "Prefer targeted reads (read_file, grep_search) before modifying code.",
]
recommended_actions = [
    "Request a quick workspace orientation.",
    "Describe the change you want to pursue next.",
]
chat_placeholder = "Implement {feature}..."

[tools]
# Default policy for tools: "allow", "prompt", or "deny"
default_policy = "prompt"

# Maximum inner tool-call loops per user turn
# Prevents infinite tool-calling cycles during chat
max_tool_loops = 100

# Override default policy for specific tools
[tools.policies]
read_file = "allow"
write_file = "prompt"
delete_file = "deny"
run_terminal_cmd = "prompt"

[commands]
# Safe commands that execute without confirmation
allow_list = [
    "ls", "pwd", "cat", "grep", "git status", "cargo check"
]

# Dangerous commands that are always blocked
deny_list = [
    "rm -rf", "sudo rm", "shutdown", "format"
]

# Commands requiring extra confirmation
dangerous_patterns = [
    "rm -f", "git reset --hard", "pip install"
]

[security]
human_in_the_loop = true
confirm_destructive_actions = true
log_all_commands = true
max_file_size_mb = 50
# Common programming language extensions
allowed_file_extensions = [
    ".rs", ".toml", ".json", ".md", ".txt", ".yaml", ".yml",
    ".js", ".ts", ".py", ".go", ".java", ".cpp", ".c", ".h"
]

[pty]
enabled = true
default_rows = 24
default_cols = 80
max_sessions = 10
command_timeout_seconds = 300

[router]
enabled = true
heuristic_classification = true
llm_router_model = ""

[router.models]
simple = "gemini-2.5-flash-lite"
standard = "gemini-2.5-flash"
complex = "gemini-2.5-pro"
codegen_heavy = "gemini-2.5-flash"
retrieval_heavy = "gemini-2.5-flash"

[telemetry]
trajectory_enabled = true

[context.ledger]
enabled = true
max_entries = 12
include_in_prompt = true
preserve_in_compression = true

[syntax_highlighting]
# Enable syntax highlighting for tool output
enabled = true

# Theme to use for syntax highlighting
# Can be an embedded theme name (e.g., "base16-ocean.dark", "base16-ocean.light")
# Or a path to a custom .tmTheme file
theme = "base16-ocean.dark"

# Enable theme caching for better performance
cache_themes = true

# Maximum file size for syntax highlighting (in MB)
max_file_size_mb = 10

# Languages to enable syntax highlighting for
enabled_languages = [
    "rust", "python", "javascript", "typescript", "go", "java",
    "cpp", "c", "php", "html", "css", "sql", "csharp", "bash"
]

# Performance settings
highlight_timeout_ms = 5000