Si le service en amont expose une API HTTP de modèle standard, écrivez plutôt un
plugin de fournisseur. Si l’environnement d’exécution en amont
gère des sessions d’agent complètes, les événements d’outils, la Compaction ou l’état des tâches
en arrière-plan, utilisez un environnement d’agent.
Responsabilités du plugin
Un plugin de backend CLI comporte trois contrats :
Le manifeste contient les métadonnées de découverte : il n’exécute pas la CLI et
n’enregistre aucun comportement d’exécution. Le comportement d’exécution commence lorsque
le point d’entrée du plugin appelle
api.registerCliBackend(...).
Plugin de backend minimal
1
Créer les métadonnées du paquet
package.json
./src/index.ts, ajoutez openclaw.runtimeExtensions en le faisant pointer vers le
fichier JavaScript compilé correspondant. Consultez Points d’entrée.2
Déclarer la propriété du backend
openclaw.plugin.json
cliBackends est la liste de propriété à l’exécution ; elle permet à OpenClaw de charger automatiquement le
plugin lorsque la configuration ou la sélection du modèle mentionne acme-cli/....setup.cliBackends est la surface de configuration fondée en priorité sur les descripteurs. Ajoutez-la lorsque
la découverte de modèles, l’intégration initiale ou l’état doivent reconnaître le backend
sans charger l’exécution du plugin. Utilisez requiresRuntime: false uniquement lorsque
ces descripteurs statiques suffisent à la configuration.3
Enregistrer le backend
index.ts
cliBackends du manifeste. La
config enregistrée ne constitue que la valeur par défaut ; la configuration utilisateur sous
agents.defaults.cliBackends.acme-cli est fusionnée par-dessus lors de l’exécution.Structure de la configuration
CliBackendConfig décrit comment OpenClaw doit lancer et analyser la CLI :
Privilégiez la plus petite configuration statique correspondant à la CLI. Ajoutez des rappels du plugin
uniquement pour les comportements qui relèvent réellement du backend.
Points d’extension avancés du backend
CliBackendPlugin peut également définir :
Conservez ces points d’extension sous la responsabilité du fournisseur. N’ajoutez pas de branches propres à la CLI au cœur
lorsqu’un point d’extension du backend peut exprimer le comportement.
runtimeArtifact appartient au plugin et ne peut pas être remplacé par l’utilisateur. Il n’est consulté
que lorsqu’un tour d’inférence en direct crée ou revalide une autorité de configuration vérifiée ;
les exécutions CLI normales ne l’exigent pas. Un backend dépourvu de cette déclaration ne peut pas
créer d’autorité de configuration CLI vérifiée. Une déclaration bundled-package-tree nomme
le propriétaire exact du package.json et exige que le point d’entrée du paquet soit la
commande. OpenClaw calcule le hachage de l’intégralité de l’arborescence limitée du paquet installé, y compris
les dépendances imbriquées, et échoue de manière sécurisée en cas de liens symboliques redirigés,
de lanceurs situés en dehors du paquet déclaré, de déclarations de dépendances externes
requises, d’arborescences surdimensionnées et de scripts inconnus. Ne déclarez cela que lorsque cette
arborescence contient l’implémentation complète de l’inférence ; les intégrations d’outils facultatives
ne sécurisent pas un graphe d’implémentation externe.
Si le même backend fournit également un exécutable natif autonome, répertoriez ses
noms de base canoniques dans nativeExecutableNames. Les autres commandes natives restent
non vérifiées même lorsqu’un utilisateur remplace la commande du backend.
ctx.executionMode vaut "agent" pour les tours normaux et "side-question" pour les
appels éphémères /btw. Utilisez-le lorsque la CLI nécessite des options ponctuelles
différentes, par exemple pour désactiver les outils natifs, la persistance de session ou
le comportement de reprise pour BTW. Si un backend possède normalement
nativeToolMode: "always-on", mais que ses arguments de question annexe désactivent
ces outils de manière fiable, définissez également
sideQuestionToolMode: "disabled" ; sinon, OpenClaw applique un refus sécurisé lorsque BTW
nécessite une exécution de la CLI sans outils.
Définissez nativeToolMode: "selectable" uniquement lorsque resolveExecutionArgs peut
désactiver chaque outil natif du backend pour une exécution donnée. Pour ces exécutions
restreintes, ctx.toolAvailability.native est un tuple vide et
ctx.toolAvailability.mcp est la liste d’autorisation MCP exacte isolée par l’hôte. Le hook
doit remplacer les options d’outils contradictoires et renvoyer des arguments qui imposent
les deux valeurs ; OpenClaw l’appelle une fois avec les arguments finaux d’une nouvelle
exécution ou d’une reprise, et applique un refus sécurisé lorsque le backend ne peut pas
faire respecter la restriction. Dans ce contexte, les noms MCP peuvent être approuvés
automatiquement en toute sécurité uniquement parce que l’hôte a déjà limité la
configuration MCP générée à ces serveurs et outils.
ownsNativeCompaction : désactiver la Compaction d’OpenClaw
Si votre backend exécute un agent qui compacte sa propre transcription, définissez
ownsNativeCompaction: true afin que le synthétiseur de protection d’OpenClaw ne
s’exécute jamais sur ses sessions : le cycle de vie de Compaction de la CLI n’effectue
aucune opération et le tour se poursuit. claude-cli le déclare, car Claude Code
effectue la Compaction en interne sans point de terminaison du harnais. Les sessions
de harnais natif telles que Codex continuent plutôt d’être acheminées vers le point de
terminaison de Compaction de leur harnais.
Ne le déclarez que si toutes les conditions suivantes sont remplies, faute de quoi
une session différée dépassant le budget peut rester hors budget ou devenir obsolète
(OpenClaw ne la récupère plus) :
- le backend compacte ou limite de manière fiable sa propre transcription à l’approche de sa fenêtre ;
- il conserve une session reprenable afin que l’état compacté persiste entre les tours
(par exemple
--resume/--session-id) ; - il ne s’agit pas d’une session de Compaction de harnais natif : les sessions
correspondant à
agentHarnessIdsont plutôt acheminées vers le point de terminaison du harnais.
Pont d’outils MCP
Par défaut, les backends CLI ne reçoivent pas les outils OpenClaw. Si la CLI peut utiliser une configuration MCP, activez-la explicitement :
N’activez le pont que lorsque la CLI peut réellement l’utiliser. Si la CLI possède
sa propre couche d’outils intégrée qui ne peut pas être désactivée, définissez
nativeToolMode: "always-on" afin qu’OpenClaw puisse appliquer un refus sécurisé
lorsqu’un appelant exige l’absence d’outils natifs. Si elle peut désactiver tous les
outils natifs à chaque exécution, utilisez "selectable" avec le contrat
resolveExecutionArgs décrit ci-dessus.
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é portant sur le générateur et l’enregistrement de la configuration, puis exécutez la voie de test ciblée du plugin :Liste de contrôle
package.json contient openclaw.extensions et des entrées d’exécution compilées pour les paquets publiésopenclaw.plugin.json déclare cliBackends et une valeur intentionnelle pour activation.onStartupsetup.cliBackends est présent lorsque la configuration ou la découverte de modèles doit détecter 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, d’invite système, d’image et d’analyseur de sortie correspondent au véritable contrat de la CLI
Des tests ciblés et au moins un test de fumée réel de la CLI valident le parcours du backend
Pages connexes
- Backends CLI - configuration utilisateur et comportement à l’exécution
- Création de plugins - principes de base des paquets et des manifestes
- Présentation du SDK de Plugin - référence de l’API d’enregistrement
- Manifeste de Plugin -
cliBackendset descripteurs de configuration - Harnais d’agent - environnements d’exécution complets pour agents externes