SOBAAgent Docs

Конфигурация

Файл конфигурации, CLI-флаги, переменные окружения и приоритет настроек SOBA.

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": "ru",
  "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. Параметры провайдера

ПараметрТипПо умолчаниюОписание
baseUrlstring""Базовый URL OpenAI-совместимого API (если пусто, определяется из активного провайдера)
apiKeystring""API-ключ для аутентификации
modelstring""Полный идентификатор модели: deepseek/deepseek-v4-flash, openrouter/anthropic/claude-sonnet-4.6

2.2. Параметры ответов модели

ПараметрТипПо умолчаниюОписание
maxOutputTokensnumber8192Максимальное количество выходных токенов на ответ модели. Значение по умолчанию — плейсхолдер; реальное значение извлекается из активной модели (ModelDefinition.maxOutput). Может быть переопределён через CLI (--max-output-tokens) или env (SOBA_MAX_OUTPUT_TOKENS)
maxCompletionTokensnumber0Максимальное количество reasoning/thinking токенов на ответ. 0 = без явного лимита (используется дефолт провайдера). Актуально для DeepSeek-R1, o1 и подобных reasoning-моделей
contextWindownumber128000Контекстное окно модели в токенах. Плейсхолдер; реальное значение извлекается из активной модели (ModelDefinition.contextWindow). Может быть переопределён через CLI (--context-window) или env (SOBA_CONTEXT_WINDOW)
temperaturenumber0.7Температура сэмплирования (0-2). Пользовательская настройка; применяется ко всем моделям

2.3. Параметры безопасности выполнения

ПараметрТипПо умолчаниюОписание
maxAgentIterationsnumber0Аварийный лимит вызовов модели за одну задачу. 0 = без лимита (рекомендуется)
maxStalledIterationsnumber4Количество последовательных итераций без прогресса, после которых агент считается застрявшим
maxRunMinutesnumber0Максимальная длительность задачи в минутах. 0 = без лимита (рекомендуется)
bashMaxTimeoutSecondsnumber300Верхняя граница timeout для одного вызова bash tool в секундах. Если модель запросит больше, SOBA уменьшит timeout до этого значения

2.4. Параметры сессий

ПараметрТипПо умолчаниюОписание
sessionDirstring~/.soba/sessionsДиректория для хранения файлов сессий (JSONL)

2.5. Параметры интерфейса

ПараметрТипПо умолчаниюОписание
lang"en" | "ru" | "zh""en"Язык интерфейса по умолчанию
themeTuiThemeName"graphite"Цветовая тема TUI. Доступные: "graphite", "ember", "aurora", "synthwave", "paper", "forest", "highContrast", "clay", "operator", "ink"

2.6. Compaction (сжатие контекста)

См. раздел 6.

2.7. Registry (провайдеры и модели)

См. раздел 5.


3. Переменные окружения

Все параметры конфигурации можно задать через переменные окружения. Они имеют более высокий приоритет, чем config.json.

ПеременнаяЭквивалент в config.jsonОписание
SOBA_BASE_URLbaseUrlБазовый URL API
SOBA_API_KEYapiKeyAPI-ключ
SOBA_MODELmodelИдентификатор модели
SOBA_MAX_OUTPUT_TOKENSmaxOutputTokensЛимит выходных токенов
SOBA_MAX_COMPLETION_TOKENSmaxCompletionTokensЛимит reasoning токенов
SOBA_CONTEXT_WINDOWcontextWindowРазмер контекстного окна
SOBA_MAX_AGENT_ITERATIONSmaxAgentIterationsЛимит итераций
SOBA_MAX_STALLED_ITERATIONSmaxStalledIterationsИтерации без прогресса до stall recovery
SOBA_MAX_RUN_MINUTESmaxRunMinutesМаксимальная длительность задачи в минутах
SOBA_BASH_MAX_TIMEOUT_SECONDSbashMaxTimeoutSecondsВерхняя граница timeout для одного вызова bash tool в секундах
SOBA_LANGlangЯзык интерфейса
SOBA_THEMEthemeТема TUI
SOBA_AUTO_COMPACTcompaction.autoАвто-компакшн (false/0 отключают)
SOBA_SOUND_ENABLEDsound.enabledВключить/отключить звуковые уведомления
SOBA_SOUND_VOLUMEsound.volumeГромкость 0.0–1.0
SOBA_SOUND_REPEATsound.repeatModerepeat/true/1 = повтор, once/false/0 = один раз
DEEPSEEK_API_KEYapiKey (для провайдера deepseek)API-ключ DeepSeek
MOONSHOT_API_KEYapiKey (для провайдера kimi)API-ключ Moonshot Kimi
DASHSCOPE_API_KEYapiKey (для провайдера alibaba)API-ключ Alibaba Qwen
OPENROUTER_API_KEYapiKey (для провайдера openrouter)API-ключ OpenRouter

4. CLI-флаги

Высший приоритет. Переопределяют и переменные окружения, и config.json.

4.1. Режимы запуска

ФлагКраткоОписание
--interactive, -iЗапуск в интерактивном TUI-режиме
--continue, -cПродолжить последнюю сессию
--resume, -rВозобновить сессию через интерактивный селектор
--session <id>, -sПродолжить конкретную сессию по ID

