CLI Backends(フォールバックランタイム)
OpenClawは、APIプロバイダーが停止している、レート制限されている、または一時的に不安定なときに、 ローカルAI CLI をテキスト専用フォールバックとして実行できます。これは意図的に保守的な設計です。- OpenClawのツールは直接注入されません。ただし
bundleMcp: trueのバックエンド(Claude CLIのデフォルト)は、local loopback MCPブリッジ経由でGatewayツールを受け取れます。 - JSONLストリーミング(Claude CLIは
--output-format stream-jsonと--include-partial-messagesを使用し、プロンプトはstdin経由で送信されます)。 - セッションに対応しています(そのため、後続ターンでも一貫性が保たれます)。
- CLIが画像パスを受け付ける場合、画像をそのまま渡せます。
初心者向けクイックスタート
Claude CLIは設定なしで使えます(同梱のAnthropic pluginが デフォルトバックエンドを登録します)。agents.defaults.cliBackends でそのバックエンドを明示的に参照していれば、
OpenClawは所有する同梱pluginを自動的に読み込むようになりました。
フォールバックとして使う
CLIバックエンドをフォールバックリストに追加すると、主要モデルが失敗したときだけ実行されます。agents.defaults.models(allowlist)を使う場合は、claude-cli/...も含める必要があります。- 主要プロバイダーが失敗した場合(認証、レート制限、タイムアウト)、OpenClawは次に CLIバックエンドを試します。
- 同梱のClaude CLIバックエンドは引き続き
claude-cli/opus、claude-cli/opus-4.6、claude-cli/sonnetのような短いエイリアスも受け付けますが、 ドキュメントと設定例では正規のclaude-cli/claude-*refを使用します。
設定概要
すべてのCLIバックエンドは次の配下にあります。claude-cli, my-cli)でキー付けされます。
このprovider idが、モデルrefの左側になります。
設定例
仕組み
- バックエンドを選択します。選択基準はprovider接頭辞(
claude-cli/...)です。 - 同じOpenClawプロンプト + ワークスペースコンテキストを使ってシステムプロンプトを構築します。
- 対応している場合はセッションid付きでCLIを実行し、履歴の一貫性を保ちます。
- 出力を解析し(JSONまたはプレーンテキスト)、最終テキストを返します。
- バックエンドごとにセッションidを永続化し、後続ターンで同じCLIセッションを再利用します。
セッション
- CLIがセッションに対応している場合は、
sessionArg(例:--session-id)またはsessionArgs(IDを複数のフラグに挿入する必要がある場合のプレースホルダー{sessionId})を設定します。 - CLIが異なるフラグを持つresumeサブコマンドを使う場合は、
resumeArgs(再開時にargsを置き換えます)と、必要に応じてresumeOutput(非JSONのresume用)を設定します。 sessionMode:always: 常にセッションidを送信します(保存済みのものがなければ新しいUUID)。existing: 以前に保存されたセッションidがある場合のみ送信します。none: セッションidを送信しません。
serialize: trueは、同一レーンでの実行順序を保ちます。- ほとんどのCLIは、1つのproviderレーン上でシリアライズされます。
claude-cliはより狭く、再開実行はClaudeセッションidごとにシリアライズされ、 新規実行はワークスペースパスごとにシリアライズされます。独立したワークスペースは並列実行できます。- OpenClawは、バックエンドの認証状態が変化した場合、 relogin、トークンローテーション、またはauth profile credentialの変更を含めて、 保存済みCLIセッションの再利用を破棄します。
画像(そのまま渡す)
CLIが画像パスを受け付ける場合は、imageArg を設定します。
imageArg が設定されていれば、
それらのパスはCLI引数として渡されます。imageArg がない場合、OpenClawは
ファイルパスをプロンプトに追記します(パス注入)。これは、平文パスからローカルファイルを
自動読み込みするCLI(Claude CLIの挙動)には十分です。
入力 / 出力
output: "json"(デフォルト)は、JSONを解析し、テキスト + セッションidの抽出を試みます。- Gemini CLIのJSON出力では、
usageが欠けているか空の場合、 OpenClawは返信テキストをresponseから、usageをstatsから読み取ります。 output: "jsonl"はJSONLストリーム(たとえばClaude CLIのstream-jsonやCodex CLIの--json)を解析し、最終エージェントメッセージと、 存在する場合はセッション識別子を抽出します。output: "text"はstdoutを最終応答として扱います。
input: "arg"(デフォルト)は、プロンプトを最後のCLI引数として渡します。input: "stdin"は、プロンプトをstdin経由で送信します。- プロンプトが非常に長く、
maxPromptArgCharsが設定されている場合は、stdinが使われます。
デフォルト(plugin所有)
同梱のAnthropic pluginは、claude-cli のデフォルトを登録します。
command: "claude"args: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions"]resumeArgs: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions", "--resume", "{sessionId}"]output: "jsonl"input: "stdin"modelArg: "--model"systemPromptArg: "--append-system-prompt"sessionArg: "--session-id"systemPromptWhen: "first"sessionMode: "always"
codex-cli のデフォルトを登録します。
command: "codex"args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
google-gemini-cli のデフォルトを登録します。
command: "gemini"args: ["--prompt", "--output-format", "json"]resumeArgs: ["--resume", "{sessionId}", "--prompt", "--output-format", "json"]modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
PATH 上で gemini として利用可能である必要があります(brew install gemini-cli または
npm install -g @google/gemini-cli)。
Gemini CLIのJSONに関する注意:
- 返信テキストはJSONの
responseフィールドから読み取られます。 usageが存在しないか空の場合、usageはstatsにフォールバックします。stats.cachedはOpenClawのcacheReadに正規化されます。stats.inputが欠けている場合、OpenClawは入力トークンをstats.input_tokens - stats.cachedから導出します。
command パスです)。
plugin所有のデフォルト
CLIバックエンドのデフォルトは、現在ではpluginサーフェスの一部です。- pluginは
api.registerCliBackend(...)でそれらを登録します。 - バックエンドの
idが、モデルrefのprovider接頭辞になります。 agents.defaults.cliBackends.<id>にあるユーザー設定は、引き続きpluginデフォルトを上書きします。- バックエンド固有の設定クリーンアップは、オプションの
normalizeConfigフックを通じてplugin所有のままです。
Bundle MCPオーバーレイ
CLIバックエンドはOpenClawツール呼び出しを直接受け取りませんが、バックエンドはbundleMcp: true で生成されるMCP設定オーバーレイにオプトインできます。
現在の同梱挙動:
claude-cli:bundleMcp: true(デフォルト)codex-cli: bundle MCPオーバーレイなしgoogle-gemini-cli: bundle MCPオーバーレイなし
- GatewayツールをCLIプロセスに公開するlocal loopback HTTP MCPサーバーを起動する
- セッションごとのトークン(
OPENCLAW_MCP_TOKEN)でブリッジを認証する - ツールアクセスを現在のセッション、アカウント、チャンネルコンテキストに限定する
- 現在のワークスペースで有効なbundle-MCPサーバーを読み込む
- それらを既存のバックエンド
--mcp-configとマージする - CLI引数を書き換えて
--strict-mcp-config --mcp-config <generated-file>を渡す
--strict-mcp-config フラグは、Claude CLIが周囲の
ユーザーレベルまたはグローバルなMCPサーバーを継承するのを防ぎます。MCPサーバーが1つも有効でない場合でも、
バックグラウンド実行を分離したままにするため、OpenClawは厳格な空設定を注入します。
制限事項
- OpenClawツール呼び出しの直接注入はありません。 OpenClawは
CLIバックエンドプロトコルにツール呼び出しを注入しません。ただし、
bundleMcp: trueのバックエンド(Claude CLIのデフォルト)は、 local loopback MCPブリッジ経由でGatewayツールを受け取るため、 Claude CLIはネイティブMCPサポートを通じてOpenClawツールを呼び出せます。 - ストリーミングはバックエンド依存です。 Claude CLIはJSONLストリーミング
(
--include-partial-messages付きのstream-json)を使いますが、ほかのCLIバックエンドは 終了までバッファリングされる場合があります。 - 構造化出力は、そのCLIのJSON形式に依存します。
- Codex CLIセッションはテキスト出力経由で再開されます(JSONLではありません)。これは
初回の
--json実行より構造化が弱いですが、OpenClawセッション自体は通常どおり動作します。
トラブルシューティング
- CLIが見つからない:
commandをフルパスに設定してください。 - モデル名が違う:
modelAliasesを使ってprovider/model→ CLIモデルへマッピングしてください。 - セッション継続性がない:
sessionArgが設定され、sessionModeがnoneでないことを確認してください(Codex CLIは現在JSON出力で再開できません)。 - 画像が無視される:
imageArgを設定してください(あわせてCLIがファイルパスをサポートしていることも確認してください)。