EN · Read in English Explorar gratis

Referencia · Intermedio · 12 min

Claude Code skills vs hooks, MCP, subagentes y plugins: cuál usar

CLAUDE.md, skills, comandos, subagentes, hooks, MCP y plugins de Claude Code: para qué sirve cada uno, cuándo usarlo, dónde va y cuánto contexto gasta.

Portada: Claude Code skills vs hooks, MCP, subagentes y plugins: cuál usar

Probado con Claude Code 2.1.316 · revisado

Ver los archivos en GitHub Gratis · licencia MIT

Resumen

Claude Code se extiende con varias piezas que parecen solaparse: CLAUDE.md, skills (que ya incluyen los antiguos comandos), subagentes, hooks, servidores MCP y plugins, más las output styles y los nuevos mods. Esta referencia explica en una frase para qué sirve cada una, cuándo aparece la necesidad, cuánto contexto consume, un ejemplo mínimo y la receta de Ctrl+IA donde se desarrolla.

La regla corta: CLAUDE.md para lo que Claude debe saber siempre, skill para procedimientos, subagente para aislar trabajo, hook para lo que debe pasar siempre, MCP para conectar servicios y plugin para empaquetar y compartir.

Cada pieza en una frase

PiezaPara qué sirveEjemplo
CLAUDE.mdContexto que se carga en cada sesión: convenciones y comandos«usa pnpm, no npm»
SkillInstrucciones, conocimiento o un flujo que invocas con /nombre o que Claude carga cuando encaja con la tarea/deploy ejecuta tu checklist
ComandoDesde que se fusionaron con las skills, .claude/commands/deploy.md y .claude/skills/deploy/SKILL.md crean el mismo /deploy y funcionan igualSiguen funcionando, pero para lo nuevo usa skills
SubagenteUn trabajador con su propio contexto que hace una tarea y devuelve solo un resumenUn revisor de solo lectura
HookUn script, petición HTTP, herramienta MCP, prompt o subagente que Claude Code ejecuta al llegar un evento (antes o después de usar una herramienta, al iniciar sesión…), sin que Claude lo decidaBloquear rm -rf
MCPConecta Claude con servicios externosBase de datos, Slack, navegador
PluginLa capa de empaquetado que junta skills, hooks, subagentes y servidores MCP en una unidad instalableTu kit para varios repos

Además, las output styles fijan tono y formato, y los mods (2.1.287) son plugins en JavaScript o TypeScript que cambian la interfaz o intervienen en llamadas a herramientas.

Si te pasa esto, usa esto

La doc oficial propone añadir piezas según aparecen los disparadores, en este orden aproximado:

Si te pasa estoUsa esto
Claude se equivoca dos veces con una convención o un comandoAñádelo a CLAUDE.md
Le pides siempre que sea más breve o que explique másUna output style
Escribes el mismo prompt para empezar una tareaGuárdalo como skill invocable
Pegas por tercera vez el mismo procedimiento de varios pasosConviértelo en skill
Copias datos de una pestaña del navegador que Claude no veConecta ese sistema por MCP
Claude lee muchos archivos para encontrar dónde se define un símboloInstala un plugin de inteligencia de código para tu lenguaje
Una tarea secundaria inunda la conversación con salida que no volverás a mirarPásala por un subagente
Quieres que algo pase siempre sin pedirloEscribe un hook
Un segundo repositorio necesita la misma configuraciónEmpaquétala como plugin

Los mismos disparadores sirven para mantener lo que ya tienes: un error repetido es una edición de CLAUDE.md, no una corrección en el chat.

Dónde vive cada pieza

mi-proyecto/
├── CLAUDE.md                     # siempre cargado: comandos, convenciones («usa pnpm»)
├── .mcp.json                     # MCP del proyecto (compartido): bases de datos, APIs, navegador
└── .claude/
    ├── settings.json             # hooks, permisos y statusLine del equipo
    ├── rules/api.md              # reglas que solo entran al tocar ciertas rutas (paths:)
    ├── skills/release/SKILL.md   # /release: procedimiento que tú o Claude invocan
    ├── commands/deploy.md        # formato antiguo: también crea /deploy (hoy es una skill)
    └── agents/revisor.md         # subagente: trabajador con su propio contexto

~/.claude/                        # lo mismo, pero tuyo y para todos tus proyectos
├── CLAUDE.md
├── settings.json
├── skills/  agents/
└── skills/mi-kit/.claude-plugin/plugin.json   # plugin creado con «claude plugin init mi-kit»

