Si le service amont expose une API de modèle HTTP normale, écrivez plutôt un
plugin fournisseur. Si le runtime amont
possède des sessions d’agent complètes, des événements d’outils, la compaction ou l’état des
tâches en arrière-plan, utilisez un harnais d’agent.
Ce que possède le plugin
Un plugin de backend CLI a trois contrats :| Contrat | Fichier | Objectif |
|---|---|---|
| Point d’entrée package | package.json | Pointe OpenClaw vers le module de runtime du plugin |
| Propriété du manifeste | openclaw.plugin.json | Déclare l’id du backend avant le chargement du runtime |
| Enregistrement runtime | index.ts | Appelle api.registerCliBackend(...) avec les valeurs par défaut de commande |
api.registerCliBackend(...).
Plugin de backend minimal
Créer les métadonnées du package
package.json
./src/index.ts, ajoutez openclaw.runtimeExtensions qui pointe vers
le pair JavaScript généré. Consultez Points d’entrée.Déclarer la propriété du backend
openclaw.plugin.json
cliBackends est la liste de propriété runtime. Elle permet à OpenClaw de charger automatiquement le
plugin lorsque la configuration ou la sélection de modèle mentionne acme-cli/....setup.cliBackends est la surface de configuration orientée descripteurs. Ajoutez-la lorsque
la découverte de modèles, l’onboarding ou l’état doivent reconnaître le backend sans
charger le runtime du plugin. Utilisez requiresRuntime: false uniquement lorsque ces
descripteurs statiques suffisent pour la configuration.Forme de configuration
CliBackendConfig décrit comment OpenClaw doit lancer et analyser la CLI :
| Champ | Utilisation |
|---|---|
command | Nom du binaire ou chemin absolu de la commande |
args | argv de base pour les nouvelles exécutions |
resumeArgs | argv alternatif pour les sessions reprises ; prend en charge {sessionId} |
output / resumeOutput | Analyseur : json, jsonl ou text |
input | Transport du prompt : arg ou stdin |
modelArg | Flag utilisé avant l’id de modèle |
modelAliases | Associe les ids de modèle OpenClaw aux ids natifs de la CLI |
sessionArg / sessionArgs | Façon de passer un id de session |
sessionMode | always, existing ou none |
sessionIdFields | Champs JSON qu’OpenClaw lit dans la sortie de la CLI |
systemPromptArg / systemPromptFileArg | Transport du prompt système |
systemPromptWhen | first, always ou never |
imageArg / imageMode | Prise en charge des chemins d’image |
serialize | Garde les exécutions du même backend dans l’ordre |
reliability.watchdog | Réglage du délai d’expiration sans sortie |
Hooks de backend avancés
CliBackendPlugin peut aussi définir :
| Hook | Utilisation |
|---|---|
normalizeConfig(config, context) | Réécrire l’ancienne configuration utilisateur après fusion |
resolveExecutionArgs(ctx) | Ajouter des flags propres à la requête, comme l’effort de raisonnement ou l’isolation des questions annexes |
prepareExecution(ctx) | Créer des ponts temporaires d’authentification ou de configuration avant le lancement |
transformSystemPrompt(ctx) | Appliquer une transformation finale du prompt système propre à la CLI |
textTransforms | Remplacements bidirectionnels de prompt/sortie |
defaultAuthProfileId | Préférer un profil d’authentification OpenClaw spécifique |
authEpochMode | Décider comment les changements d’authentification invalident les sessions CLI stockées |
nativeToolMode | Déclarer si la CLI a des outils natifs toujours actifs |
sideQuestionToolMode | Déclarer les outils natifs désactivés pour les questions annexes /btw |
bundleMcp / bundleMcpMode | Activer le pont d’outils MCP loopback d’OpenClaw |
ownsNativeCompaction | Le backend possède sa propre compaction - OpenClaw s’efface |
ctx.executionMode vaut "agent" pour les tours normaux et "side-question" pour
les appels éphémères /btw. Utilisez-le lorsque la CLI a besoin de flags ponctuels différents, comme
désactiver les outils natifs, la persistance de session ou le comportement de reprise pour BTW. Si un
backend a normalement nativeToolMode: "always-on" mais que son argv de question annexe
désactive ces outils de manière fiable, définissez aussi sideQuestionToolMode: "disabled" ;
sinon OpenClaw échoue de manière fermée lorsque BTW exige une exécution CLI sans outils.
ownsNativeCompaction : se retirer de la compaction OpenClaw
Si votre backend exécute un agent qui compacte son propre transcript, définissez
ownsNativeCompaction: true afin que le summarizer de sauvegarde d’OpenClaw ne s’exécute jamais contre ses
sessions - le cycle de vie de compaction de la CLI renvoie un no-op et le tour continue. claude-cli
le déclare parce que Claude Code compacte en interne sans endpoint de harnais. Les sessions de harnais natif
comme Codex continuent plutôt d’être routées vers leur endpoint de compaction de harnais.
Ne le déclarez que lorsque toutes les conditions suivantes sont remplies, sinon une session différée hors budget peut
rester hors budget / devenir obsolète (OpenClaw ne la récupère plus) :
- le backend compacte ou borne de manière fiable son propre transcript lorsqu’il approche de sa fenêtre ;
- il persiste une session reprenable afin que l’état compacté survive aux tours
(par exemple
--resume/--session-id) ; - ce n’est pas une session de compaction de harnais natif - les sessions correspondant à
agentHarnessIdsont routées vers l’endpoint de harnais à la place.
Pont d’outils MCP
Les backends CLI ne reçoivent pas les outils OpenClaw par défaut. Si la CLI peut consommer une configuration MCP, activez-la explicitement :| Mode | Utilisation |
|---|---|
claude-config-file | CLI qui acceptent un fichier de configuration MCP |
codex-config-overrides | CLI qui acceptent des remplacements de configuration sur argv |
gemini-system-settings | CLI qui lisent les réglages MCP depuis leur répertoire de réglages système |
nativeToolMode: "always-on" afin qu’OpenClaw puisse échouer de manière fermée lorsqu’un appelant exige l’absence d’outils natifs.
Configuration utilisateur
Les utilisateurs peuvent remplacer n’importe quelle valeur par défaut du backend :command lorsque le binaire se trouve en dehors de PATH.
Vérification
Pour les plugins intégrés, ajoutez un test ciblé autour du builder et de l’enregistrement de setup, puis exécutez la voie de test ciblée du plugin :Liste de vérification
package.json contient openclaw.extensions et des entrées runtime construites pour les packages publiésopenclaw.plugin.json déclare cliBackends et un activation.onStartup intentionnelsetup.cliBackends est présent lorsque la configuration ou la découverte de modèle doit voir le backend à froidapi.registerCliBackend(...) utilise le même identifiant de backend que le manifesteLes substitutions utilisateur sous
agents.defaults.cliBackends.<id> restent prioritairesLes paramètres de session, de prompt système, d’image et d’analyseur de sortie correspondent au vrai contrat de la CLI
Des tests ciblés et au moins un smoke test CLI live prouvent le chemin du backend
Associé
- Backends CLI - configuration utilisateur et comportement runtime
- Créer des plugins - bases des packages et des manifestes
- Vue d’ensemble du SDK de Plugin - référence de l’API d’enregistrement
- Manifeste de Plugin -
cliBackendset descripteurs de setup - Harnais d’agent - runtimes d’agents externes complets