Backend CLI (runtime fallback)
OpenClaw dapat menjalankan CLI AI lokal sebagai fallback teks saja ketika provider API sedang down, terkena rate limit, atau sementara berperilaku tidak semestinya. Ini sengaja dibuat konservatif:- Tool OpenClaw tidak disuntikkan secara langsung, tetapi backend dengan
bundleMcp: true(default Claude CLI) dapat menerima tool gateway melalui bridge MCP loopback. - Streaming JSONL (Claude CLI menggunakan
--output-format stream-jsondengan--include-partial-messages; prompt dikirim melalui stdin). - Sesi didukung (sehingga giliran lanjutan tetap koheren).
- Gambar dapat diteruskan jika CLI menerima path gambar.
Memulai cepat yang ramah pemula
Anda dapat menggunakan Claude CLI tanpa konfigurasi apa pun (plugin Anthropic bawaan mendaftarkan backend default):agents.defaults.cliBackends.
Menggunakannya sebagai fallback
Tambahkan backend CLI ke daftar fallback Anda agar hanya berjalan ketika model utama gagal:- Jika Anda menggunakan
agents.defaults.models(allowlist), Anda harus menyertakanclaude-cli/.... - Jika provider utama gagal (auth, rate limit, timeout), OpenClaw akan mencoba backend CLI berikutnya.
- Backend Claude CLI bawaan tetap menerima alias yang lebih pendek seperti
claude-cli/opus,claude-cli/opus-4.6, atauclaude-cli/sonnet, tetapi dokumentasi dan contoh config menggunakan ref kanonisclaude-cli/claude-*.
Ikhtisar konfigurasi
Semua backend CLI berada di bawah:claude-cli, my-cli).
ID provider menjadi sisi kiri model ref Anda:
Contoh konfigurasi
Cara kerjanya
- Memilih backend berdasarkan prefiks provider (
claude-cli/...). - Membangun system prompt menggunakan prompt + konteks workspace OpenClaw yang sama.
- Menjalankan CLI dengan ID sesi (jika didukung) agar riwayat tetap konsisten.
- Mem-parsing output (JSON atau teks biasa) dan mengembalikan teks final.
- Menyimpan ID sesi per backend, sehingga giliran lanjutan memakai kembali sesi CLI yang sama.
Sesi
- Jika CLI mendukung sesi, atur
sessionArg(misalnya--session-id) atausessionArgs(placeholder{sessionId}) ketika ID perlu disisipkan ke beberapa flag. - Jika CLI menggunakan subcommand resume dengan flag yang berbeda, atur
resumeArgs(menggantikanargssaat resume) dan opsionalresumeOutput(untuk resume non-JSON). sessionMode:always: selalu kirim ID sesi (UUID baru jika tidak ada yang tersimpan).existing: hanya kirim ID sesi jika sebelumnya sudah tersimpan.none: jangan pernah kirim ID sesi.
serialize: truemenjaga run pada lajur yang sama tetap berurutan.- Sebagian besar CLI melakukan serialisasi pada satu lajur provider.
claude-clilebih sempit: run yang di-resume diserialisasi per ID sesi Claude, dan run baru diserialisasi per path workspace. Workspace yang independen dapat berjalan paralel.- OpenClaw membuang reuse sesi CLI yang tersimpan ketika state auth backend berubah, termasuk relogin, rotasi token, atau kredensial profil auth yang berubah.
Gambar (pass-through)
Jika CLI Anda menerima path gambar, aturimageArg:
imageArg diatur, path tersebut
dilewatkan sebagai argumen CLI. Jika imageArg tidak ada, OpenClaw menambahkan
path file ke prompt (penyuntikan path), yang cukup untuk CLI yang otomatis
memuat file lokal dari path biasa (perilaku Claude CLI).
Input / output
output: "json"(default) mencoba mem-parse JSON dan mengekstrak teks + ID sesi.- Untuk output JSON Gemini CLI, OpenClaw membaca teks balasan dari
responsedan usage daristatssaatusagetidak ada atau kosong. output: "jsonl"mem-parse stream JSONL (misalnya Claude CLIstream-jsondan Codex CLI--json) dan mengekstrak pesan agent final plus pengenal sesi jika ada.output: "text"memperlakukan stdout sebagai respons final.
input: "arg"(default) meneruskan prompt sebagai argumen CLI terakhir.input: "stdin"mengirim prompt melalui stdin.- Jika prompt sangat panjang dan
maxPromptArgCharsdiatur, stdin digunakan.
Default (dimiliki plugin)
Plugin Anthropic bawaan mendaftarkan default untukclaude-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"]
gemini di PATH (brew install gemini-cli atau
npm install -g @google/gemini-cli).
Catatan JSON Gemini CLI:
- Teks balasan dibaca dari field JSON
response. - Usage fallback ke
statsketikausagetidak ada atau kosong. stats.cacheddinormalisasi menjadi OpenClawcacheRead.- Jika
stats.inputtidak ada, OpenClaw menurunkan token input daristats.input_tokens - stats.cached.
command absolut).
Default milik plugin
Default backend CLI kini menjadi bagian dari surface plugin:- Plugin mendaftarkannya dengan
api.registerCliBackend(...). idbackend menjadi prefiks provider dalam model ref.- Config pengguna di
agents.defaults.cliBackends.<id>tetap menimpa default plugin. - Pembersihan config khusus backend tetap dimiliki plugin melalui hook
normalizeConfigopsional.
Overlay bundle MCP
Backend CLI tidak menerima pemanggilan tool OpenClaw secara langsung, tetapi backend dapat ikut serta ke overlay config MCP yang dihasilkan denganbundleMcp: true.
Perilaku bawaan saat ini:
claude-cli:bundleMcp: true(default)codex-cli: tanpa overlay bundle MCPgoogle-gemini-cli: tanpa overlay bundle MCP
- menjalankan server HTTP MCP loopback yang mengekspos tool gateway ke proses CLI
- mengautentikasi bridge dengan token per sesi (
OPENCLAW_MCP_TOKEN) - membatasi akses tool ke sesi, akun, dan konteks channel saat ini
- memuat server bundle-MCP yang diaktifkan untuk workspace saat ini
- menggabungkannya dengan
--mcp-configbackend yang sudah ada - menulis ulang argumen CLI untuk meneruskan
--strict-mcp-config --mcp-config <generated-file>
--strict-mcp-config mencegah Claude CLI mewarisi server MCP ambient
tingkat pengguna atau global. Jika tidak ada server MCP yang diaktifkan, OpenClaw tetap
menyuntikkan config kosong yang strict agar run latar belakang tetap terisolasi.
Batasan
- Tidak ada pemanggilan tool OpenClaw langsung. OpenClaw tidak menyuntikkan pemanggilan tool ke
protokol backend CLI. Namun, backend dengan
bundleMcp: true(default Claude CLI) menerima tool gateway melalui bridge MCP loopback, sehingga Claude CLI dapat memanggil tool OpenClaw melalui dukungan MCP native-nya. - Streaming bersifat spesifik backend. Claude CLI menggunakan streaming JSONL
(
stream-jsondengan--include-partial-messages); backend CLI lain mungkin masih dibuffer sampai proses selesai. - Output terstruktur bergantung pada format JSON CLI.
- Sesi Codex CLI dilanjutkan melalui output teks (bukan JSONL), yang kurang
terstruktur dibanding run awal
--json. Sesi OpenClaw tetap bekerja secara normal.
Pemecahan masalah
- CLI tidak ditemukan: atur
commandke path lengkap. - Nama model salah: gunakan
modelAliasesuntuk memetakanprovider/model→ model CLI. - Tidak ada kesinambungan sesi: pastikan
sessionArgdiatur dansessionModebukannone(Codex CLI saat ini tidak dapat resume dengan output JSON). - Gambar diabaikan: atur
imageArg(dan verifikasi CLI mendukung path file).