CLI-бэкенды
OpenClaw может запускать локальные AI CLI в качестве текстового резерва, когда API-провайдеры не работают, ограничивают запросы или временно работают некорректно. Это намеренно консервативный подход:
- Инструменты отключены (без вызовов инструментов).
- Текст на входе → текст на выходе (надежно).
- Сессии поддерживаются (чтобы последующие ответы оставались связными).
- Изображения могут передаваться сквозным образом, если CLI принимает пути к изображениям.
Это задумано как страховочная сеть, а не основной путь. Используйте её, когда вам нужны «всегда работающие» текстовые ответы без зависимости от внешних API.
Быстрый старт для новичков
Вы можете использовать Claude Code CLI без какой-либо конфигурации (OpenClaw включает встроенные настройки по умолчанию):
openclaw agent --message "hi" --model claude-cli/opus-4.6
Codex CLI также работает из коробки:
openclaw agent --message "hi" --model codex-cli/gpt-5.4
Если ваш шлюз работает под управлением launchd/systemd и PATH минимален, просто добавьте путь к команде:
{
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
},
},
},
}
Всё. Никаких ключей, дополнительной конфигурации аутентификации, кроме самой CLI, не требуется.
Использование в качестве резерва
Добавьте CLI-бэкенд в список резервных вариантов, чтобы он запускался только при сбое основных моделей:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["claude-cli/opus-4.6", "claude-cli/opus-4.5"],
},
models: {
"anthropic/claude-opus-4-6": { alias: "Opus" },
"claude-cli/opus-4.6": {},
"claude-cli/opus-4.5": {},
},
},
},
}
Примечания:
- Если вы используете
agents.defaults.models(белый список), вы должны включить тудаclaude-cli/.... - Если основной провайдер не работает (аутентификация, лимиты запросов, таймауты), OpenClaw попробует использовать CLI-бэкенд следующим.
Обзор конфигурации
Все CLI-бэкенды находятся в разделе:
agents.defaults.cliBackends
Каждая запись имеет ключ в виде идентификатора провайдера (например, claude-cli, my-cli). Этот идентификатор становится левой частью ссылки на модель:
<провайдер>/<модель>
Пример конфигурации
{
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
"my-cli": {
command: "my-cli",
args: ["--json"],
output: "json",
input: "arg",
modelArg: "--model",
modelAliases: {
"claude-opus-4-6": "opus",
"claude-opus-4-5": "opus",
"claude-sonnet-4-5": "sonnet",
},
sessionArg: "--session",
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptArg: "--system",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
serialize: true,
},
},
},
},
}
Как это работает
- Выбирает бэкенд на основе префикса провайдера (
claude-cli/...). - Формирует системный промпт, используя тот же промпт OpenClaw + контекст рабочей области.
- Выполняет CLI с идентификатором сессии (если поддерживается), чтобы история оставалась согласованной.
- Парсит вывод (JSON или обычный текст) и возвращает итоговый текст.
- Сохраняет идентификаторы сессий для каждого бэкенда, чтобы последующие запросы использовали ту же сессию CLI.
Сессии
- Если CLI поддерживает сессии, установите
sessionArg(например,--session-id) илиsessionArgs(заполнитель{sessionId}), когда ID нужно вставить в несколько флагов. - Если CLI использует подкоманду возобновления с другими флагами, установите
resumeArgs(заменяетargsпри возобновлении) и, опционально,resumeOutput(для возобновления без JSON). sessionMode:always: всегда отправлять идентификатор сессии (новый UUID, если нет сохраненного).existing: отправлять идентификатор сессии только если он был сохранен ранее.none: никогда не отправлять идентификатор сессии.
Изображения (сквозная передача)
Если ваш CLI принимает пути к изображениям, установите imageArg:
imageArg: "--image",
imageMode: "repeat"
OpenClaw запишет изображения в формате base64 во временные файлы. Если imageArg установлен, эти пути передаются как аргументы CLI. Если imageArg отсутствует, OpenClaw добавляет пути к файлам в промпт (инъекция пути), чего достаточно для CLI, которые автоматически загружают локальные файлы по простым путям (поведение Claude Code CLI).
Ввод / вывод
output: "json"(по умолчанию) пытается распарсить JSON и извлечь текст + идентификатор сессии.output: "jsonl"парсит потоки JSONL (Codex CLI--json) и извлекает последнее сообщение агента плюсthread_id, если он присутствует.output: "text"рассматривает stdout как окончательный ответ.
Режимы ввода:
input: "arg"(по умолчанию) передает промпт как последний аргумент CLI.input: "stdin"отправляет промпт через stdin.- Если промпт очень длинный и установлен
maxPromptArgChars, используется stdin.
Настройки по умолчанию (встроенные)
OpenClaw включает настройки по умолчанию для claude-cli:
command: "claude"args: ["-p", "--output-format", "json", "--permission-mode", "bypassPermissions"]resumeArgs: ["-p", "--output-format", "json", "--permission-mode", "bypassPermissions", "--resume", "{sessionId}"]modelArg: "--model"systemPromptArg: "--append-system-prompt"sessionArg: "--session-id"systemPromptWhen: "first"sessionMode: "always"
OpenClaw также включает настройки по умолчанию для codex-cli:
command: "codex"args: ["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","read-only","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
Переопределяйте только при необходимости (часто требуется абсолютный путь command).
Ограничения
- Нет инструментов OpenClaw (CLI-бэкенд никогда не получает вызовы инструментов). Некоторые CLI могут по-прежнему запускать собственные инструменты агента.
- Нет потоковой передачи (вывод CLI собирается, а затем возвращается).
- Структурированные выходные данные зависят от формата JSON CLI.
- Сессии Codex CLI возобновляются через текстовый вывод (без JSONL), что менее структурировано, чем первоначальный запуск с
--json. Сессии OpenClaw по-прежнему работают нормально.
Устранение неполадок
- CLI не найдена: установите
commandв полный путь. - Неправильное имя модели: используйте
modelAliasesдля сопоставленияпровайдер/модель→ модель CLI. - Нет непрерывности сессии: убедитесь, что
sessionArgустановлен иsessionModeне равенnone(Codex CLI в настоящее время не может возобновить работу с JSON-выводом). - Изображения игнорируются: установите
imageArg(и убедитесь, что CLI поддерживает пути к файлам).