Se il servizio upstream espone una normale API HTTP per modelli, crea invece un
plugin provider. Se il runtime upstream
gestisce sessioni complete dell’agente, eventi degli strumenti, Compaction o lo stato delle attività
in background, usa un harness per agenti.
Responsabilità del plugin
Un plugin di backend CLI ha tre contratti:
Il manifesto contiene metadati di rilevamento: non esegue la CLI né registra
il comportamento del runtime. Il comportamento del runtime inizia quando il punto di ingresso del plugin chiama
api.registerCliBackend(...).
Plugin di backend minimo
1
Crea i metadati del pacchetto
package.json
./src/index.ts, aggiungi openclaw.runtimeExtensions che faccia riferimento al
corrispondente file JavaScript compilato. Consulta Punti di ingresso.2
Dichiara la titolarità del backend
openclaw.plugin.json
cliBackends è l’elenco di titolarità del 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 basata prima di tutto sui descrittori. Aggiungila quando
il rilevamento dei modelli, la procedura iniziale o lo stato devono riconoscere il backend
senza caricare il runtime del plugin. Usa requiresRuntime: false solo quando
questi descrittori statici sono sufficienti per la configurazione.3
Registra il backend
index.ts
cliBackends del manifesto. La
config registrata è solo quella predefinita; la configurazione utente in
agents.defaults.cliBackends.acme-cli viene unita a essa durante l’esecuzione e ha la precedenza.Struttura della configurazione
CliBackendConfig descrive come OpenClaw deve avviare e analizzare la CLI:
Preferisci la configurazione statica più piccola che corrisponde alla CLI. Aggiungi callback al plugin
solo per comportamenti che appartengono realmente al backend.
Hook avanzati del backend
CliBackendPlugin può inoltre definire:
Mantieni questi hook di proprietà del provider. Non aggiungere diramazioni specifiche della CLI al core quando
un hook del backend può esprimere il comportamento.
runtimeArtifact appartiene al plugin e non può essere sovrascritto dall’utente. Viene consultato
solo quando un’interazione di inferenza in tempo reale crea o riconvalida un’autorità verificata per la configurazione;
le normali esecuzioni della CLI non lo richiedono. Un backend privo di questa dichiarazione non può
creare un’autorità verificata per la configurazione della CLI. Una dichiarazione bundled-package-tree indica
l’esatto proprietario di package.json e richiede che il punto di ingresso del pacchetto sia il
comando. OpenClaw calcola l’hash dell’intero albero delimitato del pacchetto installato, incluse
le dipendenze annidate, e interrompe l’operazione in modo sicuro in presenza di collegamenti simbolici di reindirizzamento,
launcher esterni al pacchetto dichiarato, dichiarazioni di dipendenze esterne
obbligatorie, alberi troppo grandi e script sconosciuti. Dichiara questa opzione solo quando tale
albero contiene l’implementazione completa dell’inferenza; le integrazioni facoltative con strumenti
non rendono sicuro un grafo di implementazione esterno.
Se lo stesso backend distribuisce anche un eseguibile nativo autonomo, elenca i relativi
nomi di base canonici in nativeExecutableNames. Gli altri comandi nativi restano
non verificati anche quando un utente sovrascrive il comando del backend.
ctx.executionMode è "agent" per i turni normali e "side-question" per le
chiamate effimere /btw. Usalo quando la CLI richiede flag monouso diversi,
ad esempio per disabilitare gli strumenti nativi, la persistenza della sessione
o il comportamento di ripresa per BTW. Se un backend normalmente ha
nativeToolMode: "always-on" ma i relativi argv per le domande secondarie
disabilitano tali strumenti in modo affidabile, imposta anche
sideQuestionToolMode: "disabled"; altrimenti OpenClaw applica una chiusura
sicura quando BTW richiede un’esecuzione della CLI senza strumenti.
Imposta nativeToolMode: "selectable" solo quando resolveExecutionArgs può
disabilitare ogni strumento nativo del backend per una singola esecuzione. Per
queste esecuzioni con restrizioni, ctx.toolAvailability.native è una tupla
vuota e ctx.toolAvailability.mcp è l’esatto elenco consentito MCP isolato
dall’host. L’hook deve sostituire i flag degli strumenti in conflitto e
restituire argv che applichi entrambi i valori; OpenClaw lo chiama una volta con
l’argv finale di una nuova esecuzione o di una ripresa e applica una chiusura
sicura quando il backend non può far rispettare la restrizione. I nomi MCP in
questo contesto possono essere approvati automaticamente in sicurezza solo
perché l’host ha già limitato la configurazione MCP generata a tali server e
strumenti.
ownsNativeCompaction: disattivare la Compaction di OpenClaw
Se il tuo backend esegue un agente che compatta la propria trascrizione,
imposta ownsNativeCompaction: true affinché il riepilogatore di salvaguardia
di OpenClaw non venga mai eseguito sulle sue sessioni: il ciclo di vita della
Compaction della CLI non esegue alcuna operazione e il turno procede.
claude-cli lo dichiara perché Claude Code esegue internamente la Compaction
senza un endpoint dell’harness. Le sessioni con harness nativo, come Codex,
continuano invece a essere instradate al relativo endpoint di Compaction
dell’harness.
Dichiaralo solo quando sono soddisfatte tutte le condizioni seguenti,
altrimenti una sessione differita che supera il limite può rimanere oltre il
limite o diventare obsoleta (OpenClaw non la recupera più):
- il backend compatta o limita in modo affidabile la propria trascrizione quando si avvicina al limite della finestra;
- mantiene una sessione ripristinabile affinché lo stato compattato persista
tra i turni (ad esempio
--resume/--session-id); - non è una sessione di Compaction con harness nativo: le sessioni
corrispondenti a
agentHarnessIdvengono invece instradate all’endpoint dell’harness.
Ponte per strumenti MCP
Per impostazione predefinita, i backend CLI non ricevono gli strumenti di OpenClaw. Se la CLI può utilizzare una configurazione MCP, abilitala esplicitamente:
Abilita il ponte solo quando la CLI può effettivamente utilizzarlo. Se la CLI
dispone di un proprio livello di strumenti integrato che non può essere
disabilitato, imposta
nativeToolMode: "always-on" affinché OpenClaw possa
applicare una chiusura sicura quando un chiamante richiede l’assenza di
strumenti nativi. Se può disabilitare tutti gli strumenti nativi per ogni
esecuzione, usa "selectable" con il contratto resolveExecutionArgs
descritto sopra.
Configurazione utente
Gli utenti possono sostituire qualsiasi valore predefinito del backend:command quando il file binario si trova al di fuori
di PATH.
Verifica
Per i plugin inclusi, aggiungi un test mirato per il builder e la registrazione della configurazione, quindi esegui il percorso di test mirato del plugin:Elenco di controllo
package.json contiene openclaw.extensions e voci di runtime compilate per i pacchetti pubblicatiopenclaw.plugin.json dichiara cliBackends e un valore intenzionale per activation.onStartupsetup.cliBackends è presente quando la configurazione o il rilevamento dei modelli devono individuare il backend prima dell’avvioapi.registerCliBackend(...) usa lo stesso ID del backend del manifestoLe sostituzioni dell’utente in
agents.defaults.cliBackends.<id> continuano ad avere la precedenzaLe impostazioni della sessione, del prompt di sistema, delle immagini e del parser dell’output corrispondono al contratto reale della CLI
I test mirati e almeno uno smoke test reale della CLI dimostrano il funzionamento del percorso del backend
Contenuti correlati
- Backend CLI - configurazione utente e comportamento in fase di esecuzione
- Creazione di plugin - nozioni di base su pacchetti e manifesti
- Panoramica dell’SDK dei plugin - riferimento dell’API di registrazione
- Manifesto del plugin -
cliBackendse descrittori di configurazione - Harness dell’agente - runtime completi per agenti esterni