clawhub: lorsque vous voulez la
résolution ClawHub.
Exigences
- Utilisez Node 22.19+, Node 23.11+ ou Node 24+, ainsi qu’un gestionnaire de package comme
npmoupnpm. - Soyez à l’aise avec les modules TypeScript ESM.
- Pour travailler sur un Plugin groupé dans le dépôt, clonez le dépôt et exécutez
pnpm install. Le développement de Plugins depuis une extraction source est réservé à pnpm, car OpenClaw charge les Plugins groupés depuis les packages d’espace de travailextensions/*.
Choisir la forme du Plugin
Channel plugin
Connecter OpenClaw à une plateforme de messagerie.
Provider plugin
Ajouter un fournisseur de modèle, de médias, de recherche, de récupération, de voix ou temps réel.
CLI backend plugin
Exécuter une CLI d’IA locale via le repli de modèle OpenClaw.
Tool plugin
Enregistrer des outils d’agent.
Démarrage rapide
Créez un Plugin d’outil minimal en enregistrant un outil d’agent obligatoire. C’est la forme de Plugin utile la plus courte et elle montre le package, le manifeste, le point d’entrée et la preuve locale.Create package metadata
contracts.tools afin
qu’OpenClaw puisse découvrir la propriété sans charger avec empressement
chaque runtime de Plugin. Définissez activation.onStartup intentionnellement.
Cet exemple démarre au lancement du Gateway.Les surfaces de Plugin approuvées par l’hôte sont également contrôlées par
le manifeste et nécessitent une activation explicite pour les Plugins
installés. Si un Plugin installé enregistre
api.registerAgentToolResultMiddleware(...), déclarez chaque runtime cible
dans contracts.agentToolResultMiddleware. S’il enregistre
api.registerTrustedToolPolicy(...), déclarez chaque identifiant de
politique dans contracts.trustedToolPolicies. Ces déclarations gardent
alignées l’inspection à l’installation et l’enregistrement à l’exécution.Pour chaque champ du manifeste, consultez Manifeste de Plugin.Register the tool
index.ts
definePluginEntry pour les Plugins qui ne sont pas des canaux.
Les Plugins de canal utilisent defineChannelPluginEntry.Test the runtime
Pour un Plugin installé ou externe, inspectez le runtime chargé :Si le Plugin enregistre une commande CLI, exécutez aussi cette commande.
Par exemple, une commande de démonstration doit avoir une preuve d’exécution
comme
openclaw demo-plugin ping.Pour un Plugin groupé dans ce dépôt, OpenClaw découvre les packages de
Plugin d’extraction source depuis l’espace de travail extensions/*.
Exécutez le test ciblé le plus proche :Test the package install
Avant de publier un Plugin prêt à être empaqueté, testez la même forme
d’installation que les utilisateurs recevront. Ajoutez d’abord une étape
de build, pointez les entrées d’exécution comme
openclaw.extensions vers
du JavaScript généré comme ./dist/index.js, et assurez-vous que
npm pack inclut cette sortie dist/. Les entrées source TypeScript sont
réservées aux extractions source et aux chemins de développement local.Ensuite, empaquetez le Plugin et installez l’archive avec npm-pack: :npm-pack: utilise le projet npm géré par OpenClaw pour chaque Plugin, ce
qui détecte les erreurs de dépendances d’exécution que les tests depuis une
extraction source peuvent masquer. Cela prouve la forme du package et des
dépendances, pas la confiance officielle liée au catalogue. Les imports
d’exécution doivent être dans dependencies ou optionalDependencies ;
les dépendances laissées seulement dans devDependencies ne seront pas
installées pour le projet d’exécution géré.N’utilisez pas une installation brute depuis une archive ou un chemin comme
preuve finale pour un comportement de Plugin officiel ou privilégié. Les
sources brutes sont utiles pour le débogage local, mais elles ne prouvent
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 preuve via une installation officielle adossée à un catalogue ou un
chemin de package publié qui enregistre la confiance officielle. Consultez
Résolution des dépendances de Plugin pour
les détails sur la racine d’installation et la propriété des dépendances.Publish
Validez le package avant publication :Les extraits ClawHub canoniques se trouvent dans
docs/snippets/plugin-publish/.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’activation explicite par l’utilisateur.api.registerTool(...) doit aussi être déclaré
dans le manifeste du Plugin :
tools.allow :
parameters, sont ignorés et
signalés de la même façon. Les outils enregistrés sont des fonctions typées que
le modèle peut appeler après validation des politiques et de la liste d’autorisation.
Les fabriques d’outils reçoivent un objet de contexte fourni par le runtime.
Utilisez ctx.activeModel lorsqu’un outil doit journaliser, afficher ou
s’adapter au modèle actif pour le tour actuel. L’objet peut inclure provider,
modelId et modelRef. Traitez-le comme des métadonnées d’exécution
informatives, et non comme une frontière de sécurité contre l’opérateur local,
le code de Plugin installé ou un runtime OpenClaw modifié. Les outils locaux
sensibles doivent toujours exiger une activation explicite du Plugin ou de
l’opérateur, et échouer fermement lorsque les métadonnées de modèle actif sont
absentes ou inadaptées.
Le manifeste déclare la propriété et la découverte ; l’exécution appelle tout
de même l’implémentation d’outil enregistrée en direct. Gardez
toolMetadata.<tool>.optional: true aligné avec
api.registerTool(..., { optional: true }) afin qu’OpenClaw puisse éviter de
charger ce runtime de Plugin tant que l’outil n’est pas explicitement autorisé.
Conventions d’import
Importez depuis des sous-chemins SDK ciblés :api.ts
et runtime-api.ts pour les imports internes. N’importez pas votre propre
Plugin via un chemin SDK. Les assistants propres à un fournisseur doivent rester
dans le package du fournisseur, sauf si le point d’extension est réellement
générique.
Les méthodes RPC Gateway personnalisées sont un point d’entrée avancé.
Gardez-les sur un préfixe propre au Plugin ; les espaces de noms
d’administration du noyau comme config.*, exec.approvals.*,
operator.admin.*, wizard.* et update.* restent réservés et se résolvent
vers operator.admin. Le pont
openclaw/plugin-sdk/gateway-method-runtime est réservé aux routes HTTP de
Plugin qui déclarent contracts.gatewayMethodDispatch: ["authenticated-request"].
Pour la carte complète des imports, consultez Présentation du SDK de Plugin.
Liste de vérification 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, pas des auto-imports SDK
Les tests passent (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check passe (Plugins dans le dépôt)Tester avec les versions bêta
- Surveillez les balises de publication GitHub sur openclaw/openclaw et abonnez-vous via
Watch>Releases. Les balises bêta ressemblent àv2026.3.N-beta.1. Vous pouvez également activer les notifications pour le compte X officiel d’OpenClaw @openclaw afin de recevoir les annonces de publication. - Testez votre plugin avec la balise bêta dès qu’elle apparaît. La fenêtre avant la version stable n’est généralement que de quelques heures.
- Publiez dans le fil de votre plugin dans le canal Discord
plugin-forumaprès les tests, avec soitall good, soit ce qui a cassé. Si vous n’avez pas encore de fil, créez-en un. - Si quelque chose casse, ouvrez ou mettez à jour une issue intitulée
Beta blocker: <plugin-name> - <summary>et appliquez le labelbeta-blocker. Ajoutez le lien de l’issue dans votre fil. - Ouvrez une PR vers
mainintituléefix(<plugin-id>): beta blocker - <summary>et liez l’issue à la fois dans la PR et dans votre fil Discord. Les contributeurs ne peuvent pas labelliser les PR, donc le titre sert de signal côté PR pour les mainteneurs et l’automatisation. Les blocages avec une PR sont fusionnés ; ceux sans PR peuvent tout de même être publiés. Les mainteneurs surveillent ces fils pendant les tests bêta. - L’absence de retour signifie que tout est au vert. Si vous manquez la fenêtre, votre correctif sera probablement intégré au cycle suivant.
Étapes suivantes
Plugins de canal
Créer un plugin de canal de messagerie
Plugins de fournisseur
Créer un plugin de fournisseur de modèles
Plugins de backend CLI
Enregistrer un backend CLI IA local
Vue d’ensemble du SDK
Référence de la carte d’importation et de l’API d’enregistrement
Assistants d’exécution
TTS, recherche, sous-agent via api.runtime
Tests
Utilitaires et modèles de test
Manifeste du plugin
Référence complète du schéma de manifeste