clawhub: lorsque vous souhaitez une résolution par ClawHub.
Prérequis
- Node 22.22.3+, Node 24.15+ ou Node 25.9+, et
npmoupnpm. - Modules ESM TypeScript.
- Pour travailler sur un Plugin intégré au dépôt, clonez le dépôt et exécutez
pnpm install. Le développement de Plugins à partir du code source utilise uniquement pnpm, car OpenClaw détecte les Plugins intégrés à partir des paquets de l’espace de travailextensions/*.
Choisir la forme du Plugin
Plugin de canal
Connectez OpenClaw à une plateforme de messagerie.
Plugin de fournisseur
Ajoutez un fournisseur de modèles, de médias, de recherche, de récupération, de synthèse vocale ou de temps réel.
Plugin de backend CLI
Exécutez une CLI d’IA locale via le mécanisme de repli de modèle d’OpenClaw.
Plugin d’outil
Enregistrez des outils d’agent.
Démarrage rapide
Créez un Plugin d’outil minimal en enregistrant un outil d’agent obligatoire. Il s’agit de la forme de Plugin utile la plus courte, qui couvre le paquet, le manifeste, le point d’entrée et la validation locale.1
Créer les métadonnées du paquet
contracts.tools afin qu’OpenClaw puisse déterminer leur propriétaire sans
charger immédiatement l’environnement d’exécution de chaque Plugin. Définissez activation.onStartup
intentionnellement ; cet exemple effectue le chargement au démarrage du Gateway.Les surfaces de Plugin approuvées par l’hôte sont également contrôlées par le manifeste et nécessitent une
déclaration explicite pour les Plugins installés : api.registerAgentToolResultMiddleware(...)
exige que chaque environnement d’exécution cible soit répertorié dans contracts.agentToolResultMiddleware,
et api.registerTrustedToolPolicy(...) exige que chaque identifiant de stratégie figure dans
contracts.trustedToolPolicies. Ces déclarations maintiennent la cohérence entre l’inspection au moment de l’installation
et l’enregistrement à l’exécution.Pour tous les champs du manifeste, consultez Manifeste de Plugin.2
Enregistrer l’outil
index.ts
definePluginEntry pour les Plugins autres que les canaux. Les Plugins de canal utilisent
plutôt defineChannelPluginEntry depuis openclaw/plugin-sdk/core.3
Tester l’environnement d’exécution
Pour un Plugin installé ou externe, inspectez l’environnement d’exécution chargé :Si le Plugin enregistre une commande CLI, exécutez-la également et vérifiez
sa sortie, par exemple
openclaw demo-plugin ping.Pour un Plugin intégré à ce dépôt, OpenClaw détecte les paquets de Plugins
du code source dans l’espace de travail extensions/*. Exécutez le test ciblé le plus proche :4
Tester l’installation du paquet
Avant de publier un Plugin prêt à être empaqueté, testez la même forme d’installation que celle
que les utilisateurs recevront. Ajoutez d’abord une étape de compilation, faites pointer les entrées d’exécution telles que
openclaw.extensions vers du JavaScript compilé comme ./dist/index.js, et assurez-vous
que npm pack inclut cette sortie dist/. Les entrées de code source TypeScript sont
réservées aux extractions du code source et aux chemins de développement local.Empaquetez ensuite le Plugin et installez l’archive tar avec npm-pack: :npm-pack: utilise le projet npm par Plugin géré par OpenClaw ; il détecte donc
les erreurs de dépendances d’exécution que les tests à partir du code source peuvent masquer. Il valide
la structure du paquet et des dépendances, mais pas l’approbation officielle liée au catalogue.
Les imports d’exécution doivent figurer dans dependencies ou optionalDependencies ;
les dépendances laissées uniquement dans devDependencies ne seront pas installées pour le
projet d’exécution géré.N’utilisez pas une installation directe depuis une archive ou un chemin comme validation finale du comportement
officiel ou privilégié d’un Plugin. Les sources directes sont utiles pour le débogage local, mais
elles ne valident pas le même chemin de dépendances que les installations npm ou ClawHub. Si
votre Plugin dépend du statut de Plugin officiel approuvé, ajoutez une seconde validation
au moyen d’une installation officielle adossée au catalogue ou d’un chemin de paquet publié qui
enregistre l’approbation officielle. Consultez
Résolution des dépendances des Plugins pour plus de détails sur
la racine d’installation et la propriété des dépendances.5
Publier
Validez le paquet avant de le publier :Les extraits canoniques de paquets ClawHub se trouvent dans
docs/snippets/plugin-publish/.6
Installer
Installez le paquet publié via ClawHub :
Enregistrer des outils
Les outils peuvent être obligatoires ou facultatifs. Les outils obligatoires sont toujours disponibles lorsque le Plugin est activé. Les outils facultatifs nécessitent l’adhésion explicite de l’utilisateur avant qu’OpenClaw ne charge l’environnement d’exécution du Plugin propriétaire. Les fabriques d’outils reçoivent un contexte d’exécution approuvé, notammentdeliveryContext,
nativeChannelId pour la conversation active sur la plateforme lorsqu’elle est disponible, et
requesterSenderId.
api.registerTool(...) doit également être déclaré dans le
manifeste du Plugin :
tools.allow :
name non vide manquant, un execute qui n’est pas une fonction ou un descripteur d’outil sans objet parameters.
Les fabriques d’outils reçoivent un objet de contexte fourni par l’environnement d’exécution. Utilisez ctx.activeModel
lorsqu’un outil doit journaliser, afficher ou s’adapter au modèle actif pour le tour en cours ;
il peut inclure provider, modelId et modelRef. Considérez-le comme
des métadonnées d’exécution informatives, et non comme une frontière de sécurité vis-à-vis de l’opérateur
local, du code des Plugins installés ou d’un environnement d’exécution OpenClaw modifié. Les outils locaux
sensibles doivent toujours exiger l’adhésion explicite du Plugin ou de l’opérateur et
échouer de manière fermée lorsque les métadonnées du modèle actif sont absentes ou inadaptées.
Le manifeste déclare la propriété et la détection ; l’exécution appelle toujours l’implémentation active
de l’outil enregistré. Maintenez toolMetadata.<tool>.optional: true
aligné sur api.registerTool(..., { optional: true }) afin qu’OpenClaw puisse éviter
de charger l’environnement d’exécution de ce Plugin tant que l’outil n’a pas été explicitement ajouté à la liste d’autorisation.
Conventions d’importation
Importez depuis les sous-chemins ciblés du SDK :api.ts et
runtime-api.ts pour les imports internes. N’importez pas votre propre Plugin via un
chemin du SDK. Les fonctions utilitaires propres à un fournisseur doivent rester dans le paquet du fournisseur, sauf si
l’interface est véritablement générique.
Les méthodes RPC personnalisées du Gateway constituent un point d’entrée avancé. Conservez-les sous un
préfixe propre au Plugin ; les espaces de noms d’administration du cœur tels que config.*,
exec.approvals.*, operator.admin.*, wizard.* et update.* restent réservés
et se résolvent en operator.admin. Le pont
openclaw/plugin-sdk/gateway-method-runtime est réservé aux routes HTTP des Plugins
qui déclarent contracts.gatewayMethodDispatch: ["authenticated-request"].
Pour la carte complète des imports, consultez Vue d’ensemble du SDK des Plugins.
Liste de contrôle avant soumission
package.json contient les métadonnées
openclaw correctesLe manifeste openclaw.plugin.json est présent et valide
Le point d’entrée utilise
defineChannelPluginEntry ou definePluginEntryTous les imports utilisent des chemins
plugin-sdk/<subpath> ciblésLes imports internes utilisent des modules locaux, et non des auto-imports du SDK
Les tests réussissent (
pnpm test <bundled-plugin-root>/my-plugin/)pnpm check réussit (Plugins du dépôt)Tester avec les versions bêta
- Surveillez les versions de openclaw/openclaw (
Watch>Releases). Les étiquettes bêta ressemblent àv2026.3.N-beta.1. Vous pouvez également suivre @openclaw sur X pour les annonces de versions. - Testez votre Plugin avec l’étiquette bêta dès qu’elle apparaît. La période précédant la version stable ne dure généralement que quelques heures.
- Après les tests, publiez un message dans le fil de votre Plugin, dans le canal Discord
plugin-forum(discord.gg/clawd), en indiquant soitall good, soit ce qui ne fonctionne plus. Créez un fil si vous n’en avez pas encore. - Si quelque chose ne fonctionne plus, ouvrez ou mettez à jour un ticket intitulé
Beta blocker: <plugin-name> - <summary>et appliquez-lui l’étiquettebeta-blocker. Ajoutez le lien du ticket dans votre fil. - Ouvrez une PR vers
main, intituléefix(<plugin-id>): beta blocker - <summary>, et ajoutez le lien du ticket à la fois dans la PR et dans votre fil Discord. Les contributeurs ne peuvent pas étiqueter les PR, le titre sert donc de signal aux responsables de maintenance et aux automatisations. Les problèmes bloquants accompagnés d’une PR sont corrigés par fusion ; ceux qui n’en ont pas risquent de se retrouver malgré tout dans la version publiée. - L’absence de réponse signifie que tout va bien. Si vous manquez cette période, votre correctif sera généralement intégré au cycle suivant.
Étapes suivantes
Plugins de canaux
Créer un Plugin de canal de messagerie
Plugins de fournisseurs
Créer un Plugin de fournisseur de modèles
Plugins de backend CLI
Enregistrer un backend CLI d’IA local
Présentation du SDK
Référence de la carte d’importation et de l’API d’enregistrement
Utilitaires d’exécution
Synthèse vocale, recherche et sous-agent via api.runtime
Tests
Utilitaires et modèles de test
Manifeste du Plugin
Référence complète du schéma du manifeste