reasonix.toml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # Reasonix configuration.
  2. # Resolution order: flag > ./reasonix.toml > ~/.config/reasonix/config.toml > built-in defaults.
  3. # Secrets come from the environment via api_key_env; never put keys here.
  4. default_model = "deepseek-flash"
  5. language = "zh" # ui/model language; empty = auto-detect from $LANG / $REASONIX_LANG
  6. [ui]
  7. theme = "auto" # auto|dark|light; CLI colors only; REASONIX_THEME can override per run
  8. # theme_style = "graphite" # graphite|ember|aurora|midnight|sandstone|porcelain|linen|glacier
  9. [network]
  10. proxy_mode = "auto" # auto|env|custom|off; auto currently uses env proxy
  11. # proxy_url = "socks5://127.0.0.1:7890" # optional custom override
  12. # no_proxy = "localhost,127.0.0.1,.local" # honored for proxy_mode = "custom"
  13. [network.proxy]
  14. type = "socks5" # http|https|socks5|socks5h
  15. # server = "127.0.0.1"
  16. # port = 7890
  17. # username = ""
  18. # password = "${REASONIX_PROXY_PASSWORD}" # optional; supports ${VAR} expansion
  19. [agent]
  20. system_prompt = """
  21. You are Reasonix, a coding agent focused on executing code tasks.
  22. Use the provided tools to read and write files and run shell commands.
  23. Principles: understand the request before acting; verify with tools instead of
  24. guessing; keep changes minimal and correct; briefly summarize what you did.
  25. When the request leaves a real choice to the user — which approach or library,
  26. the scope, or a consequential or ambiguous decision — call the ask tool to offer
  27. 2-4 concrete options rather than guessing or burying the question in prose. Skip
  28. it when there's an obvious default; don't ask just to confirm.
  29. For multi-step work, track progress with the todo_write tool: lay out the steps,
  30. keep exactly one in_progress, and flip each to completed as you finish it — update
  31. the list as you go, not just at the end.
  32. In plan mode the harness blocks writer tools: do read-only research, then write a
  33. concise plan as your reply and stop. The user is asked to approve before anything
  34. is changed; once approved, work through the steps, updating the task list as you go."""
  35. # system_prompt_file = "prompts/system.md" # overrides system_prompt when set
  36. max_steps = 0
  37. temperature = 0.0
  38. auto_plan = "ask" # off|ask|on; ask/on auto-enter plan mode for complex tasks
  39. # auto_plan_classifier = "deepseek-flash" # optional; only used for borderline tasks
  40. # planner_model = "mimo" # optional: enable two-model collaboration
  41. # subagent_model = "deepseek-pro" # optional default for runAs=subagent skills
  42. # subagent_models = { review = "deepseek-pro", security_review = "deepseek-pro" } # per-skill overrides
  43. # output_style = "explanatory" # explanatory | learning | concise | custom; empty = default
  44. [[providers]]
  45. name = "deepseek-flash"
  46. kind = "openai"
  47. base_url = "https://api.deepseek.com"
  48. models = ["deepseek-v4-flash"]
  49. default = "deepseek-v4-flash"
  50. api_key_env = "DEEPSEEK_API_KEY"
  51. balance_url = "https://api.deepseek.com/user/balance" # optional; wallet-balance endpoint shown in the status bar
  52. context_window = 1000000 # tokens; compaction triggers near this limit
  53. price = { cache_hit = 0.02, input = 1, output = 2, currency = "¥" } # per 1M tokens
  54. [tools]
  55. enabled = [] # empty = all built-in tools
  56. [skills]
  57. # paths = ["~/my-skills", "../shared/skills"] # extra custom skill roots
  58. [permissions]
  59. # Per-call gating. mode = writer fallback when no rule matches: ask|allow|deny.
  60. # Readers always default to allow. Precedence: deny > ask > allow > fallback.
  61. # Rules are "ToolName" or "ToolName(glob)"; '*' matches any run, '?' one char.
  62. mode = "ask"
  63. # deny = ["bash(rm -rf*)", "bash(git push*)"] # hard-blocked in every mode
  64. # allow = ["bash(go test*)", "bash(git status*)"] # never prompted
  65. # ask = ["write_file"] # force a prompt even if otherwise allowed
  66. [sandbox]
  67. # Confine tool blast radius. File-writers (write_file/edit_file/multi_edit)
  68. # may only write under workspace_root (empty = current dir) + allow_write.
  69. # bash = "enforce" (default) jails each command in an OS sandbox (macOS now;
  70. # graceful fallback elsewhere); "off" disables it. network allows egress.
  71. # workspace_root = "" # default: current working directory
  72. # allow_write = ["/tmp"] # extra dirs writers may also modify
  73. bash = "enforce"
  74. network = true
  75. [statusline]
  76. # A custom status line: a command whose first stdout line replaces the built-in
  77. # data row. It receives {"model","contextUsed","contextWindow"} as JSON on stdin.
  78. # command = "my-statusline.sh"
  79. # External MCP servers. type: "stdio" (default, a subprocess) | "http" | "sse".
  80. # ${VAR} / ${VAR:-default} are expanded from the environment in command/args/env/url/headers.
  81. # [[plugins]]
  82. # name = "example"
  83. # command = "reasonix-plugin-example"
  84. # [[plugins]] # a remote server over Streamable HTTP
  85. # name = "stripe"
  86. # type = "http"
  87. # url = "https://mcp.stripe.com"
  88. # headers = { Authorization = "Bearer ${STRIPE_KEY}" }