Creazione di plugin
I plugin estendono OpenClaw con nuove capacità: canali, provider di modelli, speech, trascrizione in tempo reale, voce in tempo reale, comprensione dei media, generazione di immagini, generazione video, recupero web, ricerca web, strumenti agente o qualsiasi combinazione. Non è necessario aggiungere il tuo plugin al repository OpenClaw. Pubblicalo su ClawHub o su npm e gli utenti lo installano conopenclaw plugins install <package-name>. OpenClaw prova prima ClawHub e
passa automaticamente a npm in fallback.
Prerequisiti
- Node >= 22 e un gestore di pacchetti (npm o pnpm)
- Familiarità con TypeScript (ESM)
- Per i plugin nel repository: repository clonato e
pnpm installeseguito
Che tipo di plugin?
Plugin di canale
Collega OpenClaw a una piattaforma di messaggistica (Discord, IRC, ecc.)
Plugin provider
Aggiungi un provider di modelli (LLM, proxy o endpoint personalizzato)
Plugin tool / hook
Registra strumenti agente, hook di eventi o servizi — continua sotto
createOptionalChannelSetupSurface(...) da
openclaw/plugin-sdk/channel-setup. Produce una coppia adattatore di setup + procedura guidata
che segnala il requisito di installazione e fallisce in modo chiuso sulle scritture di configurazione reali
finché il plugin non è installato.
Avvio rapido: plugin tool
Questa guida crea un plugin minimo che registra uno strumento agente. I plugin di canale e provider hanno guide dedicate collegate sopra.Crea il pacchetto e il manifest
docs/snippets/plugin-publish/.Scrivi il punto di ingresso
definePluginEntry è per i plugin non di canale. Per i canali, usa
defineChannelPluginEntry — vedi Plugin di canale.
Per le opzioni complete del punto di ingresso, vedi Punti di ingresso.Testa e pubblica
Plugin esterni: convalida e pubblica con ClawHub, poi installa:OpenClaw controlla anche ClawHub prima di npm per specifiche di pacchetto semplici come
@myorg/openclaw-my-plugin.Plugin nel repository: inseriscili nell’albero workspace dei plugin inclusi — vengono rilevati automaticamente.Capacità dei plugin
Un singolo plugin può registrare un numero qualsiasi di capacità tramite l’oggettoapi:
| Capacità | Metodo di registrazione | Guida dettagliata |
|---|---|---|
| Inferenza di testo (LLM) | api.registerProvider(...) | Plugin provider |
| Backend di inferenza CLI | api.registerCliBackend(...) | Backend CLI |
| Canale / messaggistica | api.registerChannel(...) | Plugin di canale |
| Speech (TTS/STT) | api.registerSpeechProvider(...) | Plugin provider |
| Trascrizione in tempo reale | api.registerRealtimeTranscriptionProvider(...) | Plugin provider |
| Voce in tempo reale | api.registerRealtimeVoiceProvider(...) | Plugin provider |
| Comprensione dei media | api.registerMediaUnderstandingProvider(...) | Plugin provider |
| Generazione di immagini | api.registerImageGenerationProvider(...) | Plugin provider |
| Generazione musicale | api.registerMusicGenerationProvider(...) | Plugin provider |
| Generazione video | api.registerVideoGenerationProvider(...) | Plugin provider |
| Recupero web | api.registerWebFetchProvider(...) | Plugin provider |
| Ricerca web | api.registerWebSearchProvider(...) | Plugin provider |
| Strumenti agente | api.registerTool(...) | Sotto |
| Comandi personalizzati | api.registerCommand(...) | Punti di ingresso |
| Hook di eventi | api.registerHook(...) | Punti di ingresso |
| Route HTTP | api.registerHttpRoute(...) | Internals |
| Sottocomandi CLI | api.registerCli(...) | Punti di ingresso |
config.*,
exec.approvals.*, wizard.*, update.*) restano riservati e vengono sempre risolti in
operator.admin, anche se un plugin richiede un ambito più ristretto.
Semantica delle guardie hook da tenere presente:
before_tool_call:{ block: true }è terminale e ferma gli handler con priorità inferiore.before_tool_call:{ block: false }viene trattato come nessuna decisione.before_tool_call:{ requireApproval: true }mette in pausa l’esecuzione dell’agente e richiede l’approvazione dell’utente tramite overlay di approvazione exec, pulsanti Telegram, interazioni Discord o il comando/approvesu qualsiasi canale.before_install:{ block: true }è terminale e ferma gli handler con priorità inferiore.before_install:{ block: false }viene trattato come nessuna decisione.message_sending:{ cancel: true }è terminale e ferma gli handler con priorità inferiore.message_sending:{ cancel: false }viene trattato come nessuna decisione.
/approve gestisce sia le approvazioni exec sia quelle dei plugin con fallback limitato: quando un ID di approvazione exec non viene trovato, OpenClaw riprova lo stesso ID tramite le approvazioni del plugin. L’inoltro delle approvazioni del plugin può essere configurato in modo indipendente tramite approvals.plugin nella config.
Se una logica di approvazione personalizzata deve rilevare quel medesimo caso di fallback limitato,
preferisci isApprovalNotFoundError da openclaw/plugin-sdk/error-runtime
invece di fare il matching manuale delle stringhe di scadenza dell’approvazione.
Vedi Semantica delle decisioni hook nella panoramica SDK per i dettagli.
Registrazione degli strumenti agente
Gli strumenti sono funzioni tipizzate che l’LLM può chiamare. Possono essere obbligatori (sempre disponibili) o facoltativi (attivazione esplicita dell’utente):- I nomi degli strumenti non devono entrare in conflitto con gli strumenti core (i conflitti vengono saltati)
- Usa
optional: trueper strumenti con effetti collaterali o requisiti binari aggiuntivi - Gli utenti possono abilitare tutti gli strumenti di un plugin aggiungendo l’ID del plugin a
tools.allow
Convenzioni di importazione
Importa sempre da percorsi miratiopenclaw/plugin-sdk/<subpath>:
api.ts, runtime-api.ts) per
le importazioni interne — non importare mai il tuo stesso plugin tramite il suo percorso SDK.
Per i plugin provider, mantieni gli helper specifici del provider in quei barrel
alla radice del pacchetto, a meno che il punto di estensione non sia davvero generico. Esempi inclusi attuali:
- Anthropic: wrapper di stream Claude e helper
service_tier/ beta - OpenAI: builder dei provider, helper per il modello predefinito, provider realtime
- OpenRouter: builder del provider più helper di onboarding/config
openclaw/plugin-sdk/*.
Esistono ancora alcuni punti di estensione helper generati openclaw/plugin-sdk/<bundled-id> per
la manutenzione e la compatibilità dei plugin inclusi, ad esempio
plugin-sdk/feishu-setup o plugin-sdk/zalo-setup. Trattali come superfici riservate,
non come il modello predefinito per nuovi plugin di terze parti.
Checklist pre-invio
package.json ha metadati
openclaw correttiIl manifest openclaw.plugin.json è presente e valido
Il punto di ingresso usa
defineChannelPluginEntry o definePluginEntryTutte le importazioni usano percorsi mirati
plugin-sdk/<subpath>Le importazioni interne usano moduli locali, non auto-importazioni SDK
I test passano (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check passa (plugin nel repository)Test delle beta release
- Tieni d’occhio i tag delle release GitHub su openclaw/openclaw e iscriviti tramite
Watch>Releases. I tag beta hanno un aspetto simile av2026.3.N-beta.1. Puoi anche attivare le notifiche per l’account X ufficiale di OpenClaw @openclaw per gli annunci delle release. - Testa il tuo plugin con il tag beta non appena compare. La finestra prima della stabile di solito dura solo poche ore.
- Scrivi nel thread del tuo plugin nel canale Discord
plugin-forumdopo il test conall goodoppure con ciò che si è rotto. Se non hai ancora un thread, creane uno. - Se qualcosa si rompe, apri o aggiorna un issue con titolo
Beta blocker: <plugin-name> - <summary>e applica l’etichettabeta-blocker. Inserisci il link dell’issue nel tuo thread. - Apri una PR verso
maincon titolofix(<plugin-id>): beta blocker - <summary>e collega l’issue sia nella PR sia nel tuo thread Discord. I contributor non possono etichettare le PR, quindi il titolo è il segnale lato PR per maintainer e automazione. I blocker con una PR vengono uniti; i blocker senza PR potrebbero comunque essere rilasciati. I maintainer osservano questi thread durante i test beta. - Il silenzio significa verde. Se perdi la finestra, probabilmente la tua correzione finirà nel ciclo successivo.
Passaggi successivi
Plugin di canale
Crea un plugin di canale di messaggistica
Plugin provider
Crea un plugin provider di modelli
Panoramica SDK
Riferimento della mappa di importazione e dell’API di registrazione
Helper di runtime
TTS, ricerca, sottoagente tramite api.runtime
Testing
Utilità e pattern di test
Manifest del plugin
Riferimento completo dello schema del manifest
Correlati
- Architettura dei plugin — approfondimento sull’architettura interna
- Panoramica SDK — riferimento del Plugin SDK
- Manifest — formato del manifest del plugin
- Plugin di canale — creazione di plugin di canale
- Plugin provider — creazione di plugin provider