# Reasonix configuration.
# Resolution order: flag > ./reasonix.toml > ~/Library/Application Support/reasonix/config.toml > built-in defaults.
# Secrets come from the environment via api_key_env; never put keys here.

config_version = 2   # schema marker for diagnostics; old versions may ignore it
default_model = "deepseek-pro"
language      = "zh"   # ui/model language; empty = auto-detect from $LANG / $REASONIX_LANG

[agent]
# system_prompt = """..."""   # omit to use the built-in prompt for this version
# system_prompt_file = "prompts/system.md"   # overrides system_prompt when set
max_steps         = 0   # executor tool-call rounds; 0 = no limit
planner_max_steps = 12   # planner read-only tool-call rounds; 0 = no limit
temperature       = 0.0
auto_plan   = "off"   # off|on; off keeps plan mode manual
reasoning_language = "zh"   # visible reasoning language: auto|zh|en
# auto_plan_classifier = "deepseek-pro"   # optional; only used for borderline tasks
soft_compact_ratio  = 0.5   # notice only; keeps cache-first prefix intact
compact_ratio       = 0.8   # try compacting when prompt reaches this fraction
compact_force_ratio = 0.9   # force compacting at this high-water mark
cold_resume_prune   = true   # elide stale tool results when reopening a session past the provider cache window
# planner_model = "mimo"   # optional: enable two-model collaboration
# subagent_model = "deepseek-pro"   # optional default for runAs=subagent skills
# subagent_models = { review = "deepseek-pro", security_review = "deepseek-pro" }   # per-skill overrides
# subagent_effort = "high"   # optional default effort for subagents
# subagent_efforts = { review = "max", task = "high" }   # per-tool/skill effort overrides
# output_style = "explanatory"   # explanatory | learning | concise | custom; empty = default

[tools]
enabled = []   # empty = all built-in tools
bash_timeout_seconds = 120   # foreground safety cap; set 0 for no tool-local cap

[codegraph]
enabled      = true   # built-in MCP server; off by default for first-run sessions
auto_install = true   # fetch the runtime when CodeGraph is enabled but missing
# path       = ""   # empty = cache, then PATH, then a bundle beside reasonix

[builtin_mcp]
time_enabled = true   # built-in Time MCP; off until manually enabled
context7_enabled = false   # built-in Context7 MCP; off until manually enabled

[lsp]
enabled = true   # language server tools; servers launch lazily when used
# [lsp.servers.go]
# command = "gopls"
# args = []
# extensions = [".go"]

[skills]
# paths = ["~/my-skills", "../shared/skills"]   # extra custom skill roots
# excluded_paths = ["~/.agents/skills"]   # hide convention roots without deleting folders
# max_depth = 3   # nested scan depth; set 1 for legacy root-only discovery
# disabled_skills = ["review"]   # hide noisy or unwanted skills

[permissions]
# Per-call gating. mode = writer fallback when no rule matches: ask|allow|deny.
# Readers always default to allow. Precedence: deny > ask > allow > fallback.
# Rules are "Tool" or "Tool(specifier)"; e.g. Bash(go test:*), Edit(src/**).
mode  = "ask"
# deny = ["Bash(rm -rf*)", "Bash(git push*)"]   # hard-blocked in every mode
allow = ["Bash(cd /Users/rekey/Documents/Code/trade && git status)", "Bash(cd /Users/rekey/Documents/Code/trade && cat reasonix.toml)"]
# ask = ["Edit(src/**)"]   # force a prompt even if otherwise allowed

[sandbox]
# Confine tool blast radius. File-writers (write_file/edit_file/multi_edit)
# may only write under workspace_root (empty = current dir) + allow_write.
# bash = "enforce" (default) jails each command in an OS sandbox (macOS now;
# graceful fallback elsewhere); "off" disables it. network allows egress.
# workspace_root = ""            # default: current working directory
# allow_write = ["/tmp"]          # extra dirs writers may also modify
bash    = "enforce"
network = true

[statusline]
# A custom status line: a command whose first stdout line replaces the built-in
# data row. It receives {"model","contextUsed","contextWindow","cwd"} as JSON on stdin.
# command = "my-statusline.sh"

# External MCP servers. type: "stdio" (default, a subprocess) | "http" | "sse".
# ${VAR} / ${VAR:-default} are expanded from the environment in command/args/env/url/headers.
# [[plugins]]
# name    = "example"
# command = "reasonix-plugin-example"
# [[plugins]]                                  # a remote server over Streamable HTTP
# name    = "stripe"
# type    = "http"
# url     = "https://mcp.stripe.com"
# headers = { Authorization = "Bearer ${STRIPE_KEY}" }
