Plugins erweitern OpenClaw um neue Funktionen: Kanäle, Modell-Provider, Sprache, Echtzeit-Transkription, Echtzeit-Stimme, Medienverständnis, Bildgenerierung, Videogenerierung, Web-Abruf, Websuche, Agent-Tools oder beliebige Kombinationen davon. Sie müssen Ihr Plugin nicht zum OpenClaw-Repository hinzufügen. Veröffentlichen Sie es auf ClawHub, und Benutzer installieren es mitDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw plugins install clawhub:<package-name>. Reine Package-Spezifikationen installieren
während der Launch-Umstellung weiterhin von npm.
Voraussetzungen
- Node >= 22 und ein Package-Manager (npm oder pnpm)
- Vertrautheit mit TypeScript (ESM)
- Für Plugins im Repository: Repository geklont und
pnpm installausgeführt. Die Plugin-Entwicklung aus einem Source-Checkout ist nur mit pnpm möglich, weil OpenClaw gebündelte Plugins aus den Workspace-Packagesextensions/*lädt.
Welche Art von Plugin?
Channel plugin
OpenClaw mit einer Messaging-Plattform verbinden (Discord, IRC usw.)
Provider plugin
Einen Modell-Provider hinzufügen (LLM, Proxy oder benutzerdefinierter Endpunkt)
CLI backend plugin
Eine lokale KI-CLI auf OpenClaws Text-Fallback-Runner abbilden
Tool / hook plugin
Agent-Tools, Event-Hooks oder Dienste registrieren - fahren Sie unten fort
createOptionalChannelSetupSurface(...) aus
openclaw/plugin-sdk/channel-setup. Es erzeugt ein Setup-Adapter- und Wizard-Paar,
das die Installationsanforderung kommuniziert und echte Konfigurationsschreibvorgänge
geschlossen fehlschlagen lässt, bis das Plugin installiert ist.
Schnellstart: Tool-Plugin
Diese Anleitung erstellt ein minimales Plugin, das ein Agent-Tool registriert. Für Kanal- und Provider-Plugins gibt es oben verlinkte eigene Anleitungen.Create the package and manifest
contracts.tools aufgeführt sein, damit OpenClaw das besitzende
Plugin finden kann, ohne jede Plugin-Laufzeitumgebung zu laden. Plugins sollten außerdem
activation.onStartup bewusst deklarieren. Dieses Beispiel setzt es auf true. Siehe
Manifest für das vollständige Schema. Die kanonischen ClawHub-
Veröffentlichungssnippets befinden sich in docs/snippets/plugin-publish/.Write the entry point
definePluginEntry ist für Plugins, die keine Kanäle sind. Für Kanäle verwenden Sie
defineChannelPluginEntry - siehe Kanal-Plugins.
Vollständige Entry-Point-Optionen finden Sie unter Entry Points.Test and publish
Externe Plugins: Mit ClawHub validieren und veröffentlichen, dann installieren:Reine Package-Spezifikationen wie
@myorg/openclaw-my-plugin installieren während
der Launch-Umstellung von npm. Verwenden Sie clawhub:, wenn Sie ClawHub-Auflösung wünschen.Plugins im Repository: Unter dem gebündelten Plugin-Workspace-Baum ablegen - wird automatisch erkannt.Plugin-Funktionen
Ein einzelnes Plugin kann über dasapi-Objekt beliebig viele Funktionen registrieren:
| Funktion | Registrierungsmethode | Detaillierte Anleitung |
|---|---|---|
| Text-Inferenz (LLM) | api.registerProvider(...) | Provider-Plugins |
| CLI-Inferenz-Backend | api.registerCliBackend(...) | CLI-Backend-Plugins |
| Kanal / Messaging | api.registerChannel(...) | Kanal-Plugins |
| Sprache (TTS/STT) | api.registerSpeechProvider(...) | Provider-Plugins |
| Echtzeit-Transkription | api.registerRealtimeTranscriptionProvider(...) | Provider-Plugins |
| Echtzeit-Stimme | api.registerRealtimeVoiceProvider(...) | Provider-Plugins |
| Medienverständnis | api.registerMediaUnderstandingProvider(...) | Provider-Plugins |
| Bildgenerierung | api.registerImageGenerationProvider(...) | Provider-Plugins |
| Musikgenerierung | api.registerMusicGenerationProvider(...) | Provider-Plugins |
| Videogenerierung | api.registerVideoGenerationProvider(...) | Provider-Plugins |
| Web-Abruf | api.registerWebFetchProvider(...) | Provider-Plugins |
| Websuche | api.registerWebSearchProvider(...) | Provider-Plugins |
| Tool-Ergebnis-Middleware | api.registerAgentToolResultMiddleware(...) | SDK-Überblick |
| Agent-Tools | api.registerTool(...) | Unten |
| Benutzerdefinierte Befehle | api.registerCommand(...) | Entry Points |
| Plugin-Hooks | api.on(...) | Plugin-Hooks |
| Interne Event-Hooks | api.registerHook(...) | Entry Points |
| HTTP-Routen | api.registerHttpRoute(...) | Interna |
| CLI-Unterbefehle | api.registerCli(...) | Entry Points |
api.registerAgentToolResultMiddleware(...) verwenden, wenn sie
asynchrones Umschreiben von Tool-Ergebnissen benötigen, bevor das Modell die Ausgabe sieht. Deklarieren Sie die
Ziel-Laufzeiten in contracts.agentToolResultMiddleware, zum Beispiel
["pi", "codex"]. Dies ist eine vertrauenswürdige Schnittstelle für gebündelte Plugins; externe
Plugins sollten reguläre OpenClaw-Plugin-Hooks bevorzugen, solange OpenClaw keine
explizite Vertrauensrichtlinie für diese Funktion erhält.
Wenn Ihr Plugin benutzerdefinierte Gateway-RPC-Methoden registriert, belassen Sie diese unter einem
Plugin-spezifischen Präfix. Core-Admin-Namespaces (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 über das Exec-Genehmigungs-Overlay, Telegram-Schaltflächen, Discord-Interaktionen oder den Befehl/approveauf einem beliebigen Kanal zur Genehmigung 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.message_received: Bevorzugen Sie das typisierte FeldthreadId, wenn Sie eingehendes Thread-/Topic-Routing benötigen. Behalten Siemetadatafür kanalspezifische Extras bei.message_sending: Bevorzugen Sie die typisierten Routing-FelderreplyToId/threadIdgegenüber kanalspezifischen Metadaten-Schlüsseln.
/approve behandelt 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 benutzerdefinierte Genehmigungslogik denselben begrenzten Fallback-Fall erkennen muss,
bevorzugen Sie isApprovalNotFoundError aus openclaw/plugin-sdk/error-runtime,
anstatt Genehmigungsablauf-Strings manuell abzugleichen.
Beispiele und die Hook-Referenz finden Sie unter Plugin-Hooks.
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:ctx.activeModel, wenn ein Tool das aktive Modell für den aktuellen Turn protokollieren,
anzeigen oder sich daran anpassen muss. Das Objekt kann provider, modelId und
modelRef enthalten. Behandeln Sie es als informative Runtime-Metadaten, nicht als
Sicherheitsgrenze gegenüber dem lokalen Operator, installiertem Plugin-Code oder einer
modifizierten OpenClaw-Runtime. Für sensible lokale Tools sollten Sie ein explizites
Opt-in durch Plugin oder Operator beibehalten und geschlossen fehlschlagen, wenn die
Metadaten des aktiven Modells fehlen oder ungeeignet sind.
Jedes mit api.registerTool(...) registrierte Tool muss auch im Plugin-Manifest
deklariert werden:
description- oder Schemadaten im Manifest nicht duplizieren müssen. Der
Manifest-Vertrag deklariert nur Ownership und Discovery; die Ausführung ruft weiterhin
die live registrierte Tool-Implementierung auf.
Setzen Sie toolMetadata.<tool>.optional: true für Tools, die mit
api.registerTool(..., { optional: true }) registriert wurden, damit OpenClaw das
Laden dieser Plugin-Runtime vermeiden kann, bis das Tool ausdrücklich allowlisted wird.
Benutzer aktivieren optionale Tools in der Konfiguration:
- Tool-Namen dürfen nicht mit Core-Tools kollidieren (Konflikte werden übersprungen)
- Tools mit fehlerhaften Registrierungsobjekten, einschließlich fehlender
parameters, werden übersprungen und in den Plugin-Diagnosen gemeldet, statt Agent-Läufe zu unterbrechen - Verwenden Sie
optional: truefür Tools mit Seiteneffekten oder zusätzlichen Binäranforderungen - Benutzer können alle Tools aus einem Plugin aktivieren, indem sie die Plugin-ID zu
tools.allowhinzufügen
CLI-Befehle registrieren
Plugins können Root-openclaw-Befehlsgruppen mit api.registerCli hinzufügen. Stellen Sie
descriptors für jeden Top-Level-Befehlsroot bereit, damit OpenClaw den Befehl anzeigen
und routen kann, ohne jede Plugin-Runtime vorab zu laden.
Import-Konventionen
Importieren Sie immer aus fokussiertenopenclaw/plugin-sdk/<subpath>-Pfaden:
api.ts, runtime-api.ts) für
interne Importe - importieren Sie Ihr eigenes Plugin niemals über seinen SDK-Pfad.
Für Provider-Plugins sollten Provider-spezifische Helper 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-Helper - OpenAI: Provider-Builder, Default-Model-Helper, Realtime-Provider
- OpenRouter: Provider-Builder plus Onboarding-/Konfigurations-Helper
openclaw/plugin-sdk/* zu befördern.
Einige generierte openclaw/plugin-sdk/<bundled-id>-Helper-Schnittstellen existieren weiterhin
für die Wartung gebündelter Plugins, wenn sie nachverfolgte Owner-Nutzung haben. Behandeln Sie diese
als reservierte Oberflächen, nicht als Standardmuster für neue Drittanbieter-Plugins.
Checkliste vor der Einreichung
package.json enthält korrekte
openclaw-Metadatenopenclaw.plugin.json-Manifest ist vorhanden und gültig
Entry Point 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 wiev2026.3.N-beta.1aus. 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 vor Stable beträgt typischerweise nur wenige Stunden.
- Posten Sie nach dem Testen im Thread Ihres Plugins im Discord-Kanal
plugin-forumentwederall goododer was kaputtgegangen ist. Wenn Sie noch keinen Thread haben, erstellen Sie einen. - Wenn etwas kaputtgeht, öffnen oder aktualisieren Sie ein Issue mit dem Titel
Beta blocker: <plugin-name> - <summary>und wenden Sie das Labelbeta-blockeran. Fügen Sie den Issue-Link in Ihren Thread ein. - Öffnen Sie einen PR nach
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 gemergt; 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
Channel Plugins
Erstellen Sie ein Messaging-Channel-Plugin
Provider Plugins
Erstellen Sie ein Modell-Provider-Plugin
CLI Backend Plugins
Registrieren Sie ein lokales KI-CLI-Backend
SDK Overview
Import-Map und Referenz zur Registrierungs-API
Runtime Helpers
TTS, Suche, Subagent über api.runtime
Testing
Testhilfen und Muster
Plugin Manifest
Vollständige Referenz zum Manifest-Schema
Verwandte Themen
- Plugin-Architektur - detaillierter Einblick in die interne Architektur
- SDK-Übersicht - Plugin-SDK-Referenz
- Manifest - Plugin-Manifestformat
- Channel-Plugins - Channel-Plugins erstellen
- Provider-Plugins - Provider-Plugins erstellen