Los mods de Claude Code son pequeñas funciones en TypeScript o JavaScript que se ejecutan dentro de Claude Code y cambian cómo se comporta y cómo se ve: pueden reescribir un prompt, bloquear un comando peligroso, aprobar o denegar permisos, añadir paneles y botones a la interfaz o crear comandos propios. Anthropic los lanzó el 1 de octubre de 2026 con la versión 2.1.287, vienen activados por defecto y se instalan y comparten como cualquier plugin.
En esta guía tienes todo lo que necesitas saber: qué es un mod, para qué sirve, cómo funciona por dentro, cómo instalarlo, cómo crearlo sin escribir código, ejemplos reales con código, comunicación entre sesiones, permisos, seguridad y cómo controlarlos en un equipo o empresa.
Resumen en 30 segundos
Un mod es un plugin con código que Claude Code ejecuta en su propio proceso. Se engancha a eventos (una llamada a herramienta, un prompt enviado, el dibujo de la pantalla) y puede observarlos, cambiarlos o responder en lugar de Claude Code. No va en sandbox: corre con tus permisos, así que instala solo mods de fuentes en las que confíes.
Ficha rápida de los mods de Claude Code
| Dato | Detalle |
|---|---|
| Qué son | Funciones en TypeScript o JavaScript que se enganchan a eventos de Claude Code |
| Fecha de lanzamiento | 1 de octubre de 2026 |
| Versión mínima | Claude Code 2.1.287 en la terminal y 2.1.286 en la app de escritorio |
| Dónde funcionan | CLI de Claude Code y pestaña Code de la app de escritorio |
| Cómo se distribuyen | Dentro de plugins, desde un marketplace |
| Estado por defecto | Activados |
| ¿Hace falta programar? | No: puedes describirlo y Claude lo escribe por ti |
| ¿Sandbox? | No. Corren con los mismos permisos que Claude Code |
¿Qué es un mod de Claude Code?
Definición sencilla
Cada vez que Claude Code hace algo, lanza un evento: llamar a una herramienta, pedirte permiso, enviar una petición al modelo o dibujar una parte de la pantalla. Un mod es una función que se engancha a uno de esos eventos y puede actuar antes, después o en lugar de lo que iba a pasar. También puede envolverlo, ejecutando código antes y después.
Una buena forma de entenderlo: hasta ahora usabas Claude Code tal y como salía de fábrica. Con los mods puedes «tunearlo» como harías con un coche: añadirle un medidor, un sistema de frenado extra o un panel nuevo en el salpicadero.
Qué puede hacer un mod
Según el anuncio oficial de Anthropic y la documentación de mods, con un mod puedes:
- Reescribir un prompt antes de que llegue al modelo.
- Bloquear, reescribir o reintentar una llamada a una herramienta.
- Aprobar o denegar una petición de permiso.
- Ocultar secretos (API keys, tokens) de la salida de una herramienta antes de que Claude la lea.
- Dibujar una interfaz propia: un panel junto a la conversación o una banda sobre el prompt, con pestañas, botones y campos de texto.
- Redibujar la interfaz de Claude Code: la fila de una llamada a herramienta, el spinner o el diálogo en el que Claude te hace preguntas.
- Crear comandos
/propiosque se ejecutan al instante, sin turno del modelo, incluso mientras Claude está trabajando. - Registrar herramientas nuevas que Claude puede usar.
- Enviar una petición a otro modelo, por ejemplo mandar lo fácil a Haiku.
- Enviar mensajes a otras sesiones de Claude Code o a subagentes.
- Compartir datos entre hooks: lo que un hook cuenta, otro lo puede mostrar.
Por qué Anthropic creó los mods
Los desarrolladores llevaban tiempo pidiendo más control sobre Claude Code sin tener que esperar a que Anthropic lanzara cada función. Los hooks de configuración daban parte de ese control, pero tenían un límite claro: no podían reescribir eventos, dibujar interfaz nueva ni sustituir funciones. Los mods sí pueden. Anthropic incluso publicó el diseño en GitHub antes del lanzamiento para recoger opiniones.
La dirección es clara: Claude Code deja de ser solo un asistente que ejecutas y pasa a ser una plataforma que puedes reprogramar, algo parecido a lo que ocurrió con las extensiones de VS Code. Anthropic ha dicho que irá moviendo más funciones integradas a mods para que cada persona pueda quedarse con un núcleo pequeño y añadir solo lo que necesite.
Mods vs hooks vs skills vs MCP: diferencias
La diferencia clave está en dónde se ejecuta el código. Los hooks de configuración, las skills, las status lines y los servidores MCP funcionan desde fuera: lanzan un script o le dan a Claude texto y herramientas. Un mod corre dentro del proceso de Claude Code.
| Mod | Hook de configuración | Skill | Servidor MCP | |
|---|---|---|---|---|
| Qué es | Funciones en un plugin que Claude Code ejecuta en su propio proceso | Un comando de shell, petición HTTP o prompt definido en settings.json |
Un archivo SKILL.md con instrucciones |
Un proceso o servicio externo que da herramientas a Claude |
| Qué puede cambiar | Llamadas a herramientas, prompts, comandos, turnos y la interfaz | Si una llamada sigue adelante, sus argumentos, su resultado y contexto extra | Lo que Claude sabe y hace | Qué herramientas tiene Claude |
| ¿Dibuja en la interfaz? | Sí | No | No | No |
| Qué escribes | JavaScript o TypeScript | Un script y una entrada en settings | Markdown | Un servidor en cualquier lenguaje |
| Elígelo cuando | Quieres un panel, una banda, un comando instantáneo o reescribir un evento | Ya tienes un script que bloquea, permite o registra | Pegas una y otra vez las mismas instrucciones | Claude necesita conectarse a un sistema externo |
Ojo con los nombres
En la documentación de mods, «hook» significa una función de un mod. Los hooks de siempre pasan a llamarse settings hooks (hooks de configuración). Siguen funcionando y no están obsoletos. Un mismo plugin puede llevar a la vez un mod, una skill y un servidor MCP.
Cómo funciona un mod por dentro
Estructura de archivos de un mod
Un mod pequeño ocupa solo tres archivos:
Texto · Estructura de archivos
mi-mod/
├── .claude-plugin/
│ └── plugin.json ← nombre, versión y descripción
└── hooks/
├── hooks.json ← apunta a tu código
└── register.js ← tu código (el "hooks module")
El archivo hooks.json solo indica qué módulo cargar:
{ "modules": ["./register.js"] }
Y plugin.json es el manifiesto del plugin:
JSON · plugin.json
{
"name": "mi-mod",
"version": "1.0.0",
"description": "Mi primer mod de Claude Code"
}
La función register y sus tres argumentos
El módulo exporta una función register(on). Cada llamada a on(evento, filtro, hook) añade un hook, y todos los hooks reciben los mismos tres argumentos:
| Argumento | Qué es | Para qué sirve |
|---|---|---|
$ |
La API de mods | Todo lo que sale de tu código pasa por aquí: dibujar, leer archivos, lanzar procesos, llamar a un modelo, hacer peticiones de red |
e |
El evento | Por ejemplo, el comando de Bash que Claude va a ejecutar (e.command) o el texto del prompt (e.text) |
next |
El siguiente manejador | Pasa el evento al siguiente mod y, al final de la cadena, al comportamiento normal de Claude Code |
El módulo no tiene acceso a Node.js ni al DOM, ni a setTimeout. Ese límite es intencionado: como todo pasa por $, Claude Code puede listar lo que hace un mod antes de ejecutarlo.
Observar, reescribir o responder
Un hook se ejecuta antes de que Claude Code actúe, así que decide qué pasa después. Tiene tres opciones:
| Acción | Cómo se hace | Ejemplo |
|---|---|---|
| Observar | Haces tu trabajo y devuelves next(e) |
Registrar cada herramienta que usa Claude |
| Reescribir | Llamas a next con una copia modificada: next({ ...e, text: nuevo }) |
Limpiar o ampliar un prompt antes de enviarlo |
| Responder | Devuelves un resultado sin llamar a next |
Rechazar un comando con { deny: 'motivo' } |
El evento es inmutable: si intentas asignar un campo directamente, lanza un error. Siempre se trabaja con copias.
Tu primer mod: contador de herramientas junto al spinner
Este mod cuenta cuántas herramientas usa Claude y muestra el número junto al spinner mientras trabaja (algo como Thinking · herramientas: 3):
JavaScript · Primer mod
// Variable compartida por los dos hooks
let llamadas = 0
export function register(on) {
// Se ejecuta cada vez que Claude va a usar una herramienta
on('tool.call', async ($, e, next) => {
llamadas += 1
$.ui.invalidate('ui.render') // pide redibujar la interfaz
return next(e) // la herramienta se ejecuta como siempre
})
// Se ejecuta cada vez que Claude Code dibuja el spinner
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
return next({ ...e, props: { ...e.props, suffix: ' · herramientas: ' + llamadas } })
})
}
Fíjate en que los dos hooks comparten la variable llamadas. Esa es una de las ventajas de los mods: un hook recoge datos y otro los muestra.

