Saltar al contenido principal

Plugin Directories

Plugin Directory es un mecanismo para cargar de forma agrupada, desde un único directorio, skills, hooks, servidores MCP, agentes personalizados, configuración de LSP, etc. Se usa cuando quieres empaquetar un conjunto de funcionalidades reutilizable dentro de una app o un repositorio. En la versión Laravel puedes indicarlo mediante pluginDirectories en SessionConfig o ResumeSessionConfig.

Casos de uso

  • Distribuir varias extensiones como un único capability pack
  • Empaquetar plugins en el repositorio para que todo el equipo use la misma configuración
  • Desarrollar y validar en local plugins previos a su publicación en un marketplace
  • Sobreescribir temporalmente un plugin instalado con un checkout local
Si solo tienes un servidor MCP, un hook y un agente personalizado, es más sencillo especificarlos directamente en mcpServers, hooks y customAgents. Plugin Directory es adecuado cuando quieres distribuir varias funcionalidades relacionadas juntas.

Estructura del directorio

Copilot CLI busca en cada plugin directory un plugin.json o un SKILL.md en la raíz.
my-plugin/
├── plugin.json
├── SKILL.md
├── hooks.json
├── .mcp.json
├── agents/
│   └── code-reviewer.md
└── skills/
    └── lint-fix/
        └── SKILL.md
plugin.json también puede ubicarse en .github/plugin.json o .github/plugin/plugin.json. Como skills, hooks, MCP, agentes, etc. tienen loaders independientes, basta con incluir lo que necesites.

Cargarlos desde Laravel

use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

Copilot::start(function (CopilotSession $session): void {
    $response = $session->sendAndWait(
        prompt: 'この変更をプラグインのレビュー方針で確認して',
    );

    dump($response->content());
}, config: new SessionConfig(
    pluginDirectories: [
        base_path('plugins/code-reviewer'),
        base_path('plugins/lint-fix'),
    ],
));
También puedes indicarlo como array:
Copilot::run(
    prompt: 'READMEを改善して',
    config: [
        'pluginDirectories' => [
            base_path('plugins/docs-writer'),
        ],
    ],
);

Diferencias con cli_args

En el SDK oficial a veces se documenta como el argumento --plugin-dir al arrancar el runtime. En la versión Laravel, lo básico es usar pluginDirectories de la configuración de sesión. Por otro lado, si quieres pasar argumentos al proceso CLI en sí, puedes usar cli_args de config/copilot.php o de Copilot::useStdio(). Ten en cuenta que cli_args solo funciona cuando el SDK arranca el CLI en modo stdio, y se ignora cuando te conectas a un runtime externo mediante useTcp().
$stdioConfig = config('copilot');
$stdioConfig['cli_args'] = [
    '--plugin-dir',
    base_path('plugins/code-reviewer'),
];

Copilot::useStdio($stdioConfig)->start(fn (CopilotSession $session) => ...);
Da preferencia a pluginDirectories. Puedes indicarlo por sesión y gestionarlo junto con el resto de opciones de SessionConfig.

Consejos de reproducibilidad

  • Prefiere rutas absolutas con base_path() en lugar de relativas
  • Versiona los plugins que empaquetes en el repositorio
  • Si usas plugins de un marketplace o de distribución externa, documenta la versión utilizada
  • En producción no permitas que se indique una ruta de plugin arbitraria desde input del usuario

Referencias

Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026