Конфигурация
Файл конфигурации, 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. Параметры провайдера
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
baseUrl | string | "" | Базовый URL OpenAI-совместимого API (если пусто, определяется из активного провайдера) |
apiKey | string | "" | API-ключ для аутентификации |
model | string | "" | Полный идентификатор модели: deepseek/deepseek-v4-flash, openrouter/anthropic/claude-sonnet-4.6 |
2.2. Параметры ответов модели
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
maxOutputTokens | number | 8192 | Максимальное количество выходных токенов на ответ модели. Значение по умолчанию — плейсхолдер; реальное значение извлекается из активной модели (ModelDefinition.maxOutput). Может быть переопределён через CLI (--max-output-tokens) или env (SOBA_MAX_OUTPUT_TOKENS) |
maxCompletionTokens | number | 0 | Максимум output + reasoning токенов там, где transport это поддерживает. 0 оставляет дефолт провайдера |
reasoning | ReasoningSelection | { "mode": "provider_default" } | Запрошенная reasoning-политика; effective-значение пересчитывается по capabilities активной модели |
contextWindow | number | 128000 | Контекстное окно модели. При наличии используются метаданные провайдера; fallback явно помечается в UI как assumed |
temperature | number | 0.7 | Температура сэмплирования (0-2). Пользовательская настройка; применяется ко всем моделям |
2.3. Параметры безопасности выполнения
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
maxAgentIterations | number | 0 | Аварийный лимит вызовов модели за одну задачу. 0 = без лимита (рекомендуется) |
maxStalledIterations | number | 4 | Количество последовательных итераций без прогресса, после которых агент считается застрявшим |
maxRunMinutes | number | 0 | Максимальная длительность задачи в минутах. 0 = без лимита (рекомендуется) |
bashMaxTimeoutSeconds | number | 300 | Верхняя граница timeout для одного вызова bash tool в секундах. Если модель запросит больше, SOBA уменьшит timeout до этого значения |
2.4. Параметры сессий
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sessionDir | string | ~/.soba/sessions | Директория для хранения файлов сессий (JSONL) |
2.5. Параметры интерфейса
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
lang | "en" | "ru" | "zh" | "en" | Язык интерфейса по умолчанию |
theme | TuiThemeName | "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_URL | baseUrl | Базовый URL API |
SOBA_API_KEY | apiKey | API-ключ |
SOBA_MODEL | model | Идентификатор модели |
SOBA_MAX_OUTPUT_TOKENS | maxOutputTokens | Лимит выходных токенов |
SOBA_MAX_TOKENS | maxOutputTokens | Устаревший alias для SOBA_MAX_OUTPUT_TOKENS |
SOBA_MAX_COMPLETION_TOKENS | maxCompletionTokens | Лимит reasoning токенов |
SOBA_REASONING_EFFORT | reasoning | default, none, minimal, low, medium, high, xhigh или max |
SOBA_REASONING_BUDGET | reasoning | Положительный числовой reasoning budget |
SOBA_REASONING_ENABLED | reasoning | true/1 или false/0 для toggle-моделей |
SOBA_CONTEXT_WINDOW | contextWindow | Размер контекстного окна |
SOBA_MAX_AGENT_ITERATIONS | maxAgentIterations | Лимит итераций |
SOBA_MAX_STALLED_ITERATIONS | maxStalledIterations | Итерации без прогресса до stall recovery |
SOBA_MAX_RUN_MINUTES | maxRunMinutes | Максимальная длительность задачи в минутах |
SOBA_BASH_MAX_TIMEOUT_SECONDS | bashMaxTimeoutSeconds | Верхняя граница timeout для одного вызова bash tool в секундах |
SOBA_LANG | lang | Язык интерфейса |
SOBA_THEME | theme | Тема TUI |
SOBA_AUTO_COMPACT | compaction.auto | Авто-компакшн (false/0 отключают) |
SOBA_SOUND_ENABLED | sound.enabled | Включить/отключить звуковые уведомления |
SOBA_SOUND_VOLUME | sound.volume | Громкость 0.0–1.0 |
SOBA_SOUND_REPEAT | sound.repeatMode | repeat/true/1 = повтор, once/false/0 = один раз |
SOBA_CONFIG_PATH | путь к config file | Использовать нестандартный файл конфигурации |
NO_COLOR | output colors | Отключить ANSI-цвета, как --no-color |
DEEPSEEK_API_KEY | apiKey (для провайдера deepseek) | API-ключ DeepSeek |
MOONSHOT_API_KEY | apiKey (для провайдера kimi) | API-ключ Moonshot Kimi |
DASHSCOPE_API_KEY | apiKey (для провайдера alibaba) | API-ключ Alibaba Qwen |
OPENROUTER_API_KEY | apiKey (для провайдера openrouter) | API-ключ OpenRouter |
OPENAI_API_KEY | apiKey (для провайдера 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 |
|---|---|---|
deepseek | DeepSeek | https://api.deepseek.com |
kimi | Moonshot Kimi (K2 for code) | https://api.moonshot.cn/v1 |
alibaba | Alibaba Qwen (Singapore) | https://dashscope-intl.aliyuncs.com/compatible-mode/v1 |
openrouter | OpenRouter | https://openrouter.ai/api/v1 |
openai-official | OpenAI Responses API | https://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.
| Параметр | По умолчанию | Описание |
|---|---|---|
auto | true | Включить мягкий deferred preflight compaction |
compactOnTurnComplete | true | Пометить compaction как pending после завершения хода |
compactOnMilestone | true | Пометить compaction как pending при milestone checkpoint |
minTokensForAutoCompact | 32000 | Минимум эффективных токенов для рассмотрения авто-компакта |
minReclaimableTokens | 12000 | Минимум токенов, доступных для освобождения (ROI) |
minSavingsRatio | 0.25 | Минимальный коэффициент экономии для ROI (25%) |
keepRecentTokens | 20000 | Количество токенов, сохраняемых после компакта |
safetyReserveTokens | 8192 | Резерв безопасности (вычитается из context window для hard limit) |
autoCompactThresholdRatio | 0.8 | Мягкий порог как доля hard limit запроса |
timeoutMs | 15000 | Бюджет модельного 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 > 0maxOutputTokens > 0safetyReserveTokens >= 0maxOutputTokens + safetyReserveTokens < contextWindowkeepRecentTokens < contextWindow - maxOutputTokens - safetyReserveTokens
При нарушении инвариантов compaction отключается с предупреждением в лог.
⚠️ Compaction disabled: config validation failed:
keepRecentTokens (50000) must be < hard limit (47360)
