defineToolPlugin, wenn das Plugin eine feste Liste von Tools besitzt und OpenClaw die Manifest-Metadaten erzeugen soll, die diese Tools auffindbar halten, ohne Laufzeitcode zu laden.
Der empfohlene Ablauf ist:
- Erstellen Sie ein Paketgerüst mit
openclaw plugins init. - Schreiben Sie Tools mit
defineToolPlugin. - Bauen Sie JavaScript.
- Erzeugen Sie
openclaw.plugin.json- undpackage.json-Metadaten mitopenclaw plugins build. - Validieren Sie die erzeugten Metadaten vor der Veröffentlichung oder Installation.
Anforderungen
- Node >= 22.
- TypeScript-ESM-Paketausgabe.
typeboxfür Konfigurations- und Tool-Parameterschemas.openclaw >=2026.5.17, die erste OpenClaw-Version, dieopenclaw/plugin-sdk/tool-pluginexportiert.- Ein Paket-Root, der
dist/,openclaw.plugin.jsonundpackage.jsonausliefern kann.
typebox zur Laufzeit. Behalten Sie typebox daher in
dependencies, nicht nur in devDependencies.
Schnellstart
Erstellen Sie ein neues Plugin-Paket:src/index.ts: einendefineToolPlugin-Einstieg mit einemecho-Tool.src/index.test.ts: einen kleinen Metadatentest.tsconfig.json: NodeNext-TypeScript-Ausgabe nachdist/.package.json: Skripte, Laufzeitabhängigkeiten undopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: erzeugte Manifest-Metadaten für das anfängliche Tool.
Ein Tool schreiben
defineToolPlugin übernimmt die Plugin-Identität, ein optionales Konfigurationsschema und eine
statische Liste von Tools. Parameter- und Konfigurationstypen werden aus TypeBox-
Schemas abgeleitet.
Optionale und Factory-Tools
Setzen Sieoptional: true, wenn Benutzer das Tool ausdrücklich auf die Allowlist setzen sollen, bevor es
an ein Modell gesendet wird:
openclaw plugins build schreibt den passenden toolMetadata.<tool>.optional-
Manifest-Eintrag, damit OpenClaw das Tool erkennen kann, ohne den Plugin-
Laufzeitcode zu laden.
Verwenden Sie factory, wenn ein Tool den Laufzeit-Tool-Kontext benötigt, bevor es
erstellt werden kann. Die Factory hält die Metadaten statisch, während das Tool für einen
bestimmten Lauf aussteigen, den Sandbox-Zustand prüfen oder Laufzeithelfer binden kann.
definePluginEntry direkt, wenn
das Plugin Tool-Namen dynamisch berechnet oder Tools mit Hooks,
Diensten, Providern, Befehlen oder anderen Laufzeitoberflächen kombiniert.
Rückgabewerte
defineToolPlugin umschließt einfache Rückgabewerte in das OpenClaw-Tool-Ergebnisformat:
- Geben Sie einen String zurück, wenn das Modell genau diesen Text sehen soll.
- Geben Sie einen JSON-kompatiblen Wert zurück, wenn das Modell formatiertes JSON sehen soll
und OpenClaw den ursprünglichen Wert in
detailsbehalten soll.
AgentToolResult zurückgeben oder eine
vorhandene api.registerTool-Implementierung wiederverwenden müssen. Verwenden Sie definePluginEntry statt
defineToolPlugin, wenn Sie vollständig dynamische Tools oder gemischte Plugin-
Fähigkeiten benötigen.
Konfiguration
configSchema ist optional. Wenn Sie es weglassen, verwendet OpenClaw ein strikt leeres Objekt-
Schema, und das erzeugte Manifest enthält weiterhin configSchema.
configSchema einschließen, wird das zweite execute-Argument aus dem
Schema typisiert:
Erzeugte Metadaten
OpenClaw erkennt installierte Plugins aus kalten Metadaten. Es muss das Plugin-Manifest lesen können, bevor Plugin-Laufzeitcode importiert wird.defineToolPlugin
stellt daher statische Metadaten bereit, und openclaw plugins build schreibt diese
Metadaten in das Paket.
Führen Sie den Generator aus, nachdem Sie Plugin-ID, Name, Beschreibung, Konfigurationsschema,
Aktivierung oder Tool-Namen geändert haben:
contracts.tools ist der wichtige Discovery-Vertrag. Er teilt OpenClaw mit, welches
Plugin jedes Tool besitzt, ohne jede installierte Plugin-Laufzeit zu laden. Wenn das
Manifest veraltet ist, fehlt das Tool möglicherweise in der Discovery, oder das falsche Plugin
wird für einen Registrierungsfehler verantwortlich gemacht.
Paketmetadaten
Für den einfachen Tool-Plugin-Workflow richtetopenclaw plugins build
package.json am ausgewählten einzelnen Laufzeiteinstieg aus:
./dist/index.js für installierte Pakete. Quell-
Einstiege sind in der Workspace-Entwicklung nützlich, veröffentlichte Pakete sollten jedoch nicht
vom Laden der TypeScript-Laufzeit abhängen.
In CI validieren
Verwenden Sieplugins build --check, damit CI fehlschlägt, wenn erzeugte Metadaten veraltet sind, ohne
Dateien neu zu schreiben:
plugins validate prüft, dass:
openclaw.plugin.jsonexistiert und den normalen Manifest-Loader besteht.- Der aktuelle Einstieg
defineToolPlugin-Metadaten exportiert. - Erzeugte Manifest-Felder mit den Einstiegsmetadaten übereinstimmen.
contracts.toolsmit den deklarierten Tool-Namen übereinstimmt.package.jsonopenclaw.extensionsauf den ausgewählten Laufzeiteinstieg zeigt.
Lokal installieren und prüfen
Installieren Sie den Paketpfad aus einem separaten OpenClaw-Checkout oder mit installierter CLI:Veröffentlichen
Veröffentlichen Sie über ClawHub, wenn das Paket bereit ist:Fehlerbehebung
plugin entry not found: ./dist/index.js
Die ausgewählte Einstiegsdatei existiert nicht. Führen Sie npm run build aus und anschließend erneut
openclaw plugins build --entry ./dist/index.js oder
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Der Einstieg hat keinen von defineToolPlugin erzeugten Wert exportiert. Prüfen Sie, dass der
Standardexport des Moduls das Ergebnis von defineToolPlugin(...) ist, oder übergeben Sie den richtigen
Einstieg mit --entry.
openclaw.plugin.json generated metadata is stale
Das Manifest stimmt nicht mehr mit den Einstiegsmetadaten überein. Führen Sie aus:
openclaw.plugin.json als auch an package.json.
package.json openclaw.extensions must include ./dist/index.js
Die Paketmetadaten zeigen auf einen anderen Laufzeiteinstieg. Führen Sie
openclaw plugins build --entry ./dist/index.js aus, damit der Generator die
Paketmetadaten an den Einstieg anpasst, den Sie ausliefern möchten.
Cannot find package 'typebox'
Das gebaute Plugin importiert typebox zur Laufzeit. Behalten Sie typebox in
dependencies, installieren Sie die Paketabhängigkeiten erneut, bauen Sie neu und führen Sie die Validierung erneut aus.
Tool erscheint nach der Installation nicht
Prüfen Sie Folgendes der Reihe nach:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonenthältcontracts.toolsmit den erwarteten Tool-Namen.package.jsonenthältopenclaw.extensions: ["./dist/index.js"].- Der Gateway wurde nach der Installation des Plugins neu gestartet oder neu geladen.