Se il servizio upstream espone una normale API modello HTTP, scrivi invece un
Plugin provider. Se il runtime upstream
possiede sessioni agente complete, eventi degli strumenti, Compaction o stato
delle attività in background, usa un harness agente.
Di cosa è responsabile il Plugin
Un Plugin backend CLI ha tre contratti:| Contratto | File | Scopo |
|---|---|---|
| Entry point pacchetto | package.json | Indica a OpenClaw il modulo runtime del Plugin |
| Proprietà manifest | openclaw.plugin.json | Dichiara l’id del backend prima del caricamento runtime |
| Registrazione runtime | index.ts | Chiama api.registerCliBackend(...) con i default comando |
api.registerCliBackend(...).
Plugin backend minimale
Crea i metadati del pacchetto
package.json
./src/index.ts, aggiungi openclaw.runtimeExtensions
che punti al peer JavaScript compilato. Vedi Entry point.Dichiara la proprietà del backend
openclaw.plugin.json
cliBackends è l’elenco di proprietà runtime. Consente a OpenClaw di caricare
automaticamente il Plugin quando la configurazione o la selezione del modello
menziona acme-cli/....setup.cliBackends è la superficie di configurazione descriptor-first.
Aggiungila quando discovery dei modelli, onboarding o stato devono riconoscere
il backend senza caricare il runtime del Plugin. Usa requiresRuntime: false
solo quando quei descrittori statici sono sufficienti per la configurazione.Forma della configurazione
CliBackendConfig descrive come OpenClaw deve avviare e analizzare la CLI:
| Campo | Uso |
|---|---|
command | Nome del binario o percorso comando assoluto |
args | Argv di base per esecuzioni nuove |
resumeArgs | Argv alternativo per sessioni riprese; supporta {sessionId} |
output / resumeOutput | Parser: json, jsonl o text |
input | Trasporto prompt: arg o stdin |
modelArg | Flag usato prima dell’id modello |
modelAliases | Mappa gli id modello OpenClaw a id nativi della CLI |
sessionArg / sessionArgs | Come passare un id sessione |
sessionMode | always, existing o none |
sessionIdFields | Campi JSON che OpenClaw legge dall’output della CLI |
systemPromptArg / systemPromptFileArg | Trasporto del prompt di sistema |
systemPromptWhen | first, always o never |
imageArg / imageMode | Supporto per percorsi immagine |
serialize | Mantiene ordinate le esecuzioni dello stesso backend |
reliability.watchdog | Configurazione fine del timeout senza output |
Hook backend avanzati
CliBackendPlugin può anche definire:
| Hook | Uso |
|---|---|
normalizeConfig(config, context) | Riscrive la configurazione utente legacy dopo il merge |
resolveExecutionArgs(ctx) | Aggiunge flag specifici della richiesta, come thinking effort o isolamento delle domande laterali |
prepareExecution(ctx) | Crea bridge temporanei di autenticazione o configurazione prima dell’avvio |
transformSystemPrompt(ctx) | Applica una trasformazione finale del prompt di sistema specifica della CLI |
textTransforms | Sostituzioni bidirezionali prompt/output |
defaultAuthProfileId | Preferisce uno specifico profilo di autenticazione OpenClaw |
authEpochMode | Decide come i cambiamenti di autenticazione invalidano le sessioni CLI archiviate |
nativeToolMode | Dichiara se la CLI ha strumenti nativi sempre attivi |
sideQuestionToolMode | Dichiara strumenti nativi disabilitati per domande laterali /btw |
bundleMcp / bundleMcpMode | Aderisce al bridge strumenti MCP local loopback di OpenClaw |
ownsNativeCompaction | Il backend possiede la propria Compaction - OpenClaw si ritira |
ctx.executionMode è "agent" per turni normali e "side-question" per chiamate
effimere /btw. Usalo quando la CLI richiede flag monouso diversi, come
disabilitare strumenti nativi, persistenza della sessione o comportamento di
ripresa per BTW. Se un backend normalmente ha nativeToolMode: "always-on" ma il
suo argv per domande laterali disabilita in modo affidabile quegli strumenti,
imposta anche sideQuestionToolMode: "disabled"; altrimenti OpenClaw fallisce in
modo chiuso quando BTW richiede un’esecuzione CLI senza strumenti.
ownsNativeCompaction: disattivare la Compaction di OpenClaw
Se il tuo backend esegue un agente che compatta il proprio transcript, imposta
ownsNativeCompaction: true così il summarizer di salvaguardia di OpenClaw non viene mai eseguito sulle sue
sessioni - il ciclo di vita della Compaction CLI restituisce un no-op e il turno procede. claude-cli
lo dichiara perché Claude Code compatta internamente senza endpoint harness. Le sessioni
native-harness come Codex continuano invece a essere instradate al loro endpoint di Compaction harness.
Dichiaralo solo quando tutte le condizioni seguenti sono vere, altrimenti una sessione oltre budget rinviata può
restare oltre budget / diventare obsoleta (OpenClaw non la recupera più):
- il backend compatta o limita in modo affidabile il proprio transcript quando si avvicina alla sua finestra;
- persiste una sessione riprendibile così lo stato compattato sopravvive ai turni
(ad es.
--resume/--session-id); - non è una sessione di Compaction native-harness - le sessioni corrispondenti a
agentHarnessIdvengono invece instradate all’endpoint harness.
Bridge strumenti MCP
I backend CLI non ricevono gli strumenti OpenClaw per default. Se la CLI può consumare una configurazione MCP, aderiscici esplicitamente:| Modalità | Uso |
|---|---|
claude-config-file | CLI che accettano un file di configurazione MCP |
codex-config-overrides | CLI che accettano override di configurazione su argv |
gemini-system-settings | CLI che leggono impostazioni MCP dalla loro directory delle impostazioni di sistema |
nativeToolMode: "always-on" così OpenClaw può fallire in modo chiuso
quando un chiamante richiede nessuno strumento nativo.
Configurazione utente
Gli utenti possono sovrascrivere qualsiasi default del backend:command quando il binario è fuori da PATH.
Verifica
Per i plugin in bundle, aggiungi un test mirato attorno al builder e alla registrazione di setup, quindi esegui la lane di test mirata del plugin:Checklist
package.json contiene openclaw.extensions e voci runtime compilate per i pacchetti pubblicatiopenclaw.plugin.json dichiara cliBackends e activation.onStartup intenzionalesetup.cliBackends è presente quando setup/discovery dei modelli deve vedere il backend a freddoapi.registerCliBackend(...) usa lo stesso ID del backend del manifestLe override utente sotto
agents.defaults.cliBackends.<id> hanno ancora la precedenzaLe impostazioni di sessione, prompt di sistema, immagini e parser dell’output corrispondono al contratto reale della CLI
I test mirati e almeno uno smoke test live della CLI provano il percorso del backend
Correlati
- Backend CLI - configurazione utente e comportamento runtime
- Creare plugin - basi di pacchetto e manifest
- Panoramica del Plugin SDK - riferimento API di registrazione
- Manifest del plugin -
cliBackendse descrittori di setup - Harness dell’agente - runtime completi per agenti esterni