En settings.json también va la barra de estado: la desarrollamos en la receta de la statusline.

Skill o subagente

Una skill es contenido reutilizable que se carga en el contexto donde se use; un subagente es un trabajador aislado que corre aparte. La skill añade su texto a tu ventana de contexto principal; el subagente usa una ventana propia y a tu conversación solo vuelve el resumen.

Usa skill para material de referencia (tu guía de estilo de la API) o flujos que invocas (/release). Usa subagente cuando la tarea lee decenas de archivos o hace búsquedas largas cuyo detalle no necesitas, para tareas en paralelo o cuando tu contexto se está llenando. Se combinan: un subagente puede precargar skills con el campo skills: de su definición, y una skill puede ejecutarse en un contexto aislado con context: fork.

Una skill que solo invocas tú, en .claude/skills/release/SKILL.md:

---
name: release
description: Prepara las notas de versión desde el último tag. Úsala cuando pidan notas de versión o changelog.
disable-model-invocation: true
---

1. Lista los commits desde el último tag con `git log $(git describe --tags --abbrev=0)..HEAD --oneline`.
2. Agrúpalos en Novedades, Correcciones y Documentación.
3. Escribe el resultado en CHANGELOG.md sin borrar lo anterior.

Los subagentes se guardan como Markdown con frontmatter en .claude/agents/ (proyecto) o ~/.claude/agents/ (todos tus proyectos); el cuerpo es su prompt de sistema. El ejemplo oficial, .claude/agents/code-reviewer.md, es un revisor de solo lectura:

---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---

You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.

Lo desarrollamos en la receta de subagentes.

Hook o instrucción (CLAUDE.md o skill)

La diferencia es el determinismo. Un hook se dispara en su evento sin que Claude decida; una instrucción en CLAUDE.md o en una skill es algo que Claude interpreta y puede no cumplir. La doc oficial lo dice claro: «nunca edites .env» en CLAUDE.md es una petición, no una garantía; un hook PreToolUse que bloquea la edición es una barrera. Si una regla debe cumplirse siempre, que sea un hook (o una regla deny de permisos), no una frase.

Usa hook para formatear tras cada edición, bloquear comandos peligrosos, registrar o notificar. Usa skill cuando Claude deba decidir cómo aplicar los pasos o el contenido sea conocimiento: un checklist de release, una guía de estilo, un manual de depuración (como el de depurar un bug).

Coste de contexto: el hook no gasta nada salvo que devuelva texto; la salida de un PostToolUse que ejecuta tu linter sí entra en el contexto, y una skill /fix-lint le explica a Claude cómo resolverla. Los hooks de todos los orígenes se suman: todos los que coinciden con el evento se ejecutan.

Ejemplo oficial: formatear con Prettier tras cada edición, en .claude/settings.json (requiere jq):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

Este hook no lo ejecutamos: jq no está instalado en nuestro PC de pruebas. La receta de hooks de seguridad usa Python para no depender de jq.

MCP o skill

MCP conecta Claude con un sistema externo y le da herramientas y datos: consultar tu base de datos, publicar en Slack, controlar un navegador. Una skill le da conocimiento sobre cómo usar bien esas herramientas, más flujos invocables. No compiten, se complementan: el servidor MCP pone la conexión y la autenticación, y una skill documenta tu esquema de base de datos y tus patrones de consulta, o define un /post-to-slack con el formato de mensajes de tu equipo.

Se añaden con claude mcp add (por ejemplo, --transport http para un servidor remoto) y se revisan dentro de la sesión con /mcp:

# Conectar un servicio externo por HTTP (ejemplo oficial)
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Dentro de la sesión: estado y autenticación
/mcp

Coste: al iniciar solo se cargan los nombres de las herramientas; los esquemas completos se cargan cuando se usan, porque la búsqueda de herramientas viene activada por defecto. Si un mismo nombre de servidor existe en varios ámbitos, gana local sobre proyecto y proyecto sobre usuario. Lo desarrollamos con Playwright, GitHub y bases de datos en la receta de MCP.

Plugin: cuándo empaquetar (y qué son los mods)

Un plugin no es una pieza nueva, es una caja. Junta skills, hooks, subagentes y servidores MCP para reutilizarlos en varios repositorios o distribuirlos en un marketplace. Las skills de un plugin llevan su espacio de nombres (/mi-plugin:review) para que varios plugins convivan. La estructura mínima es un manifiesto .claude-plugin/plugin.json con el nombre y los componentes.

