defineToolPlugin cria um plugin que adiciona apenas ferramentas que podem ser chamadas pelo agente: sem
canal, provedor de modelo, hook, serviço ou backend de configuração. Ele gera os
metadados de manifesto necessários para que o OpenClaw descubra ferramentas sem carregar o código
de runtime do plugin.
Para plugins de provedor, canal, hook, serviço ou com recursos mistos, comece por
Criação de plugins, Plugins de canal
ou Plugins de provedor.
Requisitos
- Node 22.22.3+, Node 24.15+ ou Node 25.9+.
- Saída de pacote TypeScript ESM.
typeboxemdependencies(não apenasdevDependencies— o plugin gerado o importa durante o runtime).openclaw >=2026.5.17, a primeira versão que exportaopenclaw/plugin-sdk/tool-plugin.- Uma raiz de pacote que distribua
dist/,openclaw.plugin.jsonepackage.json.
Início rápido
plugins init gera a estrutura inicial:
npm run plugin:build executa npm run build (tsc) e depois
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
recompila e executa openclaw plugins validate --entry ./dist/index.js.
Uma validação bem-sucedida exibe:
openclaw plugins init <id>:
Escrever uma ferramenta
defineToolPlugin recebe a identidade do plugin, um esquema de configuração opcional e uma
lista estática de ferramentas. Os tipos de parâmetros e configuração são inferidos dos
esquemas TypeBox.
Ferramentas opcionais e de fábrica
Definaoptional: true quando os usuários precisarem incluir explicitamente a ferramenta na lista de permissões antes que ela
seja enviada a um modelo. openclaw plugins build grava a entrada de manifesto
toolMetadata.<tool>.optional correspondente, para que o OpenClaw possa identificar que a
ferramenta é opcional sem carregar o código de runtime do plugin.
factory quando uma ferramenta precisar do contexto de ferramenta do runtime antes de poder ser
criada — para não participar de uma execução específica, inspecionar o estado do sandbox ou vincular
helpers de runtime. Os metadados permanecem estáticos, embora a ferramenta concreta seja criada
durante o runtime.
definePluginEntry
diretamente quando o plugin calcular nomes de ferramentas dinamicamente ou combinar ferramentas
com hooks, serviços, provedores ou comandos.
Valores de retorno
defineToolPlugin encapsula valores de retorno simples no formato de resultado de ferramenta
do OpenClaw:
- Retorne uma string quando o modelo precisar ver exatamente esse texto.
- Retorne um valor compatível com JSON quando quiser que o modelo veja JSON formatado
e que o OpenClaw mantenha o valor original em
details.
AgentToolResult personalizado ou quiser reutilizar uma
implementação api.registerTool existente.
Configuração
configSchema é opcional. Omita-o e o OpenClaw aplicará um esquema estrito de objeto
vazio; o manifesto gerado ainda incluirá configSchema.
configSchema, o segundo argumento de execute tem seu tipo derivado dele:
Metadados gerados
O OpenClaw precisa ler o manifesto do plugin antes de importar seu código de runtime.defineToolPlugin expõe metadados estáticos para isso, e
openclaw plugins build os grava no pacote. Execute novamente o gerador após
alterar o id, o nome, a descrição, o esquema de configuração, a ativação ou os nomes das ferramentas
do plugin:
contracts.tools é o contrato de descoberta importante: ele informa ao OpenClaw qual
plugin é proprietário de cada ferramenta sem carregar o runtime de todos os plugins instalados. Um
manifesto desatualizado pode fazer uma ferramenta desaparecer da descoberta ou fazer com que um erro de registro
seja atribuído ao plugin errado.
Metadados do pacote
openclaw plugins build também alinha package.json à entrada de runtime
selecionada:
./dist/index.js), não uma entrada de código-fonte TypeScript.
Entradas de código-fonte funcionam apenas no desenvolvimento local no workspace.
Validar na CI
plugins build --check falha sem regravar arquivos quando os metadados gerados
estão desatualizados:
plugins validate verifica se:
openclaw.plugin.jsonexiste e passa pelo carregador normal de manifestos.- A entrada atual exporta os metadados
defineToolPlugin. - Os campos do manifesto gerado correspondem aos metadados da entrada.
contracts.toolscorresponde aos nomes de ferramentas declarados.package.jsonapontaopenclaw.extensionspara a entrada de runtime selecionada.
Instalar e inspecionar localmente
Em outro checkout do OpenClaw ou usando uma CLI instalada, instale o caminho do pacote:Publicar
Publique por meio do ClawHub quando o pacote estiver pronto.clawhub package publish
recebe uma origem: uma pasta local, um repositório do GitHub (owner/repo[@ref]) ou uma
URL de tarball.
Solução de problemas
plugin entry not found: ./dist/index.js
O arquivo de entrada selecionado não existe. Execute npm run build e depois execute novamente
openclaw plugins build --entry ./dist/index.js ou
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
A entrada não exportou um valor criado por defineToolPlugin. Confirme se a
exportação padrão do módulo é o resultado de defineToolPlugin(...) ou informe a
entrada correta com --entry.
openclaw.plugin.json generated metadata is stale
O manifesto não corresponde mais aos metadados da entrada. Execute:
openclaw.plugin.json e package.json.
package.json openclaw.extensions must include ./dist/index.js
Os metadados do pacote apontam para uma entrada de runtime diferente. Execute
openclaw plugins build --entry ./dist/index.js para que o gerador alinhe os
metadados do pacote à entrada que você pretende distribuir.
Cannot find package 'typebox'
O plugin compilado importa typebox durante o runtime. Mantenha-o em dependencies,
reinstale, recompile e execute novamente a validação.
A ferramenta não aparece após a instalação
Verifique estes itens na ordem:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsontemcontracts.toolscom os nomes de ferramentas esperados.package.jsontemopenclaw.extensions: ["./dist/index.js"].- O Gateway foi reiniciado ou recarregado após a instalação do plugin.