Plugin SDK reference
Pluginmanifest
Deze pagina behandelt het native OpenClaw-pluginmanifest, openclaw.plugin.json. Zie Pluginbundels voor compatibele bundelindelingen (Codex, Claude, Cursor).
Compatibele bundelindelingen gebruiken in plaats daarvan hun eigen manifestbestanden:
- Codex-bundel:
.codex-plugin/plugin.json - Claude-bundel:
.claude-plugin/plugin.json, of de standaardindeling van Claude-componenten zonder manifest - Cursor-bundel:
.cursor-plugin/plugin.json
OpenClaw detecteert deze indelingen automatisch, maar valideert ze niet aan de hand van het onderstaande schema voor openclaw.plugin.json. Voor een compatibele bundel leest OpenClaw bundelmetadata, gedeclareerde hoofdmappen voor Skills, hoofdmappen voor Claude-opdrachten, standaardwaarden uit Claude settings.json, standaardwaarden voor Claude LSP en ondersteunde hookpakketten, wanneer de indeling overeenkomt met de runtimeverwachtingen van OpenClaw.
Elke native OpenClaw-plugin moet openclaw.plugin.json in de hoofdmap van de plugin bevatten. OpenClaw leest dit bestand om de configuratie te valideren zonder plugincode uit te voeren. Een ontbrekend of ongeldig manifest blokkeert de configuratievalidatie en wordt behandeld als een pluginfout.
Zie Plugins voor de volledige handleiding voor het pluginsysteem en Capaciteitsmodel voor het native capaciteitsmodel en de huidige richtlijnen voor externe compatibiliteit.
Wat dit bestand doet
openclaw.plugin.json bevat metadata die OpenClaw leest voordat uw plugincode wordt geladen. Alles wat erin staat, moet eenvoudig genoeg zijn om te inspecteren zonder de pluginruntime te starten.
Gebruik het voor:
- pluginidentiteit, configuratievalidatie en aanwijzingen voor de configuratie-interface
- metadata voor authenticatie, onboarding en installatie (alias, automatisch inschakelen, omgevingsvariabelen van providers, authenticatiekeuzes)
- activeringsaanwijzingen voor beheerinterfaces
- verkort eigenaarschap van modelfamilies
- statische momentopnamen van capaciteitseigenaarschap (
contracts) - metadata voor de QA-runner die de gedeelde
openclaw qa-host kan inspecteren - kanaalspecifieke configuratiemetadata die in catalogus- en validatie-interfaces worden samengevoegd
Gebruik het niet voor: het registreren van runtimegedrag, het declareren van code-entrypoints of npm-installatiemetadata. Deze horen thuis in uw plugincode en package.json.
Minimaal voorbeeld
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}Uitgebreid voorbeeld
{ "id": "openrouter", "name": "OpenRouter", "description": "OpenRouter-providerplugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "channelEnvVars": { "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"] }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "OpenRouter-API-sleutel", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "OpenRouter-API-sleutel", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "API-sleutel", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}Overzicht van velden op het hoogste niveau
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
id |
Ja | string |
Canonieke Plugin-id. Dit is de id die wordt gebruikt in plugins.entries.<id>. |
configSchema |
Ja | object |
Inline JSON Schema voor de configuratie van deze Plugin. |
requiresPlugins |
Nee | string[] |
Plugin-id's die ook moeten zijn geïnstalleerd voordat deze Plugin effect heeft. Tijdens detectie blijft de Plugin laadbaar, maar er wordt gewaarschuwd wanneer een vereiste Plugin ontbreekt. |
enabledByDefault |
Nee | true |
Markeert een gebundelde Plugin als standaard ingeschakeld. Laat dit weg of stel een andere waarde dan true in om de Plugin standaard uitgeschakeld te laten. |
enabledByDefaultOnPlatforms |
Nee | string[] |
Markeert een gebundelde Plugin als standaard alleen ingeschakeld op de vermelde Node.js-platforms, bijvoorbeeld ["darwin"]. Expliciete configuratie heeft nog steeds voorrang. |
legacyPluginIds |
Nee | string[] |
Verouderde id's die naar deze canonieke Plugin-id worden genormaliseerd. |
autoEnableWhenConfiguredProviders |
Nee | string[] |
Provider-id's die deze Plugin automatisch moeten inschakelen wanneer ernaar wordt verwezen in authenticatie, configuratie of modelverwijzingen. |
kind |
Nee | PluginKind | PluginKind[] |
Declareert een of meer exclusieve Plugin-soorten ("memory", "context-engine") die door plugins.slots.* worden gebruikt. Een Plugin die beide slots beheert, declareert beide soorten in één array. |
channels |
Nee | string[] |
Kanaal-id's die door deze Plugin worden beheerd. Wordt gebruikt voor detectie en configuratievalidatie. |
providers |
Nee | string[] |
Provider-id's die door deze Plugin worden beheerd. |
providerCatalogEntry |
Nee | string |
Pad naar een lichtgewicht providercatalogusmodule, relatief ten opzichte van de Plugin-hoofdmap, voor provider-catalogusmetadata binnen het manifest die kan worden geladen zonder de volledige Plugin-runtime te activeren. |
modelSupport |
Nee | object |
Door het manifest beheerde verkorte metadata voor modelfamilies, waarmee de Plugin vóór de runtime automatisch wordt geladen. |
modelCatalog |
Nee | object |
Declaratieve modelcatalogusmetadata voor providers die door deze Plugin worden beheerd. Dit is het beheerlaagcontract voor toekomstige alleen-lezenvermeldingen, onboarding, modelkiezers, aliassen en onderdrukking zonder de Plugin-runtime te laden. |
modelPricing |
Nee | object |
Door de provider beheerd beleid voor het extern opzoeken van prijzen. Gebruik dit om lokale/zelfgehoste providers uit te sluiten van externe prijscatalogi of providerverwijzingen aan OpenRouter-/LiteLLM-catalogus-id's te koppelen zonder provider-id's in de kern hard te coderen. |
modelIdNormalization |
Nee | object |
Door de provider beheerde opschoning van model-id-aliassen en -voorvoegsels die moet worden uitgevoerd voordat de provider-runtime wordt geladen. |
providerEndpoints |
Nee | object[] |
Door het manifest beheerde metadata over endpointhosts en baseUrl's voor providerroutes die door de kern moeten worden geclassificeerd voordat de provider-runtime wordt geladen. |
providerRequest |
Nee | object |
Lichtgewicht metadata over providerfamilies en aanvraagcompatibiliteit die door algemeen aanvraagbeleid wordt gebruikt voordat de provider-runtime wordt geladen. |
secretProviderIntegrations |
Nee | Record<string, object> |
Declaratieve voorinstellingen voor SecretRef-uitvoerproviders die installatie- of configuratie-interfaces kunnen aanbieden zonder providerspecifieke integraties in de kern hard te coderen. |
cliBackends |
Nee | string[] |
Id's van CLI-inferentiebackends die door deze Plugin worden beheerd. Wordt gebruikt voor automatische activering bij het opstarten op basis van expliciete configuratieverwijzingen. |
syntheticAuthRefs |
Nee | string[] |
Verwijzingen naar providers of CLI-backends waarvan de door de Plugin beheerde synthetische authenticatiehook tijdens koude modeldetectie moet worden onderzocht voordat de runtime wordt geladen. |
nonSecretAuthMarkers |
Nee | string[] |
Door de gebundelde Plugin beheerde tijdelijke API-sleutelwaarden die een niet-geheime lokale, OAuth- of omgevingsreferentiestatus vertegenwoordigen. |
commandAliases |
Nee | object[] |
Opdrachtnamen die door deze Plugin worden beheerd en die Plugin-bewuste configuratie- en CLI-diagnostiek moeten opleveren voordat de runtime wordt geladen. |
providerAuthEnvVars |
Nee | Record<string, string[]> |
Verouderde compatibiliteitsmetadata voor omgevingsvariabelen bij het opzoeken van providerauthenticatie en -status. Geef voor nieuwe Plugins de voorkeur aan setup.providers[].envVars; OpenClaw leest dit nog tijdens de uitfaseringsperiode. |
providerUsageAuthEnvVars |
Nee | Record<string, string[]> |
Providerreferenties die uitsluitend voor gebruik en facturering dienen. OpenClaw gebruikt deze namen voor gebruiksdetectie en het verwijderen van geheimen, maar nooit voor inferentieauthenticatie. |
providerAuthAliases |
Nee | Record<string, string> |
Provider-id's die de authenticatiezoekopdracht van een andere provider-id moeten hergebruiken, bijvoorbeeld een programmeerprovider die de API-sleutel en authenticatieprofielen van de basisprovider deelt. |
channelEnvVars |
Nee | Record<string, string[]> |
Lichtgewicht metadata over kanaalomgevingsvariabelen die OpenClaw kan inspecteren zonder Plugin-code te laden. Gebruik dit voor omgevingsgestuurde kanaalconfiguratie- of authenticatie-interfaces die algemene opstart- en configuratiehelpers moeten kunnen zien. |
providerAuthChoices |
Nee | object[] |
Lichtgewicht metadata voor authenticatiekeuzes in onboardingkiezers, het bepalen van de voorkeursprovider en eenvoudige koppeling van CLI-vlaggen. |
activation |
Nee | object |
Lichtgewicht metadata voor de activeringsplanner voor laden bij opstart-, provider-, opdracht-, kanaal-, route- en capaciteitstriggers. Alleen metadata; de Plugin-runtime blijft verantwoordelijk voor het daadwerkelijke gedrag. |
setup |
Nee | object |
Lichtgewicht configuratie- en onboardingbeschrijvingen die detectie- en configuratie-interfaces kunnen inspecteren zonder de Plugin-runtime te laden. |
qaRunners |
Nee | object[] |
Lichtgewicht beschrijvingen van QA-runners die door de gedeelde openclaw qa-host worden gebruikt voordat de Plugin-runtime wordt geladen. |
contracts |
Nee | object |
Statische momentopname van capaciteitseigendom voor externe authenticatiehooks, embeddings, spraak, realtime transcriptie, realtime spraak, mediabegrip, beeld-/video-/muziekgeneratie, webophalen, webzoeken, workerproviders, document-/webinhoudextractie en toolbeheer. |
configContracts |
Nee | object |
Door het manifest beheerd configuratiegedrag dat door algemene kernhelpers wordt gebruikt: detectie van gevaarlijke vlaggen, migratiedoelen voor SecretRef en beperking van verouderde configuratiepaden. Zie de configContracts-referentie. |
mediaUnderstandingProviderMetadata |
Nee | Record<string, object> |
Voordelige standaardinstellingen voor mediabegrip voor provider-id's die in contracts.mediaUnderstandingProviders zijn gedeclareerd. |
imageGenerationProviderMetadata |
Nee | Record<string, object> |
Voordelige authenticatiemetagegevens voor beeldgeneratie voor provider-id's die in contracts.imageGenerationProviders zijn gedeclareerd, inclusief authenticatiealiassen die eigendom zijn van de provider en controles voor de basis-URL. |
videoGenerationProviderMetadata |
Nee | Record<string, object> |
Voordelige authenticatiemetagegevens voor videogeneratie voor provider-id's die in contracts.videoGenerationProviders zijn gedeclareerd, inclusief authenticatiealiassen die eigendom zijn van de provider en controles voor de basis-URL. |
musicGenerationProviderMetadata |
Nee | Record<string, object> |
Voordelige authenticatiemetagegevens voor muziekgeneratie voor provider-id's die in contracts.musicGenerationProviders zijn gedeclareerd, inclusief authenticatiealiassen die eigendom zijn van de provider en controles voor de basis-URL. |
toolMetadata |
Nee | Record<string, object> |
Voordelige beschikbaarheidsmetagegevens voor tools die eigendom zijn van de plugin en in contracts.tools zijn gedeclareerd. Gebruik dit wanneer een tool de runtime niet mag laden tenzij er bewijs van configuratie, omgevingsvariabelen of authenticatie bestaat. |
channelConfigs |
Nee | Record<string, object> |
Configuratiemetagegevens van kanalen die eigendom zijn van het manifest en vóór het laden van de runtime worden samengevoegd met oppervlakken voor detectie en validatie. |
skills |
Nee | string[] |
Te laden Skills-mappen, relatief ten opzichte van de hoofdmap van de plugin. |
name |
Nee | string |
Voor mensen leesbare naam van de plugin. |
description |
Nee | string |
Korte samenvatting die op plugin-oppervlakken wordt weergegeven. |
catalog |
Nee | object |
Optionele presentatierichtlijnen voor plugin-catalogusoppervlakken. Deze metagegevens installeren of activeren een plugin niet en verlenen er geen vertrouwen aan. |
icon |
Nee | string |
HTTPS-afbeeldings-URL voor marketplace-/cataloguskaarten. ClawHub accepteert elke geldige https://-URL en valt terug op het standaardpictogram van de plugin wanneer deze waarde ontbreekt of ongeldig is. |
version |
Nee | string |
Informatieve versie van de plugin. |
uiHints |
Nee | Record<string, object> |
UI-labels, tijdelijke aanduidingen en gevoeligheidsrichtlijnen voor configuratievelden. |
Naslaginformatie voor catalog
catalog biedt optionele weergaveaanwijzingen voor Plugin-browsers. Hosts mogen deze aanwijzingen negeren. Ze installeren of activeren de Plugin nooit en wijzigen het runtimegedrag of vertrouwensniveau ervan niet.
{ "catalog": { "featured": true, "order": 10 }}| Veld | Type | Betekenis |
|---|---|---|
featured |
boolean |
Of catalogusweergaven deze Plugin prominent moeten tonen. |
order |
number |
Oplopende weergaveaanwijzing binnen samengestelde Plugins; lagere waarden worden eerder weergegeven. |
Naslaginformatie voor metadata van generatieproviders
De metadatavelden voor generatieproviders beschrijven statische authenticatiesignalen voor providers die zijn gedeclareerd in de bijbehorende lijst contracts.*GenerationProviders. OpenClaw leest deze velden voordat de providerruntime wordt geladen, zodat kerntools kunnen bepalen of een generatieprovider beschikbaar is zonder elke provider-Plugin te importeren.
Gebruik deze velden alleen voor eenvoudige, declaratieve feiten. Transport, aanvraagtransformaties, tokenvernieuwing, validatie van aanmeldgegevens en het daadwerkelijke generatiegedrag blijven in de Plugin-runtime.
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}Elke metadata-invoer ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
aliases |
Nee | string[] |
Aanvullende provider-ID's die als statische authenticatiealiassen voor de generatieprovider moeten gelden. |
authProviders |
Nee | string[] |
Provider-ID's waarvan geconfigureerde authenticatieprofielen als authenticatie voor deze generatieprovider moeten gelden. |
configSignals |
Nee | object[] |
Eenvoudige beschikbaarheidssignalen die alleen op configuratie zijn gebaseerd, voor lokale of zelfgehoste providers die zonder authenticatieprofielen of omgevingsvariabelen kunnen worden geconfigureerd. |
authSignals |
Nee | object[] |
Expliciete authenticatiesignalen. Indien aanwezig vervangen deze de standaardsignalen van de provider-ID, aliases en authProviders. |
referenceAudioInputs |
Nee | boolean |
Alleen voor videogeneratie. Stel in op true wanneer de provider referentie-audiobestanden accepteert; anders verbergt video_generate parameters voor audioreferenties. |
Elke invoer in configSignals ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
rootPath |
Ja | string |
Puntpad naar het configuratieobject van de Plugin dat moet worden onderzocht, bijvoorbeeld plugins.entries.example.config. |
overlayPath |
Nee | string |
Puntpad binnen de hoofdconfiguratie waarvan het object vóór evaluatie van het signaal over het hoofdobject moet worden gelegd. Gebruik dit voor functionaliteitsspecifieke configuratie, zoals image, video of music. |
overlayMapPath |
Nee | string |
Puntpad binnen de hoofdconfiguratie waarvan elke objectwaarde over het hoofdobject moet worden gelegd. Gebruik dit voor benoemde accounttoewijzingen zoals accounts, waarbij elk geconfigureerd account volstaat. |
required |
Nee | string[] |
Puntpaden binnen de resulterende configuratie die geconfigureerde waarden moeten hebben. Tekenreeksen mogen niet leeg zijn; objecten en matrices mogen niet leeg zijn. |
requiredAny |
Nee | string[] |
Puntpaden binnen de resulterende configuratie waarvan er ten minste één een geconfigureerde waarde moet hebben. |
mode |
Nee | object |
Optionele beveiliging op basis van een tekenreeksmodus binnen de resulterende configuratie. Gebruik dit wanneer beschikbaarheid op basis van alleen configuratie slechts voor één modus geldt. |
Elke mode-beveiliging ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
path |
Nee | string |
Puntpad binnen de resulterende configuratie. Standaard is dit mode. |
default |
Nee | string |
Moduswaarde die wordt gebruikt wanneer het pad in de configuratie ontbreekt. |
allowed |
Nee | string[] |
Indien aanwezig slaagt het signaal alleen wanneer de resulterende modus een van deze waarden heeft. |
disallowed |
Nee | string[] |
Indien aanwezig faalt het signaal wanneer de resulterende modus een van deze waarden heeft. |
Elke invoer in authSignals ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
provider |
Ja | string |
Provider-ID die in de geconfigureerde authenticatieprofielen moet worden gecontroleerd. |
providerBaseUrl |
Nee | object |
Optionele voorwaarde waardoor het signaal alleen geldt wanneer de geconfigureerde provider waarnaar wordt verwezen een toegestane basis-URL gebruikt. Gebruik dit wanneer een authenticatiealias alleen geldig is voor bepaalde API's. |
Elke providerBaseUrl-voorwaarde ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
provider |
Ja | string |
ID van de providerconfiguratie waarvan baseUrl moet worden gecontroleerd. |
defaultBaseUrl |
Nee | string |
Basis-URL die moet worden aangenomen wanneer baseUrl in de providerconfiguratie ontbreekt. |
allowedBaseUrls |
Ja | string[] |
Toegestane basis-URL's voor dit authenticatiesignaal. Het signaal wordt genegeerd wanneer de geconfigureerde of standaardbasis-URL niet overeenkomt met een van deze genormaliseerde waarden. |
Naslaginformatie voor toolmetadata
toolMetadata gebruikt dezelfde structuren voor configSignals en authSignals als metadata voor generatieproviders, geïndexeerd op toolnaam. contracts.tools declareert het eigenaarschap. toolMetadata declareert eenvoudig bewijs van beschikbaarheid, zodat OpenClaw kan voorkomen dat een Plugin-runtime wordt geïmporteerd enkel om de toolfactory null te laten retourneren.
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}Invoeren in toolMetadata accepteren naast de gedeelde velden configSignals en authSignals hierboven ook optional (markeert de tool als niet-verplicht voor activering van de Plugin) en replaySafe (markeert uitvoering van de tool als veilig om te herhalen na een onvolledige modelbeurt).
Als een tool geen toolMetadata heeft, behoudt OpenClaw het bestaande gedrag en laadt het de Plugin die eigenaar is wanneer het toolcontract overeenkomt met het beleid. Voor tools in kritieke uitvoeringspaden waarvan de factory afhankelijk is van authenticatie of configuratie, moeten Plugin-auteurs toolMetadata declareren in plaats van de kern de runtime te laten importeren om dit op te vragen.
Naslaginformatie voor providerAuthChoices
Elke invoer in providerAuthChoices beschrijft één keuze voor onboarding of authenticatie. OpenClaw leest deze voordat de providerruntime wordt geladen. Lijsten voor providerconfiguratie gebruiken deze manifestkeuzes, uit descriptors afgeleide configuratiekeuzes en metadata uit de installatiecatalogus zonder de providerruntime te laden.
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
provider |
Ja | string |
Provider-id waartoe deze keuze behoort. |
method |
Ja | string |
Id van de authenticatiemethode waarnaar moet worden doorgestuurd. |
choiceId |
Ja | string |
Stabiel id van de authenticatiekeuze dat wordt gebruikt door onboarding- en CLI-stromen. |
choiceLabel |
Nee | string |
Aan de gebruiker getoond label. Indien weggelaten, valt OpenClaw terug op choiceId. |
choiceHint |
Nee | string |
Korte helptekst voor de keuzelijst. |
assistantPriority |
Nee | number |
Lagere waarden worden eerder gesorteerd in interactieve, door de assistent aangestuurde keuzelijsten. |
assistantVisibility |
Nee | "visible" | "manual-only" |
Verberg de keuze in assistentkeuzelijsten, maar sta handmatige selectie via de CLI wel toe. |
deprecatedChoiceIds |
Nee | string[] |
Verouderde keuze-id's die gebruikers naar deze vervangende keuze moeten doorsturen. |
groupId |
Nee | string |
Optioneel groeps-id voor het groeperen van gerelateerde keuzes. |
groupLabel |
Nee | string |
Aan de gebruiker getoond label voor die groep. |
groupHint |
Nee | string |
Korte helptekst voor de groep. |
onboardingFeatured |
Nee | boolean |
Toon deze groep in de uitgelichte categorie van de interactieve onboardingkeuzelijst, vóór het item "Meer...". |
optionKey |
Nee | string |
Interne optiesleutel voor eenvoudige authenticatiestromen met één vlag. |
cliFlag |
Nee | string |
Naam van de CLI-vlag, zoals --openrouter-api-key. |
cliOption |
Nee | string |
Volledige vorm van de CLI-optie, zoals --openrouter-api-key <key>. |
cliDescription |
Nee | string |
Beschrijving die in de CLI-help wordt gebruikt. |
onboardingScopes |
Nee | Array<"text-inference" | "image-generation" | "music-generation"> |
Op welke onboardingschermen deze keuze moet verschijnen. Indien weggelaten, is de standaard ["text-inference"]. |
Naslag voor commandAliases
Gebruik commandAliases wanneer een plugin eigenaar is van een runtime-opdrachtnaam die gebruikers per vergissing in plugins.allow kunnen zetten of als CLI-hoofdopdracht kunnen proberen uit te voeren. OpenClaw gebruikt deze metagegevens voor diagnostiek zonder de runtimecode van de plugin te importeren.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
name |
Ja | string |
Opdrachtnaam die bij deze plugin hoort. |
kind |
Nee | "runtime-slash" |
Markeert de alias als een slashopdracht in de chat in plaats van een CLI-hoofdopdracht. |
cliCommand |
Nee | string |
Gerelateerde CLI-hoofdopdracht om voor CLI-bewerkingen voor te stellen, indien aanwezig. |
Naslag voor activation
Gebruik activation wanneer de plugin zonder veel overhead kan aangeven bij welke gebeurtenissen in het besturingsvlak deze in een activerings-/laadplan moet worden opgenomen.
Dit blok bevat plannermetagegevens en is geen levenscyclus-API. Het registreert geen runtimegedrag, vervangt register(...) niet en garandeert niet dat de plugincode al is uitgevoerd. De activeringsplanner gebruikt deze velden om kandidaat-plugins te beperken voordat wordt teruggevallen op bestaande eigendomsmetagegevens in het manifest, zoals providers, channels, commandAliases, setup.providers, contracts.tools en hooks.
Geef de voorkeur aan de meest specifieke metagegevens die het eigendom al beschrijven. Gebruik providers, channels, commandAliases, setupbeschrijvingen of contracts wanneer die velden de relatie uitdrukken. Gebruik activation voor aanvullende plannerhints die niet door die eigendomsvelden kunnen worden weergegeven. Gebruik cliBackends op het hoogste niveau voor CLI-runtime-aliassen zoals claude-cli, my-cli of google-gemini-cli; activation.onAgentHarnesses is alleen bedoeld voor id's van ingebedde agent-harnassen waarvoor nog geen eigendomsveld bestaat.
Elke plugin moet activation.onStartup bewust instellen. Stel dit alleen in op true wanneer de plugin tijdens het opstarten van de Gateway moet worden uitgevoerd. Stel het in op false wanneer de plugin bij het opstarten inactief is en alleen door specifiekere triggers moet worden geladen. Als onStartup wordt weggelaten, wordt de plugin niet langer impliciet bij het opstarten geladen; gebruik expliciete activeringsmetagegevens voor triggers bij het opstarten, voor kanalen, configuratie, agent-harnassen, geheugen of andere specifiekere activeringstriggers.
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
onStartup |
Nee | boolean |
Expliciete activering bij het opstarten van de Gateway. Elke plugin moet dit instellen. true importeert de plugin tijdens het opstarten; false houdt deze tijdens het opstarten lui geladen, tenzij een andere overeenkomende trigger laden vereist. |
onProviders |
Nee | string[] |
Provider-id's waardoor deze plugin in activerings-/laadplannen moet worden opgenomen. |
onAgentHarnesses |
Nee | string[] |
Runtime-id's van ingebedde agent-harnassen waardoor deze plugin in activerings-/laadplannen moet worden opgenomen. Gebruik cliBackends op het hoogste niveau voor aliassen van CLI-backends. |
onCommands |
Nee | string[] |
Opdracht-id's waardoor deze plugin in activerings-/laadplannen moet worden opgenomen. |
onChannels |
Nee | string[] |
Kanaal-id's waardoor deze plugin in activerings-/laadplannen moet worden opgenomen. |
onRoutes |
Nee | string[] |
Routetypen waardoor deze plugin in activerings-/laadplannen moet worden opgenomen. |
onConfigPaths |
Nee | string[] |
Configuratiepaden ten opzichte van de hoofdmap waardoor deze plugin in opstart-/laadplannen moet worden opgenomen wanneer het pad aanwezig en niet expliciet uitgeschakeld is. |
onCapabilities |
Nee | Array<"provider" | "channel" | "tool" | "hook"> |
Algemene capaciteitshints die worden gebruikt bij activeringsplanning in het besturingsvlak. Geef waar mogelijk de voorkeur aan specifiekere velden. |
Huidige actieve afnemers:
- De opstartplanning van de Gateway gebruikt
activation.onStartupvoor expliciete import tijdens het opstarten. - Door opdrachten geactiveerde CLI-planning valt terug op het verouderde
commandAliases[].cliCommandofcommandAliases[].name. - Opstartplanning van de agentruntime gebruikt
activation.onAgentHarnessesvoor ingebedde harnassen encliBackends[]op het hoogste niveau voor CLI-runtime-aliassen. - Door kanalen geactiveerde setup-/kanaalplanning valt terug op het verouderde eigendom via
channels[]wanneer expliciete activeringsmetagegevens voor kanalen ontbreken. - Pluginplanning bij het opstarten gebruikt
activation.onConfigPathsvoor niet-kanaalgebonden hoofdconfiguratieoppervlakken, zoals het blokbrowservan de meegeleverde browserplugin. - Door providers geactiveerde setup-/runtimeplanning valt terug op het verouderde eigendom via
providers[]encliBackends[]op het hoogste niveau wanneer expliciete activeringsmetagegevens voor providers ontbreken.
Plannerdiagnostiek kan expliciete activeringshints onderscheiden van terugval op manifesteigendom. Zo betekent activation-command-hint bijvoorbeeld dat activation.onCommands overeenkwam, terwijl manifest-command-alias betekent dat de planner in plaats daarvan het eigendom via commandAliases gebruikte. Deze redenlabels zijn bedoeld voor diagnostiek en tests van de host; pluginauteurs moeten de metagegevens blijven declareren die het eigendom het best beschrijven.
Naslag voor qaRunners
Gebruik qaRunners wanneer een plugin een of meer transportrunners toevoegt onder
de gedeelde hoofdopdracht openclaw qa. Houd deze metagegevens eenvoudig en statisch; de
pluginruntime blijft verantwoordelijk voor de daadwerkelijke CLI-registratie via een lichtgewicht
runtime-api.ts-oppervlak dat overeenkomende qaRunnerCliRegistrations exporteert. Een
optionele adapterFactory stelt het transport beschikbaar aan gedeelde QA-scenario's zonder
de runner van de geregistreerde opdracht te wijzigen.
{ "qaRunners": [ { "commandName": "matrix", "description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver" } ]}| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
commandName |
Ja | string |
Subopdracht die onder openclaw qa wordt gekoppeld, bijvoorbeeld matrix. |
description |
Nee | string |
Terugvalhelptekst die wordt gebruikt wanneer de gedeelde host een voorlopige opdracht nodig heeft. |
De id adapterFactory moet overeenkomen met commandName. Exporteer geen registraties
voor opdrachten die niet in het manifest staan.
naslaginformatie voor setup
Gebruik setup wanneer setup- en onboardingoppervlakken goedkope, door de Plugin beheerde metadata nodig hebben voordat de runtime wordt geladen.
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "openai local credentials" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}cliBackends op het hoogste niveau blijft geldig en blijft CLI-inferentiebackends beschrijven. setup.cliBackends is het setup-specifieke descriptoroppervlak voor besturingsvlak- en setupstromen die uitsluitend uit metadata moeten blijven bestaan.
Wanneer ze aanwezig zijn, vormen setup.providers en setup.cliBackends het voorkeursoppervlak voor descriptor-eerst-zoekacties bij setupdetectie. Als de descriptor alleen de kandidaat-Plugin beperkt en de setup nog uitgebreidere runtimehooks tijdens de setup nodig heeft, stel dan requiresRuntime: true in en behoud setup-api als terugvalpad voor uitvoering.
OpenClaw neemt setup.providers[].envVars ook op in algemene zoekacties voor providerauthenticatie en omgevingsvariabelen. providerAuthEnvVars blijft tijdens de afschaffingsperiode ondersteund via een compatibiliteitsadapter, maar niet-gebundelde plugins die dit nog gebruiken, ontvangen een manifestdiagnose. Nieuwe plugins moeten omgevingsmetadata voor setup/status in setup.providers[].envVars plaatsen.
Gebruik providerUsageAuthEnvVars wanneer een referentie op facturerings- of organisatieniveau resolveUsageAuth moet activeren zonder een inferentiereferentie te worden. Deze namen worden toegevoegd aan de blokkering van dotenv-bestanden in de werkruimte, verwijdering uit ACP-subprocessen, filtering van geheimen in de sandbox en brede opschoning van geheimen. De providerruntime leest en classificeert de waarde nog steeds binnen resolveUsageAuth.
OpenClaw kan ook eenvoudige setupkeuzes afleiden uit setup.providers[].authMethods wanneer geen setupitem beschikbaar is, of wanneer setup.requiresRuntime: false aangeeft dat een setupruntime niet nodig is. Expliciete providerAuthChoices-items behouden de voorkeur voor aangepaste labels, CLI-vlaggen, onboardingbereik en assistentmetadata.
Stel requiresRuntime: false alleen in wanneer deze descriptors voldoende zijn voor het setupoppervlak. OpenClaw behandelt een expliciete waarde false als een contract dat uitsluitend uit descriptors bestaat en voert setup-api of openclaw.setupEntry niet uit voor setupzoekacties. Als een Plugin die uitsluitend descriptors gebruikt toch een van deze setupruntime-items levert, meldt OpenClaw een aanvullende diagnose en blijft het item negeren. Wanneer requiresRuntime wordt weggelaten, blijft het verouderde terugvalgedrag behouden, zodat bestaande plugins die descriptors zonder de vlag hebben toegevoegd niet stukgaan.
Omdat setupzoekacties door de Plugin beheerde setup-api-code kunnen uitvoeren, moeten genormaliseerde waarden van setup.providers[].id en setup.cliBackends[] uniek blijven voor alle gedetecteerde plugins. Bij dubbelzinnig eigenaarschap wordt de bewerking veilig geweigerd in plaats van een winnaar te kiezen op basis van de detectievolgorde.
Wanneer de setupruntime wel wordt uitgevoerd, melden diagnosen van het setupregister descriptorafwijkingen als setup-api een provider of CLI-backend registreert die niet door de manifestdescriptors wordt gedeclareerd, of als een descriptor geen overeenkomende runtimeregistratie heeft. Deze diagnosen zijn aanvullend en wijzen verouderde plugins niet af.
naslaginformatie voor setup.providers
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
id |
Ja | string |
Provider-id dat tijdens setup of onboarding beschikbaar wordt gesteld. Houd genormaliseerde id's wereldwijd uniek. |
authMethods |
Nee | string[] |
Id's van setup-/authenticatiemethoden die deze provider ondersteunt zonder de volledige runtime te laden. |
envVars |
Nee | string[] |
Omgevingsvariabelen die algemene setup-/statusoppervlakken kunnen controleren voordat de Plugin-runtime wordt geladen. |
authEvidence |
Nee | object[] |
Goedkope lokale controles op authenticatiebewijs voor providers die via niet-geheime markeringen kunnen authenticeren. |
authEvidence is bedoeld voor door de provider beheerde lokale referentiemarkeringen die kunnen worden geverifieerd zonder runtimecode te laden. Deze controles moeten goedkoop en lokaal blijven: geen netwerkaanroepen, geen leesacties uit een sleutelhanger of geheimenbeheerder, geen shellopdrachten en geen controles van provider-API's.
Ondersteunde bewijsitems:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
type |
Ja | string |
Momenteel local-file-with-env. |
fileEnvVar |
Nee | string |
Omgevingsvariabele die een expliciet pad naar een referentiebestand bevat. |
fallbackPaths |
Nee | string[] |
Paden naar lokale referentiebestanden die worden gecontroleerd wanneer fileEnvVar ontbreekt of leeg is. Ondersteunt ${HOME} en ${APPDATA}. |
requiresAnyEnv |
Nee | string[] |
Ten minste één vermelde omgevingsvariabele moet niet leeg zijn voordat het bewijs geldig is. |
requiresAllEnv |
Nee | string[] |
Elke vermelde omgevingsvariabele moet niet leeg zijn voordat het bewijs geldig is. |
credentialMarker |
Ja | string |
Niet-geheime markering die wordt geretourneerd wanneer het bewijs aanwezig is. |
source |
Nee | string |
Gebruikersgericht bronlabel voor authenticatie-/statusuitvoer. |
setupvelden
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
providers |
Nee | object[] |
Descriptors voor providersetup die tijdens setup en onboarding beschikbaar worden gesteld. |
cliBackends |
Nee | string[] |
Backend-id's voor setuptijd die worden gebruikt voor descriptor-eerst-zoekacties. Houd genormaliseerde id's wereldwijd uniek. |
configMigrations |
Nee | string[] |
Id's van configuratiemigraties die worden beheerd door het setupoppervlak van deze Plugin. |
requiresRuntime |
Nee | boolean |
Of voor setup na de descriptorzoekactie nog uitvoering van setup-api nodig is. |
naslaginformatie voor uiHints
uiHints is een toewijzing van namen van configuratievelden aan kleine weergaveaanwijzingen. Sleutels kunnen punten gebruiken voor geneste configuratievelden, maar geen enkel padsegment mag __proto__, constructor of prototype zijn; setup wijst deze namen af.
{ "uiHints": { "apiKey": { "label": "API key", "help": "Used for OpenRouter requests", "placeholder": "sk-or-v1-...", "sensitive": true } }}Elke veldaanwijzing kan het volgende bevatten:
| Veld | Type | Betekenis |
|---|---|---|
label |
string |
Gebruikersgericht veldlabel. |
help |
string |
Korte hulptekst. |
tags |
string[] |
Optionele UI-tags. |
advanced |
boolean |
Markeert het veld als geavanceerd. |
sensitive |
boolean |
Markeert het veld als geheim of gevoelig. |
placeholder |
string |
Tijdelijke aanduiding voor formulierinvoer. |
naslaginformatie voor contracts
Gebruik contracts alleen voor statische metadata over het eigenaarschap van mogelijkheden die OpenClaw kan lezen zonder de Plugin-runtime te importeren.
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}Elke lijst is optioneel:
| Veld | Type | Betekenis |
|---|---|---|
embeddedExtensionFactories |
string[] |
Factory-id's voor Codex-appserverextensies, momenteel codex-app-server. |
agentToolResultMiddleware |
string[] |
Runtime-id's waarvoor deze Plugin middleware voor toolresultaten mag registreren. |
trustedToolPolicies |
string[] |
Plugin-lokale id's voor vertrouwd pre-toolbeleid die een geïnstalleerde Plugin mag registreren. Gebundelde Plugins mogen beleid zonder dit veld registreren. |
externalAuthProviders |
string[] |
Provider-id's waarvan deze Plugin de hook voor externe authenticatieprofielen beheert. |
embeddingProviders |
string[] |
Algemene embeddingprovider-id's die deze Plugin beheert voor herbruikbare vectorembeddings, waaronder geheugen. |
speechProviders |
string[] |
Spraakprovider-id's die deze Plugin beheert. |
realtimeTranscriptionProviders |
string[] |
Provider-id's voor realtime transcriptie die deze Plugin beheert. |
realtimeVoiceProviders |
string[] |
Provider-id's voor realtime spraak die deze Plugin beheert. |
memoryEmbeddingProviders |
string[] |
Verouderde geheugenspecifieke embeddingprovider-id's die deze Plugin beheert. |
mediaUnderstandingProviders |
string[] |
Provider-id's voor mediabegrip die deze Plugin beheert. |
transcriptSourceProviders |
string[] |
Provider-id's voor transcriptbronnen die deze Plugin beheert. |
documentExtractors |
string[] |
Provider-id's voor extractors van documenten (bijvoorbeeld PDF) die deze Plugin beheert. |
imageGenerationProviders |
string[] |
Provider-id's voor het genereren van afbeeldingen die deze Plugin beheert. |
videoGenerationProviders |
string[] |
Provider-id's voor het genereren van video's die deze Plugin beheert. |
musicGenerationProviders |
string[] |
Provider-id's voor het genereren van muziek die deze Plugin beheert. |
webContentExtractors |
string[] |
Provider-id's voor het extraheren van inhoud uit webpagina's die deze Plugin beheert. |
webFetchProviders |
string[] |
Provider-id's voor het ophalen van webinhoud die deze Plugin beheert. |
webSearchProviders |
string[] |
Provider-id's voor zoeken op het web die deze Plugin beheert. |
workerProviders |
string[] |
Provider-id's voor cloudworkers die deze Plugin beheert voor inrichting en een door profielen ondersteunde leaselevenscyclus. |
usageProviders |
string[] |
Provider-id's waarvan deze Plugin de hooks voor gebruiksauthenticatie en gebruikssnapshots beheert. |
migrationProviders |
string[] |
Importprovider-id's die deze Plugin beheert voor openclaw migrate. |
gatewayMethodDispatch |
string[] |
Gereserveerde bevoegdheid voor geauthenticeerde HTTP-routes van Plugins die Gateway-methoden binnen het proces aanroepen. |
tools |
string[] |
Namen van agenttools die deze Plugin beheert. |
contracts.embeddedExtensionFactories blijft behouden voor gebundelde extensiefactory's die uitsluitend voor de Codex-appserver bestemd zijn. Gebundelde transformaties van toolresultaten moeten in plaats daarvan contracts.agentToolResultMiddleware declareren en zich registreren met api.registerAgentToolResultMiddleware(...). Geïnstalleerde Plugins mogen dezelfde middlewarekoppeling alleen gebruiken wanneer deze expliciet is ingeschakeld en uitsluitend voor runtimes die zij in contracts.agentToolResultMiddleware declareren.
Geïnstalleerde Plugins die de door de host vertrouwde pre-toolbeleidslaag nodig hebben, moeten elk geregistreerd lokaal id in contracts.trustedToolPolicies declareren en expliciet zijn ingeschakeld. Gebundelde Plugins behouden het bestaande pad voor vertrouwd beleid, maar geïnstalleerde Plugins met niet-gedeclareerde beleids-id's worden vóór registratie geweigerd. Beleids-id's vallen binnen het bereik van de registrerende Plugin, zodat twee Plugins beide workflow-budget mogen declareren en registreren; één Plugin mag hetzelfde lokale id niet tweemaal registreren.
Runtime-registraties via api.registerTool(...) moeten overeenkomen met contracts.tools. Tooldetectie gebruikt deze lijst om alleen de runtimes van Plugins te laden die de aangevraagde tools kunnen beheren.
Provider-Plugins die resolveExternalAuthProfiles implementeren, moeten contracts.externalAuthProviders declareren; niet-gedeclareerde hooks voor externe authenticatie worden genegeerd.
Provider-Plugins die zowel resolveUsageAuth als fetchUsageSnapshot implementeren, moeten elk automatisch gedetecteerd provider-id in contracts.usageProviders declareren. Gebruiksdetectie leest dit contract voordat runtimecode wordt geladen en verifieert vervolgens beide hooks nadat alleen de gedeclareerde beheerders zijn geladen.
Algemene embeddingproviders moeten contracts.embeddingProviders declareren voor elke adapter die met api.registerEmbeddingProvider(...) wordt geregistreerd. Gebruik het algemene contract voor herbruikbare vectorgeneratie, waaronder providers die door geheugenzoekopdrachten worden gebruikt. contracts.memoryEmbeddingProviders is verouderde, geheugenspecifieke compatibiliteit en blijft alleen bestaan terwijl bestaande providers naar de generieke koppeling voor embeddingproviders migreren.
Workerproviders moeten elk via api.registerWorkerProvider(...) geregistreerd id in contracts.workerProviders declareren. Core slaat duurzame intentie op voordat provision wordt aangeroepen; providers valideren hun instellingen vóór externe toewijzing en herhaalde aanroepen met hetzelfde bewerkings-id moeten dezelfde lease overnemen. Core slaat ook die gevalideerde momentopname van instellingen op en geeft deze samen met leaseId door aan inspect({ leaseId, profile }) en destroy({ leaseId, profile }), ook nadat het genoemde profiel is gewijzigd of verwijderd. Vernietiging is idempotent, inspectie retourneert de gesloten statusvereniging active / destroyed / unknown, en materiaal van privésleutels voor SSH wordt uitsluitend via SecretRef aangeduid. Ingerichte SSH-eindpunten moeten ook een openbare hostKey uit vertrouwde inrichtingsuitvoer bevatten, exact in de vorm algorithm base64, zonder hostnaam of opmerking, zodat Core de host vóór het verbinden kan vastzetten. Providers die dynamische identiteitsreferenties uitgeven, mogen een gezaghebbende resolveSshIdentity({ leaseId, profile, keyRef }) implementeren; providers zonder deze functie gebruiken de generieke geheimresolver van Core. Een gezaghebbende unknown maakt een actief lokaal record wees; na een opgeslagen vernietigingsverzoek bevestigt dit de ontmanteling.
contracts.gatewayMethodDispatch accepteert momenteel "authenticated-request". Het is een hygiënepoort voor de API van native HTTP-routes van Plugins die doelbewust Gateway-methoden voor het besturingsvlak binnen het proces aanroepen, geen sandbox ter bescherming tegen schadelijke native Plugins. Gebruik dit alleen voor grondig beoordeelde gebundelde/operatoroppervlakken die al HTTP-authenticatie van de Gateway vereisen. Een bevoegde route blijft bereikbaar terwijl de toelating van Gateway-hoofdwerk gesloten is, uitsluitend wanneer deze ook auth: "gateway" en de routespecifieke gatewayRuntimeScopeSurface: "trusted-operator" declareert; gewone zusterroutes van dezelfde Plugin blijven achter de toelatingsgrens. Hierdoor blijven de opschortingsstatus en hervatting bereikbaar zonder de hele Plugin een omzeiling van de toelating te geven. Houd parsering en vormgeving van antwoorden begrensd buiten de aanroep; wezenlijk of muterend werk moet via de Gateway-methodedispatch verlopen, die de toelating en bereikafdwinging beheert.
Naslag voor configContracts
Gebruik configContracts voor manifestbeheerd configuratiegedrag dat generieke Core-helpers nodig hebben zonder de Plugin-runtime te importeren: detectie van gevaarlijke vlaggen, migratiedoelen voor SecretRef en beperking van verouderde configuratiepaden.
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "apiKey", "expected": "string" } ] } }}| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
compatibilityMigrationPaths |
Nee | string[] |
Configuratiepaden relatief aan de hoofdmap die aangeven dat compatibiliteitsmigraties tijdens de installatie van deze Plugin mogelijk van toepassing zijn. Hiermee kunnen generieke runtimelezingen van configuratie elk installatieoppervlak van Plugins overslaan wanneer de configuratie nooit naar de Plugin verwijst. |
compatibilityRuntimePaths |
Nee | string[] |
Compatibiliteitspaden relatief aan de hoofdmap die deze Plugin tijdens runtime kan afhandelen voordat de Plugin-code volledig wordt geactiveerd. Gebruik dit voor verouderde oppervlakken die verzamelingen van gebundelde kandidaten moeten beperken zonder elke compatibele Plugin-runtime te importeren. |
dangerousFlags |
Nee | object[] |
Configuratieliteralen die openclaw doctor als onveilig of gevaarlijk moet markeren wanneer ze zijn ingeschakeld. Zie hieronder. |
secretInputs |
Nee | object |
Configuratiepaden onder plugins.entries.<id>.config die het doelregister voor SecretRef-migratie/-controle als tekenreeksen in de vorm van geheimen moet behandelen. Zie hieronder. |
Elke vermelding in dangerousFlags ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
path |
Ja | string |
Door punten gescheiden configuratiepad relatief aan plugins.entries.<id>.config. Ondersteunt *-jokertekens voor kaart-/arraysegmenten. |
equals |
Ja | string | number | boolean | null |
Exacte letterlijke waarde die deze configuratiewaarde als gevaarlijk markeert. |
secretInputs ondersteunt:
| Veld | Vereist | Type | Betekenis |
|---|---|---|---|
bundledDefaultEnabled |
Nee | boolean |
Overschrijf de standaardactivering van de gebundelde Plugin bij het bepalen of dit SecretRef-oppervlak actief is. Gebruik dit wanneer de Plugin is gebundeld, maar het oppervlak inactief moet blijven totdat het expliciet in de configuratie wordt geactiveerd. |
paths |
Ja | object[] |
Configuratiepaden in geheimvorm, elk met path (door punten gescheiden, relatief ten opzichte van plugins.entries.<id>.config, ondersteunt jokertekens met *) en optioneel expected (momenteel alleen "string"). |
Naslaginformatie voor mediaUnderstandingProviderMetadata
Gebruik mediaUnderstandingProviderMetadata wanneer een provider voor mediabegrip standaardmodellen, prioriteit voor automatische authenticatieterugval of native documentondersteuning heeft die generieke kernhulpprogramma's nodig hebben voordat de runtime wordt geladen. Sleutels moeten ook in contracts.mediaUnderstandingProviders worden gedeclareerd.
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}Elke providervermelding kan het volgende bevatten:
| Veld | Type | Betekenis |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
Mediamogelijkheden die door deze provider beschikbaar worden gesteld. |
defaultModels |
Record<string, string> |
Standaardtoewijzingen van mogelijkheid aan model die worden gebruikt wanneer de configuratie geen model opgeeft. |
autoPriority |
Record<string, number> |
Lagere getallen worden eerder gesorteerd voor automatische, op aanmeldgegevens gebaseerde providerterugval. |
nativeDocumentInputs |
"pdf"[] |
Native documentinvoer die door de provider wordt ondersteund. |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
Modeloverschrijvingen per documenttype. Stel image: false in om beeldgebaseerde extractie voor dat documenttype uit te schakelen. |
Naslaginformatie voor channelConfigs
Gebruik channelConfigs wanneer een kanaal-Plugin goedkope configuratiemetadata nodig heeft voordat de runtime wordt geladen. Alleen-lezen detectie van kanaalconfiguratie en -status kan deze metadata rechtstreeks gebruiken voor geconfigureerde externe kanalen wanneer er geen configuratievermelding beschikbaar is, of wanneer setup.requiresRuntime: false aangeeft dat een configuratieruntime niet nodig is.
channelConfigs is metadata van het Pluginmanifest, geen nieuwe gebruikersconfiguratiesectie op het hoogste niveau. Gebruikers configureren kanaalinstanties nog steeds onder channels.<channel-id>. OpenClaw leest manifestmetadata om te bepalen welke Plugin eigenaar is van dat geconfigureerde kanaal voordat de runtimecode van de Plugin wordt uitgevoerd.
Voor een kanaal-Plugin beschrijven configSchema en channelConfigs verschillende paden:
configSchemavalideertplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemavalideertchannels.<channel-id>
Niet-gebundelde Plugins die channels[] declareren, moeten ook overeenkomende channelConfigs-vermeldingen declareren. Zonder deze vermeldingen kan OpenClaw de Plugin nog steeds laden, maar kunnen configuratieschema-, configuratie- en Control UI-oppervlakken in het koude pad de vorm van de kanaalspecifieke opties pas kennen wanneer de runtime van de Plugin wordt uitgevoerd.
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled en nativeSkillsAutoEnabled kunnen statische auto-standaardwaarden declareren voor controles van opdrachtconfiguraties die worden uitgevoerd voordat de kanaalruntime wordt geladen. Gebundelde kanalen kunnen dezelfde standaardwaarden ook publiceren via package.json#openclaw.channel.commands, naast hun overige kanaalcatalogusmetadata die eigendom is van het pakket.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Matrix homeserver connection", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}Elke kanaalvermelding kan het volgende bevatten:
| Veld | Type | Betekenis |
|---|---|---|
schema |
object |
JSON-schema voor channels.<id>. Vereist voor elke gedeclareerde kanaalconfiguratievermelding. |
uiHints |
Record<string, object> |
Optionele UI-labels, tijdelijke aanduidingen en aanwijzingen voor gevoelige gegevens voor die kanaalconfiguratiesectie. |
label |
string |
Kanaallabel dat met selectie- en inspectieoppervlakken wordt samengevoegd wanneer runtimemetadata nog niet gereed is. |
description |
string |
Korte kanaalbeschrijving voor inspectie- en catalogusoppervlakken. |
commands |
object |
Statische automatische standaardwaarden voor native opdrachten en native Skills voor configuratiecontroles vóór de runtime. |
preferOver |
string[] |
Verouderde Plugin-ID's of Plugin-ID's met lagere prioriteit die dit kanaal in selectieoppervlakken moet overtreffen. |
Een andere kanaal-Plugin vervangen
Gebruik preferOver wanneer uw Plugin de voorkeurs-eigenaar is van een kanaal-ID dat ook door een andere Plugin kan worden geleverd. Veelvoorkomende gevallen zijn een hernoemde Plugin-ID, een zelfstandige Plugin die een gebundelde Plugin vervangt, of een onderhouden fork die dezelfde kanaal-ID behoudt voor configuratiecompatibiliteit.
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}Wanneer channels.chat is geconfigureerd, houdt OpenClaw rekening met zowel de kanaal-ID als de voorkeurs-Plugin-ID. Als de Plugin met lagere prioriteit alleen is geselecteerd omdat deze is gebundeld of standaard is geactiveerd, schakelt OpenClaw deze uit in de effectieve runtimeconfiguratie, zodat één Plugin eigenaar is van het kanaal en de bijbehorende hulpmiddelen. Expliciete gebruikersselectie heeft nog steeds voorrang: als de gebruiker beide Plugins expliciet activeert (via plugins.allow of een materiële plugins.entries-configuratie), behoudt OpenClaw die keuze en rapporteert het diagnostische meldingen over dubbele kanalen en hulpmiddelen, in plaats van de aangevraagde Pluginset stilzwijgend te wijzigen.
Beperk preferOver tot Plugin-ID's die werkelijk hetzelfde kanaal kunnen leveren. Het is geen algemeen prioriteitsveld en het hernoemt geen gebruikersconfiguratiesleutels.
Naslaginformatie voor modelSupport
Gebruik modelSupport wanneer OpenClaw uw provider-Plugin moet afleiden uit verkorte model-ID's zoals gpt-5.6-sol of claude-sonnet-4.6 voordat de runtime van de Plugin wordt geladen.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw past deze prioriteitsvolgorde toe:
- expliciete
provider/model-verwijzingen gebruiken de manifestmetadata van de eigenaar uitproviders modelPatternsheeft voorrang opmodelPrefixes- als één niet-gebundelde Plugin en één gebundelde Plugin beide overeenkomen, heeft de niet-gebundelde Plugin voorrang
- resterende ambiguïteit wordt genegeerd totdat de gebruiker of configuratie een provider opgeeft
Velden:
| Veld | Type | Betekenis |
|---|---|---|
modelPrefixes |
string[] |
Voorvoegsels die met startsWith worden vergeleken met verkorte model-ID's. |
modelPatterns |
string[] |
Bronnen voor reguliere expressies die na verwijdering van het profielachtervoegsel met verkorte model-ID's worden vergeleken. |
Vermeldingen in modelPatterns worden gecompileerd via compileSafeRegex, dat patronen met geneste herhaling weigert (bijvoorbeeld (a+)+$). Patronen die niet door de veiligheidscontrole komen, worden stilzwijgend overgeslagen, net als syntactisch ongeldige reguliere expressies. Houd patronen eenvoudig en vermijd geneste kwantoren.
Naslaginformatie voor modelCatalog
Gebruik modelCatalog wanneer OpenClaw de modelmetadata van de provider moet kennen voordat de runtime van de Plugin wordt geladen. Dit is de bron die eigendom is van het manifest voor vaste catalogusrijen, provideraliassen, onderdrukkingsregels en detectiemodus. Runtimevernieuwing blijft de verantwoordelijkheid van de runtimcode van de provider, maar het manifest vertelt de kern wanneer runtime vereist is.
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "not available on Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}Velden op het hoogste niveau:
| Veld | Type | Betekenis |
|---|---|---|
providers |
Record<string, object> |
Catalogusrijen voor provider-id's die eigendom zijn van deze plugin. Sleutels moeten ook voorkomen in providers op het hoogste niveau. |
aliases |
Record<string, object> |
Provideraliassen die voor catalogus- of onderdrukkingsplanning moeten worden herleid tot een provider waarvan de plugin eigenaar is. |
suppressions |
object[] |
Modelrijen uit een andere bron die deze plugin om een providerspecifieke reden onderdrukt. |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
Of de providercatalogus uit manifestmetagegevens kan worden gelezen, in de cache kan worden vernieuwd of runtime vereist. |
runtimeAugment |
boolean |
Stel alleen in op true wanneer de providerruntime catalogusrijen moet toevoegen na manifest-/configuratieplanning. |
aliases neemt deel aan het opzoeken van providereigendom voor de planning van de modelcatalogus. Aliasdoelen moeten providers op het hoogste niveau zijn die eigendom zijn van dezelfde plugin. Wanneer een op provider gefilterde lijst een alias gebruikt, kan OpenClaw het manifest van de eigenaar lezen en API-/basis-URL-overschrijvingen van de alias toepassen zonder de providerruntime te laden. Aliassen breiden ongefilterde cataloguslijsten niet uit; brede lijsten geven alleen de canonieke providerrijen van de eigenaar weer.
suppressions vervangt de oude providerruntimehook suppressBuiltInModel. Onderdrukkingsitems worden alleen gerespecteerd wanneer de provider eigendom is van de plugin of is gedeclareerd als een sleutel van modelCatalog.aliases die naar een provider van de eigenaar verwijst. Runtimehooks voor onderdrukking worden niet langer aangeroepen tijdens modelresolutie.
Providervelden:
| Veld | Type | Betekenis |
|---|---|---|
baseUrl |
string |
Optionele standaardbasis-URL voor modellen in deze providercatalogus. |
api |
ModelApi |
Optionele standaard-API-adapter voor modellen in deze providercatalogus. |
headers |
Record<string, string> |
Optionele statische headers die op deze providercatalogus van toepassing zijn. |
defaultUtilityModel |
string |
Optionele, door de provider aanbevolen id van een klein model voor korte interne hulptaken (titels, voortgangsbeschrijvingen). Wordt gebruikt wanneer agents.defaults.utilityModel niet is ingesteld en deze provider het primaire model van de agent levert. |
models |
object[] |
Vereiste modelrijen. Rijen zonder id worden genegeerd. |
Modelvelden:
| Veld | Type | Betekenis |
|---|---|---|
id |
string |
Providerlokale model-id, zonder het voorvoegsel provider/. |
name |
string |
Optionele weergavenaam. |
api |
ModelApi |
Optionele API-overschrijving per model. |
baseUrl |
string |
Optionele overschrijving van de basis-URL per model. |
headers |
Record<string, string> |
Optionele statische headers per model. |
input |
Array<"text" | "image" | "document"> |
Modaliteiten die het model accepteert. Andere waarden worden stilzwijgend verwijderd. |
reasoning |
boolean |
Of het model redeneergedrag beschikbaar stelt. |
contextWindow |
number |
Systeemeigen contextvenster van de provider. |
contextTokens |
number |
Optionele effectieve runtimecontextlimiet wanneer deze afwijkt van contextWindow. |
maxTokens |
number |
Maximaal aantal uitvoertokens, indien bekend. |
thinkingLevelMap |
Record<string, string | null> |
Optionele overschrijvingen van model-id's of parameters per denkniveau. |
cost |
object |
Optionele prijsstelling in USD per miljoen tokens, inclusief optionele tieredPricing. |
compat |
object |
Optionele compatibiliteitsvlaggen die overeenkomen met de compatibiliteit van de OpenClaw-modelconfiguratie. |
mediaInput |
object |
Optionele invoerconfiguratie per modaliteit, momenteel alleen voor afbeeldingen. |
status |
"available" | "preview" | "deprecated" | "disabled" |
Lijststatus. Onderdruk alleen wanneer de rij helemaal niet mag verschijnen. |
statusReason |
string |
Optionele reden die wordt weergegeven bij een niet-beschikbare status. |
replaces |
string[] |
Oudere providerlokale model-id's die door dit model worden vervangen. |
replacedBy |
string |
Vervangende providerlokale model-id voor verouderde rijen. |
tags |
string[] |
Stabiele tags die door keuzelijsten en filters worden gebruikt. |
Onderdrukkingsvelden:
| Veld | Type | Betekenis |
|---|---|---|
provider |
string |
Provider-id voor de bovenliggende rij die moet worden onderdrukt. Moet eigendom zijn van deze plugin of als alias van de eigenaar zijn gedeclareerd. |
model |
string |
Providerlokale model-id die moet worden onderdrukt. |
reason |
string |
Optioneel bericht dat wordt weergegeven wanneer de onderdrukte rij rechtstreeks wordt opgevraagd. |
when.baseUrlHosts |
string[] |
Optionele lijst met effectieve hosts van de providerbasis-URL die vereist zijn voordat de onderdrukking wordt toegepast. |
when.providerConfigApiIn |
string[] |
Optionele lijst met exacte api-waarden uit de providerconfiguratie die vereist zijn voordat de onderdrukking wordt toegepast. |
Plaats geen gegevens die alleen tijdens runtime beschikbaar zijn in modelCatalog. Gebruik static alleen wanneer de manfestrijen volledig genoeg zijn om bij op provider gefilterde lijsten en keuzelijsten register-/runtime-detectie over te slaan. Gebruik refreshable wanneer manfestrijen bruikbare, weer te geven beginwaarden of aanvullingen zijn, maar een vernieuwing/cache later meer rijen kan toevoegen; vernieuwbare rijen zijn op zichzelf niet gezaghebbend. Gebruik runtime wanneer OpenClaw de providerruntime moet laden om de lijst te kennen.
Naslag voor modelIdNormalization
Gebruik modelIdNormalization voor eenvoudige, provider-eigen opschoning van model-id's die moet plaatsvinden voordat de providerruntime wordt geladen. Hierdoor blijven aliassen zoals korte modelnamen, oudere providerlokale id's en proxyvoorvoegselregels in het manifest van de eigenaarplugin in plaats van in de modelselectietabellen van de kern.
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}Providervelden:
| Veld | Type | Betekenis |
|---|---|---|
aliases |
Record<string,string> |
Hoofdletterongevoelige exacte aliassen voor model-id's. Waarden worden ongewijzigd teruggegeven. |
stripPrefixes |
string[] |
Voorvoegsels die vóór het opzoeken van aliassen moeten worden verwijderd, nuttig voor oudere duplicatie van provider/model. |
prefixWhenBare |
string |
Voorvoegsel dat wordt toegevoegd wanneer de genormaliseerde model-id nog geen / bevat. |
prefixWhenBareAfterAliasStartsWith |
object[] |
Voorwaardelijke regels voor voorvoegsels bij losse id's na het opzoeken van aliassen, met modelPrefix en prefix als sleutels. |
Naslag voor providerEndpoints
Gebruik providerEndpoints voor eindpuntclassificatie die het algemene aanvraagbeleid moet kennen voordat de providerruntime wordt geladen. De kern blijft eigenaar van de betekenis van elke endpointClass; pluginmanifests zijn eigenaar van de host- en basis-URL-metagegevens.
Officieel geëxternaliseerde providerplugins worden uitgesloten van de kerndistributie, waardoor
hun manifests onzichtbaar zijn totdat ze zijn geïnstalleerd. Hun providerEndpoints moeten
ook worden gespiegeld in scripts/lib/official-external-provider-catalog.json, zodat
eindpuntclassificatie zonder de plugin blijft werken; een contracttest
dwingt deze spiegeling af.
Eindpuntvelden:
| Veld | Type | Betekenis |
|---|---|---|
endpointClass |
string |
Bekende kerneindpuntklasse, zoals openrouter, moonshot-native of google-vertex. |
hosts |
string[] |
Exacte hostnamen die aan de eindpuntklasse worden gekoppeld. |
hostSuffixes |
string[] |
Hostachtervoegsels die aan de eindpuntklasse worden gekoppeld. Begin met . om alleen domeinachtervoegsels te vergelijken. |
baseUrls |
string[] |
Exacte genormaliseerde HTTP(S)-basis-URL's die aan de eindpuntklasse worden gekoppeld. |
googleVertexRegion |
string |
Statische Google Vertex-regio voor exacte globale hosts. |
googleVertexRegionHostSuffix |
string |
Achtervoegsel dat van overeenkomende hosts wordt verwijderd om het Google Vertex-regiovoorvoegsel beschikbaar te maken. |
Naslaginformatie voor providerRequest
Gebruik providerRequest voor goedkope metadata over aanvraagcompatibiliteit die generiek aanvraagbeleid nodig heeft zonder de providerruntime te laden. Houd gedragsspecifieke herschrijving van payloads in providerruntime-hooks of gedeelde helpers voor providerfamilies.
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}Providervelden:
| Veld | Type | Betekenis |
|---|---|---|
family |
string |
Label voor de providerfamilie dat wordt gebruikt voor generieke beslissingen over aanvraagcompatibiliteit en diagnostiek. |
compatibilityFamily |
"moonshot" |
Optionele compatibiliteitscategorie voor providerfamilies voor gedeelde aanvraaghelpers. |
openAICompletions |
object |
Vlaggen voor OpenAI-compatibele voltooiingsaanvragen, momenteel supportsStreamingUsage. |
Naslaginformatie voor secretProviderIntegrations
Gebruik secretProviderIntegrations wanneer een plugin een herbruikbare vooraf ingestelde SecretRef-execprovider kan publiceren. OpenClaw leest deze metadata voordat de providerruntime wordt geladen, slaat het eigendom van de plugin op in secrets.providers.<alias>.pluginIntegration en laat de daadwerkelijke oplossing van geheimen over aan de SecretRef-runtime. Voorinstellingen worden alleen beschikbaar gemaakt voor meegeleverde plugins en geïnstalleerde plugins die zijn gevonden in de beheerde installatielocaties voor plugins, zoals installaties via git en ClawHub.
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}De sleutel van de toewijzing is de integratie-id. Als providerAlias wordt weggelaten, gebruikt OpenClaw de integratie-id als alias voor de SecretRef-provider. Provideraliassen moeten overeenkomen met het normale patroon voor SecretRef-provideraliassen, bijvoorbeeld team-secrets of onepassword-work.
Wanneer een beheerder de voorinstelling selecteert, schrijft OpenClaw een providerverwijzing zoals:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}Bij het opstarten of opnieuw laden lost OpenClaw die provider op door de huidige manifestmetadata van de plugin te laden, te controleren of de eigenaarplugin is geïnstalleerd en actief is, en de exec-opdracht uit het manifest samen te stellen. Als de plugin wordt uitgeschakeld of verwijderd, wordt de provider voor actieve SecretRefs ingetrokken. Beheerders die een zelfstandige exec-configuratie willen, kunnen nog steeds rechtstreeks handmatige providers met command/args configureren.
Momenteel worden alleen voorinstellingen met source: "exec" ondersteund. command moet ${node} zijn en args[0] moet een resolverscript zijn dat met ./ relatief ten opzichte van de pluginhoofdmap is opgegeven. OpenClaw zet dit bij het opstarten of opnieuw laden om naar het huidige uitvoerbare Node-bestand en het absolute pad van het script binnen de plugin. Node-opties zoals --require, --import, --loader, --env-file, --eval en --print maken geen deel uit van het manifestcontract voor voorinstellingen. Beheerders die niet-Node-opdrachten nodig hebben, kunnen rechtstreeks zelfstandige handmatige execproviders configureren.
OpenClaw leidt trustedDirs voor manifestvoorinstellingen af van de pluginhoofdmap en, voor ${node}-voorinstellingen, de map van het huidige uitvoerbare Node-bestand. In het manifest opgegeven trustedDirs worden genegeerd. Andere opties voor execproviders, zoals timeoutMs, noOutputTimeoutMs, maxOutputBytes, jsonOnly, env, passEnv en allowInsecurePath, worden doorgegeven aan de normale configuratie van de SecretRef-execprovider.
Naslaginformatie voor modelPricing
Gebruik modelPricing wanneer een provider prijsbepalingsgedrag op het besturingsvlak nodig heeft voordat de runtime wordt geladen. De Gateway-cache voor prijzen leest deze metadata zonder providerruntimecode te importeren.
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}Providervelden:
| Veld | Type | Betekenis |
|---|---|---|
external |
boolean |
Stel in op false voor lokale/zelfgehoste providers die nooit prijsinformatie van OpenRouter of LiteLLM mogen ophalen. |
openRouter |
false | object |
Toewijzing voor het opzoeken van OpenRouter-prijzen. false schakelt het opzoeken via OpenRouter voor deze provider uit. |
liteLLM |
false | object |
Toewijzing voor het opzoeken van LiteLLM-prijzen. false schakelt het opzoeken via LiteLLM voor deze provider uit. |
Bronvelden:
| Veld | Type | Betekenis |
|---|---|---|
provider |
string |
Provider-id in de externe catalogus wanneer deze afwijkt van de OpenClaw-provider-id, bijvoorbeeld z-ai voor een zai-provider. |
passthroughProviderModel |
boolean |
Behandel model-id's met schuine strepen als geneste provider-/modelverwijzingen, nuttig voor proxyproviders zoals OpenRouter. |
modelIdTransforms |
"version-dots"[] |
Extra model-id-varianten voor de externe catalogus. version-dots probeert versie-id's met punten, zoals claude-opus-4.6. |
OpenClaw-providerindex
De OpenClaw-providerindex is door OpenClaw beheerde voorbeeldmetadata voor providers waarvan de plugins mogelijk nog niet zijn geïnstalleerd. Deze maakt geen deel uit van een pluginmanifest. Pluginmanifesten blijven de autoriteit voor geïnstalleerde plugins. De providerindex is het interne terugvalcontract dat toekomstige interfaces voor installeerbare providers en modelkeuze vóór installatie zullen gebruiken wanneer een providerplugin niet is geïnstalleerd.
Volgorde van catalogusautoriteit:
- Gebruikersconfiguratie.
modelCatalogvan het geïnstalleerde pluginmanifest.- Modelcataloguscache van een expliciete vernieuwing.
- Voorbeeldrijen uit de OpenClaw-providerindex.
De providerindex mag geen geheimen, ingeschakelde status, runtime-hooks of live accountspecifieke modelgegevens bevatten. De voorbeeldcatalogi gebruiken dezelfde vorm voor de modelCatalog-providerrij als pluginmanifesten, maar moeten beperkt blijven tot stabiele weergavemetadata, tenzij runtimeadaptervelden zoals api, baseUrl, prijzen of compatibiliteitsvlaggen bewust synchroon worden gehouden met het geïnstalleerde pluginmanifest. Providers met live ontdekking via /models moeten vernieuwde rijen via het expliciete cachepad voor de modelcatalogus schrijven, in plaats van providerap API's aan te roepen tijdens normale weergave of onboarding.
Vermeldingen in de providerindex kunnen ook metadata voor installeerbare plugins bevatten voor providers waarvan de plugin uit de kern is verplaatst of om een andere reden nog niet is geïnstalleerd. Deze metadata weerspiegelt het patroon van de kanaalcatalogus: pakketnaam, npm-installatiespecificatie, verwachte integriteit en eenvoudige labels voor authenticatiekeuzes zijn voldoende om een installeerbare configuratieoptie te tonen. Zodra de plugin is geïnstalleerd, heeft het manifest voorrang en wordt de vermelding in de providerindex voor die provider genegeerd.
openclaw doctor --fix migreert een kleine, gesloten verzameling verouderde manifestcapaciteitssleutels op het hoogste niveau naar contracts.*: speechProviders, mediaUnderstandingProviders, imageGenerationProviders en tools. Geen van deze sleutels, en ook geen enkele andere capaciteitenlijst, wordt nog als manifestveld op het hoogste niveau gelezen; bij normaal laden van manifesten worden ze alleen onder contracts herkend.
Manifest tegenover package.json
De twee bestanden hebben verschillende functies:
| Bestand | Gebruik het voor |
|---|---|
openclaw.plugin.json |
Detectie, configuratievalidatie, metadata voor authenticatiekeuzes en UI-aanwijzingen die beschikbaar moeten zijn voordat plugincode wordt uitgevoerd |
package.json |
npm-metadata, installatie van afhankelijkheden en het openclaw-blok voor toegangspunten, installatievoorwaarden, configuratie of catalogusmetadata |
Als u niet zeker weet waar een bepaald onderdeel van de metadata thuishoort, gebruikt u deze regel:
- als OpenClaw dit moet weten voordat plugincode wordt geladen, plaatst u het in
openclaw.plugin.json - als het gaat om verpakking, toegangsbestanden of npm-installatiegedrag, plaatst u het in
package.json
package.json-velden die de detectie beïnvloeden
Bepaalde pluginmetadata voor vóór de runtime staat bewust in package.json onder het openclaw-blok in plaats van in openclaw.plugin.json. openclaw.bundle en openclaw.bundle.json zijn geen OpenClaw-plugincontracten; systeemeigen plugins moeten openclaw.plugin.json gebruiken in combinatie met de hieronder ondersteunde package.json#openclaw-velden.
Belangrijke voorbeelden:
| Veld | Betekenis |
|---|---|
openclaw.extensions |
Declareert systeemeigen Plugin-toegangspunten. Moet binnen de pakketmap van de Plugin blijven. |
openclaw.runtimeExtensions |
Declareert gebouwde JavaScript-runtime-toegangspunten voor geïnstalleerde pakketten. Moet binnen de pakketmap van de Plugin blijven. |
openclaw.setupEntry |
Lichtgewicht toegangspunt uitsluitend voor configuratie, gebruikt tijdens onboarding, uitgestelde kanaalstart en alleen-lezen-kanaalstatus/SecretRef-detectie. Moet binnen de pakketmap van de Plugin blijven. |
openclaw.runtimeSetupEntry |
Declareert het gebouwde JavaScript-configuratietoegangspunt voor geïnstalleerde pakketten. Vereist setupEntry, moet bestaan en moet binnen de pakketmap van de Plugin blijven. |
openclaw.channel |
Eenvoudige metadata voor de kanaalcatalogus, zoals labels, documentatiepaden, aliassen en selectietekst. |
openclaw.channel.commands |
Statische metadata voor systeemeigen opdrachten en automatische standaardinstellingen van systeemeigen Skills, gebruikt door configuratie-, audit- en opdrachtenchermoppervlakken voordat de kanaalruntime wordt geladen. |
openclaw.channel.configuredState |
Lichtgewicht metadata voor controle van de geconfigureerde status, die zonder de volledige kanaalruntime te laden kan antwoorden op: "bestaat er al een configuratie die uitsluitend omgevingsvariabelen gebruikt?" |
openclaw.channel.persistedAuthState |
Lichtgewicht metadata voor controle van opgeslagen authenticatie, die zonder de volledige kanaalruntime te laden kan antwoorden op: "is er al ergens aangemeld?" |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
Installatie-/updateaanwijzingen voor meegeleverde en extern gepubliceerde plugins. |
openclaw.install.defaultChoice |
Voorkeursinstallatiepad wanneer meerdere installatiebronnen beschikbaar zijn. |
openclaw.install.minHostVersion |
Minimaal ondersteunde OpenClaw-hostversie, met een semver-ondergrens zoals >=2026.3.22 of >=2026.5.1-beta.1. |
openclaw.compat.pluginApi |
Minimaal door dit pakket vereist bereik van de OpenClaw-Plugin-API, met een semver-ondergrens zoals >=2026.5.27. |
openclaw.install.expectedIntegrity |
Verwachte npm-dist-integriteitstekenreeks, zoals sha512-...; installatie- en updatestromen verifiëren het opgehaalde artefact hiertegen. |
openclaw.install.allowInvalidConfigRecovery |
Staat een beperkt herstelpad via herinstallatie van een meegeleverde Plugin toe wanneer de configuratie ongeldig is. |
openclaw.install.requiredPlatformPackages |
npm-pakketaliassen die aanwezig moeten worden wanneer hun platformbeperkingen in het lockbestand overeenkomen met de huidige host. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
Laat kanaaloppervlakken van de configuratieruntime vóór het luisteren laden en stelt vervolgens de volledige geconfigureerde kanaal-Plugin uit tot activering na het starten met luisteren. |
Manifestmetadata bepaalt welke provider-, kanaal- en configuratiekeuzes tijdens onboarding verschijnen voordat de runtime wordt geladen. package.json#openclaw.install vertelt onboarding hoe die Plugin moet worden opgehaald of ingeschakeld wanneer de gebruiker een van die keuzes selecteert. Verplaats installatieaanwijzingen niet naar openclaw.plugin.json.
openclaw.install.minHostVersion wordt tijdens installatie en het laden van het manifestregister afgedwongen voor niet-meegeleverde Plugin-bronnen. Ongeldige waarden worden geweigerd; nieuwere maar geldige waarden zorgen ervoor dat externe plugins op oudere hosts worden overgeslagen. Meegeleverde bronplugins worden geacht dezelfde versie te hebben als de host-checkout.
openclaw.install.requiredPlatformPackages is bedoeld voor npm-pakketten die vereiste systeemeigen binaire bestanden aanbieden via optionele, platformspecifieke aliassen. Vermeld voor elke ondersteunde platformalias de kale npm-pakketnaam. Tijdens npm-installatie verifieert OpenClaw uitsluitend de gedeclareerde alias waarvan de beperkingen in het lockbestand overeenkomen met de huidige host. Als npm succes meldt maar die alias weglaat, probeert OpenClaw het eenmaal opnieuw met een nieuwe cache en draait het de installatie terug als de alias nog steeds ontbreekt.
openclaw.compat.pluginApi wordt tijdens pakketinstallatie afgedwongen voor niet-meegeleverde Plugin-bronnen. Gebruik dit voor de ondergrens van de OpenClaw-Plugin-SDK/runtime-API waartegen het pakket is gebouwd. Deze kan strenger zijn dan minHostVersion wanneer een Plugin-pakket een nieuwere API nodig heeft, maar voor andere stromen toch een lagere installatieaanwijzing behoudt. De officiële synchronisatie van OpenClaw-releases verhoogt bestaande officiële ondergrenzen voor Plugin-API's standaard naar de OpenClaw-releaseversie, maar releases die uitsluitend een Plugin betreffen, kunnen een lagere ondergrens behouden wanneer het pakket bewust oudere hosts ondersteunt. Gebruik niet uitsluitend de pakketversie als compatibiliteitscontract. peerDependencies.openclaw blijft npm-pakketmetadata; OpenClaw gebruikt het contract openclaw.compat.pluginApi voor beslissingen over installatiecompatibiliteit.
Officiële metadata voor installatie op aanvraag moet clawhubSpec gebruiken wanneer de Plugin op ClawHub is gepubliceerd; onboarding behandelt dit als de externe voorkeursbron en registreert na installatie de feiten over het ClawHub-artefact. npmSpec blijft de compatibiliteitsterugval voor pakketten die nog niet naar ClawHub zijn verplaatst.
Exacte vastzetting van npm-versies staat al in npmSpec, bijvoorbeeld "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3". Officiële externe catalogusvermeldingen moeten exacte specificaties combineren met expectedIntegrity, zodat updatestromen veilig mislukken als het opgehaalde npm-artefact niet langer overeenkomt met de vastgezette release. Interactieve onboarding biedt voor compatibiliteit nog steeds vertrouwde npm-specificaties uit registers aan, waaronder kale pakketnamen en dist-tags. Catalogusdiagnostiek kan onderscheid maken tussen exacte, variabele, met integriteit vastgezette, zonder integriteit, niet-overeenkomende pakketnaam en ongeldige standaardkeuzebronnen. De diagnostiek waarschuwt ook wanneer expectedIntegrity aanwezig is, maar er geen geldige npm-bron is die ermee kan worden vastgezet. Wanneer expectedIntegrity aanwezig is, dwingen installatie- en updatestromen dit af; wanneer het ontbreekt, wordt de registerresolutie zonder integriteitsvastzetting geregistreerd.
Kanaalplugins moeten openclaw.setupEntry opgeven wanneer status-, kanaallijst- of SecretRef-scans geconfigureerde accounts moeten identificeren zonder de volledige runtime te laden. Het configuratietoegangspunt moet kanaalmetadata plus configuratieveilige adapters voor configuratie, status en geheimen beschikbaar stellen; houd netwerkclients, Gateway-listeners en transportruntimes in het hoofdtoegangspunt van de extensie.
Velden voor runtime-toegangspunten omzeilen de controles van pakketgrenzen voor velden met brontoegangspunten niet. openclaw.runtimeExtensions kan bijvoorbeeld een pad in openclaw.extensions dat buiten het pakket treedt niet laadbaar maken.
openclaw.install.allowInvalidConfigRecovery is bewust beperkt. Het maakt niet elke willekeurige defecte configuratie installeerbaar. Momenteel staat het installatiestromen alleen toe om te herstellen van specifieke verouderde upgradefouten van meegeleverde plugins, zoals een ontbrekend pad naar een meegeleverde Plugin of een verouderde vermelding channels.<id> voor diezelfde meegeleverde Plugin. Niet-gerelateerde configuratiefouten blokkeren de installatie nog steeds en verwijzen beheerders naar openclaw doctor --fix.
openclaw.channel.persistedAuthState is pakketmetadata voor een kleine controlemodule:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}Gebruik dit wanneer configuratie-, doctor-, status- of alleen-lezen-aanwezigheidsstromen een eenvoudige ja/nee-controle van authenticatie nodig hebben voordat de volledige kanaal-Plugin wordt geladen. Opgeslagen authenticatiestatus is niet hetzelfde als geconfigureerde kanaalstatus: gebruik deze metadata niet om plugins automatisch in te schakelen, runtime-afhankelijkheden te herstellen of te bepalen of een kanaalruntime moet worden geladen. De doelexport moet een kleine functie zijn die uitsluitend opgeslagen status leest; leid deze niet via het volledige runtime-barrelbestand van het kanaal.
openclaw.channel.configuredState gebruikt dezelfde vorm voor eenvoudige controles van een uitsluitend via omgevingsvariabelen geconfigureerde status:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "specifier": "./configured-state", "exportName": "hasTelegramConfiguredState" } } }}Gebruik dit wanneer een kanaal de geconfigureerde status kan bepalen op basis van omgevingsvariabelen of andere kleine invoer die geen runtime vereist. Als de controle volledige configuratieresolutie of de echte kanaalruntime nodig heeft, houd die logica dan in de hook config.hasConfiguredState van de Plugin.
Detectieprioriteit (dubbele Plugin-id's)
OpenClaw detecteert plugins vanuit drie hoofdmappen, gecontroleerd in deze volgorde: met OpenClaw meegeleverde plugins, de algemene installatiemap (~/.openclaw/extensions) en de huidige werkruimtemap (<workspace>/.openclaw/extensions), aangevuld met eventuele expliciete vermeldingen in plugins.load.paths.
Als twee gedetecteerde plugins dezelfde id hebben, wordt alleen het manifest met de hoogste prioriteit behouden; duplicaten met een lagere prioriteit worden verwijderd in plaats van ernaast geladen. Prioriteit, van hoog naar laag:
- Via configuratie geselecteerd — een pad dat expliciet is vastgezet in
plugins.entries.<id> - Algemene installatie die overeenkomt met een bijgehouden installatierecord — een Plugin die is geïnstalleerd via
openclaw plugin install/openclaw plugin updateen die door de installatieregistratie van OpenClaw voor dezelfde id wordt herkend, zelfs wanneer de id ook bij een meegeleverde Plugin hoort - Meegeleverd — plugins die met OpenClaw worden geleverd
- Werkruimte — plugins die relatief ten opzichte van de huidige werkruimte zijn gedetecteerd
- Elke andere gedetecteerde kandidaat
Gevolgen:
- Een gevorkte of verouderde kopie van een meegeleverde Plugin die zonder registratie in de werkruimte of algemene hoofdmap staat, overschaduwt de meegeleverde build niet.
- Om een meegeleverde Plugin te overschrijven, voert u
openclaw plugin installuit voor die id, zodat de bijgehouden algemene installatie een hogere prioriteit krijgt dan de meegeleverde kopie, of zet u een specifiek pad vast viaplugins.entries.<id>, zodat dit wint op basis van de prioriteit voor selectie via configuratie. - Verwijderde duplicaten worden vastgelegd in logboeken, zodat Doctor en opstartdiagnostiek naar de genegeerde kopie kunnen verwijzen.
- Via configuratie geselecteerde overschrijvingen van duplicaten worden in de diagnostiek beschreven als expliciete overschrijvingen, maar genereren nog steeds een waarschuwing, zodat verouderde forks en onbedoelde overschaduwingen zichtbaar blijven.
Vereisten voor JSON Schema
- Elke plugin moet een JSON Schema meeleveren, zelfs als deze geen configuratie accepteert.
- Een leeg schema is toegestaan (bijvoorbeeld
{ "type": "object", "additionalProperties": false }). - Schema's worden gevalideerd wanneer de configuratie wordt gelezen of geschreven, niet tijdens runtime.
- Wanneer je een gebundelde plugin uitbreidt of forkt met nieuwe configuratiesleutels, moet je tegelijkertijd de
configSchemainopenclaw.plugin.jsonvan die plugin bijwerken. Schema's van gebundelde plugins zijn strikt. Als je dusplugins.entries.<id>.config.myNewKeyaan de gebruikersconfiguratie toevoegt zondermyNewKeyaanconfigSchema.propertiestoe te voegen, wordt de configuratie afgewezen voordat de runtime van de plugin wordt geladen.
Voorbeeld van een schema-uitbreiding:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}Validatiegedrag
- Onbekende
channels.*-sleutels zijn fouten, tenzij de kanaal-id in een pluginmanifest is gedeclareerd. Als dezelfde id ook voorkomt inplugins.allow,plugins.entriesofplugins.installs(een plugin waarnaar wordt verwezen, maar die momenteel niet kan worden gevonden), verlaagt OpenClaw dit in plaats daarvan tot een waarschuwing. - Verwijzingen naar onbekende plugin-id's in
plugins.entries.<id>,plugins.allowenplugins.denyzijn waarschuwingen ("verouderde configuratievermelding genegeerd"), geen fouten, zodat upgrades en verwijderde of hernoemde plugins het opstarten van de Gateway niet blokkeren. - Een verwijzing naar een onbekende plugin-id in
plugins.slots.memoryis een fout, behalve voor de bekende officiële externe pluginmemory-lancedb, waarvoor in plaats daarvan een waarschuwing wordt gegeven. - Als een plugin is geïnstalleerd, maar een defect of ontbrekend manifest of schema heeft, mislukt de validatie en rapporteert Doctor de pluginfout.
- Als er pluginconfiguratie bestaat, maar de plugin uitgeschakeld is, blijft de configuratie behouden en wordt er een waarschuwing weergegeven in Doctor en de logboeken.
Zie Configuratiereferentie voor het volledige plugins.*-schema.
Opmerkingen
- Het manifest is vereist voor native OpenClaw-plugins, inclusief plugins die vanuit het lokale bestandssysteem worden geladen. De runtime laadt de pluginmodule nog steeds afzonderlijk; het manifest dient alleen voor detectie en validatie.
- Native manifesten worden met JSON5 geparseerd, waardoor opmerkingen, afsluitende komma's en sleutels zonder aanhalingstekens zijn toegestaan, zolang de uiteindelijke waarde nog steeds een object is.
- Alleen gedocumenteerde manifestvelden worden door de manifestlader gelezen. Vermijd aangepaste sleutels op het hoogste niveau.
channels,providers,cliBackendsenskillskunnen allemaal worden weggelaten wanneer een plugin deze niet nodig heeft.providerCatalogEntrymoet lichtgewicht blijven en mag geen omvangrijke runtimecode importeren; gebruik dit voor statische metagegevens van de providercatalogus of beperkte detectiedescriptors, niet voor uitvoering tijdens aanvragen.- Exclusieve plugintypen worden geselecteerd via
plugins.slots.*:kind: "memory"viaplugins.slots.memory(standaardmemory-core) enkind: "context-engine"viaplugins.slots.contextEngine(standaardlegacy). - Declareer het exclusieve plugintype in dit manifest.
OpenClawPluginDefinition.kindvan het runtime-ingangspunt is verouderd en blijft alleen bestaan als compatibiliteitsterugval voor oudere plugins. - Metagegevens voor omgevingsvariabelen (
setup.providers[].envVars, het verouderdeproviderAuthEnvVarsenchannelEnvVars) zijn uitsluitend declaratief. Status, controle, validatie van Cron-bezorging en andere alleen-lezen oppervlakken passen nog steeds het pluginvertrouwen en het effectieve activeringsbeleid toe voordat een omgevingsvariabele als geconfigureerd wordt beschouwd. - Zie Runtimehooks voor providers voor runtime-metagegevens van de wizard waarvoor providercode nodig is.
- Als je plugin afhankelijk is van native modules, documenteer dan de bouwstappen en eventuele vereisten voor de toelatingslijst van de pakketbeheerder (bijvoorbeeld pnpm
allow-build-scripts+pnpm rebuild <package>).