SOBAAgent Docs

配置

SOBA 的配置文件、CLI 参数、环境变量和优先级规则。

SOBA 会从多个来源读取配置,优先级很清楚:CLI 参数 > 环境变量 > config.json > 默认值。本页说明主要选项,以及它们如何一起工作。


1. 配置文件

配置文件位于 ~/.soba/config.json。SOBA 首次运行时会自动创建,也可以手动创建。

{
  "baseUrl": "https://api.deepseek.com",
  "apiKey": "YOUR_API_KEY",
  "model": "deepseek/deepseek-v4-flash",
  "maxOutputTokens": 8192,
  "maxCompletionTokens": 0,
  "contextWindow": 65536,
  "temperature": 0.7,
  "maxAgentIterations": 0,
  "maxStalledIterations": 4,
  "maxRunMinutes": 0,
  "bashMaxTimeoutSeconds": 300,
  "sessionDir": "~/.soba/sessions",
  "lang": "zh",
  "theme": "graphite",
  "compaction": {
    "auto": true,
    "compactOnTurnComplete": true,
    "compactOnMilestone": true,
    "minTokensForAutoCompact": 32000,
    "minReclaimableTokens": 12000,
    "minSavingsRatio": 0.25,
    "keepRecentTokens": 20000,
    "safetyReserveTokens": 8192,
    "backgroundTimeoutMs": 15000
  },
  "registry": {
    "activeProvider": "deepseek",
    "activeModelId": "deepseek-v4-flash",
    "customProviders": []
  }
}

最小配置:

{
  "apiKey": "YOUR_API_KEY",
  "model": "deepseek/deepseek-v4-flash"
}

2. 参数列表

2.1. Provider 参数

参数类型默认值说明
baseUrlstring""OpenAI-compatible API 的 base URL。为空时从 active provider 推导
apiKeystring""API key
modelstring""完整模型 ID,例如 deepseek/deepseek-v4-flashopenrouter/anthropic/claude-sonnet-4.6

2.2. 模型响应参数

参数类型默认值说明
maxOutputTokensnumber8192每次模型响应的最大输出 token。默认值只是占位;可用时会从 active model definition 读取真实值
maxCompletionTokensnumber0reasoning/thinking token 上限。0 表示不显式限制,使用 provider 默认值
contextWindownumber128000模型上下文窗口。默认值是占位,通常从 active model definition 获取
temperaturenumber0.7采样温度,范围 0 到 2

2.3. 运行安全参数

参数类型默认值说明
maxAgentIterationsnumber0单个任务内模型调用的紧急上限。0 表示无限制
maxStalledIterationsnumber4连续无进展多少次后认为循环卡住
maxRunMinutesnumber0单个任务最大分钟数。0 表示无限制
bashMaxTimeoutSecondsnumber300单次 bash tool 调用的最大 timeout

2.4. 会话

参数类型默认值说明
sessionDirstring~/.soba/sessionsJSONL 会话文件目录

2.5. 界面

参数类型默认值说明
lang"en" | "ru" | "zh""en"默认界面语言
themeTuiThemeName"graphite"TUI 主题:graphiteemberaurorasynthwavepaperforesthighContrastclayoperatorink

3. 环境变量

环境变量会覆盖 config.json

变量对应配置说明
SOBA_BASE_URLbaseUrlAPI base URL
SOBA_API_KEYapiKeyAPI key
SOBA_MODELmodel模型 ID
SOBA_MAX_OUTPUT_TOKENSmaxOutputTokens输出 token 上限
SOBA_MAX_COMPLETION_TOKENSmaxCompletionTokensreasoning token 上限
SOBA_CONTEXT_WINDOWcontextWindow上下文窗口大小
SOBA_MAX_AGENT_ITERATIONSmaxAgentIterations迭代上限
SOBA_MAX_STALLED_ITERATIONSmaxStalledIterationsstall recovery 前的无进展迭代次数
SOBA_MAX_RUN_MINUTESmaxRunMinutes任务最大分钟数
SOBA_BASH_MAX_TIMEOUT_SECONDSbashMaxTimeoutSeconds单次 bash tool 调用最大 timeout
SOBA_LANGlang界面语言
SOBA_THEMEthemeTUI 主题
SOBA_AUTO_COMPACTcompaction.autofalse0 会关闭 auto-compaction
SOBA_SOUND_ENABLEDsound.enabled开启/关闭声音通知
SOBA_SOUND_VOLUMEsound.volume音量 0.0 到 1.0
SOBA_SOUND_REPEATsound.repeatModerepeat/true/1 表示重复,once/false/0 表示一次
DEEPSEEK_API_KEYDeepSeek provider keyDeepSeek API key
MOONSHOT_API_KEYKimi provider keyMoonshot Kimi API key
DASHSCOPE_API_KEYAlibaba provider keyAlibaba Qwen API key
OPENROUTER_API_KEYOpenRouter provider keyOpenRouter API key

