Skip to main content
Los plugins están en beta. El comportamiento y la configuración pueden cambiar en futuras versiones.
Un plugin es un conjunto de skills que puedes instalar desde un repositorio de GitHub, una URL de git o una carpeta local y reutilizar en distintos proyectos. Al instalar un plugin, sus skills pasan a estar disponibles como comandos de barra diagonal /<plugin>:<skill>, y también puede incorporar automáticamente otros plugins de los que depende. Un plugin es simplemente un origen que contiene:
my-plugin/
├── .devin-plugin/
│   └── plugin.json     # El manifiesto del plugin
└── skills/
    └── review/
        └── SKILL.md    # Un skill ordinario
El directorio 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.

Instalar un plugin

El origen de un plugin puede ser un owner/repo de GitHub, una URL de git o una ruta local:
# Desde GitHub
devin plugins install acme/review-tools

# Desde cualquier host de git
devin plugins install https://gitlab.com/acme/review-tools.git

# Desde una carpeta local (ideal para desarrollo de plugins)
devin plugins install ./my-plugin
Antes de instalarlo, Devin muestra lo que agrega el plugin: las skills que proporciona, los plugins requeridos que se instalarán automáticamente y cualquier política que introduzca (por ejemplo, si prohíbe otros plugins). Usa -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

# Listar los plugins instalados, sus versiones y si alguno está bloqueado por política
devin plugins list

# Mostrar los skills de un plugin y sus listas de requeridos/opcionales/prohibidos
devin plugins info review-tools

# Volver a obtener un plugin (o todos los plugins) en la versión más reciente
devin plugins update review-tools
devin plugins update

# Eliminar un plugin (los plugins requeridos instalados automáticamente se conservan)
devin plugins remove review-tools
Los plugins locales se enlazan directamente con su carpeta de origen, por lo que las ediciones se reflejan al instante: 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": "review-tools",
  "version": "1.0.0",
  "description": "Code-review skills for our team",
  "requiredPlugins": [
    "acme/secure-base",
    { "source": "github", "repo": "acme/audit-logging" }
  ],
  "optionalPlugins": [
    "acme/deploy-tools",
    { "source": "url", "url": "https://gitlab.com/acme/extra.git" }
  ],
  "forbiddenPlugins": ["sketchy-org/bad-plugin", "acme/*", "*"]
}
Campos de metadatos compatibles: name, version, description, author ({ name, email }), homepage, repository, license y keywords. Una entrada de dependencia es un origen: puede ser una cadena abreviada o un objeto:
  • "owner/repo" → GitHub
  • "https://…", "git@…", "ssh://…" → URL de git
  • { "source": "github", "repo": "owner/repo" }
  • { "source": "url", "url": "https://gitlab.com/team/plugin.git" }
Todas las formas de GitHub para el mismo repo (owner/repo, la URL HTTPS, la URL .git, la forma SSH) se refieren a la misma identidad de plugin.

Dependencias y gobernanza

Un plugin puede declarar tres listas, lo que permite que un único plugin actúe como una colección seleccionada y gobernada de otros plugins.

requiredPlugins

Se instalan automáticamente (de forma recursiva) cuando se instala el plugin. Si un plugin requerido está bloqueado por una política, falla toda la instalación; no existe una instalación parcial.

optionalPlugins

Una lista de plugins permitidos que este plugin admite. No se instalan automáticamente; la lista solo importa como excepción frente a una entrada prohibida (ver más abajo).

forbiddenPlugins

Una lista de bloqueo. Cada entrada puede ser una de las siguientes:
  • Una identidad exacta del plugin, escrita como owner/repo, una URL de git o una ruta local.
  • Un patrón glob: cualquier entrada que contenga *. El * coincide con cualquier secuencia de caracteres, incluido /. Los patrones se normalizan primero al espacio de identidad canónica, por lo que acme/* pasa a ser https://github.com/acme/* (todos los repos de GitHub de acme), */secrets coincide con un repo llamado secrets de cualquier propietario, y https://gitlab.com/acme/* coincide con cualquier repo en esa ruta.
  • El valor único "*", que coincide con todos los demás plugins (un bloqueo total imposible de eludir).
Las reglas de la política son:
  • La denegación prevalece. Un plugin se bloquea si cualquier plugin instalado lo prohíbe (mediante su identidad exacta, un glob coincidente o "*").
  • Autoexcepción. Los requiredPlugins, optionalPlugins y el propio plugin quedan exentos de su propia lista de prohibidos. Por lo tanto, forbiddenPlugins: ["*"] junto con optionalPlugins: [B, C] significa “permitirme a mí mismo, a B y a C; prohibir todo lo demás.”
  • No se puede volver a permitir entre plugins. Las listas de permitidos de un plugin no pueden volver a permitir lo que otro plugin prohíbe. Un plugin instalado con forbiddenPlugins: ["*"] es un bloqueo total imposible de eludir.
  • Abierto de forma predeterminada. Si ningún plugin instalado prohíbe nada, no se bloquea nada.
La política se aplica en dos momentos:
  • 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: si un plugin queda bloqueado después de instalarse (por ejemplo, si más tarde se instala un plugin que lo prohíbe), permanece en disco pero sus skills se omiten al inicio de la sesión, con una advertencia que indica qué plugin lo prohíbe.