Questa è una guida per contributori destinata agli sviluppatori core di OpenClaw. Se stai
creando un Plugin esterno, consulta invece Creazione di Plugin.
Per il riferimento architetturale approfondito (modello di capability, ownership,
pipeline di caricamento, helper di runtime), consulta Interni dei Plugin.
- plugin = confine di ownership
- capability = contratto core condiviso
Quando creare una capability
Crea una nuova capability quando tutte queste condizioni sono vere:- Più di un fornitore potrebbe plausibilmente implementarla.
- Canali, strumenti o Plugin di funzionalità dovrebbero consumarla senza preoccuparsi del fornitore.
- Il core deve possedere fallback, policy, configurazione o comportamento di consegna.
La sequenza standard
- Definisci il contratto core tipizzato.
- Aggiungi la registrazione del Plugin per quel contratto.
- Aggiungi un helper di runtime condiviso.
- Collega un vero Plugin fornitore come prova.
- Sposta i consumer di funzionalità/canale sull’helper di runtime.
- Aggiungi test di contratto.
- Documenta la configurazione visibile all’operatore e il modello di ownership.
Cosa va dove
Core:- Tipi di richiesta/risposta.
- Registro dei provider + risoluzione.
- Comportamento di fallback.
- Schema di configurazione con metadati di documentazione
title/descriptionpropagati su nodi oggetto annidati, wildcard, elementi di array e composizione. - Superficie dell’helper di runtime.
- Chiamate API del fornitore.
- Gestione dell’autenticazione del fornitore.
- Normalizzazione delle richieste specifica del fornitore.
- Registrazione dell’implementazione della capability.
- Chiama
api.runtime.*o l’helperplugin-sdk/*-runtimecorrispondente. - Non chiama mai direttamente un’implementazione del fornitore.
Punti di integrazione per provider e harness
Usa gli hook del provider quando il comportamento appartiene al contratto del provider del modello invece che al ciclo generico dell’agente. Gli esempi includono parametri di richiesta specifici del provider dopo la selezione del trasporto, preferenza del profilo di autenticazione, overlay dei prompt e instradamento del fallback di follow-up dopo il failover di modello/profilo. Usa gli hook dell’harness dell’agente quando il comportamento appartiene al runtime che esegue un turno. Gli harness possono classificare risultati espliciti del protocollo come output vuoto, ragionamento senza output visibile o un piano strutturato senza una risposta finale, in modo che la policy di fallback esterna del modello possa prendere la decisione di ritentare. Mantieni entrambi i punti di integrazione stretti:- Il core possiede la policy di retry/fallback.
- I Plugin provider possiedono suggerimenti di richiesta/autenticazione/instradamento specifici del provider.
- I Plugin harness possiedono la classificazione dei tentativi specifica del runtime.
- I Plugin di terze parti restituiscono suggerimenti, non mutazioni dirette dello stato core.
Checklist dei file
Per una nuova capability, prevedi di toccare queste aree:src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- Uno o più pacchetti Plugin inclusi.
- Configurazione, documentazione, test.
Esempio pratico: generazione di immagini
La generazione di immagini segue la forma standard:- Il core definisce
ImageGenerationProvider. - Il core espone
registerImageGenerationProvider(...). - Il core espone
runtime.imageGeneration.generate(...). - I Plugin
openai,google,faleminimaxregistrano implementazioni supportate da fornitori. - I fornitori futuri registrano lo stesso contratto senza modificare canali/strumenti.
agents.defaults.imageModelanalizza le immagini.agents.defaults.imageGenerationModelgenera immagini.
Provider di embedding
UsaembeddingProviders per provider di embedding vettoriali riutilizzabili. Questo contratto
è intenzionalmente più ampio della memoria: strumenti, ricerca, retrieval, importatori o
futuri Plugin di funzionalità possono consumare embedding senza dipendere dal motore
di memoria.
La ricerca nella memoria può consumare embeddingProviders generici. Il vecchio
contratto memoryEmbeddingProviders è una compatibilità deprecata mentre i provider
specifici per la memoria esistenti migrano; i nuovi provider di embedding riutilizzabili dovrebbero usare
embeddingProviders.
Checklist di revisione
Prima di distribuire una nuova capability, verifica:- Nessun canale/strumento importa direttamente codice del fornitore.
- L’helper di runtime è il percorso condiviso.
- Almeno un test di contratto verifica l’ownership inclusa.
- La documentazione della configurazione nomina la nuova chiave modello/configurazione.
- La documentazione dei Plugin spiega il confine di ownership.
Correlati
- Interni dei Plugin — modello di capability, ownership, pipeline di caricamento, helper di runtime.
- Creazione di Plugin — tutorial per il primo Plugin.
- Panoramica SDK — mappa degli import e riferimento API di registrazione.
- Creazione di Skills — superficie complementare per contributori.