CLI backends (fallback runtime)
OpenClaw는 API provider가 다운되었거나 rate limit에 걸렸거나 일시적으로 오동작할 때 로컬 AI CLI를 text-only fallback으로 실행할 수 있습니다. 이 경로는 의도적으로 보수적으로 설계되어 있습니다.- Tools are disabled (tool call 없음)
- Text in -> text out (안정적)
- Sessions are supported (후속 턴의 맥락 유지)
- Images can be passed through if the CLI accepts image paths
빠른 시작
Claude Code CLI는 별도 config 없이 바로 사용할 수 있습니다. OpenClaw에 기본값이 내장되어 있기 때문입니다.fallback으로 사용하기
CLI backend를 fallback 목록에 넣으면 primary model이 실패했을 때만 실행되도록 할 수 있습니다.agents.defaults.modelsallowlist를 사용한다면claude-cli/...도 포함해야 합니다.- primary provider가 auth, rate limit, timeout 등으로 실패하면 OpenClaw가 다음으로 CLI backend를 시도합니다.
설정 개요
모든 CLI backend 설정은 다음 아래에 있습니다.claude-cli, my-cli)를 key로 사용합니다.
이 provider id가 모델 ref의 왼쪽 부분이 됩니다.
설정 예시
동작 방식
- provider prefix(
claude-cli/...)를 기준으로 backend를 선택합니다. - 동일한 OpenClaw prompt와 workspace context를 사용해 system prompt를 구성합니다.
- CLI가 지원하면 session id를 넣어 실행해 대화 이력을 이어갑니다.
- JSON 또는 plain text 출력을 파싱해 최종 text를 반환합니다.
- backend별 session id를 저장해 후속 요청에 재사용합니다.
Sessions
- CLI가 session을 지원한다면
sessionArg(예:--session-id) 또는 session ID를 여러 flag에 넣어야 할 때sessionArgs(placeholder{sessionId}포함)를 설정합니다. - CLI가 resume subcommand를 쓰고 다른 flag 조합이 필요하다면
resumeArgs(재개 시args대체)와 필요 시resumeOutput(재개 시 non-JSON 출력용)을 설정합니다. sessionMode:always: 항상 session id를 보냅니다. 저장된 값이 없으면 새 UUID를 만듭니다.existing: 이전에 저장된 session id가 있을 때만 보냅니다.none: session id를 전송하지 않습니다.
Images (pass-through)
CLI가 image path를 받을 수 있다면imageArg를 설정하세요.
imageArg가 설정돼 있으면 그 path를 CLI arg로 전달합니다. imageArg가 없으면 file path를 prompt 끝에 붙입니다(path injection). 이는 plain path만으로 local file을 자동 로드하는 CLI(예: Claude Code CLI)에서 충분합니다.
Inputs / outputs
output: "json"(기본값)은 JSON을 파싱해 text와 session id를 추출합니다.output: "jsonl"은 JSONL stream(Codex CLI--json)을 파싱해 마지막 agent message와 가능하면thread_id를 추출합니다.output: "text"는 stdout 전체를 최종 응답으로 취급합니다.
input: "arg"(기본값)는 prompt를 마지막 CLI arg로 전달합니다.input: "stdin"은 prompt를 stdin으로 보냅니다.- prompt가 매우 길고
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"
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 path를 지정하는 경우입니다.
제한 사항
- OpenClaw tools는 없음. CLI backend는 tool call을 받지 않습니다. 다만 일부 CLI는 자체 agent tooling을 실행할 수 있습니다.
- Streaming은 없음. CLI 출력은 모두 수집한 뒤 반환됩니다.
- Structured output 품질은 해당 CLI의 JSON 형식에 달려 있습니다.
- Codex CLI session은 text output으로 resume되며, 이는 초기
--json실행보다 구조화 수준이 낮습니다. 그래도 OpenClaw session은 정상적으로 유지됩니다.
문제 해결
- CLI not found:
command를 절대 경로로 지정하세요. - Wrong model name:
modelAliases로provider/model을 CLI model name에 매핑하세요. - No session continuity:
sessionArg가 설정돼 있고sessionMode가none이 아닌지 확인하세요. Codex CLI는 현재 JSON output으로 resume할 수 없습니다. - Images ignored:
imageArg를 설정하고, CLI가 file path 입력을 실제로 지원하는지 확인하세요.