clawhub: quando quiser a resolução pelo ClawHub.
Requisitos
- Node 22.22.3+, Node 24.15+ ou Node 25.9+, e
npmoupnpm. - Módulos ESM TypeScript.
- Para trabalhar em um plugin incluído no repositório, clone o repositório e execute
pnpm install. O desenvolvimento de plugins no checkout do código-fonte usa somente pnpm porque o OpenClaw descobre plugins incluídos nos pacotes do workspaceextensions/*.
Escolha o formato do plugin
Plugin de canal
Conecte o OpenClaw a uma plataforma de mensagens.
Plugin de provedor
Adicione um provedor de modelos, mídia, pesquisa, busca, fala ou comunicação em tempo real.
Plugin de backend de CLI
Execute uma CLI de IA local por meio do fallback de modelo do OpenClaw.
Plugin de ferramenta
Registre ferramentas de agente.
Início rápido
Crie um plugin de ferramenta mínimo registrando uma ferramenta de agente obrigatória. Este é o formato útil mais simples de plugin e abrange o pacote, o manifesto, o ponto de entrada e a validação local.1
Criar os metadados do pacote
contracts.tools para que o OpenClaw possa descobrir a propriedade sem
carregar antecipadamente o runtime de todos os plugins. Defina activation.onStartup
intencionalmente; este exemplo é carregado na inicialização do Gateway.As superfícies de plugin consideradas confiáveis pelo host também são controladas pelo manifesto e exigem uma
declaração explícita para plugins instalados: api.registerAgentToolResultMiddleware(...)
requer que cada runtime de destino seja listado em contracts.agentToolResultMiddleware,
e api.registerTrustedToolPolicy(...) requer cada ID de política em
contracts.trustedToolPolicies. Essas declarações mantêm alinhadas a
inspeção no momento da instalação e o registro no runtime.Para todos os campos do manifesto, consulte Manifesto de plugin.2
Registrar a ferramenta
index.ts
definePluginEntry para plugins que não sejam de canal. Plugins de canal usam
defineChannelPluginEntry de openclaw/plugin-sdk/core.3
Testar o runtime
Para um plugin instalado ou externo, inspecione o runtime carregado:Se o plugin registrar um comando de CLI, execute também esse comando e confirme
a saída, por exemplo,
openclaw demo-plugin ping.Para um plugin incluído neste repositório, o OpenClaw descobre os pacotes de plugin
do checkout do código-fonte no workspace extensions/*. Execute o teste direcionado
mais próximo:4
Testar a instalação do pacote
Antes de publicar um plugin pronto para empacotamento, teste o mesmo formato de instalação que os usuários
receberão. Primeiro, adicione uma etapa de build, direcione entradas de runtime como
openclaw.extensions para JavaScript compilado, como ./dist/index.js, e garanta
que npm pack inclua essa saída dist/. Entradas de código-fonte TypeScript são
apenas para checkouts do código-fonte e caminhos de desenvolvimento local.Em seguida, empacote o plugin e instale o tarball com npm-pack::npm-pack: usa o projeto npm gerenciado por plugin do OpenClaw, portanto detecta
erros de dependência de runtime que os testes no checkout do código-fonte podem ocultar. Ele comprova
o formato do pacote e das dependências, não a confiança oficial vinculada ao catálogo.
As importações de runtime devem estar em dependencies ou optionalDependencies;
dependências deixadas apenas em devDependencies não serão instaladas para o
projeto de runtime gerenciado.Não use uma instalação por arquivo bruto/caminho como validação final para comportamentos
de plugins oficiais ou privilegiados. Códigos-fonte brutos são úteis para depuração local, mas
não comprovam o mesmo caminho de dependências que instalações pelo npm ou ClawHub. Se
o plugin depender do status confiável de plugin oficial, adicione uma segunda validação
por meio de uma instalação oficial respaldada por catálogo ou de um caminho de pacote publicado que
registre a confiança oficial. Consulte
Resolução de dependências de plugins para obter
detalhes sobre a raiz de instalação e a propriedade das dependências.5
Publicar
Valide o pacote antes de publicar:Os trechos canônicos de pacotes do ClawHub ficam em
docs/snippets/plugin-publish/.6
Instalar
Instale o pacote publicado pelo ClawHub:
Registro de ferramentas
As ferramentas podem ser obrigatórias ou opcionais. As ferramentas obrigatórias ficam sempre disponíveis quando o plugin está habilitado. As ferramentas opcionais exigem consentimento explícito do usuário antes que o OpenClaw carregue o runtime do plugin proprietário. As fábricas de ferramentas recebem um contexto de runtime confiável, incluindodeliveryContext,
nativeChannelId para a conversa ativa da plataforma, quando disponível, e
requesterSenderId.
api.registerTool(...) também deve ser declarada no
manifesto do plugin:
tools.allow:
name não vazio ausente,
um execute que não seja uma função ou um descritor de ferramenta sem um objeto parameters.
As fábricas de ferramentas recebem um objeto de contexto fornecido pelo runtime. Use ctx.activeModel
quando uma ferramenta precisar registrar, exibir ou se adaptar ao modelo ativo na execução
atual; ele pode incluir provider, modelId e modelRef. Trate-o como
metadados informativos de runtime, não como um limite de segurança contra o operador
local, o código de plugin instalado ou um runtime modificado do OpenClaw. Ferramentas
locais sensíveis ainda devem exigir consentimento explícito do plugin ou do operador e
falhar de modo seguro quando os metadados do modelo ativo estiverem ausentes ou forem inadequados.
O manifesto declara a propriedade e a descoberta; a execução ainda chama a implementação
ativa da ferramenta registrada. Mantenha toolMetadata.<tool>.optional: true
alinhado com api.registerTool(..., { optional: true }) para que o OpenClaw possa evitar
carregar o runtime desse plugin até que a ferramenta seja explicitamente adicionada à lista de permissões.
Convenções de importação
Importe de subcaminhos específicos do SDK:api.ts e
runtime-api.ts, para importações internas. Não importe o próprio plugin por meio de um
caminho do SDK. Helpers específicos de provedores devem permanecer no pacote do provedor, a menos que
a interface seja realmente genérica.
Métodos RPC personalizados do Gateway são um ponto de entrada avançado. Mantenha-os em um
prefixo específico do plugin; namespaces administrativos do núcleo, como config.*,
exec.approvals.*, operator.admin.*, wizard.* e update.*, permanecem reservados
e são resolvidos como operator.admin. A ponte
openclaw/plugin-sdk/gateway-method-runtime é reservada para rotas HTTP de plugins
que declaram contracts.gatewayMethodDispatch: ["authenticated-request"].
Para ver o mapa completo de importações, consulte Visão geral do SDK de plugins.
Lista de verificação antes do envio
package.json contém os metadados
openclaw corretosO manifesto openclaw.plugin.json está presente e é válido
O ponto de entrada usa
defineChannelPluginEntry ou definePluginEntryTodas as importações usam caminhos
plugin-sdk/<subpath> específicosAs importações internas usam módulos locais, não autoimportações do SDK
Os testes passam (
pnpm test <bundled-plugin-root>/my-plugin/)pnpm check passa (plugins no repositório)Teste com versões beta
- Acompanhe as versões de openclaw/openclaw (
Watch>Releases). As tags beta têm a seguinte aparência:v2026.3.N-beta.1. Também é possível seguir @openclaw no X para receber anúncios de versões. - Teste seu plugin com a tag beta assim que ela aparecer. O intervalo antes da versão estável normalmente é de apenas algumas horas.
- Após os testes, publique na thread do seu plugin no canal
plugin-forumdo Discord (discord.gg/clawd), informandoall goodou o que deixou de funcionar. Crie uma thread caso ainda não tenha uma. - Se algo deixar de funcionar, abra ou atualize uma issue com o título
Beta blocker: <plugin-name> - <summary>e aplique o rótulobeta-blocker. Inclua o link da issue na sua thread. - Abra um PR para
maincom o títulofix(<plugin-id>): beta blocker - <summary>e inclua o link da issue tanto no PR quanto na sua thread do Discord. Colaboradores não podem aplicar rótulos a PRs, portanto o título é o sinal no PR para os mantenedores e a automação. Bloqueios com um PR são mesclados; bloqueios sem um PR podem acabar sendo lançados mesmo assim. - O silêncio indica que está tudo certo. Perder o prazo normalmente significa que sua correção será incluída no próximo ciclo.
Próximas etapas
Plugins de canal
Crie um plugin de canal de mensagens
Plugins de provedor
Crie um plugin de provedor de modelos
Plugins de backend da CLI
Registre um backend local de IA para a CLI
Visão geral do SDK
Referência do mapa de importações e da API de registro
Auxiliares de runtime
TTS, pesquisa e subagente via api.runtime
Testes
Utilitários e padrões de teste
Manifesto do plugin
Referência completa do esquema do manifesto