4. CLI 参数

CLI 参数拥有最高优先级。

4.1. 启动模式

参数短参数说明
--interactive-i启动交互式 TUI
--continue-c继续最近的会话
--resume-r通过交互式选择器恢复会话
--session <id>-s按 ID 继续指定会话

4.2. Provider 与模型

参数短参数说明
--model <id>-m覆盖模型 ID
--api-key <key>-k覆盖 API key
--base-url <url>覆盖 API base URL

4.3. 限制

参数说明
--max-output-tokens <n>输出 token 上限
--max-completion-tokens <n>reasoning/thinking token 上限
--context-window <n>覆盖模型上下文窗口
--budget <n>设置任务总 token 预算
--max-agent-iterations <n>紧急迭代上限
--max-stalled-iterations <n>stall recovery 前的无进展迭代次数
--max-run-minutes <n>任务最大分钟数
--bash-max-timeout-seconds <n>单次 bash tool 调用最大 timeout

4.4. 控制与调试

参数说明
--no-session交互模式但不保存会话
--no-color关闭颜色
--no-stream关闭 streaming
--stream显式开启 streaming
--debug将 loop decisions 写入 JSONL 会话文件
--no-auto-compact关闭 proactive compaction,等同于 compaction.auto: false
--lang <locale>覆盖界面语言:enruzh
--theme <name>覆盖 TUI 主题

4.5. 信息

参数短参数说明
--help-h显示帮助
--version-v显示版本

5. Provider 配置

SOBA v0.4.0 使用 provider registry。更多细节见 Provider 与模型

内置 providers:

ID名称Base URL
deepseekDeepSeekhttps://api.deepseek.com
kimiMoonshot Kimi (K2 for code)https://api.moonshot.cn/v1
alibabaAlibaba Qwen (Singapore)https://dashscope-intl.aliyuncs.com/compatible-mode/v1
openrouterOpenRouterhttps://openrouter.ai/api/v1

每个 provider 的模型会通过 GET /models 动态发现,并缓存在当前进程内。TUI 中用 Ctrl+M 打开模型选择器时,会刷新内置 providers。

添加自定义 provider:

soba provider add my-llm \
  --base-url https://api.myllm.com/v1 \
  --api-key-env MY_LLM_KEY \
  --model my-code-model="My Code Model",128000,8192

自定义 providers 保存在 registry.customProviders 中。


6. Compaction 配置

Compaction 通过 compaction 配置段控制。

参数默认值说明
autotrue开启 proactive 后台 compaction
compactOnTurnCompletetrue每个 turn 完成后后台 compaction
compactOnMilestonetruemilestone checkpoint 时后台 compaction
minTokensForAutoCompact32000考虑 auto-compaction 的最低 effective tokens
minReclaimableTokens12000值得回收的最低 token 数
minSavingsRatio0.25最低节省比例,默认 25%
keepRecentTokens20000compaction 后保留的最近 token 数
safetyReserveTokens8192从 context window 中扣除的安全保留量
backgroundTimeoutMs15000后台 compaction 操作 timeout

Hard limit:

hardLimit = contextWindow - maxOutputTokens - safetyReserveTokens

当 effective tokens 超过 hardLimit 时,SOBA 会执行 blocking compaction。这个行为不能通过 auto: false 关闭。完整 compaction guide 当前在俄语文档中:Compaction and Context Capsules


7. 优先级

CLI 参数
    ↓ 覆盖
环境变量
    ↓ 覆盖
config.json
    ↓ 覆盖
默认值

例如:config.json 中是 "theme": "graphite",环境变量是 SOBA_THEME=forest,同时传入 --theme paper,最终会使用 paper

特殊规则:

  • maxOutputTokenscontextWindow 会尽量从 active model definition 获取。CLI 参数可以覆盖它们,适合本地代理或模型元数据不准确的高级场景。
  • compaction.auto 可以通过 SOBA_AUTO_COMPACT=false--no-auto-compact 覆盖。
  • 数字 0maxAgentIterationsmaxRunMinutes 表示无限制;对 maxCompletionTokens 表示不显式限制。

8. 校验

SOBA 启动时会校验配置:

  • API key 必须存在,除非所选 provider 不需要 key。
  • model 必须存在
  • Compaction invariants 必须满足:
    • contextWindow > 0
    • maxOutputTokens > 0
    • safetyReserveTokens >= 0
    • maxOutputTokens + safetyReserveTokens < contextWindow
    • keepRecentTokens < contextWindow - maxOutputTokens - safetyReserveTokens

如果 compaction invariants 不满足,SOBA 会带着 warning 禁用 compaction:

⚠️  Compaction disabled: config validation failed:
    keepRecentTokens (50000) must be < hard limit (47360)

本頁目錄