Plugins breiden OpenClaw uit met nieuwe mogelijkheden: kanalen, modelproviders, spraak, realtime transcriptie, realtime spraak, mediabegrip, beeldgeneratie, videogeneratie, web-fetch, webzoekopdrachten, agenttools of elke gewenste combinatie. Je hoeft je plugin niet toe te voegen aan de OpenClaw-repository. Publiceer naar ClawHub en gebruikers installeren metDocumentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw plugins install clawhub:<package-name>. Pakketspecificaties zonder
prefix installeren tijdens de overgang bij lancering nog steeds vanaf npm.
Vereisten
- Node >= 22 en een pakketbeheerder (npm of pnpm)
- Bekendheid met TypeScript (ESM)
- Voor plugins in de repo: repository gekloond en
pnpm installuitgevoerd. Ontwikkeling met een source-checkout van plugins is alleen pnpm, omdat OpenClaw gebundelde plugins laadt vanuit de workspace-pakkettenextensions/*.
Welk soort plugin?
Kanaalplugin
Verbind OpenClaw met een berichtenplatform (Discord, IRC, enz.)
Providerplugin
Voeg een modelprovider toe (LLM, proxy of aangepast endpoint)
CLI-backendplugin
Koppel een lokale AI-CLI aan de tekstfallbackrunner van OpenClaw
Tool-/hookplugin
Registreer agenttools, eventhooks of services - ga hieronder verder
createOptionalChannelSetupSurface(...) uit
openclaw/plugin-sdk/channel-setup. Dit levert een setupadapter + wizard-paar op
dat de installatievereiste communiceert en echt schrijven naar configuratie geblokkeerd laat
totdat de plugin is geïnstalleerd.
Snelstart: toolplugin
Deze walkthrough maakt een minimale plugin die een agenttool registreert. Kanaal- en providerplugins hebben eigen handleidingen die hierboven zijn gelinkt.Maak het pakket en het manifest
contracts.tools, zodat OpenClaw de eigenaar-plugin kan vinden
zonder elke pluginruntime te laden. Plugins moeten ook bewust
activation.onStartup declareren. Dit voorbeeld zet dit op true. Zie
Manifest voor het volledige schema. De canonieke ClawHub-
publicatiesnippets staan in docs/snippets/plugin-publish/.Schrijf het entrypoint
definePluginEntry is voor niet-kanaalplugins. Gebruik voor kanalen
defineChannelPluginEntry - zie Kanaalplugins.
Zie Entrypoints voor alle entrypointopties.Test en publiceer
Externe plugins: valideer en publiceer met ClawHub en installeer daarna:Pakketspecificaties zonder prefix zoals
@myorg/openclaw-my-plugin installeren tijdens
de overgang bij lancering vanaf npm. Gebruik clawhub: wanneer je ClawHub-resolutie wilt.Plugins in de repo: plaats ze onder de workspace-boom voor gebundelde plugins - automatisch gedetecteerd.Plugin-mogelijkheden
Een enkele plugin kan een willekeurig aantal mogelijkheden registreren via hetapi-object:
| Mogelijkheid | Registratiemethode | Gedetailleerde handleiding |
|---|---|---|
| Tekstinferentie (LLM) | api.registerProvider(...) | Providerplugins |
| CLI-inferentiebackend | api.registerCliBackend(...) | CLI-backendplugins |
| Kanaal / berichten | api.registerChannel(...) | Kanaalplugins |
| Spraak (TTS/STT) | api.registerSpeechProvider(...) | Providerplugins |
| Realtime transcriptie | api.registerRealtimeTranscriptionProvider(...) | Providerplugins |
| Realtime spraak | api.registerRealtimeVoiceProvider(...) | Providerplugins |
| Mediabegrip | api.registerMediaUnderstandingProvider(...) | Providerplugins |
| Beeldgeneratie | api.registerImageGenerationProvider(...) | Providerplugins |
| Muziekgeneratie | api.registerMusicGenerationProvider(...) | Providerplugins |
| Videogeneratie | api.registerVideoGenerationProvider(...) | Providerplugins |
| Web-fetch | api.registerWebFetchProvider(...) | Providerplugins |
| Webzoekopdracht | api.registerWebSearchProvider(...) | Providerplugins |
| Toolresultaatmiddleware | api.registerAgentToolResultMiddleware(...) | SDK-overzicht |
| Agenttools | api.registerTool(...) | Hieronder |
| Aangepaste opdrachten | api.registerCommand(...) | Entrypoints |
| Pluginhooks | api.on(...) | Pluginhooks |
| Interne eventhooks | api.registerHook(...) | Entrypoints |
| HTTP-routes | api.registerHttpRoute(...) | Internals |
| CLI-subopdrachten | api.registerCli(...) | Entrypoints |
api.registerAgentToolResultMiddleware(...) gebruiken wanneer ze
asynchrone herschrijving van toolresultaten nodig hebben voordat het model de uitvoer ziet. Declareer de
beoogde runtimes in contracts.agentToolResultMiddleware, bijvoorbeeld
["pi", "codex"]. Dit is een vertrouwde seam voor gebundelde plugins; externe
plugins kunnen beter reguliere OpenClaw-pluginhooks gebruiken, tenzij OpenClaw een
expliciet vertrouwensbeleid voor deze mogelijkheid krijgt.
Als je plugin aangepaste Gateway-RPC-methoden registreert, houd ze dan op een
pluginspecifieke prefix. Core-beheernamespaces (config.*,
exec.approvals.*, wizard.*, update.*) blijven gereserveerd en resolven altijd naar
operator.admin, zelfs als een plugin om een nauwere scope vraagt.
Hook-guardsemantiek om rekening mee te houden:
before_tool_call:{ block: true }is terminaal en stopt handlers met lagere prioriteit.before_tool_call:{ block: false }wordt behandeld als geen beslissing.before_tool_call:{ requireApproval: true }pauzeert agentuitvoering en vraagt de gebruiker om goedkeuring via de exec-goedkeuringsoverlay, Telegram-knoppen, Discord-interacties of de opdracht/approveop elk kanaal.before_install:{ block: true }is terminaal en stopt handlers met lagere prioriteit.before_install:{ block: false }wordt behandeld als geen beslissing.message_sending:{ cancel: true }is terminaal en stopt handlers met lagere prioriteit.message_sending:{ cancel: false }wordt behandeld als geen beslissing.message_received: geef de voorkeur aan het getypte veldthreadIdwanneer je inkomende thread-/topicrouting nodig hebt. Bewaarmetadatavoor kanaalspecifieke extra’s.message_sending: geef de voorkeur aan getypte routingveldenreplyToId/threadIdboven kanaalspecifieke metadatasleutels.
/approve verwerkt zowel exec- als plugingoedkeuringen met begrensde fallback: wanneer een exec-goedkeurings-id niet wordt gevonden, probeert OpenClaw hetzelfde id opnieuw via plugingoedkeuringen. Doorsturen van plugingoedkeuringen kan onafhankelijk worden geconfigureerd via approvals.plugin in de configuratie.
Als aangepaste goedkeuringsplumbing diezelfde begrensde fallbackcase moet detecteren,
gebruik dan bij voorkeur isApprovalNotFoundError uit openclaw/plugin-sdk/error-runtime
in plaats van handmatig te matchen op strings voor verlopen goedkeuringen.
Zie Pluginhooks voor voorbeelden en de hookreferentie.
Agenttools registreren
Tools zijn getypte functies die de LLM kan aanroepen. Ze kunnen vereist zijn (altijd beschikbaar) of optioneel (opt-in door gebruiker):ctx.activeModel wanneer een tool het actieve model voor de huidige beurt moet
loggen, weergeven of zich eraan moet aanpassen. Het object kan provider,
modelId en modelRef bevatten. Behandel het als informatieve runtimemetadata,
niet als een beveiligingsgrens tegenover de lokale operator, geïnstalleerde
plugincode of een aangepaste OpenClaw-runtime. Houd voor gevoelige lokale tools
een expliciete opt-in van de Plugin of operator aan en faal gesloten wanneer de
actieve-modelmetadata ontbreekt of ongeschikt is.
Elke tool die met api.registerTool(...) wordt geregistreerd, moet ook in het
pluginmanifest worden gedeclareerd:
description- of schemagegevens in het manifest
dupliceren. Het manifestcontract declareert alleen eigenaarschap en ontdekking;
uitvoering roept nog steeds de live geregistreerde toolimplementatie aan.
Stel toolMetadata.<tool>.optional: true in voor tools die zijn geregistreerd met
api.registerTool(..., { optional: true }), zodat OpenClaw kan voorkomen dat die
pluginruntime wordt geladen totdat de tool expliciet op de toestaanlijst staat.
Gebruikers schakelen optionele tools in de configuratie in:
- Toolnamen mogen niet botsen met kerntools (conflicten worden overgeslagen)
- Tools met onjuist gevormde registratieobjecten, inclusief ontbrekende
parameters, worden overgeslagen en in plugindiagnostiek gerapporteerd in plaats van agentruns te onderbreken - Gebruik
optional: truevoor tools met bijwerkingen of extra binaire vereisten - Gebruikers kunnen alle tools van een Plugin inschakelen door de plugin-id aan
tools.allowtoe te voegen
CLI-opdrachten registreren
Plugins kunnen root-openclaw-opdrachtgroepen toevoegen met api.registerCli. Geef
descriptors op voor elke opdrachtroot op topniveau, zodat OpenClaw de opdracht
kan tonen en routeren zonder elke pluginruntime vooraf te laden.
Importconventies
Importeer altijd uit gerichteopenclaw/plugin-sdk/<subpath>-paden:
api.ts, runtime-api.ts) voor
interne imports - importeer je eigen Plugin nooit via het SDK-pad ervan.
Houd voor providerplugins provider-specifieke helpers in die package-root-barrels,
tenzij de seam echt generiek is. Huidige gebundelde voorbeelden:
- Anthropic: Claude-streamwrappers en
service_tier-/betahelpers - OpenAI: providerbuilders, default-modelhelpers, realtimeproviders
- OpenRouter: providerbuilder plus onboarding-/confighelpers
openclaw/plugin-sdk/* te
promoveren.
Sommige gegenereerde openclaw/plugin-sdk/<bundled-id>-helperseams bestaan nog
voor onderhoud van gebundelde plugins wanneer ze gevolgd eigenaargebruik hebben.
Behandel die als gereserveerde oppervlakken, niet als het standaardpatroon voor
nieuwe plugins van derden.
Checklist vóór indiening
package.json heeft correcte
openclaw-metadataopenclaw.plugin.json-manifest is aanwezig en geldig
Entry point gebruikt
defineChannelPluginEntry of definePluginEntryAlle imports gebruiken gerichte
plugin-sdk/<subpath>-padenInterne imports gebruiken lokale modules, geen SDK-self-imports
Tests slagen (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check slaagt (plugins in de repo)Bèta-releasetests
- Let op GitHub-releasetags op openclaw/openclaw en abonneer je via
Watch>Releases. Bètatags zien eruit alsv2026.3.N-beta.1. Je kunt ook meldingen inschakelen voor het officiële OpenClaw X-account @openclaw voor releaseaankondigingen. - Test je Plugin tegen de bètatag zodra die verschijnt. De periode vóór stabiel is meestal maar een paar uur.
- Plaats na het testen in de thread van je Plugin in het Discord-kanaal
plugin-forumofwelall goodof wat er kapotging. Als je nog geen thread hebt, maak er dan een. - Als er iets kapotgaat, open of werk dan een issue bij met de titel
Beta blocker: <plugin-name> - <summary>en pas het labelbeta-blockertoe. Zet de issuelink in je thread. - Open een PR naar
mainmet de titelfix(<plugin-id>): beta blocker - <summary>en link het issue in zowel de PR als je Discord-thread. Bijdragers kunnen PR’s niet labelen, dus de titel is het PR-signaal voor maintainers en automatisering. Blockers met een PR worden gemerged; blockers zonder PR worden mogelijk toch uitgebracht. Maintainers volgen deze threads tijdens bètatests. - Stilte betekent groen. Als je de periode mist, landt je fix waarschijnlijk in de volgende cyclus.
Volgende stappen
Kanaalplugins
Bouw een plugin voor een berichtenkanaal
Providerplugins
Bouw een modelproviderplugin
CLI-backendplugins
Registreer een lokale AI CLI-backend
SDK-overzicht
Importmap en referentie voor registratie-API
Runtimehelpers
TTS, zoeken, subagent via api.runtime
Testen
Testhulpmiddelen en patronen
Pluginmanifest
Volledige manifestschemareferentie
Gerelateerd
- Pluginarchitectuur - uitgebreide blik op interne architectuur
- SDK-overzicht - Plugin SDK-referentie
- Manifest - pluginmanifestindeling
- Kanaalplugins - kanaalplugins bouwen
- Providerplugins - providerplugins bouwen