Building Plugins
Plugins erweitern OpenClaw um neue Fähigkeiten: Kanäle, Modell-Provider, Sprachausgabe, Echtzeit-Transkription, Echtzeit-Sprache, Medienverständnis, Bildgenerierung, Videogenerierung, Web-Abruf, Websuche, Agent-Tools oder eine beliebige Kombination davon. Sie müssen Ihr Plugin nicht dem OpenClaw-Repository hinzufügen. Veröffentlichen Sie es in ClawHub oder auf npm, und Benutzer installieren es mitopenclaw plugins install <package-name>. OpenClaw versucht zuerst ClawHub und
fällt dann automatisch auf npm zurück.
Voraussetzungen
- Node >= 22 und ein Paketmanager (npm oder pnpm)
- Vertrautheit mit TypeScript (ESM)
- Für In-Repo-Plugins: Repository geklont und
pnpm installausgeführt
Welche Art von Plugin?
Kanal-Plugin
OpenClaw mit einer Messaging-Plattform verbinden (Discord, IRC usw.)
Provider-Plugin
Einen Modell-Provider hinzufügen (LLM, Proxy oder benutzerdefinierter Endpunkt)
Tool- / Hook-Plugin
Agent-Tools, Event-Hooks oder Dienste registrieren — weiter unten
createOptionalChannelSetupSurface(...) aus
openclaw/plugin-sdk/channel-setup. Es erzeugt ein Setup-Adapter-/Wizard-Paar,
das auf die Installationsanforderung hinweist und echte Konfigurationsschreibvorgänge
blockiert, bis das Plugin installiert ist.
Schnellstart: Tool-Plugin
Diese Anleitung erstellt ein minimales Plugin, das ein Agent-Tool registriert. Kanal- und Provider-Plugins haben eigene Anleitungen, die oben verlinkt sind.Paket und Manifest erstellen
docs/snippets/plugin-publish/.Den Einstiegspunkt schreiben
definePluginEntry ist für Nicht-Kanal-Plugins. Für Kanäle verwenden Sie
defineChannelPluginEntry — siehe Kanal-Plugins.
Die vollständigen Optionen für Einstiegspunkte finden Sie unter Einstiegspunkte.Testen und veröffentlichen
Externe Plugins: Mit ClawHub validieren und veröffentlichen, dann installieren:OpenClaw prüft bei einfachen Paketspezifikationen wie
@myorg/openclaw-my-plugin ebenfalls zuerst ClawHub vor npm.In-Repo-Plugins: Im Workspace-Baum der gebündelten Plugins ablegen — werden automatisch erkannt.Plugin-Fähigkeiten
Ein einzelnes Plugin kann über dasapi-Objekt eine beliebige Anzahl von Fähigkeiten registrieren:
| Fähigkeit | Registrierungsmethode | Detaillierte Anleitung |
|---|---|---|
| Textinferenz (LLM) | api.registerProvider(...) | Provider-Plugins |
| CLI-Inferenz-Backend | api.registerCliBackend(...) | CLI-Backends |
| Kanal / Messaging | api.registerChannel(...) | Kanal-Plugins |
| Sprache (TTS/STT) | api.registerSpeechProvider(...) | Provider-Plugins |
| Echtzeit-Transkription | api.registerRealtimeTranscriptionProvider(...) | Provider-Plugins |
| Echtzeit-Sprache | api.registerRealtimeVoiceProvider(...) | Provider-Plugins |
| Medienverständnis | api.registerMediaUnderstandingProvider(...) | Provider-Plugins |
| Bildgenerierung | api.registerImageGenerationProvider(...) | Provider-Plugins |
| Videogenerierung | api.registerVideoGenerationProvider(...) | Provider-Plugins |
| Web-Abruf | api.registerWebFetchProvider(...) | Provider-Plugins |
| Websuche | api.registerWebSearchProvider(...) | Provider-Plugins |
| Agent-Tools | api.registerTool(...) | Unten |
| Benutzerdefinierte Befehle | api.registerCommand(...) | Einstiegspunkte |
| Event-Hooks | api.registerHook(...) | Einstiegspunkte |
| HTTP-Routen | api.registerHttpRoute(...) | Interna |
| CLI-Unterbefehle | api.registerCli(...) | Einstiegspunkte |
config.*,
exec.approvals.*, wizard.*, update.*) bleiben reserviert und werden immer zu
operator.admin aufgelöst, auch wenn ein Plugin einen engeren Scope anfordert.
Zu beachtende Semantik für Hook-Guards:
before_tool_call:{ block: true }ist endgültig und stoppt Handler mit niedrigerer Priorität.before_tool_call:{ block: false }wird als keine Entscheidung behandelt.before_tool_call:{ requireApproval: true }pausiert die Agent-Ausführung und fordert den Benutzer zur Freigabe über das Overlay für Ausführungsfreigaben, Telegram-Schaltflächen, Discord-Interaktionen oder den Befehl/approveauf jedem Kanal auf.before_install:{ block: true }ist endgültig und stoppt Handler mit niedrigerer Priorität.before_install:{ block: false }wird als keine Entscheidung behandelt.message_sending:{ cancel: true }ist endgültig und stoppt Handler mit niedrigerer Priorität.message_sending:{ cancel: false }wird als keine Entscheidung behandelt.
/approve verarbeitet sowohl Ausführungs- als auch Plugin-Freigaben mit begrenztem Fallback: Wenn eine ID für eine Ausführungsfreigabe nicht gefunden wird, versucht OpenClaw dieselbe ID erneut über Plugin-Freigaben. Die Weiterleitung von Plugin-Freigaben kann unabhängig über approvals.plugin in der Konfiguration konfiguriert werden.
Wenn eine benutzerdefinierte Freigabelogik genau diesen begrenzten Fallback-Fall erkennen muss,
verwenden Sie bevorzugt isApprovalNotFoundError aus openclaw/plugin-sdk/error-runtime,
anstatt manuell auf Zeichenfolgen für abgelaufene Freigaben zu prüfen.
Einzelheiten finden Sie unter SDK Overview hook decision semantics.
Agent-Tools registrieren
Tools sind typisierte Funktionen, die das LLM aufrufen kann. Sie können erforderlich (immer verfügbar) oder optional (Benutzer aktiviert sie explizit) sein:- Tool-Namen dürfen nicht mit Core-Tools kollidieren (Konflikte werden übersprungen)
- Verwenden Sie
optional: truefür Tools mit Seiteneffekten oder zusätzlichen Binäranforderungen - Benutzer können alle Tools eines Plugins aktivieren, indem sie die Plugin-ID zu
tools.allowhinzufügen
Importkonventionen
Importieren Sie immer aus fokussiertenopenclaw/plugin-sdk/<subpath>-Pfaden:
api.ts, runtime-api.ts) für
interne Importe — importieren Sie niemals Ihr eigenes Plugin über seinen SDK-Pfad.
Behalten Sie bei Provider-Plugins providerspezifische Hilfsfunktionen in diesen paketweiten
Barrels, sofern die Schnittstelle nicht wirklich generisch ist. Aktuelle gebündelte Beispiele:
- Anthropic: Claude-Stream-Wrapper und Hilfsfunktionen für
service_tier/ Beta - OpenAI: Provider-Builder, Hilfsfunktionen für Standardmodelle, Echtzeit-Provider
- OpenRouter: Provider-Builder plus Hilfsfunktionen für Onboarding/Konfiguration
openclaw/plugin-sdk/* hochzustufen.
Einige generierte Hilfsschnittstellen unter openclaw/plugin-sdk/<bundled-id> existieren weiterhin für
die Wartung gebündelter Plugins und aus Kompatibilitätsgründen, zum Beispiel
plugin-sdk/feishu-setup oder plugin-sdk/zalo-setup. Behandeln Sie diese als reservierte
Oberflächen, nicht als Standardmuster für neue Drittanbieter-Plugins.
Checkliste vor der Einreichung
package.json hat korrekte
openclaw-Metadatenopenclaw.plugin.json-Manifest ist vorhanden und gültig
Der Einstiegspunkt verwendet
defineChannelPluginEntry oder definePluginEntryAlle Importe verwenden fokussierte
plugin-sdk/<subpath>-PfadeInterne Importe verwenden lokale Module, keine SDK-Selbstimporte
Tests bestehen (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check besteht (In-Repo-Plugins)Beta-Release-Tests
- Achten Sie auf GitHub-Release-Tags auf openclaw/openclaw und abonnieren Sie sie über
Watch>Releases. Beta-Tags sehen etwa so aus:v2026.3.N-beta.1. Sie können auch Benachrichtigungen für das offizielle OpenClaw-X-Konto @openclaw aktivieren, um Release-Ankündigungen zu erhalten. - Testen Sie Ihr Plugin gegen das Beta-Tag, sobald es erscheint. Das Zeitfenster bis zum Stable-Release beträgt typischerweise nur wenige Stunden.
- Posten Sie nach dem Testen im Thread Ihres Plugins im Discord-Kanal
plugin-forumentwederall goododer was nicht funktioniert hat. Wenn Sie noch keinen Thread haben, erstellen Sie einen. - Wenn etwas nicht funktioniert, öffnen oder aktualisieren Sie ein Issue mit dem Titel
Beta blocker: <plugin-name> - <summary>und versehen Sie es mit dem Labelbeta-blocker. Fügen Sie den Issue-Link in Ihren Thread ein. - Öffnen Sie einen PR gegen
mainmit dem Titelfix(<plugin-id>): beta blocker - <summary>und verlinken Sie das Issue sowohl im PR als auch in Ihrem Discord-Thread. Beitragende können PRs nicht labeln, daher ist der Titel das PR-seitige Signal für Maintainer und Automatisierung. Blocker mit einem PR werden zusammengeführt; Blocker ohne PR könnten trotzdem ausgeliefert werden. Maintainer beobachten diese Threads während der Beta-Tests. - Schweigen bedeutet grün. Wenn Sie das Zeitfenster verpassen, landet Ihr Fix wahrscheinlich im nächsten Zyklus.
Nächste Schritte
Kanal-Plugins
Ein Messaging-Kanal-Plugin erstellen
Provider-Plugins
Ein Modell-Provider-Plugin erstellen
SDK Overview
Referenz für Import-Map und Registrierungs-API
Runtime-Hilfsfunktionen
TTS, Suche, Subagent über api.runtime
Tests
Testwerkzeuge und Muster
Plugin-Manifest
Referenz für das vollständige Manifest-Schema
Verwandt
- Plugin-Architektur — tiefer Einblick in die interne Architektur
- SDK Overview — Referenz zum Plugin SDK
- Manifest — Format des Plugin-Manifests
- Kanal-Plugins — Kanal-Plugins erstellen
- Provider-Plugins — Provider-Plugins erstellen