defineToolPlugin lorsque le
Plugin possède une liste fixe d’outils et que vous voulez qu’OpenClaw génère les métadonnées de manifeste
qui gardent ces outils découvrables sans charger le code d’exécution.
Le flux recommandé est le suivant :
- Échafauder un paquet avec
openclaw plugins init. - Écrire les outils avec
defineToolPlugin. - Construire le JavaScript.
- Générer les métadonnées
openclaw.plugin.jsonetpackage.jsonavecopenclaw plugins build. - Valider les métadonnées générées avant publication ou installation.
Prérequis
- Node >= 22.
- Sortie de paquet TypeScript ESM.
typeboxpour les schémas de configuration et de paramètres d’outils.openclaw >=2026.5.17, la première version d’OpenClaw qui exporteopenclaw/plugin-sdk/tool-plugin.- Une racine de paquet pouvant livrer
dist/,openclaw.plugin.jsonetpackage.json.
typebox à l’exécution ; gardez donc typebox dans
dependencies, pas seulement dans devDependencies.
Démarrage rapide
Créez un nouveau paquet de Plugin :src/index.ts: une entréedefineToolPluginavec un outilecho.src/index.test.ts: un petit test de métadonnées.tsconfig.json: une sortie TypeScript NodeNext versdist/.package.json: scripts, dépendances d’exécution etopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: métadonnées de manifeste générées pour l’outil initial.
Écrire un outil
defineToolPlugin prend l’identité du Plugin, un schéma de configuration facultatif et une
liste statique d’outils. Les types de paramètres et de configuration sont inférés à partir des schémas TypeBox.
Outils facultatifs et d’usine
Définissezoptional: true lorsque les utilisateurs doivent explicitement autoriser l’outil avant qu’il
soit envoyé à un modèle :
openclaw plugins build écrit l’entrée de manifeste toolMetadata.<tool>.optional
correspondante, afin qu’OpenClaw puisse découvrir l’outil sans charger le code d’exécution du
Plugin.
Utilisez factory lorsqu’un outil a besoin du contexte d’outil d’exécution avant de pouvoir être
créé. L’usine garde les métadonnées statiques tout en laissant l’outil se désactiver pour une
exécution donnée, inspecter l’état du bac à sable ou lier des helpers d’exécution.
definePluginEntry lorsque
le Plugin calcule dynamiquement les noms d’outils ou combine des outils avec des hooks,
services, fournisseurs, commandes ou autres surfaces d’exécution.
Valeurs de retour
defineToolPlugin encapsule les valeurs de retour simples dans le format de résultat d’outil
d’OpenClaw :
- Retournez une chaîne lorsque le modèle doit voir exactement ce texte.
- Retournez une valeur compatible JSON lorsque vous voulez que le modèle voie du JSON formaté
et qu’OpenClaw conserve la valeur d’origine dans
details.
AgentToolResult personnalisé ou réutiliser
une implémentation api.registerTool existante. Utilisez definePluginEntry plutôt que
defineToolPlugin lorsque vous avez besoin d’outils entièrement dynamiques ou de capacités de Plugin
mixtes.
Configuration
configSchema est facultatif. Si vous l’omettez, OpenClaw utilise un schéma objet vide strict
et le manifeste généré inclut tout de même configSchema.
configSchema, le deuxième argument de execute est typé à partir du
schéma :
Métadonnées générées
OpenClaw découvre les Plugins installés à partir de métadonnées froides. Il doit pouvoir lire le manifeste du Plugin avant d’importer le code d’exécution du Plugin.defineToolPlugin
expose donc des métadonnées statiques, et openclaw plugins build écrit ces
métadonnées dans le paquet.
Exécutez le générateur après avoir modifié l’identifiant, le nom, la description, le schéma de configuration,
l’activation ou les noms d’outils du Plugin :
contracts.tools est le contrat de découverte important. Il indique à OpenClaw quel
Plugin possède chaque outil sans charger l’exécution de chaque Plugin installé. Si le
manifeste est obsolète, l’outil peut être absent de la découverte ou le mauvais Plugin
peut être tenu responsable d’une erreur d’enregistrement.
Métadonnées de paquet
Pour le flux simple de Plugin d’outil,openclaw plugins build aligne
package.json sur l’unique entrée d’exécution sélectionnée :
./dist/index.js, pour les paquets installés. Les entrées
source sont utiles lors du développement en espace de travail, mais les paquets publiés ne doivent pas
dépendre du chargement TypeScript à l’exécution.
Valider dans la CI
Utilisezplugins build --check pour faire échouer la CI lorsque les métadonnées générées sont obsolètes, sans
réécrire les fichiers :
plugins validate vérifie que :
openclaw.plugin.jsonexiste et passe le chargeur de manifeste normal.- L’entrée actuelle exporte des métadonnées
defineToolPlugin. - Les champs de manifeste générés correspondent aux métadonnées de l’entrée.
contracts.toolscorrespond aux noms d’outils déclarés.package.jsonpointeopenclaw.extensionsvers l’entrée d’exécution sélectionnée.
Installer et inspecter localement
Depuis un autre checkout OpenClaw ou une CLI installée, installez le chemin du paquet :Publier
Publiez via ClawHub lorsque le paquet est prêt :Dépannage
plugin entry not found: ./dist/index.js
Le fichier d’entrée sélectionné n’existe pas. Exécutez npm run build, puis relancez
openclaw plugins build --entry ./dist/index.js ou
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
L’entrée n’a pas exporté une valeur créée par defineToolPlugin. Vérifiez que l’export par défaut du
module est le résultat de defineToolPlugin(...), ou passez la bonne
entrée avec --entry.
openclaw.plugin.json generated metadata is stale
Le manifeste ne correspond plus aux métadonnées de l’entrée. Exécutez :
openclaw.plugin.json et de package.json.
package.json openclaw.extensions must include ./dist/index.js
Les métadonnées du paquet pointent vers une autre entrée d’exécution. Exécutez
openclaw plugins build --entry ./dist/index.js afin que le générateur aligne les
métadonnées du paquet sur l’entrée que vous souhaitez livrer.
Cannot find package 'typebox'
Le Plugin construit importe typebox à l’exécution. Gardez typebox dans
dependencies, réinstallez les dépendances du paquet, reconstruisez et relancez la validation.
L’outil n’apparaît pas après l’installation
Vérifiez ces éléments dans l’ordre :openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsoncontientcontracts.toolsavec les noms d’outils attendus.package.jsoncontientopenclaw.extensions: ["./dist/index.js"].- Le Gateway a été redémarré ou rechargé après l’installation du Plugin.