4.2. Провайдер и модель

ФлагКраткоОписание
--model <id>, -mПереопределить идентификатор модели
--api-key <key>, -kПереопределить API-ключ
--base-url <url>Переопределить базовый URL API

4.3. Параметры ответов и лимитов

ФлагОписание
--max-output-tokens <n>Лимит выходных токенов на ответ
--max-completion-tokens <n>Лимит reasoning/thinking токенов на ответ
--context-window <n>Переопределить размер контекстного окна модели
--budget <n>Ограничить общий бюджет токенов на задачу
--max-agent-iterations <n>Аварийный лимит итераций
--max-stalled-iterations <n>Итерации без прогресса до stall recovery
--max-run-minutes <n>Максимальная длительность задачи в минутах
--bash-max-timeout-seconds <n>Верхняя граница timeout для одного вызова bash tool в секундах

4.4. Управление и отладка

ФлагОписание
--no-sessionИнтерактивный режим без сохранения сессии
--no-colorОтключить цвета
--no-streamОтключить стриминг (форсировать не-стриминговый режим)
--streamВключить стриминг явно
--debugЖурналировать loop decisions в файл сессии JSONL
--no-auto-compactОтключить proactive compaction (эквивалент compaction.auto: false)
--lang <locale>Переопределить язык интерфейса (en, ru, zh)
--theme <name>Переопределить тему TUI

4.5. Информация

ФлагМинимальноОписание
--help, -hПоказать справку
--version, -vПоказать версию

5. Конфигурация провайдеров

SOBA v0.4.0 использует систему реестра провайдеров (registry). Подробнее о провайдерах — в гайде по провайдерам.

5.1. Встроенные провайдеры

SOBA поставляется с 4 встроенными провайдерами:

IDНазваниеБазовый 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

Модели для каждого провайдера обнаруживаются динамически через GET /models и кэшируются в памяти текущего процесса. Селектор модели в TUI (Ctrl+M) запускает refresh встроенных провайдеров.

5.2. Кастомные провайдеры

Добавление своего провайдера:

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

Кастомные провайдеры сохраняются в registry.customProviders внутри ~/.soba/config.json.

5.3. Управление через CLI

# Просмотр всех провайдеров и моделей
soba provider list

# Добавить кастомный провайдер
soba provider add <id> --base-url <url> --model <spec> [--api-key-env <VAR>]

# Показать определение провайдера
soba provider show <id>

# Удалить кастомный провайдер
soba provider remove <id>

# Выбрать активного провайдера (использует его default model)
soba provider use <provider-id>

6. Compaction конфигурация

Compaction управляется через секцию compaction в ~/.soba/config.json.

ПараметрПо умолчаниюОписание
autotrueВключить proactive (фоновый) compaction
compactOnTurnCompletetrueФоновый compaction после завершения хода
compactOnMilestonetrueФоновый compaction при milestone checkpoint
minTokensForAutoCompact32000Минимум эффективных токенов для рассмотрения авто-компакта
minReclaimableTokens12000Минимум токенов, доступных для освобождения (ROI)
minSavingsRatio0.25Минимальный коэффициент экономии для ROI (25%)
keepRecentTokens20000Количество токенов, сохраняемых после компакта
safetyReserveTokens8192Резерв безопасности (вычитается из context window для hard limit)
backgroundTimeoutMs15000Таймаут для фоновых операций компакта в мс

Формула hard limit:

hardLimit = contextWindow - maxOutputTokens - safetyReserveTokens

Когда эффективных токенов больше чем hardLimit, выполняется блокирующий compaction. Это нельзя отключить через auto: false.

Подробнее: Compaction и Context Capsules.


7. Приоритет и переопределение

CLI-флаги (высший приоритет)
    ↓ переопределяет
Переменные окружения
    ↓ переопределяет
config.json
    ↓ переопределяет
Значения по умолчанию (низший приоритет)

Пример: Если в config.json указано "theme": "graphite", а в переменной окружения SOBA_THEME=forest и передан CLI-флаг --theme paper — будет использоваться paper.

Особые правила

  • maxOutputTokens и contextWindow: извлекаются из активной модели (ModelDefinition) при загрузке конфига. Значения из config.json — плейсхолдеры. CLI-флаг --max-output-tokens или --context-window переопределяет извлечённые значения для продвинутых сценариев (например, локальные прокси, которые некорректно сообщают размеры модели).

  • auto в compaction: SOBA_AUTO_COMPACT=false или --no-auto-compact переопределяет compaction.auto.

  • Строковые и числовые значения: 0 для maxAgentIterations и maxRunMinutes означает «без лимита» (unlimited). Для maxCompletionTokens — «без явного лимита» (используется дефолт провайдера).


8. Валидация конфигурации

SOBA выполняет валидацию при старте:

  • API-ключ обязателен — если не указан, будет ошибка.
  • model обязателен — если не указан, агент не сможет делать запросы.
  • Compaction инварианты:
    • contextWindow > 0
    • maxOutputTokens > 0
    • safetyReserveTokens >= 0
    • maxOutputTokens + safetyReserveTokens < contextWindow
    • keepRecentTokens < contextWindow - maxOutputTokens - safetyReserveTokens

При нарушении инвариантов compaction отключается с предупреждением в лог.

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

On this page