Plugins erstellen
Plugins erweitern OpenClaw um neue Fähigkeiten: Kanäle, Modell-Provider, Speech, Realtime-Transkription, Realtime-Voice, Media Understanding, Image Generation, Video Generation, Web Fetch, Web Search, Agent-Tools oder eine beliebige Kombination davon. Sie müssen Ihr Plugin nicht zum OpenClaw-Repository hinzufügen. Veröffentlichen Sie es auf ClawHub oder 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
Verbinden Sie OpenClaw mit einer Messaging-Plattform (Discord, IRC usw.)
Provider-Plugin
Fügen Sie einen Modell-Provider hinzu (LLM, Proxy oder benutzerdefinierter Endpunkt)
Tool-/Hook-Plugin
Registrieren Sie Agent-Tools, Event-Hooks oder Services — unten weiterlesen
createOptionalChannelSetupSurface(...) aus
openclaw/plugin-sdk/channel-setup. Es erzeugt ein Setup-Adapter-/Wizard-Paar,
das die Installationsanforderung bekannt gibt und bei echten Konfigurationsschreibvorgängen
fehlschlägt, 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 Leitfäden, die oben verlinkt sind.Paket und Manifest erstellen
docs/snippets/plugin-publish/.Einstiegspunkt schreiben
definePluginEntry ist für Nicht-Kanal-Plugins gedacht. Für Kanäle verwenden Sie
defineChannelPluginEntry — siehe Kanal-Plugins.
Vollständige 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 auch ClawHub vor npm bei reinen Paketspezifikationen wie
@myorg/openclaw-my-plugin.In-Repo-Plugins: unter dem gebündelten Plugin-Workspace-Baum ablegen — werden automatisch erkannt.Plugin-Fähigkeiten
Ein einzelnes Plugin kann über dasapi-Objekt beliebig viele Fähigkeiten registrieren:
| Fähigkeit | Registrierungsmethode | Detaillierter Leitfaden |
|---|---|---|
| Text-Inferenz (LLM) | api.registerProvider(...) | Provider-Plugins |
| CLI-Inferenz-Backend | api.registerCliBackend(...) | CLI-Backends |
| Kanal / Messaging | api.registerChannel(...) | Kanal-Plugins |
| Speech (TTS/STT) | api.registerSpeechProvider(...) | Provider-Plugins |
| Realtime-Transkription | api.registerRealtimeTranscriptionProvider(...) | Provider-Plugins |
| Realtime-Voice | api.registerRealtimeVoiceProvider(...) | Provider-Plugins |
| Media Understanding | api.registerMediaUnderstandingProvider(...) | Provider-Plugins |
| Image Generation | api.registerImageGenerationProvider(...) | Provider-Plugins |
| Music Generation | api.registerMusicGenerationProvider(...) | Provider-Plugins |
| Video Generation | api.registerVideoGenerationProvider(...) | Provider-Plugins |
| Web Fetch | api.registerWebFetchProvider(...) | Provider-Plugins |
| Web Search | api.registerWebSearchProvider(...) | Provider-Plugins |
| Agent-Tools | api.registerTool(...) | Unten |
| Benutzerdefinierte Befehle | api.registerCommand(...) | Einstiegspunkte |
| Event-Hooks | api.registerHook(...) | Einstiegspunkte |
| HTTP-Routen | api.registerHttpRoute(...) | Internals |
| CLI-Unterbefehle | api.registerCli(...) | Einstiegspunkte |
config.*,
exec.approvals.*, wizard.*, update.*) bleiben reserviert und werden immer zu
operator.admin aufgelöst, selbst wenn ein Plugin einen engeren Scope anfordert.
Hook-Guard-Semantik, die Sie beachten sollten:
before_tool_call:{ block: true }ist terminal 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 Genehmigung über das Exec-Genehmigungs-Overlay, Telegram-Schaltflächen, Discord-Interaktionen oder den Befehl/approveauf jedem Kanal auf.before_install:{ block: true }ist terminal und stoppt Handler mit niedrigerer Priorität.before_install:{ block: false }wird als keine Entscheidung behandelt.message_sending:{ cancel: true }ist terminal und stoppt Handler mit niedrigerer Priorität.message_sending:{ cancel: false }wird als keine Entscheidung behandelt.
/approve verarbeitet sowohl Exec- als auch Plugin-Genehmigungen mit begrenztem Fallback: Wenn eine Exec-Genehmigungs-ID nicht gefunden wird, versucht OpenClaw dieselbe ID erneut über Plugin-Genehmigungen. Die Weiterleitung von Plugin-Genehmigungen kann unabhängig über approvals.plugin in der Konfiguration konfiguriert werden.
Wenn eine benutzerdefinierte Genehmigungsverkabelung denselben begrenzten Fallback-Fall erkennen muss,
verwenden Sie bevorzugt isApprovalNotFoundError aus openclaw/plugin-sdk/error-runtime,
anstatt Ablaufstrings für Genehmigungen manuell abzugleichen.
Details 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 (Opt-in durch den Benutzer) sein:- Tool-Namen dürfen nicht mit Core-Tools kollidieren (Konflikte werden übersprungen)
- Verwenden Sie
optional: truefür Tools mit Nebeneffekten oder zusätzlichen Binäranforderungen - Benutzer können alle Tools eines Plugins aktivieren, indem sie die Plugin-ID zu
tools.allowhinzufügen
Import-Konventionen
Importieren Sie immer aus gezieltenopenclaw/plugin-sdk/<subpath>-Pfaden:
api.ts, runtime-api.ts) für
interne Importe — importieren Sie niemals Ihr eigenes Plugin über seinen SDK-Pfad.
Für Provider-Plugins sollten providerspezifische Hilfsfunktionen in diesen package-root-
Barrels bleiben, sofern die Schnittstelle nicht wirklich generisch ist. Aktuelle gebündelte Beispiele:
- Anthropic: Claude-Stream-Wrapper und
service_tier- / Beta-Hilfsfunktionen - OpenAI: Provider-Builder, Hilfsfunktionen für Standardmodelle, Realtime-Provider
- OpenRouter: Provider-Builder sowie Onboarding-/Konfigurationshilfen
openclaw/plugin-sdk/* hochzustufen.
Einige generierte Hilfsschnittstellen unter openclaw/plugin-sdk/<bundled-id> existieren weiterhin für
die Wartung gebündelter Plugins und zur Kompatibilität, 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 gezielte
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 aus wiev2026.3.N-beta.1. Sie können auch Benachrichtigungen für das offizielle OpenClaw-X-Konto @openclaw für Release-Ankündigungen aktivieren. - Testen Sie Ihr Plugin gegen das Beta-Tag, sobald es erscheint. Das Zeitfenster vor dem stabilen Release beträgt typischerweise nur wenige Stunden.
- Schreiben Sie nach dem Testen im
plugin-forum-Discord-Kanal im Thread Ihres Plugins entwederall goododer was nicht funktioniert hat. Falls Sie noch keinen Thread haben, erstellen Sie einen. - Wenn etwas kaputtgeht, erö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. - Erö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. Mitwirkende können PRs nicht labeln, daher ist der Titel das PR-seitige Signal für Maintainer und Automatisierung. Blocker mit PR werden zusammengeführt; Blocker ohne PR werden möglicherweise trotzdem ausgeliefert. 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
Erstellen Sie ein Messaging-Kanal-Plugin
Provider-Plugins
Erstellen Sie ein Modell-Provider-Plugin
SDK Overview
Referenz für Importzuordnung und Registrierungs-API
Runtime Helpers
TTS, Suche, Subagent über api.runtime
Testing
Testhilfen und Muster
Plugin Manifest
Vollständige Referenz des Manifest-Schemas
Verwandt
- Plugin-Architektur — tiefgehender Einblick in die interne Architektur
- SDK Overview — Referenz zum Plugin SDK
- Manifest — Plugin-Manifestformat
- Kanal-Plugins — Kanal-Plugins erstellen
- Provider-Plugins — Provider-Plugins erstellen