defineToolPlugin, definePluginEntry,
defineChannelPluginEntry, defineSetupPluginEntry.
Paketeinstiege
Installierte Plugins verweisen mit den Feldernpackage.json und openclaw sowohl auf Quell-
als auch auf Build-Einstiege:
extensionsundsetupEntrysind Quelleinstiege, die für die Entwicklung in Workspaces und Git- Checkouts verwendet werden.runtimeExtensionsundruntimeSetupEntrywerden für installierte Pakete bevorzugt: Dadurch können npm-Pakete auf die TypeScript-Kompilierung zur Laufzeit verzichten.runtimeExtensionsmuss, falls vorhanden, hinsichtlich der Array-Länge mitextensionsübereinstimmen (die Einträge werden positionsweise zugeordnet).runtimeSetupEntryerfordertsetupEntry.- Wenn ein
runtimeExtensions-/runtimeSetupEntry-Artefakt deklariert ist, aber fehlt, schlägt die Installation/Erkennung mit einem Paketierungsfehler fehl; OpenClaw greift nicht stillschweigend auf den Quellcode zurück. Der Rückgriff auf den Quellcode (siehe unten) gilt nur, wenn überhaupt kein Laufzeiteinstieg deklariert ist. - Wenn ein installiertes Paket nur einen TypeScript-Quelleinstieg deklariert, sucht OpenClaw
nach einem passenden gebauten
dist/*.js-Peer (oder.mjs/.cjs) und verwendet diesen; andernfalls greift es auf den TypeScript-Quellcode zurück. - Alle Einstiegspfade müssen innerhalb des Plugin-Paketverzeichnisses bleiben. Laufzeit-
einstiege und abgeleitete gebaute JS-Peers machen einen ausbrechenden
extensions- odersetupEntry-Quellpfad nicht gültig.
defineToolPlugin
Import: openclaw/plugin-sdk/tool-plugin
Für Plugins, die ausschließlich Agent-Tools hinzufügen. Hält den Quellcode kompakt, leitet Konfigurations-
und Tool-Parametertypen aus TypeBox-Schemas ab, verpackt einfache Rückgabewerte im
OpenClaw-Tool-Ergebnisformat und stellt statische Metadaten bereit, die
openclaw plugins build in das Plugin-Manifest schreibt (contracts.tools,
configSchema).
configSchemaist optional; wird es weggelassen, kommt ein striktes Schema für ein leeres Objekt zum Einsatz (das generierte Manifest enthält weiterhinconfigSchema).executegibt eine einfache Zeichenfolge oder einen JSON-serialisierbaren Wert zurück; die Hilfsfunktion verpackt diesen als Text-Tool-Ergebnis, wobeidetailsauf den ursprünglichen (nicht in eine Zeichenfolge umgewandelten) Rückgabewert gesetzt wird.outputSchemabeschreibt optional diesen ursprünglichendetails-Wert für Code Mode und Tool Search. Katalogaufrufe weisen ein ungültiges Schema vor der Ausführung zurück und validieren den endgültigen Wert, bevor sie ihn zurückgeben.- Für benutzerdefinierte Tool-Ergebnisse exportiert
openclaw/plugin-sdk/tool-resultstextResultundjsonResult. - Tool-Namen sind statisch, daher leitet
openclaw plugins buildcontracts.toolsaus den deklarierten Tools ab, ohne Namen manuell zu duplizieren. - Das Laden zur Laufzeit bleibt strikt: Installierte Plugins benötigen weiterhin
openclaw.plugin.jsonundpackage.jsonopenclaw.extensions. OpenClaw führt niemals Plugin-Code aus, um fehlende Manifestdaten abzuleiten.
definePluginEntry
Import: openclaw/plugin-sdk/plugin-entry
Für Provider-Plugins, fortgeschrittene Tool-Plugins, Hook-Plugins und alles, was
kein Messaging-Kanal ist.
idmuss mit Ihremopenclaw.plugin.json-Manifest übereinstimmen.- Externe Sitzungskataloge verwenden
openclaw/plugin-sdk/session-catalogundapi.registerSessionCatalog({ id, label, list, read, continueSession?, archive? }). Der Core ist für diesessions.catalog.*-Gateway-Methoden zuständig; Provider geben Host-, Sitzungs- und normalisierte Transkriptprojektionen zurück, ohne RPCs zu registrieren. Ein Listen-Provider sollte den optionalenonHost(host)-Callback aufrufen, sobald jeder Host abgeschlossen ist; das zurückgegebene Host-Array bleibt als endgültiger Kompatibilitäts- Snapshot erforderlich. kindist veraltet: Deklarieren Sie stattdessen einen exklusiven Slot ("memory"oder"context-engine") im Feldkinddesopenclaw.plugin.json-Manifests. Der Laufzeiteinstiegkindbleibt lediglich als Kompatibilitätsrückfall für ältere Plugins erhalten.configSchemakann zur verzögerten Auswertung eine Funktion sein. OpenClaw löst das Schema beim ersten Zugriff auf und speichert es zwischen, sodass aufwendige Schema-Builder nur einmal ausgeführt werden.- Ein
nodeHostCommands-Deskriptor kannisAvailable({ config, env })definieren. Die Rückgabe vonfalselässt diesen Befehl und seine Fähigkeit aus der Gateway- Deklaration des Headless-Nodes weg. OpenClaw wertet ihn anhand der Node-lokalen Startkonfiguration aus; Befehlshandler sollten die Verfügbarkeit beim Aufruf dennoch validieren.
defineChannelPluginEntry
Import: openclaw/plugin-sdk/channel-core
Umschließt definePluginEntry mit kanalspezifischer Verdrahtung: Die Funktion ruft automatisch
api.registerChannel({ plugin }) auf, stellt eine optionale CLI-
Metadatenschnittstelle für die Root-Hilfe bereit und beschränkt registerFull auf den Registrierungsmodus.
Callbacks werden je Registrierungsmodus ausgeführt (vollständige Tabelle unter
Registrierungsmodus):
setRuntimewird in jedem Modus außer"cli-metadata"und"tool-discovery"ausgeführt. Speichern Sie hier die Laufzeitreferenz, üblicherweise übercreatePluginRuntimeStore.registerCliMetadatawird für"cli-metadata","discovery"und"full"ausgeführt. Verwenden Sie dies als kanonische Stelle für kanaleigene CLI-Deskriptoren, damit die Root-Hilfe nicht aktivierend bleibt, Erkennungs-Snapshots statische Befehlsmetadaten enthalten und die normale CLI-Registrierung mit vollständigen Plugin-Ladevorgängen kompatibel bleibt.registerFullwird nur für"full"und"tool-discovery"ausgeführt. Für"tool-discovery"wird es anstelle der Kanalregistrierung ausgeführt: OpenClaw überspringtregisterChannel/setRuntimevollständig und ruft nurregisterFullauf. Daher muss jede Provider-/Tool-Registrierung, die Ihr Kanal für die eigenständige Tool-Erkennung oder -Ausführung benötigt, dort erfolgen und darf nicht hinter der normalen Kanaleinrichtung liegen.- Die Erkennungsregistrierung ist nicht aktivierend, aber nicht importfrei: OpenClaw kann
den vertrauenswürdigen Plugin-Einstieg und das Kanal-Plugin-Modul auswerten, um den
Snapshot zu erstellen. Halten Sie Importe auf oberster Ebene frei von Seiteneffekten und platzieren Sie Sockets,
Clients, Worker und Dienste ausschließlich hinter
"full"-Pfaden. - Wie
definePluginEntrykannconfigSchemaeine verzögerte Factory sein; OpenClaw speichert das aufgelöste Schema beim ersten Zugriff zwischen.
- Verwenden Sie
api.registerCli(..., { descriptors: [...] })für Plugin-eigene Stamm- CLI-Befehle, die verzögert geladen werden sollen, ohne aus dem Parse-Baum der Stamm-CLI zu verschwinden. Deskriptornamen dürfen nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten und müssen mit einem Buchstaben oder einer Zahl beginnen; OpenClaw lehnt andere Formen ab und entfernt Terminal-Steuersequenzen aus Beschreibungen, bevor die Hilfe dargestellt wird. Decken Sie jeden vom Registrar bereitgestellten Stamm eines Befehls der obersten Ebene ab.commandsallein verbleibt im früh geladenen Kompatibilitätspfad. - Verwenden Sie
api.registerNodeCliFeature(...)für Feature-Befehle gekoppelter Nodes, damit sie unteropenclaw nodeseingeordnet werden (entsprichtregisterCli(registrar, { parentPath: ["nodes"], ... })). - Fügen Sie für andere verschachtelte Plugin-Befehle
parentPathhinzu und registrieren Sie Befehle auf demprogram-Objekt, das an den Registrar übergeben wird; OpenClaw löst es zum übergeordneten Befehl auf, bevor das Plugin aufgerufen wird. - Registrieren Sie bei Channel-Plugins CLI-Deskriptoren aus
registerCliMetadataund beschränken SieregisterFullauf reine Laufzeitarbeit. - Wenn
registerFullauch Gateway-RPC-Methoden registriert, verwenden Sie dafür ein Plugin-spezifisches Präfix. Reservierte administrative Core-Namensräume (config.*,exec.approvals.*,wizard.*,update.*) werden immer zuoperator.adminumgewandelt.
defineSetupPluginEntry
Import: openclaw/plugin-sdk/channel-core
Für die schlanke Datei setup-entry.ts. Gibt nur { plugin } zurück, ohne
Laufzeit- oder CLI-Verdrahtung.
defineSetupPluginEntry(...) mit den schmalen Familien von Einrichtungshilfen:
Belassen Sie umfangreiche SDKs, die CLI-Registrierung und langlebige Laufzeitdienste im
vollständigen Einstiegspunkt.
Gebündelte Workspace-Channels, die Einrichtungs- und Laufzeitoberflächen trennen, können
stattdessen
defineBundledChannelSetupEntry(...) aus
openclaw/plugin-sdk/channel-entry-contract verwenden. Damit kann der Einrichtungs-
Einstiegspunkt einrichtungssichere Plugin-/Secrets-Exporte beibehalten und zugleich einen
Laufzeit-Setter bereitstellen:
registerSetupRuntime wird nur bei "setup-runtime"-Ladevorgängen ausgeführt; beschränken Sie ihn
auf reine Konfigurationsrouten oder -methoden, die vor der verzögerten
vollständigen Aktivierung vorhanden sein müssen.
Registrierungsmodus
api.registrationMode gibt Ihrem Plugin an, wie es geladen wurde:
defineChannelPluginEntry verarbeitet diese Aufteilung automatisch. Wenn Sie
definePluginEntry direkt für einen Channel verwenden, prüfen Sie den Modus selbst und beachten Sie,
dass "tool-discovery" die Channel-Registrierung überspringt:
plugin.<plugin-id>.changed. Ereignisnamen bestehen aus einem
Kleinbuchstabensegment, Nutzdaten müssen begrenztes JSON sein und der Geltungsbereich muss
operator.read, operator.write oder operator.admin sein. Der Emitter existiert nur
während der Lebensdauer des Dienstes und wird nach dem Stoppen oder einem fehlgeschlagenen Start widerrufen. Bevorzugen Sie
Versions- oder Invalidierungsnutzdaten gegenüber vollständigen Datensätzen, damit autorisierte Clients den
kanonischen Zustand über die bereichsgebundenen Gateway-Methoden des Plugins erneut lesen.
Der Ermittlungsmodus erstellt einen nicht aktivierenden Registry-Snapshot. Er kann dennoch
den Plugin-Einstiegspunkt und das Channel-Plugin-Objekt auswerten, damit OpenClaw
Channel-Funktionen und statische CLI-Deskriptoren registrieren kann. Behandeln Sie die
Modulauswertung bei der Ermittlung als vertrauenswürdig, aber schlank: keine Netzwerkclients,
Unterprozesse, Listener, Datenbankverbindungen, Hintergrund-Worker,
Zugangsdatenzugriffe oder andere aktive Laufzeitnebeneffekte auf oberster Ebene.
Behandeln Sie "setup-runtime" als das Zeitfenster, in dem reine Einrichtungsoberflächen für den Start
vorhanden sein müssen, ohne erneut in die vollständige gebündelte Channel-Laufzeit einzutreten. Gut geeignet sind
Channel-Registrierung, einrichtungssichere HTTP-Routen, einrichtungssichere Gateway-Methoden
und delegierte Einrichtungshilfen. Umfangreiche Hintergrunddienste, CLI-Registrare und
Initialisierungen von Provider-/Client-SDKs gehören weiterhin in "full".
Plugin-Formen
OpenClaw klassifiziert geladene Plugins anhand ihres Registrierungsverhaltens:
Verwenden Sie
openclaw plugins inspect <id>, um die Form eines Plugins anzuzeigen.
Verwandte Themen
- SDK-Übersicht - Registrierungs-API und Unterpfadreferenz
- Laufzeithilfen -
api.runtimeundcreatePluginRuntimeStore - Einrichtung und Konfiguration - Manifest, Einrichtungseinstiegspunkt, verzögertes Laden
- Channel-Plugins - Erstellen des
ChannelPlugin-Objekts - Provider-Plugins - Provider-Registrierung und Hooks