Building Plugins
Plugins estendem o OpenClaw com novas capacidades: canais, provedores de modelo, fala, transcrição em tempo real, voz em tempo real, entendimento de mídia, geração de imagens, geração de vídeo, busca na web, pesquisa na web, ferramentas de agente, ou qualquer combinação. Você não precisa adicionar seu plugin ao repositório do OpenClaw. Publique no ClawHub ou no npm, e os usuários instalam comopenclaw plugins install <package-name>. O OpenClaw tenta primeiro o ClawHub e
recorre automaticamente ao npm.
Pré-requisitos
- Node >= 22 e um gerenciador de pacotes (npm ou pnpm)
- Familiaridade com TypeScript (ESM)
- Para plugins no repositório: repositório clonado e
pnpm installexecutado
Que tipo de plugin?
Plugin de canal
Conecte o OpenClaw a uma plataforma de mensagens (Discord, IRC etc.)
Plugin de provedor
Adicione um provedor de modelo (LLM, proxy ou endpoint personalizado)
Plugin de ferramenta / hook
Registre ferramentas de agente, hooks de evento ou serviços — continue abaixo
createOptionalChannelSetupSurface(...) de
openclaw/plugin-sdk/channel-setup. Ele produz um par de adaptador + assistente
de configuração que anuncia o requisito de instalação e falha de forma segura em gravações reais de configuração
até que o plugin esteja instalado.
Início rápido: plugin de ferramenta
Este passo a passo cria um plugin mínimo que registra uma ferramenta de agente. Plugins de canal e de provedor têm guias dedicados com links acima.Crie o pacote e o manifesto
docs/snippets/plugin-publish/.Escreva o ponto de entrada
definePluginEntry é para plugins que não são de canal. Para canais, use
defineChannelPluginEntry — consulte Channel Plugins.
Para todas as opções de ponto de entrada, consulte Entry Points.Teste e publique
Plugins externos: valide e publique com ClawHub, depois instale:O OpenClaw também verifica o ClawHub antes do npm para especificações de pacote simples como
@myorg/openclaw-my-plugin.Plugins no repositório: coloque-os na árvore de workspace de plugins empacotados — descobertos automaticamente.Capacidades de plugin
Um único plugin pode registrar qualquer número de capacidades por meio do objetoapi:
| Capacidade | Método de registro | Guia detalhado |
|---|---|---|
| Inferência de texto (LLM) | api.registerProvider(...) | Provider Plugins |
| Backend de inferência de CLI | api.registerCliBackend(...) | CLI Backends |
| Canal / mensagens | api.registerChannel(...) | Channel Plugins |
| Fala (TTS/STT) | api.registerSpeechProvider(...) | Provider Plugins |
| Transcrição em tempo real | api.registerRealtimeTranscriptionProvider(...) | Provider Plugins |
| Voz em tempo real | api.registerRealtimeVoiceProvider(...) | Provider Plugins |
| Entendimento de mídia | api.registerMediaUnderstandingProvider(...) | Provider Plugins |
| Geração de imagens | api.registerImageGenerationProvider(...) | Provider Plugins |
| Geração de vídeo | api.registerVideoGenerationProvider(...) | Provider Plugins |
| Busca na web | api.registerWebFetchProvider(...) | Provider Plugins |
| Pesquisa na web | api.registerWebSearchProvider(...) | Provider Plugins |
| Ferramentas de agente | api.registerTool(...) | Abaixo |
| Comandos personalizados | api.registerCommand(...) | Entry Points |
| Hooks de evento | api.registerHook(...) | Entry Points |
| Rotas HTTP | api.registerHttpRoute(...) | Internals |
| Subcomandos de CLI | api.registerCli(...) | Entry Points |
config.*,
exec.approvals.*, wizard.*, update.*) permanecem reservados e sempre resolvem para
operator.admin, mesmo que um plugin solicite um escopo mais restrito.
Semânticas de guarda de hook para ter em mente:
before_tool_call:{ block: true }é terminal e interrompe handlers de prioridade mais baixa.before_tool_call:{ block: false }é tratado como nenhuma decisão.before_tool_call:{ requireApproval: true }pausa a execução do agente e solicita aprovação do usuário por meio da sobreposição de aprovação de execução, botões do Telegram, interações do Discord ou o comando/approveem qualquer canal.before_install:{ block: true }é terminal e interrompe handlers de prioridade mais baixa.before_install:{ block: false }é tratado como nenhuma decisão.message_sending:{ cancel: true }é terminal e interrompe handlers de prioridade mais baixa.message_sending:{ cancel: false }é tratado como nenhuma decisão.
/approve lida tanto com aprovações de execução quanto de plugin com fallback limitado: quando um id de aprovação de execução não é encontrado, o OpenClaw tenta novamente o mesmo id por meio das aprovações de plugin. O encaminhamento de aprovações de plugin pode ser configurado de forma independente via approvals.plugin na configuração.
Se uma infraestrutura de aprovação personalizada precisar detectar esse mesmo caso de fallback limitado,
prefira isApprovalNotFoundError de openclaw/plugin-sdk/error-runtime
em vez de corresponder manualmente a strings de expiração de aprovação.
Consulte SDK Overview hook decision semantics para detalhes.
Registrando ferramentas de agente
Ferramentas são funções tipadas que o LLM pode chamar. Elas podem ser obrigatórias (sempre disponíveis) ou opcionais (adesão do usuário):- Os nomes das ferramentas não devem conflitar com ferramentas centrais (conflitos são ignorados)
- Use
optional: truepara ferramentas com efeitos colaterais ou requisitos binários extras - Os usuários podem habilitar todas as ferramentas de um plugin adicionando o id do plugin a
tools.allow
Convenções de importação
Sempre importe de caminhos específicosopenclaw/plugin-sdk/<subpath>:
api.ts, runtime-api.ts) para
importações internas — nunca importe seu próprio plugin pelo caminho do SDK.
Para plugins de provedor, mantenha helpers específicos do provedor nesses barrels
da raiz do pacote, a menos que a separação seja realmente genérica. Exemplos empacotados atuais:
- Anthropic: wrappers de stream do Claude e helpers de
service_tier/ beta - OpenAI: builders de provedor, helpers de modelo padrão, provedores em tempo real
- OpenRouter: builder de provedor mais helpers de onboarding/configuração
openclaw/plugin-sdk/*.
Algumas separações auxiliares geradas openclaw/plugin-sdk/<bundled-id> ainda existem para
manutenção e compatibilidade de plugins empacotados, por exemplo
plugin-sdk/feishu-setup ou plugin-sdk/zalo-setup. Trate essas superfícies como reservadas,
não como o padrão para novos plugins de terceiros.
Checklist antes do envio
package.json tem 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 específicos
plugin-sdk/<subpath>Importações internas usam módulos locais, não autoimportações pelo SDK
Os testes passam (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check passa (plugins no repositório)Testes de versão beta
- Fique de olho nas tags de release do GitHub em openclaw/openclaw e inscreva-se via
Watch>Releases. As tags beta têm aparência comov2026.3.N-beta.1. Você também pode ativar notificações para a conta oficial do OpenClaw no X @openclaw para anúncios de release. - Teste seu plugin com a tag beta assim que ela aparecer. A janela antes da versão estável normalmente é de apenas algumas horas.
- Publique na thread do seu plugin no canal
plugin-forumdo Discord após o teste comall goodou informando o que quebrou. Se você ainda não tiver uma thread, crie uma. - Se algo quebrar, abra ou atualize uma issue intitulada
Beta blocker: <plugin-name> - <summary>e aplique o rótulobeta-blocker. Coloque o link da issue na sua thread. - Abra um PR para
maincom o títulofix(<plugin-id>): beta blocker - <summary>e vincule a issue tanto no PR quanto na sua thread no Discord. Colaboradores não podem rotular PRs, então o título é o sinal do lado do PR para mantenedores e automação. Bloqueadores com PR são mesclados; bloqueadores sem PR podem ser enviados mesmo assim. Mantenedores acompanham essas threads durante os testes beta. - Silêncio significa verde. Se você perder a janela, sua correção provavelmente entrará no próximo ciclo.
Próximos passos
Channel Plugins
Crie um plugin de canal de mensagens
Provider Plugins
Crie um plugin de provedor de modelo
SDK Overview
Referência do mapa de importação e da API de registro
Runtime Helpers
TTS, search, subagent via api.runtime
Testing
Utilitários e padrões de teste
Plugin Manifest
Referência completa do esquema de manifesto
Relacionado
- Plugin Architecture — análise detalhada da arquitetura interna
- SDK Overview — referência do Plugin SDK
- Manifest — formato do manifesto de plugin
- Channel Plugins — criação de plugins de canal
- Provider Plugins — criação de plugins de provedor