Desde la 2.1.157, claude plugin init <nombre> lo genera por ti. En nuestro PC creó ~/.claude/skills/mi-kit/ (en la carpeta del usuario, aunque el CHANGELOG habla de .claude/skills) con SKILL.md y .claude-plugin/plugin.json:

# Empaquetar tu configuración como plugin (desde la 2.1.157)
claude plugin init mi-kit
# ✔ Created plugin "mi-kit" at ~/.claude/skills/mi-kit
#   It will auto-load next session as mi-kit@skills-dir. Run /reload-plugins to load it now.

# Crea dos archivos: SKILL.md y .claude-plugin/plugin.json
# Ver qué trae un plugin y cuánto contexto cuesta
claude plugin details mi-kit@skills-dir
# Desactivarlo o quitarlo
claude plugin disable mi-kit@skills-dir   # o borra la carpeta

Mientras lo desarrollas no necesitas marketplace: cárgalo desde su carpeta con --plugin-dir.

Los mods (2.1.287) son plugins con manejadores en JavaScript o TypeScript que corren dentro de Claude Code: pueden dibujar un panel, cambiar partes de la interfaz o intervenir en una llamada a herramienta. Si un hook, una skill o un MCP ya hace lo que necesitas, no escribas un mod. No hemos escrito ninguno para esta referencia.

Cuánto contexto gasta cada pieza y quién gana si se repiten

PiezaCoste de contextoSi existe en varios niveles
CLAUDE.mdSe carga entero al iniciar y cuesta en cada petición; mantenlo por debajo de 200 líneasSe suman: todos aportan
Output styleEn cada petición (nada para la de por defecto)—
SkillsSolo nombre y descripción en cada petición; el contenido completo cuando se usa. Con disable-model-invocation: true, nada hasta que la invocasSe sustituyen por nombre: gestionado > usuario > proyecto. Si una skill y un comando se llaman igual, gana la skill
MCPNombres de herramientas al inicio y esquemas bajo demandaSe sustituye por nombre: local > proyecto > usuario
SubagentesContexto aislado del principalSe sustituyen por nombre: gestionado > opción de CLI > proyecto > usuario > plugin
HooksCero, salvo que devuelvan textoSe suman y se ejecutan todos

disable-model-invocation: true es lo recomendado para skills con efectos secundarios. Para revisar el coste real, /context muestra qué llena la ventana y /skill-doctor qué cuesta cada skill y cuánto se usa.

Qué comprobamos

En Linux con Claude Code 2.1.316 comprobamos claude plugin --help y claude plugin init mi-kit (la carpeta creada se borró al momento). Los ejemplos de subagente, hook y MCP son literales de la doc oficial; el de skill sigue el formato de la receta primera skill. No ejecutamos el hook de Prettier ni escribimos un mod. Fuentes: funciones, skills, subagentes, hooks, MCP, plugins, mods y el CHANGELOG.

Preguntas frecuentes

¿Cuál es la diferencia entre una skill y un comando de .claude/commands?

Hoy ninguna en la práctica: los comandos se fusionaron con las skills y ambos crean /nombre. La skill añade una carpeta para archivos de apoyo, más campos de frontmatter y que Claude la pueda cargar sola. Si existen los dos con el mismo nombre, gana la skill.

¿Puedo poner una regla de seguridad en CLAUDE.md?

Puedes, pero es una petición, no una garantía. Para lo que debe cumplirse siempre usa un hook PreToolUse o una regla deny en los permisos (ver hooks de seguridad y permisos).

¿Un subagente gasta menos tokens?

No necesariamente en total: usa su propia ventana con sus tokens de entrada y salida. Lo que ahorra es contexto de tu conversación principal, que solo recibe el resumen.

¿Necesito un plugin para usar mis skills?

No. Las skills en .claude/skills/ o ~/.claude/skills/ funcionan solas. El plugin sirve para empaquetar varias piezas y llevarlas a otros repositorios o a otras personas.

¿Qué es un mod y en qué se diferencia de un hook?

Un hook de configuración ejecuta un comando, una petición HTTP o un prompt fuera de Claude Code. Un mod es un plugin con funciones en JavaScript o TypeScript que corren dentro de Claude Code y pueden dibujar interfaz o intervenir en llamadas a herramientas. Disponible desde la 2.1.287.

¿Por dónde empiezo si no tengo nada?

Por CLAUDE.md con los comandos y convenciones del proyecto. Si tu equipo ya usa AGENTS.md, mira AGENTS.md vs CLAUDE.md. Luego añade cada pieza cuando aparezca su disparador (ver la sección «Si te pasa esto, usa esto»).

Toda la biblioteca