I plugin sono in beta chiusa. Per richiedere l’accesso, contatta support@cognition.ai. Il comportamento e la configurazione potrebbero cambiare nelle release future.
/<plugin>:<skill> e possono includere automaticamente anche altri
plugin da cui dipendono.
Un plugin è semplicemente una sorgente che contiene:
skills/ contiene skill standard: i plugin non introducono alcun nuovo formato di skill.
Vedi Creazione di skill per il
formato SKILL.md.
Oltre alle skill, un plugin può includere:
- Regole — un file
AGENTS.mdnella directory radice del plugin viene iniettato come regola sempre attiva in ogni sessione, insieme alle regole del tuo progetto. Anche i file Markdown in una cartellarules/vengono caricati, con lo stesso frontmattertriggere gli stessi tipi di attivazione delle regole di Windsurf. - Subagenti personalizzati — profili
agents/<name>.mdoagents/<name>/AGENT.md(lo stesso formato dei subagenti personalizzati dei subagent di progetto), disponibili come<plugin>:<name>. I subagent dei plugin attualmente vengono caricati solo negli agenti Devin locali — la CLI e Devin Desktop — non nelle sessioni cloud Devin. - Hook — un file
hooks.jsonnella directory radice del plugin registra Hook del ciclo di vita eseguiti in ogni sessione in cui il plugin è installato. - Server MCP — un file
mcp_config.jsonnella directory radice del plugin dichiara server MCP ("mcpServers": { "<name>": { … } }) che si avviano con la sessione. Anche il file.mcp.jsonnella radice dei plugin Claude e il campomcpServersdel manifest vengono presi in considerazione.
Installare un plugin
owner/repo GitHub, un URL git o un percorso locale:
-y / --yes per saltare la
richiesta di conferma.
I plugin vengono installati a livello di utente e sono disponibili in tutti i tuoi
progetti.
Gestire i plugin
devin plugins install ./my-plugin → modifica skills/<name>/SKILL.md → le modifiche
si applicano alla sessione successiva, senza dover eseguire update.
Il manifest
.devin-plugin/plugin.json descrive il plugin. Solo name è obbligatorio e
deve essere univoco tra i plugin installati (corrisponde allo spazio dei nomi /<name>:…).
name, version, description, author
({ name, email }), homepage, repository, license e keywords.
Altri due campi facoltativi controllano da dove vengono caricati gli asset: skills — un percorso o
un array di percorsi a directory di skill, che sostituisce il valore predefinito skills/ — e
mcpServers — percorsi di file di dichiarazione MCP o una mappa inline di server, letti in
aggiunta alle conventions radice.
Una voce di dipendenza è una sorgente — una stringa in forma abbreviata oppure un oggetto:
Tutte le forme GitHub per la stessa repo (
owner/repo, l’URL HTTPS, l’URL .git, il formato SSH) si riferiscono alla stessa identità del plugin.
Dipendenze e governance
requiredPlugins
optionalPlugins
forbiddenPlugins
forbiddenPlugins vengono confrontate con le identità dei plugin:
- Un’identità esatta, scritta come
owner/repoo come URL Git. Tutte le forme GitHub della stessa repo (owner/repo, l’URL HTTPS, l’URL.git, la forma SSH) si riferiscono alla stessa identità. - Un pattern glob — qualsiasi voce che contenga
*.*corrisponde a qualsiasi sequenza di caratteri, incluso/:acme/*corrisponde a tutte le repo GitHub diacme,*/secretscorrisponde a una repo chiamatasecretscon qualsiasi owner ehttps://gitlab.com/acme/*corrisponde a qualsiasi repo in quel percorso. - Il solo
"*", che corrisponde a tutto il resto (un blocco totale).
- Prevale
deny. Un plugin è bloccato se un qualsiasi manifest attivo o plugin installato lo vieta. Se nulla vieta nulla, non viene bloccato nulla. - Auto-override. I
requiredPluginseoptionalPluginsdi un manifest (o di un plugin) — e, nel caso di un plugin, il plugin stesso — sono esenti dalla propria lista di elementi vietati, quindi"forbiddenPlugins": ["*"]più"optionalPlugins": ["acme/approved"]significa “consenti solo ciò che questo manifest elenca; vieta tutto il resto”. L’eccezione copre solo quelle voci dirette, non le dipendenze transitive di un plugin richiesto: in caso di blocco totale, elencale esplicitamente. - Nessuna nuova autorizzazione tra ambiti diversi. La allow-list di un manifest o plugin non può riabilitare ciò che un altro vieta. Un blocco totale con
"forbiddenPlugins": ["*"]non può essere aggirato da un ambito inferiore.
- Al momento dell’installazione — l’installazione di un plugin bloccato (o di uno i cui plugin richiesti non possono essere soddisfatti, o il cui nome entra in conflitto con un plugin installato) viene rifiutata.
- Al momento del caricamento — un plugin bloccato dopo essere già stato installato resta sul disco, ma le sue skills vengono saltate all’avvio della sessione con un avviso che indica chi lo vieta.
owner/repo e URL git sopra indicate.
Ereditarietà e livelli
- Enterprise — il manifest gestito a livello di account, configurato da un admin.
- Org — un manifest gestito a livello di org, posto al di sotto del relativo account (un’org può aggiungere a quanto dichiarato dal proprio account, ma non può contraddirlo). Questo vale solo per le sessioni cloud Devin: la CLI si autentica a livello di account e non ha alcun contesto di org, quindi i plugin richiesti e vietati a livello di org non si applicano agli utenti della CLI. Inserisci nel manifest enterprise/account tutto ciò che deve essere imposto nella CLI.
- Repo — i
requiredPlugins/optionalPlugins/forbiddenPluginsnel file.devin/config.jsondi un checkout, individuati risalendo dalla tua directory di lavoro. - Utente — i plugin che installi tu stesso con
devin plugins install.
- Un livello inferiore non può mai riautorizzare ciò che un livello superiore vieta.
- Un livello inferiore non può mai vietare ciò che un livello superiore richiede: il divieto viene ignorato e il plugin viene comunque caricato.
Una denylist viene sovrascritta solo al proprio livello
forbiddenPlugins
di un livello viene sovrascritto solo dagli optionalPlugins (o
requiredPlugins) dello stesso manifest, mai da una lista di un livello inferiore.
Per esempio, un manifest gestito a livello Enterprise può limitare l’account a un
singolo plugin approvato:
acme/approved e vieta
qualsiasi altro plugin.” Nessuna org, repo o utente può ampliare questa lista di elementi consentiti — né
installando un plugin, né aggiungendolo a optionalPlugins a un livello inferiore.
L’eccezione copre inoltre solo le voci che questo manifest elenca direttamente; le
dipendenze transitive di un plugin obbligatorio non sono esenti, quindi elencale
esplicitamente in caso di lockdown.
Conflitti e dipendenze
- Un requisito e un divieto per lo stesso plugin allo stesso livello, ma da manifest diversi (per esempio due plugin a livello di utente installati separatamente), si risolvono a favore del divieto: un’allow-list esenta solo le voci del proprio manifest, quindi non può “salvare” un plugin che un altro manifest vieta. (All’interno di un singolo manifest, i propri elementi obbligatori/opzionali restano esenti dai propri divieti, come sopra.)
- Un plugin bloccato dalla governance va in soft-fail: all’inizio della sessione le sue skill vengono saltate con un avviso che indica chi ha imposto il divieto, invece di interrompere la sessione.
- Il fatto di essere una dipendenza non conferisce alcuna esenzione. Un plugin incluso solo come dipendenza transitiva è comunque soggetto a ogni divieto applicabile e eredita il livello di autorità più alto di qualsiasi plugin che lo richieda.

