Los plugins están en beta cerrada. Para solicitar acceso, contacta con support@cognition.ai. El comportamiento y la configuración pueden cambiar en futuras versiones.
/<plugin>:<skill>, y también puede incorporar automáticamente otros plugins de los que depende.
Un plugin es simplemente un origen que contiene:
skills/ contiene skills normales; los plugins no introducen ningún
nuevo formato de skill. Consulta Creación de skills para ver el
formato de SKILL.md.
Además de skills, un plugin puede incluir:
- Rules — un archivo
AGENTS.mden la raíz del plugin se inyecta como una Rule activa en cada sesión, junto con las Rules del propio proyecto. Los archivos Markdown de una carpetarules/también se cargan, con el mismo frontmattertriggery los mismos tipos de activación que las Rules de Windsurf. - subagentes personalizados — perfiles
agents/<name>.mdoagents/<name>/AGENT.md(el mismo formato de subagente personalizado que los subagentes del proyecto), disponibles como<plugin>:<name>. Actualmente, los subagentes del plugin solo se cargan en agentes locales de Devin: la CLI y Devin Desktop, no en sesiones de Devin en la nube. - Hooks — un archivo
hooks.jsonen la raíz del plugin registra hooks del ciclo de vida que se ejecutan en cada sesión en la que el plugin está instalado. - servidores MCP — un archivo
mcp_config.jsonen la raíz del plugin declara servidores MCP ("mcpServers": { "<name>": { … } }) que se inician con la sesión. También se respetan el archivo.mcp.jsonen la raíz de los plugins de Claude y el campomcpServersdel manifiesto.
Instalar un plugin
owner/repo de GitHub, una URL de git o una ruta local:
-y / --yes para omitir la
confirmación.
Los plugins se instalan a nivel de usuario y están disponibles en todos tus
proyectos.
Administrar plugins
devin plugins install ./my-plugin → edita skills/<name>/SKILL.md → los cambios
se aplican en la siguiente sesión, sin necesidad de update.
El manifiesto
.devin-plugin/plugin.json describe el plugin. Solo name es obligatorio y
debe ser único entre los plugins instalados (es el espacio de nombres /<name>:…).
name, version, description, author
({ name, email }), homepage, repository, license y keywords.
Dos campos opcionales adicionales controlan desde dónde se cargan los recursos: skills — una ruta o
un arreglo de rutas a directorios de skills, que reemplaza el valor predeterminado skills/ — y
mcpServers — rutas a archivos de declaración de MCP o un mapa inline de servidores, que se leen
además de las convenciones raíz.
Una entrada de dependencia es un origen: puede ser una cadena abreviada o un objeto:
Todas las formas de GitHub para el mismo repositorio (
owner/repo, la URL HTTPS, la URL .git, la forma SSH) se refieren a la misma identidad del plugin.
Dependencias y gobernanza
requiredPlugins
optionalPlugins
forbiddenPlugins
forbiddenPlugins se cotejan con las identidades de los plugins:
- Una identidad exacta, escrita como
owner/repoo una URL de Git. Todas las formas de GitHub del mismo repo (owner/repo, la URL HTTPS, la URL.git, la forma SSH) se refieren a la misma identidad. - Un patrón glob: cualquier entrada que contenga
*. El*coincide con cualquier secuencia de caracteres, incluido/:acme/*coincide con todos los repos de GitHub deacme,*/secretscoincide con un repo llamadosecretsde cualquier propietario, yhttps://gitlab.com/acme/*coincide con cualquier repo bajo esa ruta. - El único
"*", que coincide con todo lo demás (un bloqueo total).
- La denegación prevalece. Un plugin queda bloqueado si cualquier manifiesto activo o plugin instalado lo prohíbe. Si nada prohíbe nada, no se bloquea nada.
- Excepción para sí mismo. Los
requiredPluginsyoptionalPluginsde un manifiesto (o de un plugin) —y, en el caso de un plugin, el propio plugin— están exentos de su propia lista de prohibidos, por lo que"forbiddenPlugins": ["*"]más"optionalPlugins": ["acme/approved"]significa “permitir solo lo que enumera este manifiesto; prohibir todo lo demás”. La excepción cubre solo esas entradas directas, no las dependencias transitivas de un plugin requerido; enumérelas explícitamente en un bloqueo total. - No se puede volver a permitir entre ámbitos. La lista de permitidos de un manifiesto o plugin no puede volver a permitir lo que otro prohíbe. Un bloqueo total con
"forbiddenPlugins": ["*"]no puede eludirse desde un ámbito inferior.
- En el momento de la instalación: se rechaza la instalación de un plugin bloqueado (o de uno cuyos plugins requeridos no pueden satisfacerse, o cuyo nombre entra en conflicto con un plugin instalado).
- En el momento de la carga: un plugin bloqueado después de ya estar instalado permanece en disco, pero sus skills se omiten al inicio de la sesión con una advertencia que indica quién lo prohíbe.
owner/repo y URL de git indicadas arriba.
Herencia y niveles
- Enterprise — el manifiesto gestionado de toda la cuenta, configurado por un admin.
- Org — un manifiesto gestionado a nivel de organización, por debajo de su cuenta (una org puede agregar a lo que declara su cuenta, pero no puede contradecirlo). Esto se aplica solo a las sesiones de Devin en la nube: la CLI se autentica a nivel de cuenta y no tiene contexto de org, así que los requisitos y las prohibiciones a nivel de org no se aplican a los usuarios de la CLI. Coloca todo lo que necesites hacer cumplir en la CLI en el manifiesto de Enterprise/cuenta.
- Repo — los
requiredPlugins/optionalPlugins/forbiddenPluginsen el.devin/config.jsonde un checkout, detectados al recorrer hacia arriba desde tu directorio de trabajo. - User — plugins que instalas tú mismo con
devin plugins install.
- Un nivel inferior nunca puede volver a permitir lo que un nivel superior prohíbe.
- Un nivel inferior nunca puede prohibir lo que un nivel superior exige; esa prohibición se ignora y el plugin igualmente se carga.
Una lista de denegación solo se anula en su propio nivel
forbiddenPlugins
de un nivel solo se anula con los optionalPlugins (o
requiredPlugins) de ese mismo manifiesto, nunca con
una lista de un nivel inferior.
Por ejemplo, un manifiesto gestionado a nivel Enterprise puede restringir la cuenta a un
único plugin aprobado:
acme/approved y prohíbe
cualquier otro plugin.” Ninguna org, repo o usuario puede ampliar esa lista de permitidos, ni
instalando un plugin ni agregándolo a optionalPlugins de un nivel inferior.
La excepción también cubre solo las entradas que este manifiesto enumera directamente; las
dependencias transitivas de un plugin requerido no están exentas, así que enuméralas
explícitamente en un bloqueo.
Conflictos y dependencias
- Si el mismo plugin tiene un requisito y una prohibición en el mismo nivel pero en manifiestos distintos (por ejemplo, dos plugins independientes instalados a nivel de usuario), prevalece la prohibición: una lista de permitidos solo exime las entradas de su propio manifiesto, así que no puede salvar un plugin que otro manifiesto prohíbe. (Dentro de un único manifiesto, sus propios requeridos/opcionales siguen exentos de sus propias prohibiciones, como arriba.)
- Un plugin bloqueado por gobernanza falla de forma no crítica: al inicio de la sesión, sus skills se omiten con una advertencia que indica quién lo prohibió, en lugar de abortar la sesión.
- Que otros plugins dependan de él no le concede ninguna exención. Un plugin incorporado solo como una dependencia transitiva sigue estando sujeto a toda prohibición que se le aplique, y hereda el nivel de autoridad más alto de cualquier plugin que lo requiera.

