Installer et utiliser des plugins
Guide destiné aux utilisateurs finaux pour ajouter, activer et dépanner des plugins.
Créer des plugins
Tutoriel de création d’un premier plugin avec le manifeste fonctionnel minimal.
Plugins de canal
Créez un plugin de canal de messagerie.
Plugins de fournisseur
Créez un plugin de fournisseur de modèles.
Vue d’ensemble du SDK
Référence de la table des importations et de l’API d’enregistrement.
Modèle public de capacités
Les capacités constituent le modèle public des plugins natifs dans OpenClaw. Chaque plugin OpenClaw natif s’enregistre pour un ou plusieurs types de capacités :Un plugin qui n’enregistre aucune capacité, mais fournit des hooks, des outils, des services de découverte ou des services en arrière-plan, est un plugin hérité reposant uniquement sur des hooks. Ce modèle reste entièrement pris en charge.
Position concernant la compatibilité externe
Le modèle de capacités est intégré au cœur et utilisé aujourd’hui par les plugins intégrés et natifs, mais la compatibilité des plugins externes exige encore un critère plus strict que « il est exporté, donc il est figé ».
L’enregistrement de capacités constitue l’orientation prévue. Les hooks hérités restent la voie la plus sûre pour éviter les ruptures des plugins externes pendant la transition. Les sous-chemins auxiliaires exportés ne se valent pas tous : préférez les contrats restreints et documentés aux exportations auxiliaires fortuites.
Formes de plugins
OpenClaw classe chaque plugin chargé selon une forme déterminée par son comportement réel d’enregistrement, et non par ses seules métadonnées statiques :plain-capability
plain-capability
Enregistre exactement un type de capacité, par exemple un plugin exclusivement fournisseur comme
arcee ou chutes.hybrid-capability
hybrid-capability
Enregistre plusieurs types de capacités, par exemple
openai, qui gère l’inférence de texte, la parole, la compréhension des médias et la génération d’images.hook-only
hook-only
Enregistre uniquement des hooks, typés ou personnalisés, sans capacités, outils, commandes ni services.
non-capability
non-capability
Enregistre des outils, des commandes, des services ou des routes, mais aucune capacité.
openclaw plugins inspect <id> pour consulter la forme d’un plugin et la répartition de ses capacités. Consultez la référence de la CLI pour plus de détails.
Hooks hérités
Le hookbefore_agent_start reste pris en charge comme voie de compatibilité pour les plugins reposant uniquement sur des hooks. Des plugins hérités utilisés dans des conditions réelles en dépendent encore.
Orientation :
- maintenir son fonctionnement
- le documenter comme hérité
- préférer
before_model_resolvepour les substitutions de modèle ou de fournisseur - préférer
before_prompt_buildpour les modifications d’invite - ne le supprimer qu’après la diminution de son utilisation réelle et lorsque la couverture par les jeux de données de test démontre la sûreté de la migration
Signaux de compatibilité
openclaw doctor, openclaw plugins inspect <id>, openclaw status --all et openclaw plugins doctor affichent les avis de compatibilité suivants :
Aucun des signaux d’information ou d’avertissement ne compromet actuellement le fonctionnement de votre plugin. Ces signaux apparaissent également dans
openclaw status --all et openclaw plugins doctor.
Vue d’ensemble de l’architecture
Le système de plugins d’OpenClaw comporte quatre couches :1
Manifeste et découverte
OpenClaw recherche les plugins candidats dans les chemins configurés, les racines des espaces de travail, les racines globales des plugins et les plugins intégrés. La découverte commence par lire les manifestes natifs
openclaw.plugin.json, ainsi que les manifestes de paquets pris en charge.2
Activation et validation
Le cœur détermine si un plugin découvert est activé, désactivé, bloqué ou sélectionné pour un emplacement exclusif, tel que la mémoire.
3
Chargement à l’exécution
Les plugins OpenClaw natifs sont chargés dans le processus et enregistrent leurs capacités dans un registre central. Le JavaScript empaqueté est chargé au moyen de la fonction native
require ; le code source TypeScript local tiers utilise Jiti comme solution de secours d’urgence. Les paquets compatibles sont normalisés sous forme d’enregistrements du registre sans importer de code d’exécution.4
Utilisation des interfaces
Le reste d’OpenClaw lit le registre afin d’exposer les outils, les canaux, la configuration des fournisseurs, les hooks, les routes HTTP, les commandes CLI et les services.
- les métadonnées utilisées lors de l’analyse proviennent de
registerCli(..., { descriptors: [...] }) - le véritable module CLI du plugin peut rester chargé à la demande et s’enregistrer lors de la première invocation
- la validation des manifestes et de la configuration doit fonctionner à partir des métadonnées de manifeste et de schéma, sans exécuter le code du plugin
- la découverte des capacités natives peut charger le code d’entrée des plugins de confiance afin de créer un instantané non activant du registre
- le comportement natif à l’exécution provient du chemin
register(api)du module du plugin lorsqueapi.registrationMode === "full"
Instantané des métadonnées des plugins et table de recherche
Au démarrage, le Gateway crée un uniquePluginMetadataSnapshot pour l’instantané de configuration actuel. Cet instantané contient uniquement des métadonnées : il stocke l’index des plugins installés, le registre des manifestes, les diagnostics des manifestes, les tables de propriétaires, un normaliseur d’identifiants de plugins et les enregistrements des manifestes. Il ne contient ni modules de plugins chargés, ni SDK de fournisseurs, ni contenu de paquets, ni exportations d’exécution.
La validation de la configuration tenant compte des plugins, l’activation automatique au démarrage et l’initialisation des plugins du Gateway utilisent cet instantané au lieu de reconstruire séparément les métadonnées des manifestes et des index. PluginLookUpTable est dérivée du même instantané et ajoute le plan des plugins de démarrage pour la configuration d’exécution actuelle.
Après le démarrage, le Gateway conserve l’instantané de métadonnées actuel comme produit d’exécution remplaçable. Les découvertes répétées de fournisseurs à l’exécution peuvent emprunter cet instantané au lieu de reconstruire l’index des installations et le registre des manifestes à chaque parcours du catalogue des fournisseurs. L’instantané est effacé ou remplacé à l’arrêt du Gateway, lors de modifications de la configuration ou de l’inventaire des plugins, et lors des écritures dans l’index des installations ; les appelants reviennent au chemin à froid des manifestes et de l’index lorsqu’aucun instantané actuel compatible n’existe. Les vérifications de compatibilité doivent inclure les racines de découverte des plugins, telles que plugins.load.paths, ainsi que l’espace de travail par défaut de l’agent, car les plugins de l’espace de travail font partie de la portée des métadonnées.
L’instantané et la table de recherche maintiennent les décisions répétées du démarrage sur le chemin rapide :
- propriété des canaux
- démarrage différé des canaux
- identifiants des plugins de démarrage
- propriété des fournisseurs et des moteurs CLI
- propriété du fournisseur de configuration, des alias de commandes, du fournisseur du catalogue de modèles et des contrats de manifeste
- validation des schémas de configuration des plugins et des canaux
- décisions d’activation automatique au démarrage
PluginLookUpTable du Gateway. Ce chemin reconstruit désormais le registre à la demande ; privilégiez la transmission de la table de recherche actuelle ou d’un registre des manifestes explicite dans les flux d’exécution lorsqu’un appelant en possède déjà un.
Planification de l’activation
La planification de l’activation fait partie du plan de contrôle. Les appelants peuvent demander quels plugins sont pertinents pour une commande, un fournisseur, un canal, une route, un environnement d’exécution d’agent ou une capacité donnés avant de charger des registres d’exécution plus étendus. Le planificateur maintient la compatibilité avec le comportement actuel des manifestes :- les champs
activation.*sont des indications explicites destinées au planificateur providers,channels,commandAliases,setup.providers,contracts.toolset les hooks restent les mécanismes de repli définissant la propriété dans le manifeste- l’API du planificateur qui renvoie uniquement les identifiants reste disponible pour les appelants existants
- l’API de plan signale des libellés de motif afin que les diagnostics puissent distinguer les indications explicites du mécanisme de repli fondé sur la propriété
Plugins de canal et outil de messagerie partagé
Les plugins de canal n’ont pas besoin d’enregistrer un outil distinct d’envoi, de modification ou de réaction pour les actions de discussion courantes. OpenClaw conserve un unique outilmessage partagé dans le cœur, tandis que les plugins de canal prennent en charge la découverte et l’exécution propres au canal en arrière-plan.
La séparation actuelle est la suivante :
- le cœur prend en charge l’hôte de l’outil
messagepartagé, son intégration aux prompts, la gestion des sessions et des fils de discussion, ainsi que la répartition de l’exécution - les plugins de canal prennent en charge la découverte des actions dans leur portée, la découverte des capacités et tous les fragments de schéma propres au canal
- les plugins de canal prennent en charge la grammaire de conversation des sessions propre au fournisseur, par exemple la manière dont les identifiants de conversation encodent les identifiants de fil de discussion ou sont hérités des conversations parentes
- les plugins de canal exécutent l’action finale par l’intermédiaire de leur adaptateur d’actions
ChannelMessageActionAdapter.describeMessageTool(...). Cet appel de découverte unifié permet à un plugin de renvoyer simultanément ses actions visibles, ses capacités et ses contributions au schéma afin que ces éléments ne divergent pas.
Lorsqu’un paramètre de l’outil de messagerie propre à un canal contient une source multimédia, telle qu’un chemin local ou une URL multimédia distante, le plugin doit également renvoyer mediaSourceParams depuis describeMessageTool(...). Le cœur utilise cette liste explicite pour appliquer la normalisation des chemins de la sandbox et les indications d’accès aux médias sortants sans coder en dur les noms de paramètres appartenant au plugin. Privilégiez des correspondances limitées à chaque action plutôt qu’une liste plate couvrant tout le canal, afin qu’un paramètre multimédia réservé au profil ne soit pas normalisé pour des actions sans rapport, telles que send.
Le cœur transmet le contexte d’exécution à cette étape de découverte. Les champs importants comprennent :
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentId- le
requesterSenderIdentrant approuvé
message du cœur.
C’est pourquoi les modifications du routage de l’exécuteur intégré relèvent toujours du plugin : l’exécuteur doit transmettre l’identité actuelle de la discussion et de la session à la frontière de découverte du plugin afin que l’outil message partagé expose la surface appartenant au canal appropriée pour le tour en cours.
Pour les assistants d’exécution appartenant aux canaux, les plugins intégrés doivent conserver l’environnement d’exécution dans leurs propres modules. Le cœur ne prend plus en charge les environnements d’exécution des actions de messagerie de Discord, Slack, Telegram ou WhatsApp sous src/agents/tools. Nous ne publions pas de sous-chemins plugin-sdk/*-action-runtime distincts, et les plugins intégrés doivent importer directement leur propre code d’exécution local depuis les modules qui leur appartiennent.
La même séparation s’applique de manière générale aux interfaces du SDK nommées d’après un fournisseur : le cœur ne doit pas importer de modules d’agrégation pratiques propres à un canal pour Discord, Signal, Slack, WhatsApp ou des plugins similaires. Si le cœur a besoin d’un comportement, il doit soit utiliser le module d’agrégation api.ts / runtime-api.ts du plugin intégré, soit transformer ce besoin en une capacité générique restreinte du SDK partagé.
Les plugins intégrés suivent la même règle. Le fichier runtime-api.ts d’un plugin intégré ne doit pas réexporter sa propre façade de marque openclaw/plugin-sdk/<plugin-id>. Ces façades de marque restent des couches de compatibilité pour les plugins externes et les anciens consommateurs, mais les plugins intégrés doivent utiliser des exportations locales ainsi que des sous-chemins génériques restreints du SDK, tels que openclaw/plugin-sdk/channel-policy, openclaw/plugin-sdk/runtime-store ou openclaw/plugin-sdk/webhook-ingress. Le nouveau code ne doit pas ajouter de façades du SDK propres à un identifiant de plugin, sauf si la frontière de compatibilité d’un écosystème externe existant l’exige.
Pour les sondages en particulier, il existe deux chemins d’exécution :
outbound.sendPollconstitue la base partagée pour les canaux compatibles avec le modèle commun de sondageactions.handleAction("poll")est le chemin privilégié pour les sémantiques de sondage propres à un canal ou les paramètres de sondage supplémentaires
Modèle de propriété des capacités
OpenClaw considère un plugin natif comme la frontière de propriété d’une entreprise ou d’une fonctionnalité, et non comme un regroupement hétéroclite d’intégrations sans rapport. Cela signifie que :- un plugin d’entreprise doit généralement prendre en charge toutes les surfaces de cette entreprise destinées à OpenClaw
- un plugin de fonctionnalité doit généralement prendre en charge l’ensemble de la surface qu’il introduit
- les canaux doivent utiliser les capacités partagées du cœur au lieu de réimplémenter ponctuellement le comportement des fournisseurs
Fournisseur à capacités multiples
Fournisseur à capacités multiples
google prend en charge l’inférence de texte, le moteur de CLI, les plongements, la parole, la voix en temps réel, la compréhension des médias, la génération d’images, de musique et de vidéos, ainsi que la recherche sur le Web. openai prend en charge l’inférence de texte, les plongements, la parole, la transcription en temps réel, la voix en temps réel, la compréhension des médias et la génération d’images et de vidéos. minimax prend en charge l’inférence de texte ainsi que la compréhension des médias, la parole, la génération d’images, de musique et de vidéos, et la recherche sur le Web.Fournisseur à capacité unique
Fournisseur à capacité unique
arcee et chutes prennent uniquement en charge l’inférence de texte ; microsoft prend uniquement en charge la parole. Un plugin de fournisseur peut conserver cette portée restreinte tant qu’il n’a pas besoin de couvrir une plus grande partie de la surface de ce fournisseur.Plugin de fonctionnalité
Plugin de fonctionnalité
voice-call prend en charge le transport des appels, les outils, la CLI, les routes et le pont vers les flux multimédias de Twilio, mais utilise les capacités partagées de parole, de transcription en temps réel et de voix en temps réel au lieu d’importer directement les plugins de fournisseurs.- la surface d’un fournisseur destinée à OpenClaw réside dans un seul plugin, même si elle couvre les modèles de texte, la parole, les images et la vidéo
- les autres fournisseurs peuvent faire de même pour leur propre surface
- les canaux n’ont pas à savoir quel plugin de fournisseur prend en charge le fournisseur ; ils utilisent le contrat de capacité partagé exposé par le cœur
- plugin = frontière de propriété
- capacité = contrat du cœur que plusieurs plugins peuvent implémenter ou utiliser
1
Définir la capacité
Définir la capacité manquante dans le cœur.
2
L’exposer par l’intermédiaire du SDK
L’exposer de manière typée par l’intermédiaire de l’API et de l’environnement d’exécution des plugins.
3
Connecter les consommateurs
Connecter les canaux et les fonctionnalités à cette capacité.
4
Implémentations des fournisseurs
Permettre aux plugins de fournisseurs d’enregistrer leurs implémentations.
Couches des capacités
Utilisez ce modèle mental pour déterminer où placer le code :- Couche de capacité du cœur
- Couche des plugins de fournisseurs
- Couche des plugins de canal et de fonctionnalité
Orchestration partagée, stratégie, mécanismes de repli, règles de fusion de la configuration, sémantique de distribution et contrats typés.
- le cœur prend en charge la stratégie de synthèse vocale au moment de la réponse, l’ordre des mécanismes de repli, les préférences et la distribution par canal
elevenlabs,google,microsoftetopenaiprennent en charge les implémentations de synthèsevoice-callutilise l’assistant d’exécution de synthèse vocale pour la téléphonie
Exemple de plugin d’entreprise à capacités multiples
Un plugin d’entreprise doit paraître cohérent de l’extérieur. Si OpenClaw dispose de contrats partagés pour les modèles, la parole, la transcription en temps réel, la voix en temps réel, la compréhension des médias, la génération d’images, la génération de vidéos, la récupération de contenu Web et la recherche sur le Web, un fournisseur peut prendre en charge toutes ses surfaces au même endroit :- un seul plugin prend en charge la surface du fournisseur
- le cœur continue de prendre en charge les contrats de capacité
- les canaux et les plugins de fonctionnalité utilisent les assistants
api.runtime.*, et non le code du fournisseur - les tests de contrat peuvent vérifier que le plugin a enregistré les capacités dont il revendique la propriété
Exemple de capacité : compréhension de la vidéo
OpenClaw considère déjà la compréhension des images, du contenu audio et des vidéos comme une capacité partagée unique. Le même modèle de propriété s’y applique :1
Le cœur définit le contrat
Le cœur définit le contrat de compréhension des médias.
2
Les plugins de fournisseurs s’enregistrent
Les plugins de fournisseurs enregistrent
describeImage, transcribeAudio et describeVideo selon les besoins.3
Les consommateurs utilisent le comportement partagé
Les canaux et les plugins de fonctionnalité utilisent le comportement partagé du cœur au lieu de se connecter directement au code du fournisseur.
api.registerVideoGenerationProvider(...) conformément à celui-ci.
Vous souhaitez une liste de contrôle concrète pour le déploiement ? Consultez le guide pratique des capacités.
Contrats et application
La surface de l’API des plugins est volontairement typée et centralisée dansOpenClawPluginApi. Ce contrat définit les points d’enregistrement pris en charge et les assistants d’exécution sur lesquels un plugin peut s’appuyer.
Pourquoi est-ce important :
- les auteurs de plugins disposent d’une norme interne unique et stable
- le cœur peut rejeter les conflits de propriété, par exemple lorsque deux plugins enregistrent le même identifiant de fournisseur
- le démarrage peut afficher des diagnostics exploitables pour les enregistrements incorrects
- les tests de contrat peuvent garantir la propriété des plugins intégrés et empêcher toute dérive silencieuse
Application des règles d’enregistrement à l’exécution
Application des règles d’enregistrement à l’exécution
Le registre des plugins valide les enregistrements lors du chargement des plugins. Par exemple, les identifiants de fournisseur en double, les identifiants de fournisseur vocal en double et les enregistrements incorrects produisent des diagnostics de plugin plutôt qu’un comportement indéfini.
Tests de contrat
Tests de contrat
Les plugins intégrés sont consignés dans des registres de contrat pendant l’exécution des tests afin qu’OpenClaw puisse vérifier explicitement leur propriété. Cette méthode est actuellement utilisée pour les fournisseurs de modèles, les fournisseurs vocaux, les fournisseurs de recherche Web et la propriété des enregistrements intégrés.
Éléments d’un bon contrat
- Bons contrats
- Mauvais contrats
- typés
- restreints
- propres à une capacité
- détenus par le cœur
- réutilisables par plusieurs plugins
- utilisables par les canaux et les fonctionnalités sans connaissance du fournisseur
Modèle d’exécution
Les plugins natifs d’OpenClaw s’exécutent dans le même processus que le Gateway. Ils ne sont pas isolés dans un bac à sable. Un plugin natif chargé se situe dans la même frontière de confiance au niveau du processus que le code du cœur. Les paquets compatibles sont plus sûrs par défaut, car OpenClaw les traite actuellement comme des ensembles de métadonnées et de contenu. Dans les versions actuelles, cela correspond principalement aux Skills intégrées. Utilisez des listes d’autorisation et des chemins explicites d’installation et de chargement pour les plugins non intégrés. Considérez les plugins de l’espace de travail comme du code destiné au développement, et non comme des composants activés par défaut en production. Pour les noms de paquets intégrés à l’espace de travail, conservez un identifiant de plugin dérivé du nom npm :@openclaw/<id> par défaut, ou un suffixe typé approuvé tel que -provider, -plugin, -speech, -sandbox ou -media-understanding lorsque le paquet expose volontairement un rôle de plugin plus restreint.
Remarque sur la confiance :
plugins.allow accorde sa confiance aux identifiants de plugins, et non à la provenance de leur source. Un plugin de l’espace de travail dont l’identifiant est identique à celui d’un plugin intégré remplace volontairement la copie intégrée lorsque ce plugin de l’espace de travail est activé ou ajouté à la liste d’autorisation. Ce comportement est normal et utile pour le développement local, les tests de correctifs et les correctifs urgents. La confiance accordée aux plugins intégrés est déterminée à partir de l’instantané de la source — le manifeste et le code présents sur le disque au moment du chargement — plutôt qu’à partir des métadonnées d’installation. Un enregistrement d’installation corrompu ou remplacé ne peut pas étendre silencieusement la surface de confiance d’un plugin intégré au-delà de ce que déclare sa source réelle.Frontière d’exportation
OpenClaw exporte des capacités, et non des commodités d’implémentation. Conservez l’enregistrement des capacités dans l’API publique. Supprimez les exportations d’assistants qui ne font pas partie du contrat :- sous-chemins d’assistants propres aux plugins intégrés
- sous-chemins d’infrastructure d’exécution non destinés à l’API publique
- assistants pratiques propres à un fournisseur
- assistants de configuration et d’intégration qui constituent des détails d’implémentation
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime et plugin-sdk/plugin-config-runtime.