defineToolPlugin wanneer de
plugin een vaste lijst met tools bezit en je wilt dat OpenClaw de manifestmetadata genereert
die die tools vindbaar houdt zonder runtimecode te laden.
De aanbevolen flow is:
- Scaffold een pakket met
openclaw plugins init. - Schrijf tools met
defineToolPlugin. - Bouw JavaScript.
- Genereer metadata voor
openclaw.plugin.jsonenpackage.jsonmetopenclaw plugins build. - Valideer de gegenereerde metadata voordat je publiceert of installeert.
Vereisten
- Node >= 22.
- TypeScript ESM-pakketuitvoer.
typeboxvoor configuratie- en toolparameterschema’s.openclaw >=2026.5.17, de eerste OpenClaw-versie dieopenclaw/plugin-sdk/tool-pluginexporteert.- Een pakketroot die
dist/,openclaw.plugin.jsonenpackage.jsonkan leveren.
typebox tijdens runtime, dus houd typebox in
dependencies, niet alleen in devDependencies.
Snelstart
Maak een nieuw pluginpakket:src/index.ts: eendefineToolPlugin-entry met eenecho-tool.src/index.test.ts: een kleine metadatatest.tsconfig.json: NodeNext TypeScript-uitvoer naardist/.package.json: scripts, runtimeafhankelijkheden enopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: gegenereerde manifestmetadata voor de eerste tool.
Een tool schrijven
defineToolPlugin neemt pluginidentiteit, een optioneel configuratieschema en een
statische lijst met tools. Parameter- en configuratietypen worden afgeleid uit TypeBox-
schema’s.
Optionele tools en factory-tools
Steloptional: true in wanneer gebruikers de tool expliciet moeten allowlisten voordat deze
naar een model wordt gestuurd:
openclaw plugins build schrijft de bijpassende toolMetadata.<tool>.optional-
manifestentry, zodat OpenClaw de tool kan ontdekken zonder pluginruntimecode te laden.
Gebruik factory wanneer een tool de runtime-toolcontext nodig heeft voordat deze kan worden
gemaakt. De factory houdt metadata statisch terwijl de tool zich kan afmelden voor een
specifieke run, sandboxstatus kan inspecteren of runtimehelpers kan binden.
definePluginEntry rechtstreeks wanneer
de plugin toolnamen dynamisch berekent of tools combineert met hooks,
services, providers, commando’s of andere runtime-oppervlakken.
Retourwaarden
defineToolPlugin verpakt gewone retourwaarden in de toolresultaatindeling van OpenClaw:
- Retourneer een string wanneer het model exact die tekst moet zien.
- Retourneer een JSON-compatibele waarde wanneer je wilt dat het model geformatteerde JSON ziet
en OpenClaw de oorspronkelijke waarde in
detailsbewaart.
AgentToolResult moet retourneren of een
bestaande api.registerTool-implementatie moet hergebruiken. Gebruik definePluginEntry in plaats
van defineToolPlugin wanneer je volledig dynamische tools of gemengde plugin-
capabilities nodig hebt.
Configuratie
configSchema is optioneel. Als je het weglaat, gebruikt OpenClaw een strikt leeg object-
schema en bevat het gegenereerde manifest nog steeds configSchema.
configSchema opneemt, wordt het tweede execute-argument getypeerd vanuit het
schema:
Gegenereerde metadata
OpenClaw ontdekt geïnstalleerde plugins via koude metadata. Het moet het pluginmanifest kunnen lezen voordat pluginruntimecode wordt geïmporteerd.defineToolPlugin
stelt daarom statische metadata beschikbaar, en openclaw plugins build schrijft die
metadata naar het pakket.
Voer de generator uit nadat je plugin-id, naam, beschrijving, configuratieschema,
activering of toolnamen hebt gewijzigd:
contracts.tools is het belangrijke discovery-contract. Het vertelt OpenClaw welke
plugin elke tool bezit zonder elke geïnstalleerde pluginruntime te laden. Als het
manifest verouderd is, ontbreekt de tool mogelijk in discovery of kan de verkeerde plugin
de schuld krijgen van een registratiefout.
Pakketmetadata
Voor de eenvoudige toolplugin-workflow lijntopenclaw plugins build
package.json uit met de geselecteerde enkele runtime-entry:
./dist/index.js voor geïnstalleerde pakketten. Source-
entries zijn nuttig bij workspace-ontwikkeling, maar gepubliceerde pakketten mogen niet
afhankelijk zijn van TypeScript-runtime-laden.
Valideren in CI
Gebruikplugins build --check om CI te laten falen wanneer gegenereerde metadata verouderd is zonder
bestanden te herschrijven:
plugins validate controleert dat:
openclaw.plugin.jsonbestaat en door de normale manifestloader komt.- De huidige entry
defineToolPlugin-metadata exporteert. - Gegenereerde manifestvelden overeenkomen met de entrymetadata.
contracts.toolsovereenkomt met de gedeclareerde toolnamen.package.jsonopenclaw.extensionsnaar de geselecteerde runtime-entry laat wijzen.
Lokaal installeren en inspecteren
Installeer het pakketpad vanuit een aparte OpenClaw-checkout of geïnstalleerde CLI:Publiceren
Publiceer via ClawHub wanneer het pakket klaar is:Problemen oplossen
plugin entry not found: ./dist/index.js
Het geselecteerde entrybestand bestaat niet. Voer npm run build uit en voer daarna opnieuw
openclaw plugins build --entry ./dist/index.js of
openclaw plugins validate --entry ./dist/index.js uit.
plugin entry does not expose defineToolPlugin metadata
De entry exporteerde geen waarde die door defineToolPlugin is gemaakt. Controleer of de
standaardexport van de module het resultaat van defineToolPlugin(...) is, of geef de juiste
entry door met --entry.
openclaw.plugin.json generated metadata is stale
Het manifest komt niet langer overeen met de entrymetadata. Voer uit:
openclaw.plugin.json als in package.json.
package.json openclaw.extensions must include ./dist/index.js
De pakketmetadata wijst naar een andere runtime-entry. Voer
openclaw plugins build --entry ./dist/index.js uit zodat de generator de
pakketmetadata uitlijnt met de entry die je wilt leveren.
Cannot find package 'typebox'
De gebouwde plugin importeert typebox tijdens runtime. Houd typebox in
dependencies, installeer pakketafhankelijkheden opnieuw, bouw opnieuw en voer validatie opnieuw uit.
Tool verschijnt niet na installatie
Controleer deze in volgorde:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonheeftcontracts.toolsmet de verwachte toolnamen.package.jsonheeftopenclaw.extensions: ["./dist/index.js"].- De Gateway is herstart of opnieuw geladen na installatie van de plugin.