Nieuw met OpenClaw-plugins? Lees eerst Aan de slag
voor de pakketstructuur en het instellen van het manifest.
Stapsgewijze uitleg
1
Pakket en manifest
Stap 1: Pakket en manifest
setup.providers[].envVars kan OpenClaw aanmeldgegevens detecteren zonder
de runtime van je Plugin te laden. Voeg providerAuthAliases toe wanneer een providervariant
de authenticatie van een andere provider-id moet hergebruiken. modelSupport is
optioneel en laat OpenClaw je providerplugin automatisch laden op basis van verkorte
model-id’s zoals acme-large, voordat runtimehooks bestaan. openclaw.compat
en openclaw.build in package.json zijn vereist voor publicatie op ClawHub
(openclaw.compat.pluginApi en openclaw.build.openclawVersion
zijn de twee vereiste velden; minGatewayVersion valt terug op
openclaw.install.minHostVersion wanneer het wordt weggelaten).2
De provider registreren
Een minimale tekstprovider heeft een Gebruik Gebruik
id, label, auth en catalog nodig.
catalog is de runtime-/configuratiehook die eigendom is van de provider; deze kan live
leveranciers-API’s aanroepen en retourneert models.providers-items.index.ts
registerModelCatalogProvider is het nieuwere catalogusoppervlak van het besturingsvlak
voor de gebruikersinterface voor lijsten, hulp en selectie, met ondersteuning voor rijen van text, voice, image_generation,
video_generation en music_generation. Houd aanroepen naar leverancierseindpunten
en het toewijzen van antwoorden in de Plugin; OpenClaw beheert de gedeelde rijstructuur,
bronlabels en de weergave van hulp.Dit is een werkende provider. Gebruikers kunnen nu
openclaw onboard --acme-ai-api-key <key> uitvoeren en
acme-ai/acme-large als model selecteren.Live modeldetectie
Als je provider een OpenAI-compatibele/models-API aanbiedt, meld je de
helper voor één provider aan voor gedeelde detectie:liveModelDiscovery: true is een openbaar Plugin SDK-contract met het volgende
gedrag:Geef voor een niet-Bearer- of niet-standaard lijsteindpunt opties door in plaats van
true:endpointUrl niet als onvoorwaardelijke alternatieve host. De
requireBaseUrl-controle ervan vormt de grens voor het isoleren van aanmeldgegevens voor providers
waarvan de host voor de modellenlijst verschilt van de host voor inferentie.Als de provider aangepaste modelsemantiek nodig heeft in plaats van de conservatieve
OpenAI-compatibele projectie, houd die projectie dan in de Plugin en gebruik
openclaw/plugin-sdk/provider-catalog-live-runtime voor de gedeelde ophaallevenscyclus.
De helper biedt beveiligde HTTP-ophaalbewerkingen, provider-authenticatieheaders,
gestructureerde HTTP-fouten, TTL-caching en statisch terugvalgedrag zonder
providerbeleid in de OpenClaw-core te plaatsen.Gebruik buildLiveModelProviderConfig wanneer de live-API je alleen vertelt welke
statische catalogusrijen die eigendom zijn van de provider momenteel beschikbaar zijn:index.ts
getCachedLiveProviderModelRows wanneer de provider-API uitgebreidere
metadata retourneert en de plugin de rijen zelf naar OpenClaw-modeldefinities
moet omzetten:index.ts
run moet door authenticatie afgeschermd blijven en null retourneren wanneer er geen bruikbare aanmeldgegevens
beschikbaar zijn. Zorg voor een offline staticRun of statische terugvaloptie, zodat installatie, documentatie,
tests en selectie-interfaces niet afhankelijk zijn van live netwerktoegang. Gebruik een TTL
die geschikt is voor de actualiteit van de modellenlijst, vermijd het pollen van het bestandssysteem tijdens verzoeken
en geef alleen een providerspecifieke readRows / readModelId door wanneer het
upstream-antwoord geen OpenAI-compatibele { data: [{ id, object }] }-vorm
heeft.Als de upstream-provider andere besturingstokens gebruikt dan OpenClaw, voeg dan een
kleine bidirectionele teksttransformatie toe in plaats van het streampad te vervangen:input herschrijft de uiteindelijke systeemprompt en de inhoud van tekstberichten vóór
het transport. output herschrijft tekstincrementen van de assistent en de uiteindelijke tekst voordat
OpenClaw zijn eigen besturingsmarkeringen verwerkt of deze via een kanaal aflevert.Geef voor gebundelde providers die slechts één tekstprovider met API-sleutelauthenticatie
plus één runtime op basis van een catalogus registreren de voorkeur aan de specifiekere
helper defineSingleProviderPluginEntry(...):buildProvider is het live cataloguspad dat wordt gebruikt wanneer OpenClaw echte
providerauthenticatie kan achterhalen. Het mag providerspecifieke detectie uitvoeren. Gebruik
buildStaticProvider alleen voor offline rijen die veilig kunnen worden weergegeven voordat authenticatie
is geconfigureerd; hiervoor mogen geen aanmeldgegevens of netwerkverzoeken nodig zijn.
De models list --all-weergave van OpenClaw voert statische catalogi momenteel
alleen uit voor gebundelde providerplugins, met een lege configuratie, een lege omgeving en zonder
agent-/werkruimtepaden.Als je authenticatiestroom tijdens de onboarding ook models.providers.*, aliassen en
het standaardmodel van de agent moet aanpassen, gebruik dan de vooraf ingestelde helpers uit
openclaw/plugin-sdk/provider-onboard. De specifiekste helpers zijn
createDefaultModelPresetAppliers(...),
createDefaultModelsPresetAppliers(...) en
createModelCatalogPresetAppliers(...).Wanneer het native eindpunt van een provider gestreamde gebruiksblokken via het
normale openai-completions-transport ondersteunt, geef dan de voorkeur aan de gedeelde catalogushelpers in
openclaw/plugin-sdk/provider-catalog-shared in plaats van controles
op provider-ID’s hard te coderen. supportsNativeStreamingUsageCompat(...) en
applyProviderNativeStreamingUsageCompat(...) detecteren ondersteuning aan de hand van de
mogelijkhedenkaart van het eindpunt, zodat native eindpunten in Moonshot-/DashScope-stijl zich nog steeds
aanmelden, zelfs wanneer een plugin een aangepaste provider-ID gebruikt.De bovenstaande voorbeelden voor live detectie behandelen provider-API’s in /models-stijl. Houd
die detectie binnen catalog.run, afgeschermd op basis van bruikbare authenticatie, en zorg dat
staticRun netwerkvrij blijft voor het genereren van offline catalogi.3
Dynamische modelresolutie toevoegen
Als je provider willekeurige model-ID’s accepteert (zoals een proxy of router),
voeg dan Als voor de resolutie een netwerkoproep nodig is, gebruik dan
resolveDynamicModel toe:prepareDynamicModel voor asynchrone
opwarming; resolveDynamicModel wordt opnieuw uitgevoerd nadat deze is voltooid.4
Runtime-hooks toevoegen (indien nodig)
De meeste providers hebben alleen Momenteel beschikbare replayfamilies:
catalog + resolveDynamicModel nodig. Voeg hooks
stapsgewijs toe wanneer je provider ze nodig heeft.Gedeelde helperbouwers ondersteunen nu de meest voorkomende families voor replay-/toolcompatibiliteit,
zodat plugins meestal niet elke hook afzonderlijk handmatig hoeven te koppelen:Momenteel beschikbare streamfamilies:
SDK-koppelvlakken waarop de familiebouwers zijn gebaseerd
SDK-koppelvlakken waarop de familiebouwers zijn gebaseerd
Elke familiebouwer is samengesteld uit openbare helpers op lager niveau die vanuit hetzelfde pakket worden geëxporteerd. Je kunt deze gebruiken wanneer een provider van het algemene patroon moet afwijken:
openclaw/plugin-sdk/provider-model-shared-ProviderReplayFamily,buildProviderReplayFamilyHooks(...)en de onbewerkte replaybouwers (buildOpenAICompatibleReplayPolicy,buildAnthropicReplayPolicyForModel,buildGoogleGeminiReplayPolicy,buildHybridAnthropicOrOpenAIReplayPolicy). Exporteert ook Gemini-replayhelpers (sanitizeGoogleGeminiReplayHistory,resolveTaggedReasoningOutputMode) en helpers voor endpoints/modellen (resolveProviderEndpoint,normalizeProviderId,normalizeGooglePreviewModelId).openclaw/plugin-sdk/provider-stream-ProviderStreamFamily,buildProviderStreamFamilyHooks(...),composeProviderStreamWrappers(...), plus de gedeelde OpenAI/Codex-wrappers (createOpenAIAttributionHeadersWrapper,createOpenAIFastModeWrapper,createOpenAIServiceTierWrapper,createOpenAIResponsesContextManagementWrapper,createCodexNativeWebSearchWrapper), de OpenAI-compatibele DeepSeek V4-wrapper (createDeepSeekV4OpenAICompatibleThinkingWrapper), opschoning van thinking-prefill voor Anthropic Messages (createAnthropicThinkingPrefillPayloadWrapper), compatibiliteit met toolaanroepen in platte tekst (createPlainTextToolCallCompatWrapper) en gedeelde proxy-/providerwrappers (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-stream-shared- lichtgewicht payload- en eventwrappers voor intensief gebruikte providerpaden, waarondercreateOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...)ensetQwenChatTemplateThinking(...).openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai")en onderliggende providerschemahelpers.
native-
reasoning-uitvoer gebruiken, zodat OpenClaw native thought-onderdelen verwerkt zonder
<think>- / <final>-promptinstructies toe te voegen. Gemini CLI-achtige
backends die alleen tekst gebruiken en een definitief JSON-/tekstantwoord parseren, kunnen het gedeelde
getagde google-gemini-contract behouden.Sommige streamhelpers blijven bewust lokaal bij de provider. @openclaw/anthropic-provider houdt wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier en de Anthropic-wrapperbouwers op lager niveau in het eigen openbare api.ts- / contract-api.ts-koppelvlak, omdat deze de afhandeling van Claude OAuth-bèta en context1m-beperking coderen. De xAI-plugin houdt op vergelijkbare wijze de vormgeving van native xAI Responses in de eigen wrapStreamFn (/fast-aliassen, standaard tool_stream, opschoning van niet-ondersteunde strikte tools, xAI-specifieke verwijdering van reasoning-payloads).Hetzelfde patroon voor de pakketroot ligt ook ten grondslag aan @openclaw/openai-provider (providerbouwers, helpers voor standaardmodellen, realtime-providerbouwers) en @openclaw/openrouter-provider (providerbouwer plus helpers voor onboarding/configuratie).- Tokenuitwisseling
- Aangepaste headers
- Native transportidentiteit
- Gebruik en facturering
Voor providers die vóór elke inferentieaanroep een tokenuitwisseling nodig hebben:
Algemene providerhooks
Algemene providerhooks
OpenClaw roept hooks voor model-/providerplugins ongeveer in deze volgorde aan.
De meeste providers gebruiken er slechts 2-3. Dit is niet het volledige
ProviderPlugin-
contract; zie Internals: hooks voor de providerruntime
voor de
volledige, momenteel actuele lijst met hooks en opmerkingen over terugval.
Providervelden die uitsluitend voor compatibiliteit dienen en die OpenClaw niet meer aanroept, zoals
ProviderPlugin.capabilities en suppressBuiltInModel, worden hier niet
vermeld.Opmerkingen over runtimeterugval:
normalizeConfigbepaalt per provider-id één verantwoordelijke plugin (eerst gebundelde providers, daarna de overeenkomende runtimeplugin) en roept alleen die hook aan - er wordt niet in andere providers gezocht. De eigennormalizeConfig-hook van Google normaliseert de configuratie-itemsgoogle/google-vertex/google-antigravity; dit is geen afzonderlijke core-fallback.resolveConfigApiKeygebruikt de providerhook wanneer die beschikbaar is. Amazon Bedrock behoudt de resolutie van AWS-omgevingsmarkeringen in zijn providerplugin; runtime-authenticatie zelf gebruikt nog steeds de standaardketen van de AWS SDK wanneer deze is geconfigureerd metauth: "aws-sdk".resolveThinkingProfile(ctx)ontvangt de geselecteerdeprovider,modelId, de optionele samengevoegde catalogushintreasoningen de optionele samengevoegde modelfeiten vancompat. Gebruikcompatalleen om de denkinterface/het denkprofiel van de provider te selecteren.resolveSystemPromptContributionlaat een provider cachebewuste richtlijnen voor de systeemprompt injecteren voor een modelfamilie. Geef hieraan de voorkeur boven de verouderde pluginbrede hookbefore_prompt_buildwanneer het gedrag bij één provider/modelfamilie hoort en de stabiele/dynamische cachesplitsing moet behouden.
5
Extra mogelijkheden toevoegen (optioneel)
Stap 5: Extra mogelijkheden toevoegen
Een providerplugin kan naast tekstinferentie embeddings, spraak, realtime transcriptie, realtime spraak, mediabegrip, afbeeldingsgeneratie, videogeneratie, webophaling en webzoekopdrachten registreren. OpenClaw classificeert dit als een plugin met hybride mogelijkheden - het aanbevolen patroon voor bedrijfsplugins (één plugin per leverancier). Zie Intern: Eigendom van mogelijkheden.Registreer elke mogelijkheid binnenregister(api) naast je bestaande
aanroep van api.registerProvider(...). Kies alleen de tabbladen die je nodig hebt:- Spraak (TTS)
- Realtime transcriptie
- Realtime spraak
- Mediabegrip
- Embeddings
- Afbeeldings- en videogeneratie
- Webpagina's ophalen en doorzoeken
assertOkOrThrowProviderError(...) voor HTTP-fouten van providers, zodat
plugins begrensde lezingen van foutteksten, verwerking van JSON-fouten en
achtervoegsels met aanvraag-id’s delen.6
Testen
Stap 6: Testen
src/provider.test.ts
Publiceren naar ClawHub
Providerplugins worden op dezelfde manier gepubliceerd als elke andere externe codeplugin:clawhub skill publish <path> is een andere opdracht voor het publiceren van een Skills-map,
niet van een pluginpakket — gebruik deze hier niet.
Bestandsstructuur
Referentie voor catalogusvolgorde
catalog.order bepaalt wanneer je catalogus wordt samengevoegd ten opzichte van ingebouwde
providers:
Volgende stappen
- Kanaalplugins - als je plugin ook een kanaal aanbiedt
- SDK-runtime -
api.runtime-helpers (TTS, zoeken, subagent) - SDK-overzicht - volledige referentie voor import via subpaden
- Interne werking van plugins - details over hooks en gebundelde voorbeelden