defineToolPlugin bouwt een Plugin die alleen door agents aanroepbare tools toevoegt: geen
kanaal, modelprovider, hook, service of setupbackend. Hiermee worden de
manifestmetadata gegenereerd die OpenClaw nodig heeft om tools te ontdekken zonder de
runtimecode van de Plugin te laden.
Begin voor plugins voor providers, kanalen, hooks, services of gemengde mogelijkheden in plaats daarvan met
Plugins bouwen, Kanaalplugins
of Providerplugins.
Vereisten
- Node 22.22.3+, Node 24.15+ of Node 25.9+.
- TypeScript ESM-pakketuitvoer.
typeboxindependencies(niet alleendevDependencies— de gegenereerde Plugin importeert dit tijdens runtime).openclaw >=2026.5.17, de eerste versie dieopenclaw/plugin-sdk/tool-pluginexporteert.- Een pakketroot die
dist/,openclaw.plugin.jsonenpackage.jsonbevat.
Snelstart
plugins init maakt de volgende basisstructuur:
npm run plugin:build voert npm run build (tsc) uit en daarna
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
bouwt opnieuw en voert openclaw plugins validate --entry ./dist/index.js uit.
Bij een geslaagde validatie verschijnt:
openclaw plugins init <id>:
Een tool schrijven
defineToolPlugin accepteert de identiteit van de Plugin, een optioneel configuratieschema en een
statische lijst met tools. Parameter- en configuratietypen worden afgeleid uit de
TypeBox-schema’s.
Optionele tools en factory-tools
Steloptional: true in wanneer gebruikers de tool expliciet aan de toelatingslijst moeten toevoegen voordat deze
naar een model wordt verzonden. openclaw plugins build schrijft de bijbehorende
toolMetadata.<tool>.optional-manifestvermelding, zodat OpenClaw kan zien dat de
tool optioneel is zonder de runtimecode van de Plugin te laden.
factory wanneer een tool de runtime-toolcontext nodig heeft voordat deze kan worden
gemaakt, bijvoorbeeld om zich voor een specifieke uitvoering af te melden, de sandboxstatus te inspecteren of
runtimehelpers te koppelen. De metadata blijven statisch, ook al wordt de concrete tool
tijdens runtime gebouwd.
definePluginEntry
rechtstreeks wanneer de Plugin toolnamen dynamisch berekent of tools combineert
met hooks, services, providers of opdrachten.
Retourwaarden
defineToolPlugin verpakt gewone retourwaarden in de OpenClaw-indeling
voor toolresultaten:
- Retourneer een tekenreeks 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 nodig hebt of een
bestaande api.registerTool-implementatie wilt hergebruiken.
Uitvoercontracten
VoegoutputSchema toe wanneer een tool stabiele JSON-compatibele gegevens retourneert. Dit beschrijft
de oorspronkelijke waarde die in AgentToolResult.details wordt opgeslagen, niet de geformatteerde tekst
in content:
details-waarde na toolhooks, voordat deze via de bridge wordt geretourneerd.
Met een ongeldig schema kan de tool niet worden uitgevoerd; als het resultaat niet overeenkomt, mislukt de voltooide
aanroep. Neem elke resultaatvariant op die geen uitzondering genereert, inclusief gestructureerde
foutvarianten, of laat het schema weg wanneer het resultaat niet stabiel is. Plaats geen geheimen
of gevoelige waarden in schemabeschrijvingen, omdat vertrouwde uitvoermetadata
zichtbaar kunnen worden voor het model.
Gebruik { additionalProperties: false } op objectlagen wanneer je een volledige,
compacte uitvoerhint wilt; open of afgekorte schema’s blijven beschikbaar via
tools.describe(...), maar worden niet als volledige snelindexcontracten aangeboden.
Factory-tools declareren outputSchema op de concrete AnyAgentTool die ze
retourneren. De statische tool({ factory })-declaratie accepteert geen afzonderlijk
uitvoerschema, omdat dit van de runtimetool zou kunnen afwijken.
Configuratie
configSchema is optioneel. Laat dit weg en OpenClaw past een strikt schema voor een leeg object
toe; het gegenereerde manifest bevat nog steeds configSchema.
configSchema wordt het tweede execute-argument daaruit getypeerd:
Gegenereerde metadata
OpenClaw moet het Pluginmanifest lezen voordat de runtimecode van de Plugin wordt geïmporteerd.defineToolPlugin stelt hiervoor statische metadata beschikbaar en
openclaw plugins build schrijft deze naar het pakket. Voer de generator opnieuw uit nadat
de Plugin-id, naam, beschrijving, het configuratieschema, de activering of toolnamen zijn
gewijzigd:
contracts.tools is het belangrijke ontdekkingscontract: dit vertelt OpenClaw welke
Plugin eigenaar is van elke tool, zonder de runtime van elke geïnstalleerde Plugin te laden. Een
verouderd manifest betekent dat een tool bij de ontdekking kan ontbreken, of dat een registratiefout
aan de verkeerde Plugin wordt toegeschreven.
Pakketmetadata
openclaw plugins build stemt ook package.json af op de geselecteerde
runtime-ingang:
./dist/index.js), niet een TypeScript-broningang.
Broningangen werken alleen voor werkruimte-lokale ontwikkeling.
Valideren in CI
plugins build --check mislukt zonder bestanden te herschrijven wanneer gegenereerde metadata
verouderd zijn:
@deprecated,
die editors als migratiewaarschuwingen tonen. Schakel een typebewuste regel in om ze in CI af te dwingen, zoals
@typescript-eslint/no-deprecated.
Oxlint is niet typebewust en kan deze annotaties daarom niet afdwingen. De gegenereerde
plugins init-basisstructuur voegt daarom geen lintconfiguratie voor afschrijvingen toe.
plugins validate controleert of:
openclaw.plugin.jsonbestaat en doorstaat de normale manifestlader.- De huidige entry exporteert
defineToolPlugin-metadata. - Gegenereerde manifestvelden komen overeen met de entrymetadata.
contracts.toolskomt overeen met de gedeclareerde toolnamen.package.jsonwijstopenclaw.extensionsnaar de geselecteerde runtime-entry.
Lokaal installeren en inspecteren
Installeer vanuit een afzonderlijke OpenClaw-checkout of geïnstalleerde CLI het pakketpad:Publiceren
Publiceer via ClawHub zodra het pakket gereed is.clawhub package publish
accepteert een bron: een lokale map, een GitHub-repository (owner/repo[@ref]) of een
tarball-URL.
Probleemoplossing
plugin entry not found: ./dist/index.js
Het geselecteerde entrybestand bestaat niet. Voer npm run build uit en voer daarna
openclaw plugins build --entry ./dist/index.js of
openclaw plugins validate --entry ./dist/index.js opnieuw 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 met
--entry de juiste entry door.
openclaw.plugin.json generated metadata is stale
Het manifest komt niet meer overeen met de entrymetadata. Voer uit:
openclaw.plugin.json als aan package.json.
package.json openclaw.extensions must include ./dist/index.js
De pakketmetadata verwijst naar een andere runtime-entry. Voer
openclaw plugins build --entry ./dist/index.js uit, zodat de generator de
pakketmetadata afstemt op de entry die je wilt uitbrengen.
Cannot find package 'typebox'
De gebouwde Plugin importeert tijdens runtime typebox. Behoud dit in dependencies,
installeer opnieuw, bouw opnieuw en voer de validatie opnieuw uit.
Tool verschijnt niet na installatie
Controleer het volgende in deze volgorde:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonbevatcontracts.toolsmet de verwachte toolnamen.package.jsonbevatopenclaw.extensions: ["./dist/index.js"].- De Gateway is na de installatie van de Plugin opnieuw gestart of herladen.