Справочник

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

Файл конфигурации, 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,
  "reasoning": { "mode": "provider_default" },
  "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,
    "autoCompactThresholdRatio": 0.8,
    "timeoutMs": 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Максимум output + reasoning токенов там, где transport это поддерживает. 0 оставляет дефолт провайдера
reasoningReasoningSelection{ "mode": "provider_default" }Запрошенная reasoning-политика; effective-значение пересчитывается по capabilities активной модели
contextWindownumber128000Контекстное окно модели. При наличии используются метаданные провайдера; fallback явно помечается в UI как assumed
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", "vscode", "github", "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_TOKENSmaxOutputTokensУстаревший alias для SOBA_MAX_OUTPUT_TOKENS
SOBA_MAX_COMPLETION_TOKENSmaxCompletionTokensЛимит reasoning токенов
SOBA_REASONING_EFFORTreasoningdefault, none, minimal, low, medium, high, xhigh или max
SOBA_REASONING_BUDGETreasoningПоложительный числовой reasoning budget
SOBA_REASONING_ENABLEDreasoningtrue/1 или false/0 для toggle-моделей
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 = один раз
SOBA_CONFIG_PATHпуть к config fileИспользовать нестандартный файл конфигурации
NO_COLORoutput colorsОтключить ANSI-цвета, как --no-color
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
OPENAI_API_KEYapiKey (для провайдера openai-official)API-ключ OpenAI

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-tokens <n>Устаревший alias для --max-output-tokens
--max-completion-tokens <n>Лимит reasoning/thinking токенов на ответ
--reasoning-effort <level>Запросить default, none, minimal, low, medium, high, xhigh или max
--reasoning-budget <n>Задать положительный числовой reasoning budget
--reasoning-enabledВключить reasoning для toggle-модели
--no-reasoningВыключить reasoning, если модель это разрешает
--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.6.x использует систему реестра провайдеров (registry). Подробнее о провайдерах — в гайде по провайдерам.

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

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

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
openai-officialOpenAI Responses APIhttps://api.openai.com/v1

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

Discovery также читает context/output limits и reasoning capabilities. Приоритет лимитов: явная настройка пользователя → runtime → active route → model metadata → точный встроенный профиль → консервативный fallback. SOBA не угадывает capabilities по имени модели; assumed-значения отмечаются ~ и предупреждением при выборе.

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.

Особенности wire-формата конкретной модели задаются в полном JSON-описании провайдера, загружаемом через soba provider add <id> --from-file <path>. Например, "compatibility": ["single_system_message"] заставляет SOBA отправлять одно начальное системное сообщение для chat templates, которые отклоняют несколько таких сообщений. Полная схема и список features приведены в разделе метаданных совместимости модели.

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Включить мягкий deferred preflight compaction
compactOnTurnCompletetrueПометить compaction как pending после завершения хода
compactOnMilestonetrueПометить compaction как pending при milestone checkpoint
minTokensForAutoCompact32000Минимум эффективных токенов для рассмотрения авто-компакта
minReclaimableTokens12000Минимум токенов, доступных для освобождения (ROI)
minSavingsRatio0.25Минимальный коэффициент экономии для ROI (25%)
keepRecentTokens20000Количество токенов, сохраняемых после компакта
safetyReserveTokens8192Резерв безопасности (вычитается из context window для hard limit)
autoCompactThresholdRatio0.8Мягкий порог как доля hard limit запроса
timeoutMs15000Бюджет модельного summary до deterministic fallback, в мс
backgroundTimeoutMsУстаревший alias для timeoutMs

Формула 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.

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

  • Reasoning: request/session override → CLI → env → config → provider default. /reasoning и F4 меняют следующий model request без перезапуска.

  • Requested и effective reasoning хранятся отдельно. Неподдерживаемый режим даёт видимый fallback к provider default без скрытого clamp.

  • maxOutputTokens и contextWindow: извлекаются из активной модели и метаданных provider/runtime/route. CLI-флаг --max-output-tokens, --context-window или явные model limits переопределяют discovery для локальных прокси и неполных каталогов.

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

  • Отключение auto-compaction выключает только мягкие trigger. Hard limit и восстановление после provider overflow остаются обязательными.

  • Trigger после turn и milestone откладывается: SOBA показывает прогресс и ожидает compact непосредственно перед следующим model call.

  • Строковые и числовые значения: 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