De Plugin-SDK is het getypeerde contract tussen plugins en core. Deze pagina is de referentie voor wat je moet importeren en wat je kunt registreren.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Importconventie
Importeer altijd vanuit een specifiek subpad:openclaw/plugin-sdk/channel-core; houd
openclaw/plugin-sdk/core voor de bredere overkoepelende surface en gedeelde
helpers zoals buildChannelConfigSchema.
Publiceer voor kanaalconfiguratie het kanaal-eigen JSON Schema via
openclaw.plugin.json#channelConfigs. Het subpad plugin-sdk/channel-config-schema
is bedoeld voor gedeelde schemaprimitieven en de generieke builder. De
meegeleverde plugins van OpenClaw gebruiken plugin-sdk/bundled-channel-config-schema
voor behouden schema’s van meegeleverde kanalen. Verouderde compatibiliteitsexports
blijven beschikbaar op plugin-sdk/channel-config-schema-legacy; geen van beide
meegeleverde schema-subpaden is een patroon voor nieuwe plugins.
Subpadreferentie
De Plugin-SDK wordt aangeboden als een set smalle subpaden gegroepeerd per gebied (plugin-entry, kanaal, provider, auth, runtime, capability, memory en gereserveerde helpers voor meegeleverde plugins). Zie voor de volledige catalogus, gegroepeerd en gelinkt, Plugin-SDK-subpaden. De gegenereerde lijst met meer dan 200 subpaden staat inscripts/lib/plugin-sdk-entrypoints.json.
Registratie-API
De callbackregister(api) ontvangt een OpenClawPluginApi-object met deze
methoden:
Capability-registratie
| Methode | Wat dit registreert |
|---|---|
api.registerProvider(...) | Tekstinferentie (LLM) |
api.registerAgentHarness(...) | Experimentele low-level agentexecutor |
api.registerCliBackend(...) | Lokale CLI-inferentiebackend |
api.registerChannel(...) | Berichtenkanaal |
api.registerSpeechProvider(...) | Tekst-naar-spraak- / STT-synthese |
api.registerRealtimeTranscriptionProvider(...) | Streaming realtime transcriptie |
api.registerRealtimeVoiceProvider(...) | Duplex realtime spraaksessies |
api.registerMediaUnderstandingProvider(...) | Beeld-/audio-/videoanalyse |
api.registerImageGenerationProvider(...) | Beeldgeneratie |
api.registerMusicGenerationProvider(...) | Muziekgeneratie |
api.registerVideoGenerationProvider(...) | Videogeneratie |
api.registerWebFetchProvider(...) | Provider voor web-fetch/scraping |
api.registerWebSearchProvider(...) | Webzoekfunctie |
Tools en opdrachten
| Methode | Wat dit registreert |
|---|---|
api.registerTool(tool, opts?) | Agenttool (vereist of { optional: true }) |
api.registerCommand(def) | Aangepaste opdracht (omzeilt de LLM) |
agentPromptGuidance instellen wanneer de agent een
korte, opdracht-eigen routinghint nodig heeft. Houd die tekst gericht op de
opdracht zelf; voeg geen provider- of plugin-specifiek beleid toe aan
core-promptbuilders.
Infrastructuur
| Methode | Wat dit registreert |
|---|---|
api.registerHook(events, handler, opts?) | Event-hook |
api.registerHttpRoute(params) | Gateway-HTTP-eindpunt |
api.registerGatewayMethod(name, handler) | Gateway-RPC-methode |
api.registerGatewayDiscoveryService(service) | Lokale Gateway-discoveryadvertiser |
api.registerCli(registrar, opts?) | CLI-subopdracht |
api.registerService(service) | Achtergrondservice |
api.registerInteractiveHandler(registration) | Interactieve handler |
api.registerAgentToolResultMiddleware(...) | Runtime-middleware voor toolresultaten |
api.registerMemoryPromptSupplement(builder) | Additieve geheugengerelateerde promptsectie |
api.registerMemoryCorpusSupplement(adapter) | Additief corpus voor geheugen zoeken/lezen |
Host-hooks voor workflowplugins
Host-hooks zijn de SDK-interfaces voor plugins die moeten deelnemen aan de hostlevenscyclus in plaats van alleen een provider, kanaal of tool toe te voegen. Het zijn generieke contracten; Planmodus kan ze gebruiken, maar dat geldt ook voor goedkeuringsworkflows, werkruimtebeleidsgates, achtergrondmonitors, setupwizards en UI-begeleidingsplugins.| Methode | Contract waarvan dit eigenaar is |
|---|---|
api.registerSessionExtension(...) | Plugin-eigen, JSON-compatibele sessiestatus geprojecteerd via Gateway-sessies |
api.enqueueNextTurnInjection(...) | Persistente exactly-once-context geinjecteerd in de volgende agentbeurt voor een sessie |
api.registerTrustedToolPolicy(...) | Meegeleverd/vertrouwd pre-plugin-toolbeleid dat toolparameters kan blokkeren of herschrijven |
api.registerToolMetadata(...) | Weergavemetadata voor de toolcatalogus zonder de toolimplementatie te wijzigen |
api.registerCommand(...) | Pluginopdrachten met scope; opdrachtresultaten kunnen continueAgent: true instellen |
api.registerControlUiDescriptor(...) | Controle-UI-bijdragedescriptoren voor sessie-, tool-, run- of instellingenoppervlakken |
api.registerRuntimeLifecycle(...) | Opschooncallbacks voor plugin-eigen runtimebronnen op reset-/delete-/reload-paden |
api.registerAgentEventSubscription(...) | Gesaneerde eventabonnementen voor workflowstatus en monitors |
api.setRunContext(...) / getRunContext(...) / clearRunContext(...) | Plugin-scratchstatus per run gewist bij de terminale runlevenscyclus |
api.registerSessionSchedulerJob(...) | Plugin-eigen sessieplanner-jobrecords met deterministische cleanup |
- Externe plugins kunnen eigenaar zijn van sessie-extensies, UI-descriptoren, opdrachten, toolmetadata, next-turn-injecties en normale hooks.
- Vertrouwd toolbeleid draait voor gewone
before_tool_call-hooks en is alleen voor meegeleverde plugins, omdat het deelneemt aan het veiligheidsbeleid van de host. - Gereserveerd opdrachteigendom is alleen voor meegeleverde plugins. Externe plugins moeten hun eigen opdrachtnamen of aliassen gebruiken.
allowPromptInjection=falseschakelt promptwijzigende hooks uit, waaronderagent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, promptvelden uit legacybefore_agent_startenenqueueNextTurnInjection.
| Pluginarchetype | Gebruikte hooks |
|---|---|
| Goedkeuringsworkflow | Sessie-extensie, opdrachtcontinuatie, next-turn-injectie, UI-descriptor |
| Budget-/werkruimtebeleidsgate | Vertrouwd toolbeleid, toolmetadata, sessieprojectie |
| Achtergrondmonitor voor levenscyclus | Runtimelevenscyclus-cleanup, agent-eventabonnement, eigendom/cleanup van sessieplanner, Heartbeat-promptbijdrage, UI-descriptor |
| Setup- of onboardingwizard | Sessie-extensie, opdrachten met scope, Controle-UI-descriptor |
Gereserveerde core-beheerdersnaamruimten (
config.*, exec.approvals.*, wizard.*,
update.*) blijven altijd operator.admin, zelfs als een plugin een
smallere Gateway-methodescope probeert toe te wijzen. Geef de voorkeur aan
plugin-specifieke prefixen voor plugin-eigen methoden.Wanneer toolresultaat-middleware te gebruiken
Wanneer toolresultaat-middleware te gebruiken
Meegeleverde plugins kunnen
api.registerAgentToolResultMiddleware(...)
gebruiken wanneer ze een toolresultaat na uitvoering en voordat de runtime
dat resultaat terug aan het model geeft moeten herschrijven. Dit is de
vertrouwde runtime-neutrale interface voor async outputreducers zoals
tokenjuice.Meegeleverde plugins moeten contracts.agentToolResultMiddleware declareren
voor elke gerichte runtime, bijvoorbeeld ["pi", "codex"]. Externe plugins
kunnen deze middleware niet registreren; gebruik normale OpenClaw plugin-hooks
voor werk dat geen pre-model timing voor toolresultaten nodig heeft. Het oude,
alleen voor Pi bedoelde ingebedde registratiepad voor de extensiefactory is
verwijderd.Gateway-discoveryregistratie
api.registerGatewayDiscoveryService(...) laat een plugin de actieve Gateway
adverteren op een lokaal discoverytransport zoals mDNS/Bonjour. OpenClaw roept
de service aan tijdens het opstarten van de Gateway wanneer lokale discovery is
ingeschakeld, geeft de huidige Gateway-poorten en niet-geheime TXT-hintgegevens
door, en roept de geretourneerde stop-handler aan tijdens het afsluiten van de
Gateway.
CLI-registratiemetadata
api.registerCli(registrar, opts?) accepteert twee soorten metadata op topniveau:
commands: expliciete commandoroots die eigendom zijn van de registrardescriptors: commandodescriptors voor parsetijd die worden gebruikt voor root-CLI-hulp, routering en luie CLI-registratie van plugins
descriptors op die elke commandoroot op het hoogste niveau dekken die door die
registrar wordt blootgesteld.
commands op zichzelf alleen wanneer je geen luie root-CLI-registratie nodig hebt.
Dat gretige compatibiliteitspad blijft ondersteund, maar het installeert geen
door descriptors ondersteunde placeholders voor lui laden tijdens parsetijd.
CLI-backendregistratie
Metapi.registerCliBackend(...) kan een Plugin eigenaar zijn van de standaardconfiguratie voor een lokale
AI-CLI-backend zoals codex-cli.
- De backend-
idwordt het providerprefix in modelreferenties zoalscodex-cli/gpt-5. - De backend-
configgebruikt dezelfde vorm alsagents.defaults.cliBackends.<id>. - Gebruikersconfiguratie wint nog steeds. OpenClaw voegt
agents.defaults.cliBackends.<id>samen boven op de pluginstandaard voordat de CLI wordt uitgevoerd. - Gebruik
normalizeConfigwanneer een backend compatibiliteitsherschrijvingen nodig heeft na het samenvoegen (bijvoorbeeld het normaliseren van oude flag-vormen).
Exclusieve slots
| Methode | Wat het registreert |
|---|---|
api.registerContextEngine(id, factory) | Context-engine (één tegelijk actief). De callback assemble() ontvangt availableTools en citationsMode, zodat de engine prompttoevoegingen kan aanpassen. |
api.registerMemoryCapability(capability) | Geünificeerde geheugencapaciteit |
api.registerMemoryPromptSection(builder) | Builder voor geheugenpromptsectie |
api.registerMemoryFlushPlan(resolver) | Resolver voor geheugenflushplan |
api.registerMemoryRuntime(runtime) | Runtime-adapter voor geheugen |
Adapters voor geheugenembeddings
| Methode | Wat het registreert |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | Geheugenembeddingadapter voor de actieve Plugin |
registerMemoryCapabilityis de voorkeurs-API voor exclusieve geheugenplugins.registerMemoryCapabilitykan ookpublicArtifacts.listArtifacts(...)blootstellen, zodat begeleidende plugins geëxporteerde geheugenartefacten kunnen gebruiken viaopenclaw/plugin-sdk/memory-host-corein plaats van in de privélay-out van een specifieke geheugenplugin te grijpen.registerMemoryPromptSection,registerMemoryFlushPlanenregisterMemoryRuntimezijn legacy-compatibele API’s voor exclusieve geheugenplugins.MemoryFlushPlan.modelkan de flushbeurt vastzetten op een exacteprovider/model- referentie, zoalsollama/qwen3:8b, zonder de actieve fallbackketen te erven.- Met
registerMemoryEmbeddingProviderkan de actieve geheugenplugin een of meer embeddingadapter-id’s registreren (bijvoorbeeldopenai,geminiof een aangepaste door de plugin gedefinieerde id). - Gebruikersconfiguratie zoals
agents.defaults.memorySearch.providerenagents.defaults.memorySearch.fallbackwordt opgelost tegen die geregistreerde adapter-id’s.
Gebeurtenissen en levenscyclus
| Methode | Wat het doet |
|---|---|
api.on(hookName, handler, opts?) | Getypte lifecycle-hook |
api.onConversationBindingResolved(handler) | Callback voor gespreksbinding |
Semantiek van hookbeslissingen
before_tool_call: het retourneren van{ block: true }is terminaal. Zodra een handler dit instelt, worden handlers met lagere prioriteit overgeslagen.before_tool_call: het retourneren van{ block: false }wordt behandeld als geen beslissing (hetzelfde alsblockweglaten), niet als een override.before_install: het retourneren van{ block: true }is terminaal. Zodra een handler dit instelt, worden handlers met lagere prioriteit overgeslagen.before_install: het retourneren van{ block: false }wordt behandeld als geen beslissing (hetzelfde alsblockweglaten), niet als een override.reply_dispatch: het retourneren van{ handled: true, ... }is terminaal. Zodra een handler de dispatch claimt, worden handlers met lagere prioriteit en het standaardpad voor modeldispatch overgeslagen.message_sending: het retourneren van{ cancel: true }is terminaal. Zodra een handler dit instelt, worden handlers met lagere prioriteit overgeslagen.message_sending: het retourneren van{ cancel: false }wordt behandeld als geen beslissing (hetzelfde alscancelweglaten), niet als een override.message_received: gebruik het getypte veldthreadIdwanneer je routering van inkomende threads/onderwerpen nodig hebt. Bewaarmetadatavoor kanaalspecifieke extra’s.message_sending: gebruik getypte routeringsveldenreplyToId/threadIdvoordat je terugvalt op kanaalspecifiekemetadata.gateway_start: gebruikctx.config,ctx.workspaceDirenctx.getCron?.()voor door de gateway beheerde opstartstatus in plaats van te vertrouwen op internegateway:startup-hooks.cron_changed: observeer door de Gateway beheerde wijzigingen in de Cron-levenscyclus. Gebruikevent.job?.state?.nextRunAtMsenctx.getCron?.()bij het synchroniseren van externe wekschedulers, en behoud OpenClaw als de bron van waarheid voor vervalcontroles en uitvoering.
API-objectvelden
| Veld | Type | Beschrijving |
|---|---|---|
api.id | string | Plugin-id |
api.name | string | Weergavenaam |
api.version | string? | Plugin-versie (optioneel) |
api.description | string? | Plugin-beschrijving (optioneel) |
api.source | string | Bronpad van Plugin |
api.rootDir | string? | Rootdirectory van Plugin (optioneel) |
api.config | OpenClawConfig | Huidige configuratiesnapshot (actieve runtime-snapshot in geheugen wanneer beschikbaar) |
api.pluginConfig | Record<string, unknown> | Plugin-specifieke configuratie uit plugins.entries.<id>.config |
api.runtime | PluginRuntime | Runtime-helpers |
api.logger | PluginLogger | Gescopeerde logger (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | Huidige laadmodus; "setup-runtime" is het lichte opstart-/setupvenster vóór volledige invoer |
api.resolvePath(input) | (string) => string | Los pad op relatief aan pluginroot |
Interne moduleconventie
Gebruik binnen je Plugin lokale barrelbestanden voor interne imports:api.ts, runtime-api.ts,
index.ts, setup-entry.ts en vergelijkbare openbare entrybestanden) geven de voorkeur aan de
actieve runtime-configuratiesnapshot wanneer OpenClaw al draait. Als er nog geen runtime-
snapshot bestaat, vallen ze terug op het opgeloste configuratiebestand op schijf.
Verpakte gebundelde pluginfacades moeten worden geladen via de OpenClaw SDK-
facadeladers; directe imports uit dist/extensions/... omzeilen gefaseerde runtime-
spiegels van afhankelijkheden die verpakte installaties gebruiken voor plugin-eigen afhankelijkheden.
Providerplugins kunnen een smalle pluginlokale contractbarrel blootstellen wanneer een
helper bewust providerspecifiek is en nog niet thuishoort in een generiek SDK-
subpad. Gebundelde voorbeelden:
- Anthropic: openbare
api.ts/contract-api.ts-seam voor Claude- helpers voor beta-header enservice_tier-streams. @openclaw/openai-provider:api.tsexporteert providerbuilders, helpers voor standaardmodellen en realtime providerbuilders.@openclaw/openrouter-provider:api.tsexporteert de providerbuilder plus onboarding-/configuratiehelpers.
Gerelateerd
Entry points
Opties voor
definePluginEntry en defineChannelPluginEntry.Runtime-helpers
Volledige referentie voor de namespace
api.runtime.Setup en configuratie
Packaging, manifests en configuratieschema’s.
Testen
Testhulpprogramma’s en lintregels.
SDK-migratie
Migreren vanaf verouderde oppervlakken.
Interne Plugin-details
Diepe architectuur en capaciteitsmodel.