En abril de 2026 instalé un plugin que se llama everything-claude-code y no recuerdo por qué lo instalé. Supongo que lo vi recomendado en algún sitio, me pareció que traía cosas útiles y le di a instalar como quien se instala una extensión del navegador.
Cinco meses después, escribiendo este post, he mirado por primera vez qué tenía dentro.
156 skills. 38 agentes, 72 comandos, 6 servidores MCP y 32 hooks.
Uno de esos hooks es un PreToolUse con matcher Bash, es decir, que se ejecuta cada vez que Claude lanza un comando en mi portátil. Lo que ejecuta es npx block-no-verify@1.1.2, un paquete de npm que yo no he elegido y que se descarga solo. Los 6 servidores MCP arrancan con npx -y, que es la forma corta de decir "descarga y ejecuta sin preguntar".
Nada de eso lo elegí yo directamente pero si al escribir /plugin install y darle al Enter.
Después de meter a Claude en las pull requests, toca el capítulo de plugins del curso Claude Code in Action de Anthropic. Tiene dos mitades: usar los plugins que publica otra gente y empaquetar el tuyo. Empiezo por la primera, que es donde me he pillado los dedos.
Qué es un plugin exactamente
Un plugin es una unidad instalable, hasta aquí llegamos, estamos hartos de verlo.
Empaqueta todo eso como skills, subagentes, hooks y configuración de servidores MCP. Y también otras cosas menos habituales como servidores LSP, monitores en segundo plano, temas y un trocito de settings.json.
Una versión, una instalación. Ese es todo el invento.
Viene a solucionar el problema de tener un mismo entorno .claude sin tener que hacer malabares compartiendo carpetas y ficheritos entre máquinas.
Instalar uno
Dentro de la sesión, por nombre:
/plugin install nombre-del-plugin@nombre-del-marketplace
El orden importa. En el vídeo del capítulo del curso aparece como org-name@plugin-name, pero lo he mirado en mi propio ~/.claude/plugins/installed_plugins.json y las tres entradas que tengo van al contrario, primero el plugin y después el marketplace del que sale:
"everything-claude-code@everything-claude-code": [...],
"modern-web-guidance@googlechrome": [...],
"ponytail@ponytail": [...]
Ese modern-web-guidance@googlechrome lo deja bastante claro: modern-web-guidance es el plugin y googlechrome es el marketplace, que apunta al repo GoogleChrome/modern-web-guidance.
Cuando termina, Claude Code te dice que ejecutes /reload-plugins para aplicarlo.
Para un equipo lo que tiene sentido es añadir el marketplace una vez, y que todo lo demás salga de ahí:
/plugin marketplace add tu-org/claude-plugins
Un marketplace es solo un repo de GitHub con un marketplace.json dentro. A partir de ahí tienes el descubrimiento centralizado, el control de versiones y las actualizaciones en un sitio, en vez de repartidas por los portátiles de la gente. Desde la pestaña Discover ves lo que hay disponible en los marketplaces que tengas dados de alta.
La parte que importa
Aquí es donde la lié, así que vamos despacito.
Un plugin ejecuta código en tu máquina con tus permisos. Sus hooks se disparan en cada llamada que encaje con el matcher. Instalas un plugin por sus skills y te llevas sus PreToolUse y sus Stop de regalo, los hayas leído o no.
Piensa bien en lo que eso quiere decir. Un plugin de la comunidad puede traer un hook Stop que llame a un endpoint por red cada vez que termina un turno, y en tu configuración no hay absolutamente nada que te avise.
Con esto no te digo que no uses plugins, ni quiero ser asustaviejas pero si que hay que mirar antes.
Esto es lo que tengo yo instalado ahora mismo:
| Plugin | Qué ejecuta sin que yo lo pida |
|---|---|
| 32 hooks. Uno lanza |
| Un |
| Solo skills, este se porta bien |
El de ponytail es el que más gracia me hace. Su hook de SessionStart inyecta un prompt que le dice a Claude que se comporte como un senior vago que odia la sobreingeniería. Funciona muy bien, oye.
Pero ese plugin cambia cómo te responde el modelo en todas las sesiones. Si no lo has leído, un día te preguntas por qué de repente te contesta distinto y sabes de dónde viene.
AdvertenciaLos hooks se apilan, no se sustituyen. Tu
PreToolUsey el del plugin se disparan los dos en la misma llamada. Si tenías uno tuyo formateando ficheros y el plugin trae otro que bloquea escrituras, se van a pisar y el mensaje de error no te va a decir cuál de los dos ha sido.
Antes de instalar nada, Claude Code te enseña una ficha con lo que va a instalar, una estimación de lo que te va a costar en contexto y un aviso de que Anthropic no controla lo que hay dentro de un plugin de terceros para lavarse las manos. Esa es la pantalla que yo me salté en abril eejejjeje.
Sobre de dónde salen: el formulario de la propia app publica en el marketplace de la comunidad después de una revisión automática de Anthropic, y el marketplace oficial va por su carril aparte, curado. Pero revisado no significa totalmente confiable.
Una revisión automática pilla algunas cosas, no todas. Así que por norma instala plugins y añade marketplaces solo de sitios en los que confíes de verdad, y mira qué hace uno antes de encenderlo.
El contexto tampoco es gratis
Lo otro que no se ve es que todo lo que trae un plugin se anuncia al arranque de la sesión con su nombre y su descripción, para que el modelo sepa que existe. En mi caso eso son 47.000 caracteres largos de metadatos y 43 MB en disco entre los tres. Lo que de verdad ocupa es el marketplace, que se clona entero y solo el de everything-claude-code son 62 MB.
Claude Code recorta descripciones cuando la lista se hace muy larga, así que no es un peaje directo, pero de gratis no tiene nada. Tener 156 skills instaladas para usar tres es como llevar el maletero lleno para ir a comprar el pan.
Los componentes conviven con los tuyos
Un plugin no te machaca la configuración, sus cosas corren al lado de las tuyas. Van con el nombre del plugin por delante, nombre-plugin:nombre-skill, así que no se dan de hostias con las tuyas.
Un plugin también puede traer su propio settings.json, pero uno muy capado: Claude Code solo le hace caso a dos claves, la del agente y la de la línea de estado del subagente.
La del agente merece que pares un segundo. Ponerla asciende a uno de los subagentes del plugin al hilo principal, con su prompt de sistema, sus restricciones de herramientas y su modelo. Es decir, que encender el plugin te puede cambiar el comportamiento por defecto de Claude Code.
Una vez instalado, en el panel de plugins ves todo lo que ha añadido, lo gestionas y lo desinstalas.
Empaquetar el tuyo
La otra mitad. Cuando ya tienes un .claude que funciona, con tus skills, tus hooks y tus comandos, no pongas a tu equipo a copiar carpetas. Empaquétalo.
Lo bueno es que no hay que reestructurar nada, un plugin usa la misma forma que ya tienes:
mi-plugin/
├── skills/
│ └── mi-skill/
│ └── SKILL.md
├── agents/
│ └── mi-agente.md
├── commands/
│ └── mi-comando.md
├── hooks/
│ └── hooks.json
├── .mcp.json
└── .claude-plugin/
└── plugin.json
La estructura de directorios hace casi todo el trabajo, Claude Code descubre los componentes por convención.
Encima de eso va un manifest opcional en .claude-plugin/plugin.json con el nombre, la versión, la descripción y el autor:
{
"name": "revision-domin-es",
"version": "0.1.0",
"description": "Revisa los posts del blog antes de publicar",
"author": {
"name": "domin"
}
}
Es opcional porque si no lo pones, los componentes se descubren igual por convención de directorios. Pero hay dos detalles que sí importan. El name es el único campo obligatorio y es el que pone el prefijo a tus skills, nombre-empresa:nombre-skill, que es lo que evita que choquen con las de cualquier otro. Y la versión trátala como la de cualquier dependencia, porque es lo que hace que funcionen las actualizaciones y el control de versiones en el equipo.
Mira el plugin.json de ponytail, que son seis líneas contando el autor:
{
"name": "ponytail",
"version": "4.8.3",
"description": "Lazy senior dev mode...",
"author": { "name": "Dietrich Gebert" },
"hooks": "./hooks/claude-codex-hooks.json"
}
Con eso ya se instala en cualquier máquina.
ConsejoSi tu plugin trae hooks, escribe en el README qué hace cada uno y en qué evento entra. Es lo primero que va a mirar quien se lo instale. O lo que debería mirar, que yo no lo hice.
Y ahora qué
Pues quitarme everything-claude-code de encima, que llevo cinco meses con 156 skills para usar cuatro y con un paquete de npm ejecutándose cada vez que Claude toca la shell. Y con las cuatro que uso, montarme un plugin mío para el blog, que el manifest son seis líneas.
Un plugin es código de terceros corriendo con tus permisos. Como curl algo | bash, pero con mejor presentación.
EA! Nos vemos en los bares! 🍻