package.json-metadata), manifesten (openclaw.plugin.json), setup-items en configuratieschema’s.
Pakketmetadata
Jepackage.json heeft een openclaw-veld nodig dat het pluginsysteem vertelt wat je Plugin biedt:
- Kanaalplugin
- Providerplugin / ClawHub-basis
Extern publiceren op ClawHub vereist
compat en build. De canonieke publicatiefragmenten staan in docs/snippets/plugin-publish/.openclaw-velden
string[]
Entry-pointbestanden (relatief ten opzichte van de pakketroot). Geldige bronitems voor ontwikkeling in een workspace en Git-checkout.
string[]
Gebouwde JavaScript-tegenhangers voor
extensions, waaraan de voorkeur wordt gegeven wanneer OpenClaw een geïnstalleerd npm-pakket laadt. Zie SDK-entry-points voor de oplossingsvolgorde van bron en build.string
Lichtgewicht entry die alleen voor setup dient (optioneel).
string
Gebouwde JavaScript-tegenhanger voor
setupEntry. Vereist dat setupEntry ook is ingesteld.object
{ id, label }-fallbackidentiteit van de Plugin, gebruikt wanneer een Plugin geen kanaal- of providermetadata heeft waaruit een id of label kan worden afgeleid.object
Kanaalcatalogusmetadata voor setup-, keuze-, snelstart- en statusoppervlakken.
object
Installatiehints:
npmSpec, localPath, defaultChoice, minHostVersion, expectedIntegrity, allowInvalidConfigRecovery, requiredPlatformPackages.object
Vlaggen voor opstartgedrag.
object
pluginApi-versiebereik dat deze Plugin ondersteunt. Vereist voor externe publicaties op ClawHub.Provider-id’s (
providers: string[]) zijn manifestmetadata, geen pakketmetadata. Declareer ze in openclaw.plugin.json, niet hier — zie Pluginmanifest.openclaw.channel
openclaw.channel is goedkope pakketmetadata voor kanaaldetectie en setup-oppervlakken voordat de runtime wordt geladen.
Setupvelden in beheer van het kanaal
Kanaalplugins moeten setupvelden eenmaal definiëren in runtimecode metdefineChannelSetupContract(...) en de bijbehorende serialiseerbare projectie publiceren onder openclaw.channel.setup.fields. De runtimedefinitie leidt het invoertype af dat lokaal is voor de Plugin, parseert zowel begeleide als niet-interactieve waarden en houdt kanaalspecifieke sleutels buiten kerntypen. Met pakketmetadata kunnen openclaw channels add <channel-id> --help en openclaw channels add --channel <channel-id> --help alleen de opties van het geselecteerde kanaal vinden zonder de Plugin te laden.
string, boolean, integer, string-list en choice. Gebruik sensitive: true voor aanmeldgegevens. Elke veldsleutel moet gelijk zijn aan de camelCase-attribuutnaam van de lange CLI-vlag, inclusief een eventuele ontkennende vorm, zoals apiToken voor --api-token. Booleaanse velden kunnen cli.negatedFlags toevoegen wanneer zowel positieve als --no-*-vormen nodig zijn. channel, account en de accountweergave name blijven de gedeelde besturingsenvelop.
De uitgebrachte setup/ChannelSetupInput-adapter blijft beschikbaar voor bestaande externe plugins. Nieuwe plugins moeten setupContract beschikbaar stellen; OpenClaw geeft hier altijd de voorkeur aan wanneer beide aanwezig zijn.
Voorbeeld:
exposure ondersteunt:
configured: neem het kanaal op in geconfigureerde/statusachtige lijstweergavensetup: neem het kanaal op in interactieve setup-/configuratiekeuzelijstendocs: markeer het kanaal als openbaar zichtbaar in documentatie-/navigatieoppervlakken
openclaw.install
openclaw.install is pakketmetadata, geen manifestmetadata.
Onboardinggedrag
Onboardinggedrag
Interactieve onboarding gebruikt
openclaw.install voor install-on-demand-oppervlakken: als jouw plugin vóór het laden van de runtime keuzes voor providerauthenticatie of metadata voor kanaalconfiguratie/-catalogi beschikbaar stelt, kan onboarding vragen om installatie via ClawHub, npm of een lokale bron, de plugin installeren of inschakelen en daarna doorgaan met de geselecteerde flow. ClawHub-keuzes gebruiken clawhubSpec en hebben de voorkeur wanneer ze aanwezig zijn; npm-keuzes vereisen vertrouwde catalogusmetadata met een register-npmSpec (exacte versies en expectedIntegrity zijn optionele vastzettingen die, indien ingesteld, bij installatie/bijwerken worden afgedwongen). Bewaar „wat moet worden weergegeven” in openclaw.plugin.json en „hoe het moet worden geïnstalleerd” in package.json.Afdwinging van minHostVersion
Afdwinging van minHostVersion
Als
minHostVersion is ingesteld, wordt dit zowel bij installatie als bij het laden van niet-gebundelde manifestregisters afgedwongen. Oudere hosts slaan externe plugins over; ongeldige versietekenreeksen worden geweigerd. Van gebundelde bronplugins wordt aangenomen dat ze dezelfde versie hebben als de hostcheckout.Vastgezette npm-installaties
Vastgezette npm-installaties
Bewaar voor vastgezette npm-installaties de exacte versie in
npmSpec en voeg de verwachte artefactintegriteit toe:Bereik van allowInvalidConfigRecovery
Bereik van allowInvalidConfigRecovery
allowInvalidConfigRecovery is geen algemene omzeiling voor defecte configuraties. Het is uitsluitend bedoeld voor beperkt herstel van gebundelde plugins, zodat herinstallatie/configuratie bekende restanten van upgrades kan herstellen, zoals een ontbrekend pad naar een gebundelde plugin of een verouderde channels.<id>-vermelding voor diezelfde plugin. Als de configuratie om andere redenen defect is, mislukt de installatie nog steeds veilig en krijgt de beheerder de instructie om openclaw doctor --fix uit te voeren.Uitgesteld volledig laden
Kanaalplugins kunnen kiezen voor uitgesteld laden met:setupEntry, zelfs voor reeds geconfigureerde kanalen. De volledige ingang wordt geladen nadat de Gateway is begonnen met luisteren.
Als jouw configuratie-/volledige ingang Gateway-RPC-methoden registreert, plaats deze dan onder een pluginspecifiek voorvoegsel. Gereserveerde kernbeheerdersnaamruimten (config.*, exec.approvals.*, wizard.*, update.*) blijven eigendom van de kern en worden altijd genormaliseerd naar operator.admin.
Pluginmanifest
Elke native plugin moet eenopenclaw.plugin.json in de pakketroot bevatten. OpenClaw gebruikt dit om de configuratie te valideren zonder plugincode uit te voeren.
channels toe (en voor providerplugins providers):
Publiceren op ClawHub
Skills en pluginpakketten gebruiken afzonderlijke ClawHub-publicatieopdrachten. Gebruik voor pluginpakketten de pakketspecifieke opdracht:clawhub skill publish <path> is een andere opdracht voor het publiceren van een Skills-map, niet van een pluginpakket. Zie Publiceren op ClawHub.Configuratie-ingang
setup-entry.ts is een lichtgewicht alternatief voor index.ts dat OpenClaw laadt wanneer alleen configuratieoppervlakken nodig zijn (onboarding, configuratieherstel, inspectie van uitgeschakelde kanalen):
defineBundledChannelSetupEntry(...) uit openclaw/plugin-sdk/channel-entry-contract gebruiken in plaats van defineSetupPluginEntry(...). Dat gebundelde contract ondersteunt ook een optionele runtime-export, zodat runtimebedrading tijdens de configuratie lichtgewicht en expliciet kan blijven.
Wanneer OpenClaw setupEntry gebruikt in plaats van de volledige ingang
Wanneer OpenClaw setupEntry gebruikt in plaats van de volledige ingang
- Het kanaal is uitgeschakeld, maar heeft configuratie-/onboardingoppervlakken nodig.
- Het kanaal is ingeschakeld, maar niet geconfigureerd.
- Uitgesteld laden is ingeschakeld (
deferConfiguredChannelFullLoadUntilAfterListen).
Wat setupEntry moet registreren
Wat setupEntry moet registreren
- Het kanaalpluginobject (via
defineSetupPluginEntry). - Alle HTTP-routes die nodig zijn voordat de Gateway luistert.
- Alle Gateway-methoden die tijdens het opstarten nodig zijn.
config.* of update.* vermijden.Wat setupEntry NIET mag bevatten
Wat setupEntry NIET mag bevatten
- CLI-registraties.
- Achtergrondservices.
- Zware runtime-imports (cryptografie, SDK’s).
- Gateway-methoden die pas na het opstarten nodig zijn.
Gerichte imports van configuratiehulpfuncties
Geef voor veelgebruikte paden die uitsluitend voor configuratie dienen de voorkeur aan de gerichte naden voor configuratiehulpfuncties boven de bredereplugin-sdk/setup-paraplu wanneer je slechts een deel van het configuratieoppervlak nodig hebt:
Gebruik de bredere
plugin-sdk/setup-naad wanneer je de volledige gedeelde configuratiegereedschapskist wilt, inclusief hulpfuncties voor configuratiepatches zoals moveSingleAccountChannelSectionToDefaultAccount(...).
Gebruik createSetupTranslator(...) voor vaste tekst van de configuratiewizard. Deze gebruikt de eerste niet-lege waarde uit OPENCLAW_LOCALE, LC_ALL, LC_MESSAGES en LANG, in die volgorde, en valt vervolgens terug op Engels. Stel OPENCLAW_LOCALE=en in voor een expliciete Engelse overschrijving. Bewaar pluginspecifieke configuratietekst in code die eigendom is van de plugin en gebruik gedeelde catalogussleutels alleen voor algemene configuratielabels, statustekst en officiële configuratietekst voor gebundelde plugins.
De adapters voor configuratiepatches blijven bij import veilig voor veelgebruikte paden. Hun opzoekactie voor het contractoppervlak voor gebundelde promotie naar één account is lui, zodat het importeren van plugin-sdk/setup-runtime de detectie van gebundelde contractoppervlakken niet voortijdig laadt voordat de adapter daadwerkelijk wordt gebruikt.
Invoervelden voor configuratie die eigendom zijn van het kanaal
ChannelSetupInput is een generieke envelop die wordt gedeeld door configuratieaanroepers en kanaalplugins. De permanent getypeerde velden zijn name, token, tokenFile,
useEnv, allowFrom en defaultTo. Aanvullende sleutels die eigendom zijn van de plugin kunnen nog steeds
aanwezig zijn in het runtime-invoerobject, maar het gedeelde type declareert geen
indexsignatuur. Elke plugin moet zijn eigen configuratievelden declareren en verfijnen of
ze met een schema van de plugin valideren bij de adaptergrens:
ChannelSetupInput waren gedeclareerd, blijven tijdelijk getypeerd voor compatibiliteit met externe broncode.
Ze zijn verouderd. Bij een registercontrole op 2026-07-22 van 426 gepubliceerde kanaalplugins van buiten de bronstructuur
werden 21 velden zonder lezers verwijderd en 22 velden met bekende
lezers behouden. Elk behouden veld wordt verwijderd zodra geen enkele gepubliceerde plugin het nog leest;
er is geen versiegrens vereist. Nieuwe en gebundelde plugins mogen niet op deze
laag vertrouwen; declareer de velden waarvan ze eigenaar zijn lokaal.
Kanaalgestuurde promotie van één account
Wanneer een kanaal een configuratie op het hoogste niveau voor één account opwaardeert naarchannels.<id>.accounts.*, verplaatst het standaard gedeelde gedrag gepromoveerde waarden met accountbereik naar accounts.default.
Elke kanaalplugin kan die promotie uitbreiden of beperken via zijn setupadapter:
singleAccountKeysToMove: extra sleutels op het hoogste niveau die naar het gepromoveerde account moeten worden verplaatstnamedAccountPromotionKeys: wanneer benoemde accounts al bestaan, worden alleen deze sleutels naar het gepromoveerde account verplaatst; gedeelde beleids-/afleveringssleutels blijven op het hoofdniveau van het kanaalresolveSingleAccountPromotionTarget(...): kies welk bestaand account gepromoveerde waarden ontvangt
singleAccountKeysToMove geeft aan dat het promotiecontract volledig is. Declareer het veld ook wanneer het een lege array is om promotie van verouderde sleutels uit te schakelen. Adapters die het veld weglaten, behouden een door lezers ondersteunde promotielaag van vóór de declaratie voor reeds gepubliceerde plugins. Bij de registercontrole op 2026-07-22 werden 23 sleutels zonder gepubliceerde afhankelijken verwijderd en zes algemene sleutels plus de uitsluitend voor setup bestemde sleutel rooms behouden. Elke behouden sleutel wordt verwijderd zodra de gepubliceerde lezers ervan naar declaraties zijn gemigreerd; er is geen versiegrens vereist.
Declareer openclaw.setupFeatures.configPromotion: true in het pakketmanifest van de plugin wanneer doctor deze declaraties uit het lichtgewicht gebundelde setup-artefact moet laden. Het uitsluitend voor setup bestemde pluginoppervlak en de volledige kanaalplugin moeten dezelfde declaraties beschikbaar stellen.
Wanneer je moveSingleAccountChannelSectionToDefaultAccount(...) aanroept met een reeds opgeloste plugin, geef je de setupadapter ervan door als setupSurface. Door de aanroeper aangeleverde setupoppervlakken hebben voorrang op geladen en gebundelde opzoekmechanismen, waardoor plugins met een beperkt bereik of uitsluitend voor setup onafhankelijk blijven van globale registratie.
Matrix is het huidige gebundelde voorbeeld. Als er precies één benoemd Matrix-account bestaat, of als
defaultAccount naar een bestaande niet-canonieke sleutel zoals Ops verwijst, behoudt de promotie dat account in plaats van een nieuwe vermelding accounts.default te maken.Configuratieschema
Pluginconfiguratie wordt gevalideerd aan de hand van het JSON Schema in je manifest. Gebruikers configureren plugins via:api.pluginConfig.
Gebruik voor kanaalspecifieke configuratie in plaats daarvan de kanaalconfiguratiesectie:
Kanaalconfiguratieschema’s bouwen
GebruikbuildChannelConfigSchema om een Zod-schema om te zetten in de ChannelConfigSchema-wrapper die wordt gebruikt door configuratieartefacten waarvan de plugin eigenaar is:
openclaw.plugin.json#channelConfigs, zodat configuratieschema-, setup- en UI-oppervlakken channels.<id> kunnen inspecteren zonder runtimecode te laden.
Setupwizards
Kanaalplugins kunnen interactieve setupwizards vooropenclaw onboard aanbieden. De wizard is een ChannelSetupWizard-object op de ChannelPlugin:
ChannelSetupWizard ondersteunt ook textInputs, dmPolicy, allowFrom, groupAccess, prepare, finalize en meer. Zie src/setup-core.ts van de Discord-plugin voor een volledig gebundeld voorbeeld.
Gedeelde allowFrom-prompts
Gedeelde allowFrom-prompts
Geef voor prompts voor DM-toelatingslijsten die alleen de standaardflow
note -> prompt -> parse -> merge -> patch nodig hebben de voorkeur aan de gedeelde setuphelpers uit openclaw/plugin-sdk/setup: createPromptParsedAllowFromForAccount(...) en createTopLevelChannelParsedAllowFromPrompt(...).Standaardstatus voor kanaalsetup
Standaardstatus voor kanaalsetup
Geef voor statusblokken voor kanaalsetup die alleen verschillen in labels, scores en optionele extra regels de voorkeur aan
createStandardChannelSetupStatus(...) uit openclaw/plugin-sdk/setup, in plaats van in elke plugin hetzelfde status-object handmatig te maken.Optioneel oppervlak voor kanaalsetup
Optioneel oppervlak voor kanaalsetup
Gebruik voor optionele setupoppervlakken die alleen in bepaalde contexten moeten verschijnen
createOptionalChannelSetupSurface uit openclaw/plugin-sdk/channel-setup:plugin-sdk/channel-setup stelt ook de bouwers createOptionalChannelSetupAdapter(...) en createOptionalChannelSetupWizard(...) van een lager niveau beschikbaar wanneer je slechts één helft van dat optionele installatieoppervlak nodig hebt.De gegenereerde optionele adapter/wizard weigert bij echte configuratieschrijfbewerkingen veilig verder te gaan. Ze hergebruiken één bericht dat installatie vereist voor validateInput, applyAccountConfig en finalize, en voegen een documentatielink toe wanneer docsPath is ingesteld.Door binaire bestanden ondersteunde setuphelpers
Door binaire bestanden ondersteunde setuphelpers
Geef voor setup-UI’s die door binaire bestanden worden ondersteund de voorkeur aan de gedeelde gedelegeerde helpers, in plaats van dezelfde koppeling voor binaire bestanden/status naar elk kanaal te kopiëren:
createDetectedBinaryStatus(...)voor statusblokken die alleen verschillen in labels, hints, scores en detectie van binaire bestandencreateCliPathTextInput(...)voor tekstinvoer op basis van padencreateDelegatedSetupWizardProxy(...)wanneersetupEntrystatus-, voorbereidings- of afrondingsgedrag lui moet doorsturen naar een zwaardere volledige wizardcreateDelegatedTextInputShouldPrompt(...)wanneersetupEntryalleen eentextInputs[*].shouldPrompt-beslissing hoeft te delegeren
Publiceren en installeren
Externe plugins: publiceer naar ClawHub en installeer vervolgens:- npm
- Alleen ClawHub
- npm-pakketspecificatie
clawhub:, npm:, git: of npm-pack: voor deterministische bronselectie — zie Plugins beheren.Voor installaties met npm als bron installeert
openclaw plugins install het pakket in een project per plugin onder ~/.openclaw/npm/projects, waarbij levenscyclusscripts zijn uitgeschakeld (--ignore-scripts). Houd afhankelijkheidsstructuren van plugins volledig in JS/TS en vermijd pakketten waarvoor postinstall-builds nodig zijn.Bij het starten installeert Gateway geen plugin-afhankelijkheden. De installatieflows voor npm/git/ClawHub beheren het convergeren van afhankelijkheden; voor lokale plugins moeten de afhankelijkheden al zijn geïnstalleerd.
Gerelateerd
- Plugins bouwen — stapsgewijze handleiding om aan de slag te gaan
- Pluginmanifest — volledige schemareferentie voor het manifest
- SDK-ingangspunten —
definePluginEntryendefineChannelPluginEntry