Plugin-Einstiegspunkte
Jedes Plugin exportiert ein Standard-Einstiegsobjekt. Das SDK stellt drei Helfer zu dessen Erstellung bereit. Für installierte Plugins solltepackage.json das Laufzeitladen, wenn verfügbar, auf gebautes
JavaScript verweisen lassen:
extensions und setupEntry bleiben gültige Quell-Einstiegspunkte für die Entwicklung im Workspace und in Git-Checkouts.
runtimeExtensions und runtimeSetupEntry werden bevorzugt, wenn OpenClaw ein installiertes Paket lädt, und erlauben es npm-Paketen, die TypeScript-Kompilierung zur Laufzeit zu vermeiden. Wenn ein installiertes Paket nur einen TypeScript-Quell-Einstiegspunkt deklariert, verwendet OpenClaw einen passenden gebauten dist/*.js-Peer, wenn einer vorhanden ist, und greift andernfalls auf die TypeScript-Quelle zurück.
Alle Einstiegspfade müssen innerhalb des Plugin-Paketverzeichnisses bleiben. Laufzeiteinstiege
und erschlossene gebaute JavaScript-Peers machen einen ausbrechenden Quellpfad in extensions oder
setupEntry nicht gültig.
definePluginEntry
Import: openclaw/plugin-sdk/plugin-entry
Für Provider-Plugins, Tool-Plugins, Hook-Plugins und alles, was kein
Messaging-Kanal ist.
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
id | string | Ja | — |
name | string | Ja | — |
description | string | Ja | — |
kind | string | Nein | — |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nein | Leeres Objektschema |
register | (api: OpenClawPluginApi) => void | Ja | — |
idmuss mit Ihrem Manifestopenclaw.plugin.jsonübereinstimmen.kindist für exklusive Slots:"memory"oder"context-engine".configSchemakann eine Funktion zur verzögerten Auswertung sein.- OpenClaw löst dieses Schema beim ersten Zugriff auf und memoisiert es, sodass teure Schema-Builder nur einmal ausgeführt werden.
defineChannelPluginEntry
Import: openclaw/plugin-sdk/channel-core
Umschließt definePluginEntry mit kanalspezifischer Verdrahtung. Ruft automatisch
api.registerChannel({ plugin }) auf, stellt eine optionale CLI-Metadatenschnittstelle für die Root-Hilfe bereit und schaltet registerFull anhand des Registrierungsmodus.
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
id | string | Ja | — |
name | string | Ja | — |
description | string | Ja | — |
plugin | ChannelPlugin | Ja | — |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nein | Leeres Objektschema |
setRuntime | (runtime: PluginRuntime) => void | Nein | — |
registerCliMetadata | (api: OpenClawPluginApi) => void | Nein | — |
registerFull | (api: OpenClawPluginApi) => void | Nein | — |
setRuntimewird während der Registrierung aufgerufen, damit Sie die Laufzeitreferenz speichern können (typischerweise übercreatePluginRuntimeStore). Während der Erfassung von CLI-Metadaten wird es übersprungen.registerCliMetadataläuft sowohl währendapi.registrationMode === "cli-metadata"als auch währendapi.registrationMode === "full". Verwenden Sie es als den kanonischen Ort für kanalbesessene CLI-Deskriptoren, damit die Root-Hilfe nicht aktivierend bleibt, während die normale Registrierung von CLI-Befehlen weiterhin mit vollständigen Plugin-Ladevorgängen kompatibel bleibt.registerFullläuft nur, wennapi.registrationMode === "full"gilt. Während des reinen Setup-Ladens wird es übersprungen.- Wie bei
definePluginEntrykannconfigSchemaeine Lazy-Factory sein, und OpenClaw memoisiert das aufgelöste Schema beim ersten Zugriff. - Für Root-CLI-Befehle in Plugin-Besitz bevorzugen Sie
api.registerCli(..., { descriptors: [...] }), wenn der Befehl lazy geladen bleiben soll, ohne aus dem Root-CLI-Parse-Baum zu verschwinden. Für Kanal-Plugins registrieren Sie diese Deskriptoren bevorzugt inregisterCliMetadata(...)und haltenregisterFull(...)auf reine Laufzeitarbeit fokussiert. - Wenn
registerFull(...)außerdem Gateway-RPC-Methoden registriert, behalten Sie sie unter einem pluginspezifischen Präfix. Reservierte Core-Admin-Namespaces (config.*,exec.approvals.*,wizard.*,update.*) werden immer aufoperator.adminumgeschrieben.
defineSetupPluginEntry
Import: openclaw/plugin-sdk/channel-core
Für die leichtgewichtige Datei setup-entry.ts. Gibt nur { plugin } ohne
Laufzeit- oder CLI-Verdrahtung zurück.
defineSetupPluginEntry(...) mit den schmalen Setup-Helferfamilien:
openclaw/plugin-sdk/setup-runtimefür laufzeitsichere Setup-Helfer wie importsichere Setup-Patch-Adapter, Ausgabe von Lookup-Hinweisen,promptResolvedAllowFrom,splitSetupEntriesund delegierte Setup-Proxysopenclaw/plugin-sdk/channel-setupfür optionale Installations-Setup-Oberflächenopenclaw/plugin-sdk/setup-toolsfür Setup-/Installations-CLI-/Archiv-/Dokumentations-Helfer
defineBundledChannelSetupEntry(...) aus
openclaw/plugin-sdk/channel-entry-contract verwenden. Dieser Vertrag ermöglicht es dem
Setup-Einstiegspunkt, Setup-sichere Exporte für Plugin/Secrets beizubehalten und gleichzeitig einen
Laufzeit-Setter bereitzustellen:
Registrierungsmodus
api.registrationMode teilt Ihrem Plugin mit, wie es geladen wurde:
| Modus | Wann | Was registriert werden soll |
|---|---|---|
"full" | Normaler Gateway-Start | Alles |
"setup-only" | Deaktivierter/nicht konfigurierter Kanal | Nur Kanalregistrierung |
"setup-runtime" | Setup-Ablauf mit verfügbarer Laufzeit | Kanalregistrierung plus nur die leichtgewichtige Laufzeit, die vor dem vollständigen Einstiegspunkt benötigt wird |
"cli-metadata" | Root-Hilfe / Erfassung von CLI-Metadaten | Nur CLI-Deskriptoren |
defineChannelPluginEntry behandelt diese Aufteilung automatisch. Wenn Sie
definePluginEntry direkt für einen Kanal verwenden, prüfen Sie den Modus selbst:
"setup-runtime" als das Fenster, in dem Setup-only-Startoberflächen
existieren müssen, ohne erneut in die vollständige gebündelte Kanallaufzeit einzutreten. Gute Einsatzzwecke sind
Kanalregistrierung, Setup-sichere HTTP-Routen, Setup-sichere Gateway-Methoden und
delegierte Setup-Helfer. Schwere Hintergrunddienste, CLI-Registrare und Bootsraps von
Provider-/Client-SDKs gehören weiterhin in "full".
Speziell für CLI-Registrare:
- verwenden Sie
descriptors, wenn der Registrar einen oder mehrere Root-Befehle besitzt und Sie möchten, dass OpenClaw das echte CLI-Modul beim ersten Aufruf lazy lädt - stellen Sie sicher, dass diese Deskriptoren jeden Top-Level-Befehls-Root abdecken, der durch den Registrar bereitgestellt wird
- verwenden Sie nur
commandsfür eager Kompatibilitätspfade
Plugin-Formen
OpenClaw klassifiziert geladene Plugins anhand ihres Registrierungsverhaltens:| Form | Beschreibung |
|---|---|
| plain-capability | Ein Fähigkeitstyp (z. B. nur Provider) |
| hybrid-capability | Mehrere Fähigkeitstypen (z. B. Provider + Sprache) |
| hook-only | Nur Hooks, keine Fähigkeiten |
| non-capability | Tools/Befehle/Dienste, aber keine Fähigkeiten |
openclaw plugins inspect <id>, um die Form eines Plugins anzuzeigen.
Verwandt
- SDK Overview — Registrierungs-API und Subpath-Referenz
- Runtime Helpers —
api.runtimeundcreatePluginRuntimeStore - Setup and Config — Manifest, Setup-Einstiegspunkt, Deferred Loading
- Channel Plugins — Erstellen des Objekts
ChannelPlugin - Provider Plugins — Provider-Registrierung und Hooks