clawhub: als je ClawHub-resolutie wilt.
Vereisten
- Node 22.22.3+, Node 24.15+ of Node 25.9+, en
npmofpnpm. - TypeScript ESM-modules.
- Voor werk aan een gebundelde plugin in de repository kloon je de repository en voer je
pnpm installuit. Pluginontwikkeling vanuit een broncheckout werkt alleen met pnpm, omdat OpenClaw gebundelde plugins ontdekt viaextensions/*-werkruimtepakketten.
Kies de pluginvorm
Kanaalplugin
Verbind OpenClaw met een berichtenplatform.
Providerplugin
Voeg een model-, media-, zoek-, ophaal-, spraak- of realtimeprovider toe.
CLI-backendplugin
Voer een lokale AI-CLI uit via de modelfallback van OpenClaw.
Toolplugin
Registreer agenttools.
Snelstart
Bouw een minimale toolplugin door één verplichte agenttool te registreren. Dit is de kortste bruikbare pluginvorm en omvat het pakket, het manifest, het toegangspunt en lokale verificatie.1
Pakketmetadata maken
contracts.tools, zodat OpenClaw het eigenaarschap kan ontdekken zonder
elke pluginruntime voortijdig te laden. Stel activation.onStartup
bewust in; dit voorbeeld wordt geladen wanneer de Gateway wordt gestart.Ook door de host vertrouwde pluginoppervlakken worden door het manifest afgeschermd en vereisen
een expliciete declaratie voor geïnstalleerde plugins: api.registerAgentToolResultMiddleware(...)
vereist dat elke doelruntime wordt vermeld in contracts.agentToolResultMiddleware,
en api.registerTrustedToolPolicy(...) vereist elke beleids-id in
contracts.trustedToolPolicies. Deze declaraties houden de inspectie tijdens installatie
en runtimeregistratie op elkaar afgestemd.Zie Pluginmanifest voor elk manifestveld.2
De tool registreren
index.ts
definePluginEntry voor plugins die geen kanaalplugin zijn. Kanaalplugins gebruiken
in plaats daarvan defineChannelPluginEntry uit openclaw/plugin-sdk/core.3
De runtime testen
Inspecteer voor een geïnstalleerde of externe plugin de geladen runtime:Als de plugin een CLI-opdracht registreert, voer je die opdracht ook uit en controleer je
de uitvoer, bijvoorbeeld
openclaw demo-plugin ping.Voor een gebundelde plugin in deze repository ontdekt OpenClaw pluginpakketten uit
een broncheckout via de werkruimte extensions/*. Voer de meest gerichte
test uit:4
De pakketinstallatie testen
Voordat je een publicatieklare plugin publiceert, test je dezelfde installatievorm die gebruikers
ontvangen. Voeg eerst een bouwstap toe, laat runtime-toegangspunten zoals
openclaw.extensions verwijzen naar gebouwde JavaScript-bestanden zoals ./dist/index.js, en zorg
dat npm pack die dist/-uitvoer bevat. TypeScript-brontoegangspunten zijn
alleen bedoeld voor broncheckouts en lokale ontwikkelpaden.Pak daarna de plugin in en installeer het tarballbestand met npm-pack::npm-pack: gebruikt het door OpenClaw beheerde npm-project per plugin en detecteert zo
fouten in runtime-afhankelijkheden die tests vanuit een broncheckout kunnen verbergen. Hiermee wordt
de pakket- en afhankelijkheidsvorm aangetoond, niet officiële vertrouwensstatus via een catalogus.
Runtime-imports moeten in dependencies of optionalDependencies staan;
afhankelijkheden die alleen in devDependencies staan, worden niet geïnstalleerd voor het
beheerde runtimeproject.Gebruik geen onbewerkte archief- of padinstallatie als definitieve verificatie voor officieel of
bevoorrecht plugingedrag. Onbewerkte bronnen zijn nuttig voor lokale foutopsporing, maar
tonen niet hetzelfde afhankelijkheidspad aan als installaties via npm of ClawHub. Als
je plugin afhankelijk is van de vertrouwde status van een officiële plugin, voeg je een tweede verificatie
toe via een officiële installatie op basis van een catalogus of een gepubliceerd pakketpad dat
officiële vertrouwensstatus vastlegt. Zie
Resolutie van plugin-afhankelijkheden voor details over
de installatieroot en het eigenaarschap van afhankelijkheden.5
Publiceren
Valideer het pakket voordat je het publiceert:Canonieke ClawHub-pakketfragmenten staan in
docs/snippets/plugin-publish/.6
Installeren
Installeer het gepubliceerde pakket via ClawHub:
Tools registreren
Tools kunnen verplicht of optioneel zijn. Verplichte tools zijn altijd beschikbaar wanneer de plugin is ingeschakeld. Voor optionele tools moet de gebruiker expliciet toestemming geven voordat OpenClaw de bijbehorende pluginruntime laadt. Toolfabrieken ontvangen vertrouwde runtimecontext, waaronderdeliveryContext,
nativeChannelId voor het actieve platformgesprek wanneer beschikbaar, en
requesterSenderId.
outputSchema is optioneel. Het beschrijft de gestructureerde details-waarde die wordt gebruikt door
Codemodus en Toolzoekfunctie. Catalogus-
aanroepen weigeren ongeldige schema’s vóór uitvoering en valideren de uiteindelijke waarde na
toolhooks. Laat het weg voor tools zonder een stabiel JSON-resultaat. Zie
Toolplugins voor het volledige contract.
Elke tool die met api.registerTool(...) wordt geregistreerd, moet ook in het
pluginmanifest worden gedeclareerd:
tools.allow:
name, een execute die geen functie is, of een tooldescriptor zonder een parameters-
object.
Toolfabrieken ontvangen een door de runtime geleverd contextobject. Gebruik ctx.activeModel
wanneer een tool voor de huidige beurt moet loggen, weergeven of zich moet aanpassen aan het actieve model;
dit kan provider, modelId en modelRef bevatten. Beschouw dit als
informatieve runtimemetadata, niet als beveiligingsgrens tegen de lokale
beheerder, geïnstalleerde plugincode of een gewijzigde OpenClaw-runtime. Gevoelige
lokale tools moeten nog steeds expliciete toestemming op plugin- of beheerdersniveau vereisen en
veilig weigeren wanneer metadata over het actieve model ontbreekt of ongeschikt is.
Het manifest declareert eigenaarschap en ontdekking; bij de uitvoering wordt nog steeds de actieve,
geregistreerde toolimplementatie aangeroepen. Houd toolMetadata.<tool>.optional: true
afgestemd op api.registerTool(..., { optional: true }), zodat OpenClaw kan voorkomen
dat die pluginruntime wordt geladen totdat de tool expliciet op de toelatingslijst staat.
Importconventies
Importeer vanuit gerichte SDK-subpaden:api.ts en
runtime-api.ts voor interne imports. Importeer je eigen plugin niet via een
SDK-pad. Providerspecifieke helpers moeten in het providerpakket blijven, tenzij
het koppelvlak echt generiek is.
Aangepaste Gateway-RPC-methoden zijn een geavanceerd toegangspunt. Houd ze op een
pluginspecifiek voorvoegsel; beheerdersnaamruimten van de kern zoals config.*,
exec.approvals.*, operator.admin.*, wizard.* en update.* blijven gereserveerd
en worden omgezet naar operator.admin. De
openclaw/plugin-sdk/gateway-method-runtime-brug is gereserveerd voor HTTP-routes van plugins
die contracts.gatewayMethodDispatch: ["authenticated-request"] declareren.
Zie Overzicht van de Plugin-SDK voor de volledige importkaart.
Compatibiliteitsvelden van de OpenClaw-SDK bevatten TypeScript-annotaties van het type @deprecated,
die editors als migratiewaarschuwingen tonen. Om ze tijdens het bouwen af te dwingen,
schakel je een typebewuste regel in, zoals
@typescript-eslint/no-deprecated.
Oxlint is niet typebewust en kan deze annotaties daarom niet afdwingen.
Controlelijst vóór indiening
package.json bevat correcte
openclaw-metadataHet openclaw.plugin.json-manifest is aanwezig en geldig
Het ingangspunt gebruikt
defineChannelPluginEntry of definePluginEntryAlle imports gebruiken specifieke
plugin-sdk/<subpath>-padenInterne imports gebruiken lokale modules, geen zelfimports van de SDK
Tests slagen (
pnpm test <bundled-plugin-root>/my-plugin/)pnpm check slaagt (plugins in de repository)Testen met bètareleases
- Houd de releases van openclaw/openclaw in de gaten (
Watch>Releases). Bètatags zien eruit alsv2026.3.N-beta.1. Je kunt ook @openclaw volgen op X voor releaseaankondigingen. - Test je plugin met de bètatag zodra deze verschijnt. De periode vóór de stabiele release duurt doorgaans slechts enkele uren.
- Plaats na het testen een bericht in de thread van je plugin in het Discord-kanaal
plugin-forum(discord.gg/clawd), metall goodof een beschrijving van wat niet meer werkte. Maak een thread als je er nog geen hebt. - Als er iets niet meer werkt, open of werk dan een issue bij met de titel
Beta blocker: <plugin-name> - <summary>en pas het labelbeta-blockertoe. Link het issue in je thread. - Open een PR voor
mainmet de titelfix(<plugin-id>): beta blocker - <summary>en link het issue zowel in de PR als in je Discord-thread. Bijdragers kunnen PR’s geen labels geven, dus de titel is voor beheerders en automatisering het signaal aan de PR-zijde. Blokkerende problemen met een PR worden samengevoegd; blokkerende problemen zonder PR worden mogelijk toch uitgebracht. - Geen bericht betekent groen licht. Als je deze periode mist, wordt je oplossing doorgaans in de volgende cyclus opgenomen.
Volgende stappen
Kanaalplugins
Bouw een plugin voor een berichtenkanaal
Providerplugins
Bouw een plugin voor een modelprovider
CLI-backendplugins
Registreer een lokale AI-CLI-backend
SDK-overzicht
Referentie voor de importmap en registratie-API
Runtime-helpers
TTS, zoeken en subagent via api.runtime
Testen
Testhulpmiddelen en patronen
Pluginmanifest
Volledige referentie voor het manifestschema