Filtrar qué eventos maneja un hook
El segundo argumento de on es un filtro (matcher). Puede ser un valor, una lista o una expresión regular:
JavaScript · Filtros
on('tool.call', { tool: 'Bash' }, hook) // solo Bash
on('tool.call', { tool: ['Edit', 'Write'] }, hook) // Edit o Write
on('tool.call', { tool: /^mcp__github__/ }, hook) // todas las herramientas de un MCP
El orden en que se ejecutan los mods
Cuando varios mods se enganchan al mismo evento forman una cadena tipo «cebolla»: el primero que carga ve el evento primero y el resultado el último, y decide si los demás llegan a ejecutarse. Eso permite apilar mods de autores distintos. El orden es:
sec-default (donde carga) y los mods de tu organización listados en prependPlugins.appendPlugins.Dentro de un mismo módulo, los hooks se ejecutan en el orden en que register llamó a on.
Eventos principales de los mods
Estos son los eventos que más vas a usar. La lista completa está en la página de eventos de la documentación.
| Evento | Cuándo se dispara | Qué puedes hacer |
|---|---|---|
session.start |
Al empezar la sesión | Registrar comandos, herramientas y temporizadores |
prompt.submit |
Antes de enviar tu prompt | Reescribirlo, añadir contexto que solo lee Claude o descartarlo con { drop } |
tool.call |
Antes de ejecutar una herramienta (también MCP y subagentes) | Bloquearla, cambiar sus argumentos, reintentarla o responder sin ejecutarla |
tool.check |
Cuando se decide si una herramienta puede ejecutarse | Aprobar o denegar antes de que aparezca el aviso de permiso |
turn.start |
Empieza un turno | Observar |
turn.step |
Antes de cada petición al modelo | Leer el uso de tokens, enviarla a otro modelo o responder sin llamar al modelo |
turn.complete |
Termina un turno | Leer la respuesta final, la duración y los tokens; mostrar una línea bajo la respuesta |
command.run |
El usuario ejecuta un comando del mod | Ejecutar tu función al instante |
ui.render |
Claude Code dibuja un componente | Cambiarlo, sustituirlo o añadirle cosas |
session.receive |
Llega un mensaje de otra sesión o agente | Leerlo, mostrarlo o evitar que Claude lo procese |
session.send |
Un mensaje va a salir de la sesión | Observarlo o modificarlo |
plugin.register |
Otro mod está a punto de cargar | Revisarlo y rechazarlo (mods de política) |
classic.* |
Los eventos de los hooks de configuración (classic.Stop, classic.SessionEnd…) |
Reaccionar con el mismo JSON que recibe un settings hook |
La API de mods ($): qué puede tocar un mod
Todo lo que un mod hace fuera de su propio código pasa por la API $, agrupada en espacios de nombres. Estos son los principales (detalle en la página de la API):
| Espacio | Para qué sirve |
|---|---|
$.ui |
Dibujar paneles y bandas, avisos (toast), líneas de estado (status), líneas en el transcript (log) y preguntas al usuario (ask) |
$.command |
Registrar comandos /propios |
$.tool |
Registrar herramientas nuevas para Claude |
$.model |
complete hace una pregunta suelta a un modelo; fork pregunta sobre la conversación actual aprovechando la caché |
$.prompt |
submit envía un prompt y arranca un turno |
$.session |
Transcript, directorio, modelo, uso de contexto y límites (usage()), id de sesión y send para mensajes entre sesiones |
$.agent |
Listar los subagentes activos |
$.clock |
every, after, sleep y now: sustituyen a setInterval y setTimeout |
$.state |
Estado que sobrevive a la recarga en caliente |
$.store |
Almacén JSON clave-valor que persiste entre sesiones de la misma máquina |
$.fs |
Leer, escribir y listar archivos |
$.process |
run ejecuta un comando (sin shell); spawn transmite la salida de procesos largos |
$.http |
fetch para peticiones de red |
$.env y $.settings |
Leer y escribir variables de entorno; leer la configuración |
$.mcp |
Llamar a una herramienta de un servidor MCP conectado |
Requisitos y dónde funcionan los mods
Necesitas Claude Code 2.1.287 o superior en la terminal (compruébalo con claude --version). La app de escritorio trae su propia copia de Claude Code y ahí los mods funcionan desde la 2.1.286; en la pestaña Code puedes ver tu versión con /status.
Un detalle importante: los hooks se ejecutan casi en todas partes, pero la interfaz solo se dibuja en la terminal y en la app de escritorio.
| Dónde ejecutas Claude Code | ¿Se ejecutan los hooks? | ¿Se ve la interfaz del mod? |
|---|---|---|
claude en una terminal (incluidas las de editores y JetBrains) |
Sí | Sí |
| Pestaña Code de la app de escritorio | Sí | Sí, salvo elementos exclusivos de la terminal |
| Sesión WSL en la app de escritorio | No | No |
| Panel de chat de la extensión de VS Code | Sí | No |
claude -p y Agent SDK |
Sí | No |
| Remote Control desde claude.ai o el móvil | Sí, en tu máquina | En la terminal de tu máquina |
| Sesiones en la nube | Sí, si el plugin llega a la sesión | No |
En la práctica: un mod guardián te sigue protegiendo en VS Code y en claude -p, pero un medidor visual no tiene dónde dibujarse. Un buen mod comprueba e.surface y, si no puede dibujar, escribe una línea en el transcript o devuelve texto.
Cuidado con tener dos copias de Claude Code
Es habitual tener una CLI antigua instalada (por ejemplo con Homebrew) y la versión nueva que trae la app de escritorio. Eso provoca errores confusos al validar mods. Comprueba la versión en cada sitio donde uses Claude Code.
Cómo instalar un mod en Claude Code
Instalar un mod desde un marketplace
Un mod se instala como cualquier plugin: nombre del plugin, @ y nombre del marketplace.
- Dentro de una sesión:
/plugin install nombre@marketplace - Desde tu shell:
claude plugin install nombre@marketplace - Desde la app de escritorio: botón +, luego Plugins y Add plugin
Si instalas desde la shell con una sesión abierta, ejecuta /reload-plugins en esa sesión para cargarlo sin reiniciar. Para añadir un marketplace de la comunidad:
Bash · Marketplace de la comunidad
claude plugin marketplace add usuario/repositorio claude plugin install nombre-del-mod@nombre-del-marketplace
También puedes encontrar plugins con mods en el directorio de Claude.
Cargar un mod solo para una sesión
Para probar una carpeta sin instalarla:
claude --plugin-dir ./mi-mod
La app de escritorio no acepta opciones de línea de comandos. Ahí se usa la variable CLAUDE_CODE_PLUGIN_DIRS en el bloque env de ~/.claude/settings.json.
Ver qué mods están activos
Escribe /plugin. Bajo las pestañas aparece una línea gris como 1 mod active · nombre-del-mod. Los mods integrados aparecen en la pestaña Installed bajo Built-in.
Desactivar mods
| Qué quieres apagar | Cómo |
|---|---|
| Un mod concreto | Desactívalo o desinstálalo desde la pestaña Installed de /plugin |
| Todos los mods instalados, en una sesión | Arranca con claude --safe-mode (también apaga otras personalizaciones) |
| Todos tus mods, en todas las sesiones | "disableAllHooks": true en ~/.claude/settings.json (también apaga tus settings hooks y la status line) |
Si usaste el acceso anticipado
Elimina la variable
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS. Desde la 2.1.287 se ignora, así que ponerla a 0 no desactiva los mods.Cómo crear un mod sin programar: pídeselo a Claude
No necesitas escribir ni una línea. Describe lo que quieres en una sesión interactiva de Claude Code y Claude lo escribe. Así funciona el proceso:
plugin-authoring (también puedes cargarla tú con /plugin-authoring).~/.claude/dev-mods/<id-de-sesión>/.Guarda tu mod en otro sitio
Las carpetas de
dev-mods se borran junto con las sesiones antiguas pasado aproximadamente un mes, y un mod que escribe Claude solo carga en la sesión que lo creó. Copia la carpeta a un lugar permanente (por ejemplo ~/mods/nombre) y ábrelo con claude --plugin-dir ~/mods/nombre.Prompts listos para copiar y pegar
Mostrar la rama de git sobre el prompt
Prompt · Rama de git
Hazme un mod que muestre la rama de git actual en una línea encima del prompt.
Vigilar cuánto contexto llevas usado
Muy útil si trabajas con documentos largos (newsletters, guiones, briefs), porque el contexto se llena sin que te des cuenta y la calidad baja:
Prompt · Medidor de contexto
Hazme un mod que muestre encima del prompt qué porcentaje de contexto llevo usado y los límites de mi plan. Que se actualice al terminar cada turno y que resalte la cifra si pasa del 80%.
Pedir confirmación antes de borrar o sobrescribir
Prompt · Confirmación
Hazme un mod que, antes de ejecutar cualquier comando que borre o sobrescriba archivos de esta carpeta, me enseñe qué cambiaría y me deje elegir entre continuar o cancelar.
Medir cada turno
Prompt · Métricas por turno
Crea un mod que muestre cuánto tardó el último turno, cuántas herramientas usó Claude y cuántos tokens consumió, con un botón para ocultarlo.
Proponer el siguiente paso
Prompt · Siguiente paso
Crea un mod que, al terminar cada turno, me proponga hasta tres prompts siguientes y me deje elegir uno pulsando 1, 2 o 3 para dejarlo preparado en la caja de texto.
Consejo: termina siempre tu petición con «al terminar ejecuta claude plugin validate y dime qué hooks y qué calls lista». Así sabes exactamente qué hace el mod que te ha escrito Claude.
Cómo crear un mod a mano: ejemplos reales con código
Si prefieres entender el código, estos ejemplos cubren los casos más comunes. Todos van en hooks/register.js.
Ejemplo 1: guardián que bloquea comandos peligrosos
Si usas Claude en modo automático o con permisos de bypass, nada lo frena antes de un git reset --hard. Este mod rechaza comandos destructivos y explica a Claude por qué:
JavaScript · Guardián
const PELIGROSOS = [
{ patron: /\bgit\s+reset\s+--hard\b/, motivo: 'git reset --hard borra trabajo sin guardar' },
{ patron: /\bgit\s+push\b.*--force/, motivo: 'push forzado' },
{ patron: /\brm\s+-rf\s+(\/|~)/, motivo: 'borrado recursivo de la raíz o del home' },
]
async function guardian($, e, next) {
const regla = PELIGROSOS.find(r => r.patron.test(e.command))
if (!regla) return next(e) // el resto de comandos pasa
$.ui.toast('Bloqueado: ' + regla.motivo)
return { deny: 'Comando bloqueado (' + regla.motivo + '). Pide al usuario que lo ejecute él.' }
}
export function register(on) {
// .catch hace que falle "en cerrado": si el guardián se rompe, no deja pasar el comando
on('tool.call', { tool: 'Bash' }, guardian).catch(async ($, e, next) =>
next.called ? next(e) : { deny: 'El guardián falló, así que el comando no se ejecutó.' }
)
}
Dos detalles importan más que las expresiones regulares:
- El guardián decide antes de llamar a
next. En cuantonextse ejecuta, el comando ya ha corrido. Undenydevuelto después no deshace nada. - El
.catchhace que falle en cerrado. Claude Code salta un hook que lanza un error o supera su límite de 10 segundos, y un guardián saltado deja pasar el comando. Con el.catchocurre lo contrario.
Limitación real
La coincidencia de patrones no distingue un comando de un texto que lo menciona (un
echo "git reset --hard" también se bloquea) y no detecta comandos escondidos en variables, scripts o alias. Trata un mod guardián como una segunda red de seguridad: lo que no deba ocurrir nunca, ponlo también en una regla deny de permisos.Ejemplo 2: preguntar antes de tocar producción
En lugar de bloquear, un hook puede pausar la llamada y preguntarte con $.ui.ask:
JavaScript · Confirmación en producción
const PRODUCCION = /config\/production|\.env\.production/
export function register(on) {
on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {
if (!PRODUCCION.test(e.file_path)) return next(e)
let respuesta = 'Cancelar' // respuesta segura por defecto
try {
respuesta = await $.ui.ask('¿Modificar ' + e.file_path + '?', ['Sí, modificar', 'Cancelar'])
} catch {
// el usuario cerró la pregunta o no hay nadie (claude -p)
}
if (respuesta !== 'Sí, modificar') {
return { deny: 'El usuario no autorizó cambiar la configuración de producción.' }
}
return next(e) // después sigue el control de permisos normal
})
}
La espera dentro de $.ui.ask no cuenta para el límite de 10 segundos del hook, así que puedes tardar lo que quieras en contestar.
Ejemplo 3: un comando instantáneo /rama
Un comando de un mod ejecuta tu función al momento, sin turno del modelo:
JavaScript · Comando /rama
export function register(on) {
on('session.start', async ($, e, next) => {
try {
await $.command.register({ name: 'rama', description: 'Muestra la rama de git actual', immediate: true })
} catch {} // un nombre ya usado lanza error
return next(e)
})
on('command.run', { command: 'rama' }, async ($) => {
try {
const r = await $.process.run(['git', 'branch', '--show-current'])
return { text: r.exitCode === 0 ? 'Rama actual: ' + r.stdout.trim() : 'Esto no es un repositorio git' }
} catch {
return { text: 'No se pudo ejecutar git' }
}
})
}
Con immediate: true el comando funciona incluso mientras Claude está trabajando. El text que devuelves aparece en el transcript y Claude también lo lee. Si además devuelves context, es una nota que solo lee el modelo.
Ejemplo 4: añadir contexto automático a tus prompts
Este hook añade la rama actual para Claude cada vez que hablas de un pull request, sin que cambie lo que ves en pantalla:
JavaScript · Contexto automático
export function register(on) {
on('prompt.submit', async ($, e, next) => {
if (!/\bPR\b|pull request/i.test(e.text)) return next(e)
const git = await $.process.run(['git', 'branch', '--show-current'])
if (git.exitCode !== 0) return next(e)
return next({ ...e, context: [...(e.context ?? []), 'Rama actual: ' + git.stdout.trim()] })
})
}
Ejemplo 5: tareas en segundo plano con un temporizador
Un hook dura un evento. Para trabajo continuo se usa $.clock.every desde session.start. Este ejemplo revisa los checks de un pull request cada minuto y muestra el resultado bajo el prompt:
JavaScript · Temporizador
export function register(on) {
on('session.start', async ($, e, next) => {
$.clock.every(60_000, async () => {
const r = await $.process.run(['gh', 'pr', 'checks'])
$.ui.status('checks: ' + (r.exitCode === 0 ? 'todo en verde' : 'hay fallos'))
})
return next(e) // no esperes al temporizador: la sesión arranca al momento
})
}
Para mostrar algo sin arrancar un turno tienes tres opciones:
| Llamada | Qué ve el usuario |
|---|---|
$.ui.status(texto) |
Una línea fija bajo el prompt hasta que la cambies |
$.ui.toast(texto) |
Un aviso arriba a la derecha que desaparece en unos segundos |
$.ui.log(texto) |
Una línea tenue en el transcript que Claude no lee |
Probar un mod sin abrir una sesión
claude plugin test ejecuta los archivos *.test.ts del mod sin sesión, sin autenticación y sin red. Como no hay nada «debajo» de tu mod, cada prueba registra sustitutos para lo que el mod deja pasar:
TypeScript · Prueba
import { expect, test } from 'claude-code/testing'
test('bloquea git reset --hard', async ($, on) => {
on('tool.call', { tool: 'Bash' }, () => ({ result: { stdout: 'ok', stderr: '', interrupted: false } }))
const r = await $.tool.call({ tool: 'Bash', command: 'git reset --hard' })
expect(r.deny).toContain('git reset')
})
Registra los sustitutos al principio de cada prueba, antes de la primera llamada a $. Y para depurar en vivo, arranca con claude --debug: el log nombra cada hook saltado y cada dibujo rechazado.
Mods integrados en Claude Code
Algunas funciones de Claude Code ya son mods. Los ves en /plugin → Installed → Built-in. No se pueden actualizar ni desinstalar, y --safe-mode o disableAllHooks no los apagan.
| Nombre en /plugin | Qué hace | Cómo apagarlo |
|---|---|---|
cc-plugin-diff |
El panel de /diff con los cambios sin guardar |
Desactivarlo en /plugin (o sustituirlo por tu versión) |
cc-plugin-agents-md |
Carga AGENTS.md como instrucciones del proyecto |
Desactivarlo en /plugin |
cc-plugin-plugin-authoring |
Da a Claude la skill para escribir mods | Desactivarlo en /plugin |
cc-plugin-sec-default |
Guardián de seguridad que protege lo que gestiona tu organización | No se puede; lo controla el administrador |
cc-plugin-telemetry |
Envía la analítica de Claude Code y sus mods integrados | Desactivarlo o usar DISABLE_TELEMETRY |
cc-plugin-you-should-know |
Un agente lateral que vigila mientras Claude trabaja y te avisa sobre el prompt de cosas que podrías pasar por alto | Viene desactivado; se activa con /plugin enable cc-plugin-you-should-know@builtin |
El código de diff, agents-md, sec-default y telemetry es público en el directorio mods del repositorio de Claude Code. Es la mejor referencia para aprender a escribir mods bien hechos.
Ejemplos reales de mods: oficiales y de la comunidad
Mods de ejemplo de Anthropic
Anthropic publica tres mods de muestra en el repositorio claude-code-playground, y puedes verlos funcionando en claude.dev/mods:
| Mod | Qué hace |
|---|---|
| token-weather | Una línea sobre el prompt con un «pronóstico del tiempo» de lo lleno que está tu contexto |
| blast-radius | Retiene un comando arriesgado (rm -rf, push forzado), muestra qué cambiaría y da botones para continuar o cancelar |
| replay-theater | Añade /replay para repasar, diff a diff, las ediciones que Claude hizo en el último turno |
Para probarlos: clona el repositorio y abre la carpeta del mod con --plugin-dir. Se comparten tal cual, sin soporte.
Mods de la comunidad destacados
En los primeros días la comunidad publicó cientos de mods. La mayoría son experimentos, pero algunos son muy útiles:
| Mod | Qué hace |
|---|---|
| terminal-browser | Un navegador junto a la conversación para webs, vistas previas de HTML local y pull requests |
| claude-image-view | Miniaturas de las imágenes pegadas sobre el prompt en lugar de [Image #1] |
| hamzafer/claude-code-mods | Pack con barra de contexto, guardián, vista previa de Markdown y dashboard de subagentes |
| claude-auto-handoff | Pasa una sesión larga a una nueva con un resumen estructurado |
| cc-arcade | Minijuegos sobre el prompt que se pausan cuando Claude termina |
| prompt-rail | Una barra con tus prompts anteriores para leerlos y saltar a ellos |
| CC-Usage-Band | Límites de 5 horas y 7 días, contexto y aciertos de caché sobre el prompt |
| claude-gfm-render | Alertas de GitHub, listas de tareas y diagramas Mermaid en las respuestas |
| harness-scope | Perfiles por repositorio que ocultan skills, agentes y reglas globales que no necesitas |
| touch-map | Muestra qué archivos listó, leyó, editó o creó Claude |
| glamour-dark y tool-lines | Respuestas con estilo oscuro y cada llamada a herramienta en una sola línea compacta |
| next-steps (Thariq Shihipar) | Sugiere hasta tres prompts siguientes al terminar cada turno. Se instala con claude plugin install next-steps@claude-community |
| claude-dino | Un juego del dinosaurio dentro de Claude Code: cada llamada a herramienta genera un obstáculo |
Para descubrir más, revisa los catálogos awesome-claude-code-mods (karanb192) y awesome-claude-code-mods (whyashthakker), este último con 70 mods organizados por categorías (sesión, git, repositorio, workspace, utilidades, flujo de trabajo y escritorio).
Qué construye la gente con los mods
Según el escaneo del catálogo de la comunidad del 6 de octubre de 2026, cinco días después del lanzamiento ya había 2.690 mods públicos en 1.265 repositorios. Lo más habitual:
| Qué hace el mod | % de mods |
|---|---|
| Añade un comando slash | 68% |
| Intercepta llamadas a herramientas | 53% |
| Dibuja encima del prompt | 41% |
| Abre un panel lateral | 40% |
| Lanza procesos | 40% |
| Llama a un modelo | 12% |
| Usa la red | 11% |
Ideas de mods para marketing y contenido
No hace falta ser desarrollador para sacarles partido. Si trabajas con contenido, el valor está en describir cómo quieres que se comporte tu entorno:
- Medidor de contexto al trabajar con newsletters o guiones largos, para saber cuándo abrir una sesión limpia.
- Freno de seguridad sobre la carpeta de borradores, imágenes y exportaciones.
- Siguiente paso para flujos repetitivos: de vídeo a post, de post a notas, de notas a LinkedIn.
- Segundo cerebro en un panel con proyectos, tareas y notas guardadas en
$.store. - Router de modelos para que lo sencillo (resumir, traducir, formatear) no se coma tus límites.
Comunicación entre sesiones con mods
Una de las funciones más potentes: un mod puede enviar mensajes a otra de tus sesiones de Claude Code o a un subagente de la sesión actual, y observar los mensajes que entran y salen.
Enviar un mensaje con $.session.send
$.session.send({ to, text }) hace la misma entrega que la herramienta SendMessage. El destino puede ser { sessionId } para otra sesión o { agentId } para un subagente (lo obtienes con $.agent.list()). La llamada nunca falla en silencio: devuelve { isDelivered: true } o { isDelivered: false, reason }.
JavaScript · Mensaje entre sesiones
on('command.run', { command: 'ping' }, async ($, e) => {
const r = await $.session.send({ to: { sessionId: e.args }, text: '¿En qué estás? Una línea.' })
if (!r.isDelivered) $.ui.toast('No entregado: ' + r.reason)
return {}
})
Recibir y filtrar mensajes
| Evento | Cuándo se dispara | Campos útiles |
|---|---|---|
session.receive |
Llega un mensaje, antes de que Claude lo lea | e.text y e.origin.kind (peer o peer-send-message para otra sesión, task-notification, scheduled-trigger). Devuelve { consumed: motivo } para que Claude no lo procese |
session.send |
Un mensaje va a salir | e.to, e.text y e.origin.kind (model o plugin) |
Ejemplo práctico: una sesión planea y otra construye
Con estas piezas puedes montar dos sesiones que trabajan en equipo:
- /duo planner y /duo builder guardan el id de cada sesión (
$.session.id()) en$.store, que comparten todas las sesiones de la máquina. - /plan <texto> en la sesión planner lee el id del builder y le envía el plan con
$.session.send. - En el builder,
session.receivemuestra «PLAN RECIBIDO» en la banda sobre el prompt y deja pasar el mensaje connext(e)para que Claude empiece a construir. - En
turn.complete, el builder manda un resumen de una línea al planner. - En el planner,
session.receivedevuelve{ consumed }: el resumen se ve, pero Claude no responde solo. Así se evitan bucles infinitos.
Seguridad en los mensajes: el nombre del remitente es lo que el remitente haya escrito, así que nunca bases una decisión en él. Si una sesión está configurada para rechazar mensajes entrantes (crossSessionInbound), el mensaje se rechaza antes de que el hook lo vea. Más detalles en la documentación de mensajes entre sesiones.
Llamar a otro modelo desde un mod
$.model.complete hace una pregunta suelta a un modelo, sin historial, ideal para clasificar o resumir:
JavaScript · Clasificar con Haiku
const r = await $.model.complete({
model: 'haiku',
system: 'Responde una palabra: FACIL o DIFICIL',
prompt: e.text,
maxTokens: 5,
timeoutMs: 8000,
})
const nivel = r.isAnswered ? r.text.trim() : 'DIFICIL'
Y en turn.step puedes enviar una petición completa a otro modelo. Este hook es un generador asíncrono porque la respuesta llega en streaming:
JavaScript · Router de modelos
on('turn.step', async function* ($, e, next) {
if (turnoFacil && e.agentId === undefined) {
return yield* next({ ...e, model: 'haiku' })
}
return yield* next(e)
})
Cuidado con la caché
Cambiar de modelo a mitad de sesión, o cambiar el system prompt entre peticiones, invalida la caché de prompts. El primer turno en cada modelo es más lento y más caro. Si alternas mucho, puedes acabar gastando más de lo que ahorras. Además, estas llamadas usan tu plan o tu API key.
Permisos y seguridad de los mods de Claude Code
Esta es la parte que más importa. Un mod no es un prompt: es código que se ejecuta con tus permisos.
Qué puede alcanzar un mod
Una vez cargado, un mod puede:
- Actuar en tu máquina como tú: leer y escribir archivos donde tu usuario tenga acceso, lanzar programas y hacer peticiones de red.
- Leer tus secretos: variables de entorno y archivos de configuración, incluidas las API keys.
- Ver tu sesión: cada prompt que envías y cada llamada que hace Claude.
- Cambiar tu sesión: reescribir prompts o llamadas, enviar un prompt como si lo hubieras escrito tú o mandar mensajes a otra sesión.
- Actuar sin preguntarte: aprobar una llamada a herramienta antes de que te pregunten.
- Gastar tu uso: llamar a un modelo con tu plan o tu API key.
Los mods no van en sandbox
Aunque actives el sandboxing de Claude Code, este aísla los comandos Bash que ejecuta Claude, pero un proceso que lanza un mod corre fuera. Instala mods solo de autores y marketplaces de confianza, igual que harías con cualquier software.
Mods y reglas de permisos: quién gana
| Situación | Con el guardián sec-default (empresa o managed settings) | En una máquina personal sin managed settings |
|---|---|---|
Regla deny |
Gana la regla: el mod no puede aprobar lo que deny rechaza | Un mod que aprueba llamadas puede saltarse una regla deny |
Regla ask |
El mod puede aprobar la llamada sin preguntar | El mod puede aprobar la llamada sin preguntar |
Hook PreToolUse en managed settings |
Se ejecuta antes que cualquier mod y su bloqueo es definitivo | No aplica |
Hook PreToolUse en otros settings o plugins |
Un mod puede aprobar lo que ese hook bloqueó | Un mod puede aprobar lo que ese hook bloqueó |
| Modo automático | Una llamada aprobada por un mod se ejecuta sin revisión del clasificador | Igual |
| Aviso de permiso | Ningún mod puede cambiar lo que muestra | Ningún mod puede cambiar lo que muestra |
Ojo con un matiz: las reglas deny se aplican a las herramientas de Claude, no a las llamadas propias del mod. Con Read(.env) denegado, un mod puede seguir leyendo ese archivo con $.fs.read.
Cómo revisar un mod antes de instalarlo
Descarga el plugin (por ejemplo, clonando su repositorio) y ejecuta:
claude plugin validate ./nombre-del-mod
La salida incluye dos líneas clave, sin ejecutar el mod:
Bash · Salida de validate
❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}
❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open
La línea hooks: lista los eventos que maneja el mod y la línea calls: lo que pide hacer. Claude Code se niega a cargar un mod que usa la API de una forma que este comando no puede leer. Estas son las llamadas que debes vigilar:
| Llamada | Qué significa |
|---|---|
$.fs.read, $.fs.write |
Lee o escribe archivos en cualquier sitio al que tengas acceso |
$.process.run, $.process.spawn |
Lanza programas como tú |
$.http.fetch |
Hace peticiones de red |
$.env.get, $.settings.read |
Lee variables y configuración, que pueden contener API keys |
$.env.set |
Cambia variables para Claude Code y todo lo que lance después |
$.mcp.call |
Llama a herramientas de tus servidores MCP |
$.model.complete |
Gasta tu plan o API key |
$.prompt.submit |
Envía prompts, incluso como si fueran tuyos |
$.session.send |
Envía mensajes que lee otra sesión o subagente |
Y en la línea hooks:, presta atención a tool.call y prompt.submit (ve y puede cambiar cada llamada y cada prompt), tool.check (puede aprobar o denegar antes del aviso de permiso) y session.append (puede reescribir el historial antes de guardarlo).
Validar no es lo mismo que confiar. Que un mod pase validate significa que el motor puede cargarlo, no que sea seguro. Lee el código allí donde aparezcan $.process, $.http, $.fs.write, $.env.get o $.model, y vuelve a validarlo después de cada actualización.
Una lección real: los secretos enmascarados
Un autor de la comunidad creó un mod que sustituía las API keys en la salida de las herramientas antes de que Claude las viera. Aun así, Claude imprimió los valores reales mientras depuraba una edición fallida, y una escritura del archivo completo guardó los marcadores encima de las claves reales. Lo único que aguantó fue una regla deny sobre el archivo. Conclusión: un mod que cambia lo que ves no le oculta nada al modelo. Para proteger secretos, usa reglas de permisos.
Checklist de seguridad antes de instalar un mod
- ¿Conozco al autor o al marketplace?
- ¿He ejecutado
claude plugin validatey revisado las líneashooks:ycalls:? - ¿He leído el código de las partes que acceden a archivos, procesos, red o variables de entorno?
- ¿Lo he probado primero en un repositorio de pruebas, nunca directamente en producción?
- ¿Los guardianes tienen
.catchpara fallar en cerrado? - ¿Lo crítico está protegido también con reglas
deny? - ¿Sé cómo apagarlo rápido (
/plugino--safe-mode)?
Mods en equipos y empresas
Como los mods viajan dentro de plugins, se aplican los controles de plugins que ya tengas. Los administradores pueden permitir o bloquear marketplaces: en los planes Team y Enterprise desde la consola de administración, y en planes de API o de terceros mediante managed settings. La guía completa está en gestionar mods en tu organización.
El guardián sec-default
En planes Team y Enterprise, y en cualquier máquina con managed settings, se carga primero un mod integrado llamado sec-default («security default»). Los usuarios no pueden desactivarlo. Impide que los mods que instala cada persona:
- Cambien lo que reciben o deciden los hooks gestionados por la organización.
- Modifiquen el system prompt, el
CLAUDE.mdgestionado u otras instrucciones gestionadas. - Alteren lo que cualquier mod lee como configuración.
- Toquen las herramientas de los servidores MCP gestionados.
- Aprueben una llamada que una regla
denyrechaza.
Fuera de eso, el guardián no añade más restricciones. Y falla en cerrado: si no puede leer la configuración gestionada, rechaza todos los mods de usuario.
Bloquear todos los mods de usuario
Para que solo carguen los mods de la organización, se activa allowManagedModsOnly en managed settings:
JSON · Managed settings
{
"pluginConfigs": {
"cc-plugin-sec-default@builtin": {
"options": {
"allowManagedModsOnly": true
}
}
}
}
Con esta opción no carga ningún mod que traiga el usuario (instalado, cargado con --plugin-dir o escrito por Claude en una sesión). Los usuarios no pueden deshacerlo desde sus propios archivos de configuración, y sus hooks de configuración y status lines siguen funcionando.
Niveles de política para mods
| Lo que quieres | Configuración |
|---|---|
| Ningún mod instalado, sin tocar los hooks | allowManagedModsOnly sin desplegar mods propios |
| Ningún mod ni hook en absoluto (incluidos los gestionados) | disableAllHooks: true |
| Solo los mods de la organización | allowManagedModsOnly + instalar tus mods para que cuenten como de la organización |
| Cualquier mod de marketplaces aprobados | Restricciones de marketplace + disableSideloadFlags: true |
| Cualquier mod, con un mod propio vigilando a los demás | Instalar tu mod y listarlo junto a sec-default@builtin en prependPlugins |
Existe además allowModsToOverrideDenyRules: si lo activas, un mod de usuario podría aprobar llamadas que una regla deny rechaza. Úsalo solo si sabes exactamente por qué.
Desplegar mods propios de la organización
Para que Claude Code trate un mod como de tu organización, debe cumplir tres condiciones: estar activado en enabledPlugins gestionado, venir de un marketplace que es un directorio local con ruta absoluta, y estar listado por ruta relativa. Un ejemplo de configuración:
JSON · Mods de la organización
{
"extraKnownMarketplaces": {
"acme-tools": {
"source": { "source": "directory", "path": "/opt/acme/claude-plugins" }
}
},
"enabledPlugins": { "acme-guard@acme-tools": true },
"prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]
}
Si defines prependPlugins, incluye sec-default@builtin en la lista o perderás el guardián. Y protege el directorio para que solo un administrador pueda escribir en él: quien pueda escribir ahí puede reescribir tu mod.
Mods de política: revisar a los demás mods
Con el evento plugin.register, un mod de la organización recibe la misma lista que imprime validate cada vez que otro mod va a cargar, y puede rechazarlo. Por ejemplo, para impedir mods de usuario que lancen procesos:
JavaScript · Mod de política
const PROHIBIDAS = ['process.run', 'process.spawn']
export function register(on) {
on('plugin.register', async ($, e, next) => {
const usadas = e.uses.calls.filter(c => PROHIBIDAS.includes(c))
if (e.tier === 'user' && usadas.length > 0) {
return { refuse: 'Política de la empresa: los mods no pueden usar ' + usadas.join(', ') }
}
return next(e)
})
}
Ideas de mods para equipos
- Estado de CI/CD: un panel junto a la conversación que se actualiza cuando los builds pasan o fallan.
- Protección de producción: confirmación obligatoria antes de tocar configuración de producción.
- Registro de auditoría: un mod que carga primero y registra cada llamada que hacen los demás mods.
- Convenciones del equipo: inyectar en los prompts las reglas de nombres o de commits sin repetirlas cada vez.
Buena práctica en equipos
Fija una versión concreta de Claude Code y escribe vuestra política de mods (qué se permite, quién revisa y cómo) en un documento como
CONTRIBUTING.md del marketplace del equipo. La API de mods sigue evolucionando y varias versiones posteriores al lanzamiento han cambiado su comportamiento.Buenas prácticas para escribir mods
- Los guardianes deciden antes de
nexty fallan en cerrado con.catch. Los mods que solo observan deben fallar en abierto (.catch(($, e, next) => next(e))) para que un fallo en un medidor nunca bloquee tu trabajo. - Espera dentro de las llamadas a
$. Un hook tiene 10 segundos de tiempo propio; las esperas en$.process.runo$.ui.askno cuentan, pero tus propias promesas sí. - No guardes ni desestructures
$. Pásalo solo a funciones definidas en el nivel superior del archivo. - Guarda lo que dibujas en
$.state, no en variables del módulo: la recarga en caliente reinicia las variables. Para que algo sobreviva a/clearo entre sesiones, usa$.store. - La banda sobre el prompt es compartida. Llama a
next(e)e incluye su resultado en tu dibujo, o esconderás lo que dibujan otros mods. - Registra los comandos al final de
session.starto dentro detry/catch: un nombre ya usado lanza error y salta el resto del hook. - Registra cada evento una sola vez por filtro, o el módulo no cargará.
- Decide según
e.surface: algunos elementos solo dibujan en la terminal y otros solo en la app de escritorio. - Cuida la caché de prompts: evita cambiar modelo o system prompt sin necesidad.
- Desarrolla con
--plugin-dir: un mod instalado ejecuta una copia en caché, así que editar su carpeta no cambia nada hasta que lo actualizas.
Problemas comunes con los mods y cómo solucionarlos
| Síntoma | Causa probable | Solución |
|---|---|---|
/plugin no muestra el mod |
Carpeta no marcada como de confianza, --safe-mode, --bare o disableAllHooks |
Marca la carpeta como de confianza y reinicia sin esas opciones |
| «hooks modules are turned off in this process» | Anthropic desactivó en remoto los mods instalados | Actualiza Claude Code a la última versión |
validate falla con errores raros |
Una CLI antigua aparece antes en tu PATH | Comprueba claude --version y actualiza |
| Un hook se salta sin error visible | Lanzó una excepción o superó los 10 segundos | Arranca con claude --debug y lee la línea que explica el salto |
| Un panel no se abre | Un panel abierto automáticamente necesita 144 columnas; /diff puede taparlo |
Ensancha la ventana, ábrelo tú con su comando o cierra /diff |
| Un dibujo no aparece | El motor rechazó una propiedad | Busca «ui.render refused» en el transcript o en el log de depuración |
| Funciona en la terminal pero no en la app | La app trae su propia versión y algunos elementos son exclusivos de la terminal | Revisa /status en la pestaña Code y usa e.surface |
No se ve nada en VS Code ni en claude -p |
Esas superficies no dibujan | Usa una línea en el transcript o el texto de un comando |
| Los mods se apagaron a mitad de sesión | El proceso de mods falló tres veces | Ejecuta /reload-plugins o abre una sesión nueva |
Cómo compartir tu mod
Añade un marketplace.json junto a plugin.json dentro de .claude-plugin/:
JSON · marketplace.json
{
"name": "mis-mods",
"owner": { "name": "tu-nombre" },
"plugins": [{ "name": "guardian", "source": "./" }]
}
Sube la carpeta a GitHub y cualquiera podrá añadir tu marketplace e instalar el mod. Antes de publicar, valida el plugin y el catálogo con claude plugin validate. Si quieres más visibilidad, puedes enviarlo al directorio de Claude, y si añades el topic claude-code-mod a tu repositorio, los catálogos de la comunidad suelen incluirlo.
Si vas a publicar una nueva versión, sube el número de version en plugin.json; los usuarios la reciben con claude plugin marketplace update y claude plugin update.
Preguntas frecuentes sobre los mods de Claude Code
¿Qué es un mod de Claude Code?
Es un plugin con funciones en TypeScript o JavaScript que se ejecutan dentro de Claude Code. Se engancha a eventos como una llamada a herramienta, un prompt o el dibujo de la pantalla, y puede observarlos, cambiarlos o responder en su lugar.
¿Necesito saber programar para usar mods?
No. Puedes instalar mods de otras personas con un comando o describir el mod que quieres en una sesión y Claude lo escribe, lo instala y lo recarga en caliente.
¿Qué versión de Claude Code necesito?
La 2.1.287 o superior en la terminal y la 2.1.286 o superior en la app de escritorio. Los mods vienen activados por defecto.
¿Los mods funcionan en Claude.ai o solo en Claude Code?
Solo en Claude Code: en la CLI y en la pestaña Code de la app de escritorio. En la extensión de VS Code, en claude -p y en sesiones en la nube los hooks se ejecutan, pero la interfaz del mod no se dibuja.
¿En qué se diferencia un mod de un hook?
Un hook de configuración es un script que Claude Code lanza desde fuera. Un mod corre dentro del proceso de Claude Code, así que puede dibujar interfaz, reescribir eventos, crear comandos instantáneos y sustituir funciones integradas, cosas que un hook no puede hacer.
¿Son seguros los mods?
Son tan seguros como su autor. No van en sandbox y tienen los mismos permisos que Claude Code: pueden leer archivos, secretos y variables de entorno, lanzar procesos y hacer peticiones de red. Instala solo mods de fuentes de confianza y revísalos con claude plugin validate.
¿Un mod puede saltarse mis reglas de permisos?
En una máquina personal sin managed settings, un mod que aprueba llamadas puede aprobar incluso algo que una regla deny rechaza. En planes Team y Enterprise o con managed settings, el guardián sec-default impide que un mod de usuario anule las reglas deny. Ningún mod puede cambiar lo que muestra el aviso de permiso.
¿Cómo desactivo todos los mods?
Para una sesión, arranca con claude --safe-mode. Para siempre, pon "disableAllHooks": true en ~/.claude/settings.json. Para uno concreto, desactívalo desde /plugin.
¿Puede una empresa bloquear los mods?
Sí. Con allowManagedModsOnly en managed settings solo cargan los mods de la organización. También se pueden limitar los marketplaces permitidos, bloquear --plugin-dir con disableSideloadFlags o desplegar un mod de política que revise a los demás.
¿Pueden comunicarse dos sesiones de Claude Code con mods?
Sí. Con $.session.send un mod envía mensajes a otra sesión o a un subagente, y con el evento session.receive decide qué hacer con los que llegan. Así puedes montar, por ejemplo, una sesión que planifica y otra que construye.
¿Los mods gastan tokens o uso de mi plan?
Solo si llaman a un modelo con $.model.complete, $.model.fork o envían prompts. Un mod que solo dibuja o bloquea comandos no consume tokens. Ten en cuenta que cambiar de modelo invalida la caché y puede encarecer los turnos.
¿Dónde encuentro mods para instalar?
En el directorio de Claude, en los ejemplos oficiales de claude-code-playground y en catálogos de la comunidad como awesome-claude-code-mods.
Conclusión: Claude Code ya es tuyo
Los mods de Claude Code no son un cambio enorme a simple vista, pero marcan un giro importante: ya no se trata solo de crear skills o conectar herramientas, sino de que el propio entorno de trabajo se vuelve modificable. Puedes añadirle medidores, frenos de seguridad, paneles, comandos y hasta hacer que varias sesiones colaboren entre sí.
Mi recomendación para empezar:
/plugin.Fuentes y documentación oficial
- Anthropic: Customize Claude Code with mods (anuncio oficial)
- Documentación oficial: Mods overview
- Documentación oficial: React to events
- Documentación oficial: Use the mods API
- Documentación oficial: Manage mods for your organization
- Lorena Bordonaba: Los mods de Claude Code, qué son y cómo usarlos
- DataPath: Claude Code Mods, así puedes personalizarlo con TypeScript
- CursosDesarrolloWeb: Mods de Claude Code en un equipo
- AcademIArtificial: Claude Code estrena mods para personalizar su funcionamiento
- Kanaries: Tutorial de Claude Code Mods con 15 ejemplos de la comunidad
- The AI Studio (Medium): 9 Claude Code Mods You Need to Install


