- OpenClaw-tools worden niet rechtstreeks geïnjecteerd, maar backends met
bundleMcp: truekunnen Gateway-tools ontvangen via een loopback-MCP-brug. - JSONL-streaming voor CLI’s die dit ondersteunen.
- Sessies worden ondersteund (zodat vervolgroundes coherent blijven).
- Afbeeldingen kunnen worden doorgegeven als de CLI afbeeldingspaden accepteert.
Beginnersvriendelijke snelstart
Je kunt Claude Code CLI zonder configuratie gebruiken (de gebundelde Anthropic-plugin registreert een standaardbackend):main is de standaard-agent-id wanneer er geen expliciete agentlijst is geconfigureerd. Als
je meerdere agenten gebruikt, vervang dit dan door de agent-id die je wilt uitvoeren.
Als je Gateway onder launchd/systemd draait en PATH minimaal is, voeg dan alleen het
opdrachtpad toe:
agents.defaults.cliBackends.
Gebruiken als fallback
Voeg een CLI-backend toe aan je fallbacklijst, zodat deze alleen draait wanneer primaire modellen falen:- Als je
agents.defaults.models(allowlist) gebruikt, moet je daar ook je CLI-backendmodellen opnemen. - Als de primaire provider faalt (auth, rate limits, time-outs), probeert OpenClaw daarna de CLI-backend.
Configuratieoverzicht
Alle CLI-backends staan onder:claude-cli, my-cli).
De provider-id wordt de linkerkant van je modelref:
Voorbeeldconfiguratie
Hoe het werkt
- Selecteert een backend op basis van de providerprefix (
claude-cli/...). - Bouwt een systeemprompt met dezelfde OpenClaw-prompt en workspace-context.
- Voert de CLI uit met een sessie-id (indien ondersteund), zodat de geschiedenis consistent blijft.
De gebundelde
claude-cli-backend houdt per OpenClaw-sessie een Claude-stdio-proces actief en stuurt vervolgroundes via stream-json-stdin. - Parset uitvoer (JSON of platte tekst) en retourneert de uiteindelijke tekst.
- Bewaart sessie-id’s per backend, zodat vervolgrondes dezelfde CLI-sessie hergebruiken.
De gebundelde Anthropic-
claude-cli-backend wordt opnieuw ondersteund. Anthropic-medewerkers
hebben ons verteld dat Claude CLI-gebruik in OpenClaw-stijl opnieuw is toegestaan, dus OpenClaw behandelt
claude -p-gebruik als goedgekeurd voor deze integratie tenzij Anthropic
een nieuw beleid publiceert.claude-cli-backend geeft de voorkeur aan Claude Code’s native resolver
voor OpenClaw-Skills. Wanneer de huidige snapshot van Skills ten minste
één geselecteerde Skill met een gematerialiseerd pad bevat, geeft OpenClaw een tijdelijke Claude
Code-plugin door met --plugin-dir en laat het de dubbele OpenClaw-catalogus met Skills
weg uit de toegevoegde systeemprompt. Als de snapshot geen gematerialiseerde plugin-Skill
heeft, behoudt OpenClaw de promptcatalogus als fallback. Env-/API-sleuteloverrides voor Skills
worden nog steeds door OpenClaw toegepast op de childprocesomgeving voor de
run.
Claude CLI heeft ook een eigen niet-interactieve permissiemodus. OpenClaw koppelt die
aan het bestaande exec-beleid in plaats van Claude-specifieke beleidsconfiguratie toe te voegen.
Voor door OpenClaw beheerde live Claude-sessies is het effectieve OpenClaw-execbeleid
leidend: YOLO (tools.exec.security: "full" en
tools.exec.ask: "off") start Claude met
--permission-mode bypassPermissions, terwijl beperkend effectief execbeleid
Claude start met --permission-mode default. Per-agent
agents.list[].tools.exec-instellingen overschrijven globale tools.exec voor die
agent. Ruwe Claude-backendargumenten kunnen nog steeds --permission-mode bevatten, maar live
Claude-starts normaliseren die vlag zodat deze overeenkomt met het effectieve OpenClaw-execbeleid.
De gebundelde Anthropic-claude-cli-backend koppelt OpenClaw-/think-niveaus ook
aan Claude Code’s native --effort-vlag voor niveaus die niet uit staan. minimal en
low worden gekoppeld aan low, adaptive en medium aan medium, en high,
xhigh en max worden rechtstreeks gekoppeld. Andere CLI-backends hebben hun eigen plugin nodig om
een equivalente argv-mapper te declareren voordat /think invloed kan hebben op de gestarte CLI.
Voordat OpenClaw de gebundelde claude-cli-backend kan gebruiken, moet Claude Code zelf
al op dezelfde host zijn ingelogd:
agents.defaults.cliBackends.claude-cli.command alleen wanneer de claude-
binary nog niet op PATH staat.
Sessies
- Als de CLI sessies ondersteunt, stel dan
sessionArg(bijv.--session-id) ofsessionArgs(placeholder{sessionId}) in wanneer de ID in meerdere vlaggen moet worden ingevoegd. - Als de CLI een resume-subopdracht met andere vlaggen gebruikt, stel dan
resumeArgsin (vervangtargsbij hervatten) en optioneelresumeOutput(voor niet-JSON-hervattingen). sessionMode:always: stuur altijd een sessie-id (nieuwe UUID als er geen is opgeslagen).existing: stuur alleen een sessie-id als er eerder een is opgeslagen.none: stuur nooit een sessie-id.
claude-cligebruikt standaardliveSession: "claude-stdio",output: "jsonl", eninput: "stdin", zodat vervolgrondes het live Claude-proces hergebruiken zolang het actief is. Warme stdio is nu de standaard, ook voor aangepaste configuraties die transportvelden weglaten. Als de Gateway opnieuw start of het idle proces afsluit, hervat OpenClaw vanaf de opgeslagen Claude-sessie-id. Opgeslagen sessie- id’s worden gecontroleerd tegen een bestaand leesbaar projecttranscript voordat wordt hervat, zodat fantoomkoppelingen worden gewist metreason=transcript-missingin plaats van stilzwijgend een nieuwe Claude CLI-sessie te starten onder--resume.- Live Claude-sessies behouden begrensde JSONL-uitvoerbewaking. Standaarden staan tot
8 MiB en 20.000 ruwe JSONL-regels per ronde toe. Tool-intensieve Claude-rondes kunnen
deze per backend verhogen met
agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawCharsenmaxTurnLines; OpenClaw begrenst die instellingen op 64 MiB en 100.000 regels. - Opgeslagen CLI-sessies zijn provider-eigendom voor continuïteit. De impliciete dagelijkse sessie-
reset onderbreekt ze niet;
/reseten explicietesession.reset-beleidsregels doen dat nog steeds wel. - Nieuwe CLI-sessies worden normaal alleen opnieuw gevoed vanuit OpenClaw’s Compaction-samenvatting
plus de staart na Compaction. Om korte sessies te herstellen die ongeldig worden
vóór Compaction, kan een backend zich aanmelden met
reseedFromRawTranscriptWhenUncompacted: true. OpenClaw houdt het opnieuw voeden uit ruwe transcripties nog steeds begrensd en beperkt het tot veilige ongeldigverklaringen, zoals ontbrekende CLI-transcripties, wijzigingen in systeemprompt/MCP of een retry na verlopen sessie; wijzigingen in authprofiel of credential-epoch voeden nooit ruwe transcriptgeschiedenis opnieuw.
serialize: truehoudt runs in dezelfde lane op volgorde.- De meeste CLI’s serialiseren op één providerlane.
- OpenClaw laat hergebruik van opgeslagen CLI-sessies vallen wanneer de geselecteerde auth-identiteit verandert, inclusief een gewijzigde authprofiel-id, statische API-sleutel, statisch token of OAuth- accountidentiteit wanneer de CLI er een blootlegt. Rotatie van OAuth-toegangs- en refresh-tokens onderbreekt de opgeslagen CLI-sessie niet. Als een CLI geen stabiele OAuth-account-id blootlegt, laat OpenClaw die CLI de hervatpermissies afdwingen.
Fallback-prelude uit claude-cli-sessies
Wanneer eenclaude-cli-poging overschakelt naar een niet-CLI-kandidaat in
agents.defaults.model.fallbacks, voedt OpenClaw
de volgende poging met een contextprelude die wordt geoogst uit Claude Code’s lokale
JSONL-transcript op ~/.claude/projects/. Zonder deze seed zou de fallback-
provider koud starten omdat OpenClaw’s eigen sessietranscript leeg is
voor claude-cli-runs.
- De prelude geeft de voorkeur aan de nieuwste
/compact-samenvatting ofcompact_boundary- marker en voegt daarna de meest recente rondes na de grens toe tot aan een teken- budget. Rondes van vóór de grens worden weggelaten omdat de samenvatting ze al vertegenwoordigt. - Toolblokken worden samengevoegd tot compacte
(tool call: name)- en(tool result: …)-hints om het promptbudget eerlijk te houden. De samenvatting wordt gelabeld als(truncated)als deze overloopt. - Fallbacks van dezelfde provider van
claude-clinaarclaude-clivertrouwen op Claude’s eigen--resumeen slaan de prelude over. - De seed hergebruikt de bestaande validatie van het Claude-sessiebestandspad, zodat willekeurige paden niet kunnen worden gelezen.
Afbeeldingen (doorgeven)
Als je CLI afbeeldingspaden accepteert, stel danimageArg in:
imageArg is ingesteld, worden die
paden als CLI-argumenten doorgegeven. Als imageArg ontbreekt, voegt OpenClaw de
bestandspaden toe aan de prompt (padinjectie), wat voldoende is voor CLI’s die lokale bestanden automatisch
laden vanuit platte paden.
Invoer / uitvoer
output: "json"(standaard) probeert JSON te parsen en tekst plus sessie-id te extraheren.- Voor Gemini CLI-JSON-uitvoer leest OpenClaw antwoordtekst uit
responseen gebruik uitstatswanneerusageontbreekt of leeg is. De gebundelde Gemini CLI-standaard gebruiktstream-json, maar oude--output-format json-overrides gebruiken nog steeds de JSON-parser. output: "jsonl"parset JSONL-streams en extraheert het uiteindelijke agentbericht plus sessie- identifiers wanneer aanwezig.output: "text"behandelt stdout als het uiteindelijke antwoord.
input: "arg"(standaard) geeft de prompt door als het laatste CLI-argument.input: "stdin"verzendt de prompt via stdin.- Als de prompt erg lang is en
maxPromptArgCharsis ingesteld, wordt stdin gebruikt.
Standaardwaarden (eigendom van de plugin)
Gebundelde standaardwaarden voor CLI-backends staan bij hun beherende Plugin. Anthropic beheert bijvoorbeeldclaude-cli en Google beheert google-gemini-cli. OpenAI Codex-agentruns gebruiken de Codex app-server-harness via openai/*; OpenClaw registreert niet langer een gebundelde codex-cli-backend.
De gebundelde Anthropic-plugin registreert een standaardwaarde voor claude-cli:
command: "claude"args: ["-p","--output-format","stream-json","--include-partial-messages","--verbose", ...]output: "jsonl"input: "stdin"modelArg: "--model"sessionMode: "always"
google-gemini-cli:
command: "gemini"args: ["--skip-trust", "--approval-mode", "auto_edit", "--output-format", "stream-json", "--prompt", "{prompt}"]resumeArgs: ["--skip-trust", "--approval-mode", "auto_edit", "--resume", "{sessionId}", "--output-format", "stream-json", "--prompt", "{prompt}"]output: "jsonl"resumeOutput: "jsonl"jsonlDialect: "gemini-stream-json"imageArg: "@"imagePathScope: "workspace"modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
gemini op PATH (brew install gemini-cli of npm install -g @google/gemini-cli).
Opmerkingen over Gemini CLI-uitvoer:
- De standaard
stream-json-parser leest assistant-message-events, tool-events, definitieveresult-usage en fatale Gemini-foutevents. - Als je Gemini-argumenten overschrijft naar
--output-format json, normaliseert OpenClaw die backend terug naaroutput: "json"en leest antwoordtekst uit het JSON-veldresponse. - Usage valt terug op
statswanneerusageontbreekt of leeg is. stats.cachedwordt genormaliseerd naar OpenClawcacheRead.- Als
stats.inputontbreekt, leidt OpenClaw invoertokens af uitstats.input_tokens - stats.cached.
command-pad).
Standaardwaarden in eigendom van Plugins
Standaardwaarden voor CLI-backends maken nu deel uit van het Plugin-oppervlak:- Plugins registreren ze met
api.registerCliBackend(...). - De backend-
idwordt het providerprefix in modelreferenties. - Gebruikersconfiguratie in
agents.defaults.cliBackends.<id>overschrijft nog steeds de Plugin-standaardwaarde. - Backendspecifieke configuratieopschoning blijft eigendom van de Plugin via de optionele
normalizeConfig-hook.
input herschrijft de systeemprompt en gebruikersprompt die aan de CLI worden doorgegeven. output herschrijft gestreamde assistant-tekst en geparste definitieve tekst voordat OpenClaw zijn eigen controlemakers en kanaalbezorging verwerkt. Voor provider-backed modelaanroepen herstelt output ook stringwaarden binnen gestructureerde tool-call-argumenten na streamreparatie en voor tooluitvoering. Ruwe provider-JSON-fragmenten blijven ongewijzigd; consumenten moeten de gestructureerde partial-, end- of result-payload gebruiken.
Voor CLI’s die providerspecifieke JSONL-events uitsturen, stel je jsonlDialect in op de configuratie van die backend. Ondersteunde dialecten zijn claude-stream-json voor Claude Code-compatibele streams en gemini-stream-json voor Gemini CLI stream-json-events.
Eigendom van native Compaction
Sommige CLI-backends draaien een agent die zijn eigen transcript comprimeert, dus OpenClaw mag zijn beveiligende summarizer niet daarop uitvoeren - dat zou de eigen Compaction van de backend tegenwerken en kan de beurt hard laten falen.claude-cli heeft geen harness-endpoint - Claude Code comprimeert intern - dus declareert het ownsNativeCompaction: true, en OpenClaw retourneert een no-op vanuit het Compaction-pad. Native-harness-sessies zoals Codex blijven in plaats daarvan naar hun harness-Compaction-endpoint routeren.
Omdat de backend eigenaar is van Compaction, is de oude noodoplossing om contextTokens: 1_000_000 in te stellen puur om te voorkomen dat OpenClaw’s beveiliging op een claude-cli-sessie afgaat niet langer nodig - de opt-out vervangt die.
ownsNativeCompaction alleen voor een backend die echt eigenaar is van zijn Compaction: die moet betrouwbaar zijn eigen transcript begrenzen wanneer het zijn contextvenster nadert en een hervatbare sessie persistent maken (bijv. --resume / --session-id); anders kan een uitgestelde sessie boven budget blijven. Overeenkomende agentHarnessId-sessies blijven naar het harness-endpoint routeren.
Bundle MCP-overlays
CLI-backends ontvangen geen OpenClaw-toolaanroepen direct, maar een backend kan zich aanmelden voor een gegenereerde MCP-configuratieoverlay metbundleMcp: true.
Huidig gebundeld gedrag:
claude-cli: gegenereerd strikt MCP-configuratiebestandgoogle-gemini-cli: gegenereerd Gemini-systeeminstellingenbestand
- start een loopback-HTTP-MCP-server die gateway-tools beschikbaar maakt aan het CLI-proces
- authenticeert de bridge met een token per sessie (
OPENCLAW_MCP_TOKEN) - beperkt tooltoegang tot de huidige sessie-, account- en kanaalcontext
- laadt ingeschakelde bundle-MCP-servers voor de huidige workspace
- voegt ze samen met een bestaande backend-MCP-configuratie-/instellingenvorm
- herschrijft de startconfiguratie met de integratiemodus, eigendom van de backend, uit de beherende extensie
mcp.sessionIdleTtlMs milliseconden inactiviteit (standaard 10 minuten; stel 0 in om uit te schakelen). Eenmalige embedded runs zoals auth-probes, slug-generatie en active-memory-recall vragen cleanup aan het einde van de run, zodat stdio-children en Streamable HTTP/SSE-streams niet langer leven dan de run.
Limiet voor reseed-geschiedenis
Wanneer een nieuwe CLI-sessie wordt geseed vanuit een eerder OpenClaw-transcript (bijvoorbeeld na eensession_expired-retry), wordt het gerenderde <conversation_history>-blok begrensd om te voorkomen dat reseed-prompts uit de hand lopen. De standaardwaarde is 12288 tekens (ongeveer 3000 tokens).
Claude CLI-backends gebruiken automatisch een grotere limiet die is afgeleid van de opgeloste Claude-contexttier. Standaard Claude-runs met 200K tokens behouden een groter transcriptsegment, en Claude-runs met 1M tokens behouden opnieuw een groter segment, terwijl andere CLI-backends de conservatieve standaardwaarde behouden.
- De limiet geldt alleen voor het prior-history-blok van de reseed-prompt. Limieten voor live-sessie-uitvoer worden afzonderlijk afgestemd onder
reliability.outputLimits(zie Sessies).
Beperkingen
- Geen directe OpenClaw-toolaanroepen. OpenClaw injecteert geen toolaanroepen in het CLI-backendprotocol. Backends zien gateway-tools alleen wanneer ze zich aanmelden voor
bundleMcp: true. - Streaming is backendspecifiek. Sommige backends streamen JSONL; andere bufferen tot afsluiten.
- Gestructureerde uitvoer is afhankelijk van het JSON-formaat van de CLI.
Problemen oplossen
- CLI niet gevonden: stel
commandin op een volledig pad. - Verkeerde modelnaam: gebruik
modelAliasesomprovider/model→ CLI-model te mappen. - Geen sessiecontinuiteit: zorg dat
sessionArgis ingesteld en datsessionModenietnoneis. - Afbeeldingen genegeerd: stel
imageArgin (en controleer of de CLI bestandspaden ondersteunt).