plugin.json, llamado el manifiesto, que nombra el plugin. Claude Code carga el directorio como una unidad, por lo que puede compartirlo con compañeros de equipo, instalarlo en varios proyectos o publicarlo en un marketplace.
Esta página es para personas que escriben sus propios plugins.
Estos casos se cubren en otras páginas:
- Instalar el plugin de otra persona: consulte Instalar plugins
- No está seguro de si necesita un plugin: consulte Decidir si necesita un plugin en la descripción general
- Los usuarios de su plugin están en claude.ai o en Cowork: la misma carpeta se instala allí con un subconjunto diferente de componentes. Consulte Plugins en claude.ai y en Cowork
- Nada aún: siga Crear su primer plugin, luego Desarrollar sin un marketplace y Probar y depurar.
- Archivos bajo
.claude/ya: haga el recorrido del primer plugin una vez para aprender el diseño, luego siga Convertir una configuración.claude/existente.
Decidir cuándo usar un plugin
Skills, agentes, hooks y servidores MCP funcionan todos de forma independiente en su proyecto o directorio de inicio. Mantenga esa configuración independiente mientras sirva a un proyecto o solo a usted. Cree un plugin cuando desee compartir la configuración con compañeros de equipo, instalarlo en varios proyectos o publicar versiones lanzadas. Cuando mueve skills, agentes, hooks y configuración MCP independientes a un plugin, su ubicación y nombres cambian:- Dónde van los archivos: bajo el directorio propio del plugin, llamado la raíz del plugin, como
skills/,agents/,hooks/hooks.jsony.mcp.json. - Cómo se nombran: los skills y agentes del plugin obtienen el nombre del plugin como prefijo, como
/my-plugin:hello, por lo que dos plugins pueden proporcionar cada uno un skillhellosin colisionar.
.claude/ existente.
Crear su primer plugin
En este recorrido, crea un plugin cuyo único componente es un skill, un saludo, y lo ejecuta con--plugin-dir, que carga un plugin para una sesión sin instalarlo. Un plugin puede contener cualquier mezcla de componentes, como skills, agentes, hooks y servidores MCP, y ninguno es requerido; un skill es el ejemplo más pequeño que muestra el diseño.
Necesita Claude Code instalado e iniciado sesión.
Abra una terminal en el directorio donde desea mantener el plugin, como ~/projects, y ejecute los comandos en estos pasos desde él. Puede mantener un plugin en cualquier lugar, porque pasa su ruta a Claude Code cuando inicia una sesión.
1
Crear el directorio del plugin
Cree el directorio del plugin, con una carpeta
.claude-plugin/ dentro para mantener el manifiesto:2
Escribir el manifiesto
El manifiesto es un archivo JSON llamado Los cuatro campos hacen esto:
plugin.json que le dice a Claude Code el nombre del plugin y lo describe. Guarde este como my-first-plugin/.claude-plugin/plugin.json:my-first-plugin/.claude-plugin/plugin.json
name: requerido. Identifica el plugin y se convierte en el prefijo en cada skill y agente que proporciona el plugin. No ponga espacios en él.description: el texto que los usuarios ven para el plugin en/plugin.version: opcional. Configurarlo mantiene a los usuarios en esa versión hasta que la cambie; Lanzar una nueva versión dice cuándo configurarla u omitirla.author: a quién acreditar.namees requerido dentro de él;emailyurlson opcionales.
plugin.json va dentro de .claude-plugin/. El skill que agrega a continuación va directamente bajo my-first-plugin/, junto a esa carpeta.3
Agregar un skill
El único componente de este plugin es un skill. Cada skill es un directorio bajo Luego cree La línea
skills/ que contiene un archivo SKILL.md. Cree el directorio del skill:my-first-plugin/skills/hello/SKILL.md con este contenido:my-first-plugin/skills/hello/SKILL.md
disable-model-invocation: true significa que Claude no ejecuta el skill por su cuenta, por lo que solo usted lo activa. Elimine esa línea de un skill que desee que Claude ejecute por su cuenta. El comando del skill combina el nombre del plugin y el nombre del skill, por lo que ejecuta este como /my-first-plugin:hello. Para los otros campos del frontmatter, consulte la referencia del frontmatter del skill.4
Validar el plugin
Verifique el manifiesto y el frontmatter del skill antes de ejecutar nada:El comando imprime la ruta del manifiesto que verificó y
✔ Validation passed. Si imprime ✘ Validation failed en su lugar, cada línea anterior a esa línea de resultado nombra el campo a corregir. Busque cada mensaje bajo claude plugin validate reporta errores.5
Ejecutar Claude Code con el plugin
Inicie una sesión con el plugin cargado:Una vez que Claude Code se inicia, ejecute el skill:Claude responde con un saludo.
--plugin-dir. Para continuar trabajando en él sin la bandera, o para probar una compilación .zip, consulte Desarrollar sin un marketplace.
Compartir su plugin
Un plugin que construyó con Crear su primer plugin existe solo en su máquina. Cuando está listo para otras personas, hay tres formas de llevarlo a ellas:- Enviarlo a algunas personas directamente: déles el directorio del plugin o un
.zipdel mismo, y nada necesita ser publicado. Consulte Compartir un plugin sin un marketplace. - Listarlo en su propio marketplace: los compañeros de equipo agregan su marketplace una vez e instalan el plugin por nombre, y reciben sus actualizaciones. Consulte Publicar a través de su propio marketplace.
- Enviarlo al marketplace comunitario de Anthropic: una vez que se lista, cualquiera que agregue ese marketplace puede instalarlo. Consulte Enviar al marketplace comunitario.
Diseño del plugin
Cada tipo de componente, como skills, agentes, hooks y servidores MCP, va en un directorio fijo bajo la raíz del plugin, que es el directorio que pasa a--plugin-dir. Agregue solo los directorios que use. Para hacer clic a través de un directorio de plugin completo y leer qué hace cada archivo, abra el explorador de plugins.
La tabla enumera los directorios con los que la mayoría de los plugins comienzan, y el diseño completo enumera el resto.
Desarrollar sin un marketplace
No necesita un marketplace para ejecutar un plugin que está escribiendo. Cárguelo directamente desde el disco o una URL en su lugar:--plugin-dir: carga un directorio o archivo.zippara una sesión.--plugin-url: obtiene un archivo.zipde una URL para una sesión.claude plugin init: estructura un plugin bajo~/.claude/skills/que se carga cada sesión.
Cargar un plugin para una sesión
Puede cargar un plugin para una sola sesión de tres formas: desde un directorio o archivo.zip en el disco con --plugin-dir, desde una URL con --plugin-url, o desde una variable de entorno cuando no puede agregar una bandera. Cada plugin se carga solo para esa sesión, y nada se escribe en su configuración para él. Cuando edita los archivos del plugin durante la sesión, ejecute /reload-plugins para cargar los cambios.
Desde un directorio o .zip
Cuando inicia claude desde su shell, pase --plugin-dir con el directorio raíz del plugin o un archivo .zip del mismo. Repita la bandera para cargar varios plugins:
Desde una carpeta de plugins
Para cargar varios plugins desde un lugar, pase una carpeta que los contenga, como--plugin-dir ./plugins. Cargar una carpeta de plugins requiere Claude Code v2.1.265 o posterior.
Si la carpeta no tiene un directorio .claude-plugin/ y no tiene componentes de plugin en su nivel superior, Claude Code la trata como una carpeta de plugins. Cada subcarpeta inmediata que tenga un manifiesto .claude-plugin/plugin.json se carga como un plugin separado. Todo lo demás en la carpeta se omite sin un error, incluida una subcarpeta que no tiene manifiesto. Si un plugin en la carpeta no se carga, verifique que su subcarpeta tenga un .claude-plugin/plugin.json.
En una sesión interactiva, también puede agregar y eliminar plugins en la carpeta después del inicio:
- Una subcarpeta que agrega se carga como un nuevo plugin una vez que existe su manifiesto.
- Cuando elimina una subcarpeta, su plugin se descarga.
/reload-plugins para aplicarlo.
Desde una URL
Cuando iniciaclaude desde su shell, pase --plugin-url con la dirección de un archivo .zip, como un artefacto de compilación que su CI publica:
/plugin.
Desde una variable de entorno
Para cargar plugins en una sesión donde no puede agregar la bandera--plugin-dir, enumere sus rutas absolutas en la variable de entorno CLAUDE_CODE_PLUGIN_DIRS en su lugar. Claude Code carga cada ruta como carga una ruta --plugin-dir. Estos plugins se cargan además de cualquiera que pase con --plugin-dir. La configuración del proyecto y local no puede establecer esta variable. CLAUDE_CODE_PLUGIN_DIRS requiere Claude Code v2.1.280 o posterior.
La configuración administrada puede desactivar --plugin-dir y CLAUDE_CODE_PLUGIN_DIRS. Consulte Banderas que cargan un plugin para una sesión. Para probar un plugin junto con un plugin del que depende, consulte Probar un plugin y su dependencia localmente.
Hacer que un plugin se cargue en cada sesión
Su directorio de skills personal es~/.claude/skills/. Claude Code carga cualquier carpeta allí que contenga un .claude-plugin/plugin.json como un plugin en cada sesión, sin bandera y sin paso de instalación. claude plugin init estructura uno de estos plugins para usted.
Estructurar el plugin con claude plugin init
claude plugin init escribe un plugin de inicio bajo ~/.claude/skills/. Requiere Claude Code v2.1.157 o posterior. Estructure uno desde su shell:
~/.claude/skills/my-tool/ con un .claude-plugin/plugin.json y un SKILL.md raíz. Imprime ✔ Created plugin "my-tool" at ~/.claude/skills/my-tool seguido de It will auto-load next session as my-tool@skills-dir. Run /reload-plugins to load it now.
Pase --with skills para que claude plugin init estructura un skill bajo skills/ para usted. Los otros valores --with están en la referencia de comandos de plugin.
Nombrar los skills del plugin
El skill raíz en~/.claude/skills/my-tool/SKILL.md también es un skill personal, por lo que lo invoca como /my-tool, no /my-tool:my-tool. Los skills que agrega bajo skills/ dentro del plugin obtienen el prefijo del nombre del plugin, como /my-tool:example.
Dejar de cargar el plugin
Para dejar de cargar un plugin estructurado, elimine su directorio, o ejecuteclaude plugin disable my-tool@skills-dir en su shell con el nombre my-tool@skills-dir que claude plugin init imprimió. En el ID my-tool@skills-dir, skills-dir se coloca donde iría un nombre de marketplace, porque el plugin se carga desde su directorio de skills en lugar de desde un marketplace.
Compartir el plugin a través de un repositorio
claude plugin init escribe el plugin en su directorio de skills personal en ~/.claude/skills/, por lo que se carga para usted en cada proyecto. Para hacer que un plugin se cargue para todos en un repositorio, cree el mismo diseño usted mismo en <project>/.claude/skills/<name>/, incluido su .claude-plugin/plugin.json. Consulte Plugins compartidos a través de un repositorio para las condiciones bajo las cuales Claude Code lo carga.
Probar y depurar
Cuando un cambio en su plugin no aparece, trabaje a través de estas verificaciones en orden. Cada una le dice qué hizo Claude Code con el plugin:- En su shell, ejecute
claude plugin validate <path>. Verifica el manifiesto y el frontmatter de cada archivo de skill, agente y comando, y sale con0enValidation passed. Agregue--strictpara fallar también en advertencias. Los códigos de salida y el manejo de directorios están en la referencia de comandos de plugin. - En la sesión en ejecución, ejecute
/reload-pluginspara aplicar ediciones que realizó en el disco. Imprime una líneaReloaded:con conteos. Luego confirme que un skill se cargó escribiendo su comando/plugin-name:skill, o encontrando el plugin en la pestaña Installed de/plugin. - En la misma sesión, ejecute
/plugin. La pestaña Installed enumera su plugin y, en los detalles del plugin, los componentes que Claude Code encontró. La pestaña Errors enumera lo que no se cargó y por qué, como una ruta en su manifiesto que no existe. - De vuelta en su shell, ejecute
claude plugin list. Imprime plugins de sesión única y del directorio de skills en sus propias secciones conStatus: ✔ loadedo el error de carga. Para incluir el plugin que está desarrollando, pase--plugin-dircon su ruta antes deplugin list.
/mcp en la sesión para ver el estado del servidor. Cuando el servidor es saludable, /mcp lo enumera como conectado. Si no es así, consulte Servidores MCP que no se inician.
Para verificar un hook, active el evento que coincide. Por ejemplo, pida a Claude que edite un archivo para activar un hook PostToolUse. Luego lea el registro de depuración, que muestra qué hooks coincidieron, sus códigos de salida y su salida.
Las siguientes secciones cubren los fallos que es más probable que encuentre mientras desarrolla, y la página de solución de problemas tiene la entrada completa para cada uno.
Una ruta de componente no se encuentra
La pestaña Errors de/plugin muestra <component> path not found: <path>, por ejemplo commands path not found. Una ruta de componente en su manifiesto, como commands, skills, agents o hooks, apunta a nada. Corrija la ruta o cree el directorio, luego ejecute /reload-plugins en la sesión. Consulte commands path not found.
--plugin-dir en una raíz de marketplace no carga los plugins bajo plugins/
--plugin-dir toma el directorio raíz del plugin, el que contiene .claude-plugin/plugin.json y los directorios de componentes como skills/. Si lo apunta a una raíz de marketplace en su lugar, Claude Code no lee marketplace.json, por lo que un plugin bajo plugins/ no se carga, y no ve ningún error. Apunte la bandera a la carpeta de un plugin, o agregue el marketplace. Consulte la entrada de solución de problemas.
El plugin se carga pero sus skills faltan
El directorioskills/ está dentro de .claude-plugin/, o una entrada skills en el manifiesto apunta a un archivo. Mueva skills/ a la raíz del plugin, apunte cada entrada skills a un directorio que contenga SKILL.md, y ejecute /reload-plugins en la sesión. Consulte El plugin se carga pero sus skills faltan.
El diálogo userConfig nunca aparece
El diálogo para las opciones userConfig de su plugin es parte de la instalación a través de /plugin en una sesión. Cargar con --plugin-dir no lo muestra, ni tampoco claude plugin install en el shell. Con el plugin cargado, ejecute /plugin configure <plugin-name> en la sesión para abrirlo. Consulte El diálogo userConfig nunca aparece.
Verificar que el plugin cambia el comportamiento de Claude
Un plugin que se carga sin errores aún puede no dirigir a Claude de la manera que pretende.claude plugin eval, que ejecuta en su shell, ejecuta sus casos de prueba con y sin el plugin y califica la diferencia. Consulte Probar plugins con evals, comenzando con Crear su primer conjunto de eval.
Convertir una configuración .claude/ existente
Si ya tiene skills, agentes o hooks bajo el directorio .claude/ de un proyecto, puede moverlos a un plugin sin reescribirlos.
Ejecute los comandos en estos pasos desde la raíz del proyecto, que es el directorio que contiene .claude/, porque las rutas cp son relativas a él.
1
Crear la estructura del plugin
Cree el directorio del plugin y su carpeta Cree
.claude-plugin/ junto a .claude/. Puede mover el plugin a cualquier lugar después.my-plugin/.claude-plugin/plugin.json:my-plugin/.claude-plugin/plugin.json
2
Copiar sus archivos existentes
Copie cada directorio de configuración que tenga a la raíz del plugin, y omita el comando para cualquier directorio que no tenga.Ejecute
ls -a my-plugin para confirmar que cada directorio que copió aparece junto a .claude-plugin.3
Mover sus hooks
Si tiene hooks en Cree
.claude/settings.json o .claude/settings.local.json, cree un directorio de hooks:my-plugin/hooks/hooks.json y copie el objeto hooks de su archivo de configuración en él. El formato es el mismo.Este ejemplo muestra la forma con un hook que ejecuta un linter en cada archivo que Claude escribe o edita. Reemplace el ejemplo con su propio objeto hooks.my-plugin/hooks/hooks.json
4
Probar el plugin migrado
Cargue el plugin para una sesión:Verifique cada componente bajo su nuevo nombre:
- Skills: ejecute
/my-plugin:deploypara un skill que era/deploy. - Subagentes: pida a Claude que use el agente
my-plugin:reviewerpara un agente que erareviewer. - Hooks: active el evento que cada hook coincide.
.claude/, permanecen cargados junto con las copias del plugin:
- Skills y agentes: los dos conjuntos no colisionan, porque los skills y agentes del plugin llevan el prefijo
my-plugin:./deployy/my-plugin:deployfuncionan ambos, y Claude vereviewerymy-plugin:reviewercomo dos subagentes. - Hooks: los hooks no tienen prefijo, por lo que un hook que está tanto en su archivo de configuración como en
hooks/hooks.jsonse ejecuta dos veces cada vez que se activa su evento.
.claude/ y elimine el objeto hooks de su archivo de configuración.
Próximos pasos
- Componentes de plugin: agregue agentes, hooks, servidores MCP, servidores LSP y configuración de usuario a su plugin
- Probar plugins con evals: escriba casos de eval y ejecútelos con
claude plugin evalpara verificar qué tan confiablemente el plugin guía el comportamiento de Claude - Publicar un plugin: versione, colóquelo en un marketplace y envíelo al marketplace comunitario
- Plugins en claude.ai y en Cowork: la misma carpeta de plugin se instala en claude.ai y en Cowork. Algunos componentes son solo de Claude Code
- Referencia del manifiesto del plugin: cada campo
plugin.json, regla de ruta y directorio - Skills: escriba los skills que proporciona su plugin
- Plugins de Anthropic en el repositorio claude-code: ejemplos completos trabajados del diseño en esta página, como
feature-devycode-review