Referencia de componentes de plugins
Skills
Los plugins añaden skills a Claude Code, creando atajos/name que usted o Claude pueden invocar.
Ubicación: Directorio skills/ o commands/ en la raíz del plugin, o un único archivo SKILL.md en la raíz del plugin
Formato de archivo: Los skills son directorios con SKILL.md; los comandos son archivos markdown simples
Estructura de skill:
- Los skills y comandos se descubren automáticamente cuando se instala el plugin
- Claude puede invocarlos automáticamente según el contexto de la tarea
- Los skills pueden incluir archivos de apoyo junto a SKILL.md
skills/ y ningún campo de manifiesto skills, un SKILL.md en la raíz del plugin se carga como una única skill. Establezca el campo frontmatter name para controlar el nombre de invocación de la skill. Sin él, Claude Code recurre al nombre del directorio de instalación, que para plugins instalados desde el marketplace es una cadena de versión que cambia en cada actualización. Para plugins que distribuyen más de una skill, use el diseño de directorio skills/ mostrado arriba.
Para obtener detalles completos, consulte Skills.
Agents
Los plugins pueden proporcionar subagents especializados para tareas específicas que Claude puede invocar automáticamente cuando sea apropiado. Ubicación: Directorioagents/ en la raíz del plugin
Formato de archivo: Archivos markdown que describen las capacidades del agent
Estructura del agent:
name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background e isolation. El único valor válido de isolation es "worktree". Por razones de seguridad, hooks, mcpServers y permissionMode no se soportan para agents distribuidos con plugins.
Puntos de integración:
- Los agents aparecen en la interfaz @-mention typeahead bajo su nombre con alcance, como
my-plugin:code-reviewer, una vez que el plugin está habilitado - Claude puede invocar agents automáticamente según el contexto de la tarea
- Los agents pueden ser invocados manualmente por los usuarios
- Los agents del plugin funcionan junto con los agents integrados de Claude
Hooks
Los plugins pueden proporcionar manejadores de eventos que responden automáticamente a eventos de Claude Code. Ubicación:hooks/hooks.json en la raíz del plugin, o en línea en plugin.json
Formato: Configuración JSON con coincidencias de eventos y acciones
Configuración de hook:
Tipos de hook:
command: ejecutar comandos de shell o scriptshttp: enviar el JSON del evento como una solicitud POST a una URLmcp_tool: llamar a una herramienta en un servidor MCP configuradoprompt: evaluar un prompt con un LLM (usa el marcador de posición$ARGUMENTSpara el contexto)agent: ejecutar un verificador agentic con herramientas para tareas de verificación complejas
if toman el nombre de herramienta con alcance mcp__plugin_<plugin-name>_<server-name>__<tool>, y el campo server de un hook mcp_tool toma plugin:<plugin-name>:<server-name>. Un coincidente escrito contra la clave del servidor desnuda nunca se dispara. Consulte Coincidir herramientas MCP y Servidores MCP proporcionados por plugins.
MCP servers
Los plugins pueden agrupar servidores Model Context Protocol (MCP) para conectar Claude Code con herramientas y servicios externos. Ubicación:.mcp.json en la raíz del plugin, o en línea en plugin.json
Formato: Configuración estándar del servidor MCP
Configuración del servidor MCP:
- Los servidores MCP del plugin se inician automáticamente cuando se habilita el plugin
- Los servidores aparecen como herramientas MCP estándar en el kit de herramientas de Claude
- Las capacidades del servidor se integran sin problemas con las herramientas existentes de Claude
- Los servidores del plugin se pueden configurar independientemente de los servidores MCP del usuario
LSP servers
Los plugins pueden proporcionar servidores Language Server Protocol (LSP) para dar a Claude inteligencia de código en tiempo real mientras trabaja en su base de código. La integración de LSP proporciona:- Diagnósticos instantáneos: Claude ve errores y advertencias inmediatamente después de cada edición
- Navegación de código: ir a definición, encontrar referencias e información al pasar el ratón
- Conciencia del lenguaje: información de tipo y documentación para símbolos de código
.lsp.json en la raíz del plugin, o en línea en plugin.json
Formato: Configuración JSON que asigna nombres de servidores de lenguaje a sus configuraciones
Formato del archivo .lsp.json:
plugin.json:
Campos opcionales:
restartOnCrash y shutdownTimeout requieren Claude Code v2.1.205 o posterior. Antes de v2.1.205, el esquema de configuración aceptaba ambas opciones pero establecer cualquiera de ellas hacía que Claude Code omitiera ese servidor LSP completamente al inicio, con la razón visible solo en la salida de claude --debug.
Múltiples servidores para la misma extensión: cuando más de un servidor LSP habilitado declara la misma extensión de archivo en extensionToLanguage, ya sea que los servidores provengan de un plugin o de diferentes plugins, el primer servidor registrado maneja archivos con esa extensión y los otros nunca se inician. La interfaz /plugin muestra una advertencia nombrando el plugin cuyo servidor está activo.
Servidores que fallan al inicializarse: Claude Code omite un servidor cuya configuración es inválida, por ejemplo uno que falta command o extensionToLanguage, y los otros servidores configurados aún se inician. Ejecute claude --debug para ver por qué se omitió un servidor.
Un servidor omitido no reclama sus extensiones de archivo, por lo que otro servidor válido que declare la misma extensión, del mismo plugin o de un plugin diferente, aún maneja esos archivos. Antes de v2.1.205, un servidor que falló al inicializarse aún reclamaba sus extensiones y bloqueaba otro servidor válido para la misma extensión.
Plugins LSP disponibles:
Instale el servidor de lenguaje primero, luego instale el plugin desde el marketplace.
Monitors
Los plugins pueden declarar monitores de fondo que Claude Code inicia automáticamente cuando el plugin está activo. Cada monitor ejecuta un comando de shell durante la vida útil de la sesión y entrega cada línea de stdout a Claude como una notificación, para que Claude pueda reaccionar a entradas de registro, cambios de estado o eventos sondeados sin que se le pida que inicie la vigilancia por sí mismo. Los monitores del plugin utilizan el mismo mecanismo que la herramienta Monitor y comparten sus restricciones de disponibilidad. Se ejecutan solo en sesiones CLI interactivas, se ejecutan sin sandbox al mismo nivel de confianza que los hooks, y se omiten en hosts donde la herramienta Monitor no está disponible. Ubicación:monitors/monitors.json en la raíz del plugin, o en línea en plugin.json
Formato: Array JSON de entradas de monitor
El siguiente monitors/monitors.json vigila un endpoint de estado de implementación y un registro de errores local:
experimental.monitors en plugin.json en el mismo array. Para cargar desde una ruta no predeterminada, establezca experimental.monitors en una cadena de ruta relativa como "./config/monitors.json". Los monitores son un componente experimental.
Campos requeridos:
Campos opcionales:
El valor
command soporta las sustituciones de ruta ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA} y ${CLAUDE_PROJECT_DIR}, más cualquier ${ENV_VAR} del entorno. Prefije el comando con cd "${CLAUDE_PLUGIN_ROOT}" && si el script necesita ejecutarse desde el directorio del plugin.
Un comando command de monitor no puede hacer referencia a valores ${user_config.*}. El comando se ejecuta a través de un shell, por lo que Claude Code rechaza el monitor con un error en lugar de sustituir el valor. Los procesos de monitor no reciben variables de entorno CLAUDE_PLUGIN_OPTION_<KEY>, por lo que el script de monitor debe leer el valor de un archivo de configuración que posee. Antes de v2.1.207, los comandos de monitor sustituían valores ${user_config.*}.
Deshabilitar un plugin a mitad de sesión no detiene los monitores que ya se están ejecutando. Se detienen cuando termina la sesión.
Themes
Los plugins pueden distribuir temas de color que aparecen en/theme junto con los presets integrados y los temas locales del usuario. Un tema es un archivo JSON en themes/ con un preset base y un mapa disperso overrides de tokens de color. Los temas son un componente experimental.
custom:<plugin-name>:<slug> en la configuración del usuario. Los temas de plugin son de solo lectura; presionar Ctrl+E en uno en /theme lo copia en ~/.claude/themes/ para que el usuario pueda editar la copia.
Alcances de instalación de plugins
Cuando instala un plugin, elige un alcance que determina dónde está disponible el plugin y quién más puede usarlo:
Los plugins utilizan el mismo sistema de alcance que otras configuraciones de Claude Code. Para instrucciones de instalación y banderas de alcance, consulte Instalar plugins. Para una explicación completa de los alcances, consulte Alcances de configuración.
Plugins de directorio de skills
Cualquier carpeta bajo un directorio de skills que contenga un manifiesto.claude-plugin/plugin.json se carga como un plugin llamado <name>@skills-dir en la siguiente sesión, sin marketplace y sin paso de instalación. Cree uno con plugin init. A diferencia de una instalación del marketplace, el plugin se descubre en su lugar en lugar de copiarse en la caché del plugin.
Un árbol de directorio de skills soporta tres cosas distintas:
Elija dónde se carga el plugin
Un plugin de alcance de proyecto se verifica en el repositorio y llega a cada colaborador que lo clona. Porque ese contenido proviene del repositorio en lugar de usted, se carga solo después de la misma puerta de confianza que rige
.claude/settings.json, y los componentes que ejecutan código están restringidos aún más:
- Los servidores MCP que declara pasan por la misma aprobación por servidor que un
.mcp.jsondel proyecto - Los servidores LSP se inician solo después de que confíe en el espacio de trabajo
- Los monitores de fondo no se cargan
Editar, recargar y deshabilitar un plugin de directorio de skills
Los cambios que realiza en elSKILL.md de una skill tienen efecto inmediatamente en la sesión actual. Los cambios en otros componentes del plugin, como hooks/, .mcp.json, agents/ y output-styles/, no lo hacen. Ejecute /reload-plugins o reinicie Claude Code para recogerlos. Consulte Detección de cambios en vivo.
Para dejar de cargar un plugin de directorio de skills, elimine su carpeta o deshabilítelo por nombre. No hay paso de uninstall porque nada se instaló desde un marketplace.
Esquema del manifiesto del plugin
El archivo.claude-plugin/plugin.json define los metadatos y la configuración de su plugin. Esta sección documenta todos los campos y opciones soportados.
El manifiesto es opcional. Si se omite, Claude Code descubre automáticamente componentes en ubicaciones predeterminadas y deriva el nombre del plugin del nombre del directorio. Use un manifiesto cuando necesite proporcionar metadatos o rutas de componentes personalizadas.
Esquema completo
Campos requeridos
Si incluye un manifiesto,name es el único campo requerido.
Este nombre se utiliza para espacios de nombres de componentes. Por ejemplo, en la interfaz de usuario, el agent
agent-creator para el plugin con nombre plugin-dev aparecerá como plugin-dev:agent-creator.
Campos no reconocidos
Claude Code ignora los campos de nivel superior que no reconoce. Puede mantener metadatos de otro ecosistema enplugin.json y el plugin aún se carga. Esto hace que sea práctico mantener un manifiesto que funcione como un manifiesto de extensión de VS Code o Cursor, un package.json de npm, o un manifiesto de paquete MCPB/DXT.
claude plugin validate reporta campos no reconocidos como advertencias, no como errores. Si un campo está a uno o dos caracteres de uno reconocido, la advertencia sugiere el nombre probable previsto. Un plugin con solo advertencias de campos no reconocidos aún pasa la validación y se carga en tiempo de ejecución.
Los campos con el tipo incorrecto aún fallan. Por ejemplo, un valor keywords que es una cadena en lugar de un array es un error de carga, y claude plugin validate lo reporta como tal.
Pase --strict para tratar las advertencias como errores. Úselo en CI para detectar un nombre de campo mal escrito o un campo dejado de otra herramienta de manifiesto antes de publicar, aunque el plugin se cargue en tiempo de ejecución.
Campos de metadatos
Habilitación predeterminada
EstablezcadefaultEnabled: false en plugin.json para enviar un plugin que se instale deshabilitado. El usuario lo activa con claude plugin enable <plugin> o la interfaz /plugin. Úselo para plugins que añaden costo o alcance que un usuario debe optar por usar, como uno que se conecta a un servicio externo. Esto requiere Claude Code v2.1.154 o posterior. Las versiones anteriores ignoran el campo y habilitan el plugin en la instalación.
defaultEnabled es la alternativa cuando nada más ha decidido el estado del plugin. Dos cosas tienen prioridad sobre él:
- La configuración del usuario: una entrada para el plugin en
enabledPluginsen cualquier alcance de configuración. Una vez escrita, persiste en actualizaciones y reinstalaciones del plugin, por lo que cambiardefaultEnableden una versión posterior no cambia un usuario existente. - Un requisito de dependencia: cuando un plugin es requerido por otro que está activo, Claude Code escribe
truepara él en el tiempo de instalación o habilitación. Eso le da una configuración explícita, por lo que su propio predeterminado ya no se aplica. Consulte Habilitar o deshabilitar un plugin con dependencias.
plugin.json. Consulte Campos de plugin opcionales.
Campos de ruta de componentes
Componentes experimentales
Los componentes bajo la claveexperimental, themes y monitors, tienen un esquema de manifiesto que puede cambiar entre versiones mientras se estabilizan. Dónde los declare es una migración separada: el nivel superior aún funciona, claude plugin validate advierte, y una versión futura requerirá experimental.*.
Configuración del usuario
El campouserConfig declara valores que Claude Code solicita al usuario cuando se habilita el plugin. Use esto en lugar de requerir que los usuarios editen manualmente settings.json.
Cada valor está disponible para sustitución como
${user_config.KEY} en configuraciones de servidores MCP y LSP, comandos de hooks y comandos de monitores. Los valores no sensibles también pueden sustituirse en contenido de skills y agents. Todos los valores se exportan a procesos de hooks y subprocesos de servidores MCP y LSP como variables de entorno CLAUDE_PLUGIN_OPTION_<KEY>, donde <KEY> es la clave de opción en mayúsculas.
Los campos que se ejecutan en un shell rechazan ${user_config.*}: sustituir un valor configurado en un comando shell permitiría que el shell ejecute lo que contenga ese valor, por lo que el componente falla con un error en su lugar. Cada campo rechazado tiene una forma alternativa de pasar el valor:
Antes de v2.1.207, estos campos sustituían valores
${user_config.KEY}; actualice los plugins que dependían de esto.
Los valores no sensibles se almacenan bajo la clave pluginConfigs en settings.json como pluginConfigs[<plugin-id>].options. Claude Code escribe la clave en la configuración del usuario y la lee desde la configuración del usuario, la bandera --settings y la configuración administrada solo; las entradas en .claude/settings.json o .claude/settings.local.json de un proyecto se ignoran. Antes de v2.1.207, Claude Code también leía la configuración del proyecto y local.
Los valores sensibles van al Keychain de macOS, o a ~/.claude/.credentials.json en plataformas donde no hay un keychain soportado disponible. El almacenamiento en keychain se comparte con tokens OAuth y tiene un límite total aproximado de 2 KB, así que mantenga los valores sensibles pequeños.
Canales
El campochannels permite que un plugin declare uno o más canales de mensajes que inyecten contenido en la conversación. Cada canal se vincula a un servidor MCP que proporciona el plugin.
server es requerido y debe coincidir con una clave en los mcpServers del plugin. El userConfig opcional por canal usa el mismo esquema que el campo de nivel superior, permitiendo que el plugin solicite tokens de bot o IDs de propietario cuando se habilita el plugin.
Reglas de comportamiento de rutas
Si una ruta personalizada reemplaza o extiende el directorio predeterminado del plugin depende del campo:- Reemplaza el predeterminado:
commands,agents,outputStyles,experimental.themes,experimental.monitors. Por ejemplo, cuando el manifiesto especificacommands, el directorio predeterminadocommands/no se escanea. Para mantener el predeterminado y añadir más, enumérelo explícitamente:"commands": ["./commands/", "./extras/"] - Se añade al predeterminado:
skills. El directorio predeterminadoskills/siempre se escanea, y los directorios enumerados enskillsse cargan junto a él. Excepción: para una entrada del marketplace cuyasourcese resuelve a la raíz del marketplace, declarar subdirectorios específicos reemplaza el escaneo predeterminado deskills/ - Reglas de fusión propias: hooks, MCP servers y LSP servers. Consulte cada sección para ver cómo se combinan múltiples fuentes
claude plugin list y la vista de detalles /plugin. El plugin aún se carga usando las rutas del manifiesto. No se muestra advertencia cuando la clave del manifiesto apunta a la carpeta predeterminada, por ejemplo "commands": ["./commands/deploy.md"], porque la carpeta se aborda explícitamente en ese caso.
Para todos los campos de ruta:
- Todas las rutas deben ser relativas a la raíz del plugin y comenzar con
./ - Los componentes de rutas personalizadas utilizan las mismas reglas de nomenclatura y espacios de nombres
- Se pueden especificar múltiples rutas como arrays
- Cuando una ruta de skill apunta a un directorio que contiene un
SKILL.mddirectamente, por ejemplo"skills": ["./"]apuntando a la raíz del plugin, el campo frontmatternameenSKILL.mddetermina el nombre de invocación de la skill. Esto proporciona un nombre estable independientemente del directorio de instalación. Sinameno se establece en el frontmatter, el nombre base del directorio se usa como alternativa.
SKILL.md en su raíz, sin subdirectorio skills/, y sin campo de manifiesto skills se carga automáticamente como un plugin de una sola skill en Claude Code v2.1.142 y posterior. No necesita establecer "skills": ["./"] en plugin.json para este diseño. El nombre de invocación de la skill sigue la misma regla que arriba: el campo frontmatter name, o el nombre base del directorio como alternativa.
Ejemplos de rutas:
Variables de entorno
Claude Code proporciona tres variables para hacer referencia a rutas:
Los tres se exportan como variables de entorno a procesos de hooks y a subprocesos de servidores MCP y LSP. Qué campos sustituyen en línea depende del componente del plugin:
En comandos de hooks, use forma exec con
args para que cada ruta se pase como un argumento sin comillas. En hooks de forma shell y comandos de monitores, envuélvalo en comillas dobles, como en "${CLAUDE_PROJECT_DIR}/scripts/server.sh". Este hook de forma shell ejecuta un script incluido con un plugin:
${CLAUDE_PLUGIN_ROOT} cambia cuando se actualiza el plugin. El directorio de la versión anterior permanece en el disco durante aproximadamente siete días después de una actualización antes de la limpieza, pero trátelo como efímero y no escriba estado aquí.
Cuando un plugin se actualiza a mitad de sesión, los comandos de hooks, monitores, servidores MCP y servidores LSP siguen usando la ruta de la versión anterior. Ejecute /reload-plugins para cambiar hooks, servidores MCP y servidores LSP a la nueva ruta; los monitores requieren un reinicio de sesión.
Los servidores MCP también pueden llamar a la solicitud roots/list para leer los directorios de trabajo de la sesión en tiempo de ejecución. Consulte qué devuelve roots/list y cuándo Claude Code notifica al servidor de cambios.
Directorio de datos persistente
El directorio${CLAUDE_PLUGIN_DATA} se resuelve a ~/.claude/plugins/data/{id}/, donde {id} es el identificador del plugin con caracteres fuera de a-z, A-Z, 0-9, _ y - reemplazados por -. Para un plugin instalado como formatter@my-marketplace, el directorio es ~/.claude/plugins/data/formatter-my-marketplace/.
Un uso común es instalar dependencias de lenguaje una vez y reutilizarlas en sesiones y actualizaciones de plugins. Porque el directorio de datos sobrevive a cualquier versión única del plugin, una verificación de existencia de directorio solo no puede detectar cuándo una actualización cambia el manifiesto de dependencias del plugin. El patrón recomendado compara el manifiesto incluido contra una copia en el directorio de datos y reinstala cuando difieren.
Este hook SessionStart instala node_modules en la primera ejecución y nuevamente siempre que una actualización del plugin incluya un package.json cambiado:
diff sale con código distinto de cero cuando la copia almacenada falta o difiere de la incluida, cubriendo tanto la primera ejecución como las actualizaciones que cambian dependencias. Si npm install falla, el rm final elimina el manifiesto copiado para que la siguiente sesión reintente.
Los scripts incluidos en ${CLAUDE_PLUGIN_ROOT} pueden ejecutarse contra los node_modules persistidos:
/plugin muestra el tamaño del directorio y solicita confirmación antes de eliminar. La CLI elimina por defecto; pase --keep-data para preservarlo.
Almacenamiento en caché de plugins y resolución de archivos
Los plugins se especifican de una de dos formas:- A través de
claude --plugin-diroclaude --plugin-url, durante la duración de una sesión. - A través de un marketplace, instalado para sesiones futuras.
~/.claude/plugins/cache) en lugar de usarlos en su lugar. Entender este comportamiento es importante al desarrollar plugins que hacen referencia a archivos externos.
Cada versión instalada es un directorio separado en la caché. Cuando actualiza o desinstala un plugin, el directorio de versión anterior se marca como huérfano y se elimina automáticamente 7 días después. El período de gracia permite que las sesiones de Claude Code concurrentes que ya cargaron la versión anterior sigan ejecutándose sin errores.
Las herramientas Glob y Grep de Claude omiten directorios de versión huérfanos durante búsquedas, por lo que los resultados de archivos no incluyen código de plugin obsoleto.
Limitaciones de traversal de rutas
Los plugins instalados no pueden hacer referencia a archivos fuera de su directorio. Las rutas que traversan fuera de la raíz del plugin (como../shared-utils) no funcionarán después de la instalación porque esos archivos externos no se copian a la caché.
Compartir archivos dentro de un marketplace con enlaces simbólicos
Si su plugin necesita compartir archivos con otras partes del mismo marketplace, puede crear enlaces simbólicos dentro de su directorio de plugin. La forma en que se maneja un enlace simbólico cuando el plugin se copia en la caché depende de dónde se resuelva su destino:- Dentro del directorio propio del plugin: el enlace simbólico se preserva como un enlace simbólico relativo en la caché, por lo que sigue resolviendo al destino copiado en tiempo de ejecución.
- En otro lugar dentro del mismo marketplace: el enlace simbólico se desreferencia. El contenido del destino se copia en la caché en su lugar. Esto permite que el directorio
skills/de un meta-plugin se vincule a skills definidas por otros plugins en el marketplace. - Fuera del marketplace: el enlace simbólico se omite por seguridad. Esto evita que los plugins extraigan archivos arbitrarios del host, como rutas del sistema, en la caché.
--plugin-dir o desde una ruta local, solo se preservan los enlaces simbólicos que se resuelven dentro del directorio propio del plugin. Todos los demás se omiten.
El siguiente comando crea un enlace desde dentro de un plugin del marketplace a una skill compartida definida por un plugin hermano. En Windows, use mklink /D desde un símbolo del sistema elevado o habilite el Modo de desarrollador:
Estructura del directorio del plugin
Diseño estándar del plugin
Un plugin completo sigue esta estructura:CLAUDE.md en la raíz del plugin no se carga como contexto del proyecto. Los plugins contribuyen contexto a través de skills, agents y hooks en lugar de CLAUDE.md. Para enviar instrucciones que se carguen en el contexto de Claude, colóquelas en un skill.
Referencia de ubicaciones de archivos
Referencia de comandos CLI
Claude Code proporciona comandos CLI para la gestión de plugins no interactiva, útil para scripting y automatización.plugin init
Cree un nuevo plugin en~/.claude/skills/<name>/. En la siguiente sesión de Claude Code se carga automáticamente como <name>@skills-dir y aparece en /plugin y claude plugin list sin paso de instalación.
Consulte Plugins de directorio de skills para requisitos de alcance y confianza.
<name>: Nombre del plugin. Se convierte en el espacio de nombres de la skill y el nombre del directorio bajo~/.claude/skills/, por lo que no puede contener espacios ni separadores de ruta.
Alias:
new
Cada valor --with añade un archivo de inicio para ese componente, listo para editar:
El plugin creado usa la fuente
@skills-dir en lugar de un marketplace. Los administradores pueden bloquear esta fuente con strictKnownMarketplaces o añadiendo {"source": "skills-dir"} a blockedMarketplaces en configuración administrada. Cuando se bloquea, plugin init falla antes de escribir.
Ejemplos:
plugin install
Instala un plugin desde los marketplaces disponibles.<plugin>: Nombre del plugin oplugin-name@marketplace-namepara un marketplace específico
El alcance determina qué archivo de configuración se añade el plugin instalado. Por ejemplo,
--scope project escribe en enabledPlugins en .claude/settings.json, haciendo que el plugin esté disponible para todos los que clonan el repositorio del proyecto.
Ejemplos:
plugin uninstall
Elimina un plugin instalado.<plugin>: Nombre del plugin oplugin-name@marketplace-name
Alias:
remove, rm
Por defecto, desinstalar del último alcance restante también elimina el directorio ${CLAUDE_PLUGIN_DATA} del plugin. Use --keep-data para preservarlo, por ejemplo cuando reinstale después de probar una nueva versión.
plugin prune
Elimina las dependencias de plugins instaladas automáticamente que ya no son requeridas por ningún plugin instalado. Las dependencias que Claude Code incluyó para satisfacer el campodependencies de otro plugin se eliminan; los plugins que instaló directamente nunca se tocan.
Alias:
autoremove
El comando lista las dependencias huérfanas y solicita confirmación antes de eliminarlas. Para eliminar un plugin y limpiar sus dependencias en un paso, ejecute claude plugin uninstall <plugin> --prune.
claude plugin prune requiere Claude Code v2.1.121 o posterior.plugin enable
Habilita un plugin deshabilitado. Si el plugin declara dependencias, Claude Code las habilita transitivamente en el mismo alcance, y el comando falla cuando una dependencia no está instalada.<plugin>: Nombre del plugin oplugin-name@marketplace-name
plugin disable
Deshabilita un plugin sin desinstalarlo. Falla cuando otro plugin habilitado depende de el objetivo. El mensaje de error incluye un comando encadenado que deshabilita primero cada dependiente.<plugin>: Nombre del plugin oplugin-name@marketplace-name
plugin update
Actualiza un plugin a la versión más reciente.<plugin>: Nombre del plugin oplugin-name@marketplace-name
plugin list
Lista los plugins instalados con su versión, marketplace de origen y estado de habilitación.
Dentro de una sesión interactiva,
/plugin list imprime el mismo listado en línea. La forma interactiva acepta --enabled o --disabled para mostrar solo plugins en ese estado, y ls como abreviatura de list.
plugin details
Muestra el inventario de componentes de un plugin y el costo de tokens proyectado. La salida lista todos los componentes que el plugin contribuye, agrupados como Skills, Agents, Hooks, servidores MCP y servidores LSP, junto con una estimación de cuántos tokens añade a cada sesión. El grupo Skills incluye tanto entradas deskills/ como de commands/.
<name>: Nombre del plugin oplugin-name@marketplace-name
La salida muestra dos cifras de costo para cada componente:
- Always-on: tokens añadidos a cada sesión por el texto de listado del plugin, como descripciones de skills, descripciones de agents, y nombres de comandos, independientemente de si algún componente se activa.
- On-invoke: tokens que cuesta un componente cuando se activa. Se muestra por componente, no como total del plugin, porque una sesión típica invoca solo un subconjunto de componentes.
count_tokens para su modelo activo. Los números por componente se escalan proporcionalmente desde ese total. Si la API es inaccesible, el comando recurre a una estimación basada en caracteres.
plugin tag
Crea una etiqueta de lanzamiento de git para el plugin en el directorio actual. Ejecute desde dentro de la carpeta del plugin. Consulte Etiquetar lanzamientos de plugins.Herramientas de depuración y desarrollo
Comandos de depuración
Useclaude --debug para ver detalles de carga de plugins:
Esto muestra:
- Qué plugins se están cargando
- Cualquier error en los manifiestos del plugin
- Registro de skills, agents y hooks
- Inicialización del servidor MCP
Problemas comunes
Mensajes de error de ejemplo
Errores de validación de manifiesto:Invalid JSON syntax: Unexpected token } in JSON at position 142: busque comas faltantes, comas extra o cadenas sin comillasPlugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: falta un campo requeridoPlugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: error de sintaxis JSON
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: la ruta del comando existe pero no contiene archivos de comando válidosPlugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: la rutasourceen marketplace.json apunta a un directorio inexistentePlugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: elimine definiciones de componentes duplicadas o eliminestrict: falseen la entrada del marketplace
Solución de problemas de hooks
El script del hook no se ejecuta:- Verifique que el script sea ejecutable:
chmod +x ./scripts/your-script.sh - Verifique la línea shebang: La primera línea debe ser
#!/bin/basho#!/usr/bin/env bash - Verifique que la ruta use
${CLAUDE_PLUGIN_ROOT}:"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh" - Pruebe el script manualmente:
./scripts/your-script.sh
- Verifique que el nombre del evento sea correcto (sensible a mayúsculas):
PostToolUse, nopostToolUse - Verifique que el patrón del matcher coincida con sus herramientas:
"matcher": "Write|Edit"para operaciones de archivo - Confirme que el tipo de hook sea válido:
command,http,mcp_tool,prompt, oagent
Solución de problemas del servidor MCP
El servidor no se inicia:- Verifique que el comando exista y sea ejecutable
- Verifique que todas las rutas usen la variable
${CLAUDE_PLUGIN_ROOT} - Verifique los registros del servidor MCP:
claude --debugmuestra errores de inicialización - Pruebe el servidor manualmente fuera de Claude Code
- Asegúrese de que el servidor esté correctamente configurado en
.mcp.jsonoplugin.json - Verifique que el servidor implemente correctamente el protocolo MCP
- Busque tiempos de espera de conexión en la salida de depuración
Errores de estructura de directorio
Síntomas: El plugin se carga pero faltan componentes (skills, agents, hooks). Estructura correcta: Los componentes deben estar en la raíz del plugin, no dentro de.claude-plugin/. Solo plugin.json pertenece a .claude-plugin/.
.claude-plugin/, muévalos a la raíz del plugin.
Lista de verificación de depuración:
- Ejecute
claude --debugy busque mensajes “loading plugin” - Verifique que cada directorio de componentes esté listado en la salida de depuración
- Verifique que los permisos de archivo permitan leer los archivos del plugin
Referencia de distribución y versionado
Gestión de versiones
Claude Code utiliza la versión del plugin como clave de caché que determina si hay una actualización disponible. Cuando ejecuta/plugin update o se activa la actualización automática, Claude Code calcula la versión actual y omite la actualización si coincide con la que ya está instalada.
La versión se resuelve a partir de la primera de estas que esté configurada:
- El campo
versionen elplugin.jsondel plugin - El campo
versionen la entrada del marketplace del plugin enmarketplace.json - El SHA del commit de git del origen del plugin, para fuentes
github,url,git-subdiry relative-path en un marketplace alojado en git unknown, para fuentesnpmo directorios locales que no estén dentro de un repositorio de git
Si utiliza versiones explícitas, siga el versionado semántico (
MAJOR.MINOR.PATCH): aumente MAJOR para cambios de ruptura, MINOR para nuevas características, PATCH para correcciones de errores. Documente los cambios en un CHANGELOG.md.
Ver también
- Plugins - Tutoriales y uso práctico
- Marketplaces de plugins - Crear y gestionar marketplaces
- Skills - Detalles de desarrollo de skills
- Subagents - Configuración y capacidades del agent
- Hooks - Manejo de eventos y automatización
- MCP - Integración de herramientas externas
- Configuración - Opciones de configuración para plugins