Os plugins estão em beta. O comportamento e a configuração podem mudar em versões futuras.
/<plugin>:<skill>, e ele também pode incluir automaticamente outros plugins dos quais depende.
Um plugin é simplesmente uma origem que contém:
skills/ armazena skills comuns — os plugins não introduzem nenhum novo
formato de skill. Consulte Criando Skills para ver o
formato SKILL.md.
Um plugin também pode incluir regras: um AGENTS.md na raiz do plugin é
injetado como uma regra sempre ativa em toda sessão, junto com as
regras do seu projeto. Arquivos Markdown em uma pasta rules/ também são carregados, com o mesmo
frontmatter trigger e os mesmos tipos de ativação
das regras do Windsurf.
Instalando um plugin
owner/repo do GitHub, uma URL do git ou um caminho local:
-y / --yes para pular o
prompt.
Os plugins são instalados no nível de usuário e ficam disponíveis em todos os seus
projetos.
Gerenciamento de plugins
devin plugins install ./my-plugin → edite skills/<name>/SKILL.md → as alterações
são aplicadas na próxima sessão, sem precisar de update.
O manifesto
.devin-plugin/plugin.json descreve o plugin. Apenas name é obrigatório, e
ele deve ser único entre os plugins instalados (é o namespace /<name>:…).
name, version, description, author
({ name, email }), homepage, repository, license e keywords.
Uma entrada de dependência é uma origem — pode ser uma string abreviada ou um objeto:
Todas as formas do GitHub para o mesmo repositório (
owner/repo, a URL HTTPS, a URL .git e a forma SSH) se referem à mesma identidade do plugin.
Dependências e governança
requiredPlugins
optionalPlugins
forbiddenPlugins
forbiddenPlugins são comparadas com identidades de plugin:
- Uma identidade exata, escrita como
owner/repoou uma URL do git. Todas as formas do GitHub para o mesmo repo (owner/repo, a URL HTTPS, a URL.git, a forma SSH) se referem à mesma identidade. - Um padrão glob — qualquer entrada que contenha
*. O*corresponde a qualquer sequência de caracteres, incluindo/:acme/*corresponde a todos os repos do GitHub deacme,*/secretscorresponde a um repo chamadosecretsem qualquer owner, ehttps://gitlab.com/acme/*corresponde a qualquer repo nesse caminho. - Um
"*"isolado, que corresponde a todo o restante (um bloqueio total).
- A negação prevalece. Um plugin é bloqueado se qualquer manifesto ativo ou plugin instalado o proibir. Se nada proíbe nada, nada é bloqueado.
- Auto-override. Os
requiredPluginseoptionalPluginsde um manifesto (ou plugin) — e, no caso de um plugin, o próprio plugin — ficam isentos da sua própria lista de proibidos. Assim,"forbiddenPlugins": ["*"]mais"optionalPlugins": ["acme/approved"]significa “permitir apenas o que este manifesto lista; proibir todo o restante”. A exceção cobre apenas essas entradas diretas, não as dependências transitivas de um plugin obrigatório — liste-as explicitamente em um bloqueio total. - Sem repermissão entre escopos. A lista de permissões de um manifesto ou plugin não pode voltar a permitir o que outro proíbe. Um bloqueio total com
"forbiddenPlugins": ["*"]não pode ser contornado a partir de um escopo inferior.
- No momento da instalação — a instalação de um plugin bloqueado (ou de um cujos plugins obrigatórios não possam ser atendidos, ou cujo nome colida com o de um plugin instalado) é recusada.
- No momento do carregamento — um plugin bloqueado depois de já estar instalado permanece no disco, mas suas skills são ignoradas no início da sessão, com um aviso informando quem fez o bloqueio.
owner/repo e URL do git acima.
Herança e níveis
- Enterprise — o manifesto gerenciado em nível da conta, configurado por um administrador.
- Org — um manifesto gerenciado no nível da organização, em uma camada abaixo da conta (uma organização pode acrescentar ao que a conta declara, mas não pode se sobrepor a isso). Isso se aplica apenas a sessões em nuvem do Devin: a CLI autentica no nível da conta e não tem contexto de organização, portanto exigências e proibições no nível da organização não alcançam usuários da CLI. Coloque tudo o que precisar ser aplicado na CLI no manifesto da Enterprise/conta.
- Repo — os
requiredPlugins/optionalPlugins/forbiddenPluginsem um.devin/config.jsonde um checkout, encontrados ao subir a partir do seu diretório de trabalho. - User — plugins que você instala com
devin plugins install.
- Um nível inferior nunca pode voltar a permitir o que um nível superior proíbe.
- Um nível inferior nunca pode proibir o que um nível superior exige — a proibição é ignorada e o plugin ainda é carregado.
Uma lista de bloqueio só é sobrescrita no próprio nível
forbiddenPlugins
de um nível só é sobrescrito pelo próprio optionalPlugins (ou
requiredPlugins) desse mesmo manifesto — nunca por uma lista em um nível inferior.
Por exemplo, um manifesto gerenciado em nível Enterprise pode restringir a conta a um
único plugin aprovado:
acme/approved e proibir
qualquer outro plugin.” Nenhuma org, repo ou usuário pode ampliar essa
lista de permissões — nem instalando um plugin, nem adicionando-o ao
optionalPlugins de um nível inferior. A exceção também cobre apenas as
entradas que este manifesto lista diretamente; as dependências transitivas de
um plugin obrigatório não estão isentas, portanto liste-as explicitamente em
um bloqueio.
Conflitos e dependências
- Um require e um forbid para o mesmo plugin no mesmo nível, mas em manifestos diferentes (por exemplo, dois plugins de nível de usuário instalados separadamente) resultam na prevalência do forbid — uma lista de permissões só isenta entradas do seu próprio manifesto, então não pode livrar um plugin que outro manifesto proíbe. (Dentro de um único manifesto, seus próprios require/optional continuam isentos de seus próprios forbids, como acima.)
- Um plugin bloqueado por governança falha de forma não fatal: no início da sessão, suas skills são ignoradas com um aviso que identifica quem aplicou o forbid, em vez de abortar a sessão.
- Ser usado como dependência não concede isenção. Um plugin incluído apenas como uma dependência transitiva ainda está sujeito a todo forbid aplicável a ele e herda o nível de autoridade mais alto de qualquer plugin que o exija.

