Inicio / Extender: habilidades, MCP, subagentes, hooks, plugins
Hooks: automatizar el ciclo de vida
Un hook es una acción que el arnés ejecuta él mismo ante un evento preciso del ciclo de vida, nunca una preferencia confiada al modelo esperando que la recuerde.
Un hook es una acción que el arnés ejecuta él mismo cuando ocurre un evento preciso del ciclo de vida, nunca una petición que el modelo interpreta en el momento de actuar. Escribir en un archivo de memoria cada vez que haces un commit, lanzas los tests, sigue siendo una preferencia: el modelo puede olvidarla después de una conversación larga o una compactación. Un hook declarado sobre el evento correspondiente se ejecuta en cada ocurrencia, independientemente de lo que el modelo recuerde en ese instante.
El mecanismo: un evento, un comando, una decisión
Un hook se declara en settings.json, o en el archivo hooks.json de un plugin, asociado a un evento del ciclo de vida y a un tipo de acción: un comando de shell, una llamada HTTP, una herramienta MCP, una instrucción o un agente. Cuando el evento ocurre, el arnés ejecuta esa acción y espera a cambio una decisión, antes de que la cuestión llegue al modelo.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "./verifier-avant-commande.sh" }
]
}
]
}
}
Esta declaración asocia el evento PreToolUse, restringido a las llamadas de la herramienta Bash, a un script que se ejecuta antes de cada comando propuesto. Cada tipo de hook tiene su propio plazo de expiración por defecto, distinto según el evento que lo dispara: la lección siguiente detalla esos plazos evento por evento, así como los campos JSON precisos que un hook devuelve para bloquear, autorizar o enriquecer lo que ve el modelo.
Hook contra regla de memoria: qué garantiza realmente cada uno
Una regla de memoria depende de un modelo que la relee y decide aplicarla, en una ventana de contexto que crece a lo largo de la sesión. Un hook depende del arnés, que verifica el evento independientemente de lo que contenga la conversación en ese instante. La diferencia se nota sobre todo en una sesión larga: una instrucción repetida veinte veces en un archivo de memoria puede diluirse en un contexto cargado, mientras que un hook declarado una sola vez sigue ejecutándose de forma idéntica en la llamada número mil igual que en la primera.
Traducir un automatismo deseado en un hook en lugar de en una nota de memoria es, por tanto, menos una cuestión de estilo que una cuestión de fiabilidad mecánica: uno depende de una lectura atenta del modelo, el otro de un evento que el propio arnés constata.
Del disparo a la decisión
Regla de memoria contra hook declarado
| Hacer fiable un automatismo repetido | Qué dispara la acción | Comportamiento en una sesión larga | Dónde se declara el automatismo |
|---|---|---|---|
| Regla escrita en memoria | Una lectura del modelo, que debe recordarla en el momento oportuno | Puede diluirse tras una compactación o un contexto cargado | Un archivo CLAUDE.md, interpretado por el modelo |
| Hook declarado | Un evento del ciclo de vida, constatado por el propio arnés | Se ejecuta de forma idéntica en cada ocurrencia del evento | settings.json o el hooks.json de un plugin, ejecutado por el arnés |
Un desarrollador declara un hook PreToolUse en settings.json que bloquea toda llamada de la herramienta Bash que contenga el patrón rm seguido de -rf. Después le pide a Claude Code que ejecute un comando que contiene ese patrón, y ve cómo se activa el hook.
Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.
Lo que esto establece: Esta situación establece que el hook efectivamente intercepta un comando Bash que coincide con el patrón declarado, en el momento en que la herramienta está a punto de ejecutarse.
Lo que esto no establece: No establece que ese mismo hook vaya a interceptar un comando destructivo formulado de otra manera, por ejemplo con opciones separadas o una ruta construida dinámicamente, ya que solo se observó el patrón probado.
Los tres calibrados falsos más frecuentes
- Demasiado amplio Esta situación prueba que el hook bloquea a partir de ahora todo comando destructivo, sea cual sea su formulación.
- Demasiado estrecho Esta situación no prueba nada, ya que un hook nunca puede sustituir la vigilancia de un desarrollador que relee cada comando.
- Fuera de tema Esta situación muestra que el hook se ejecutó más rápido de lo que lo habría hecho una relectura manual del comando.
- Un hook se dispara porque ocurre un evento del ciclo de vida, nunca porque el modelo decida aplicarlo en el momento de actuar.
- Una regla repetida en un archivo de memoria puede diluirse en un contexto cargado, un hook declarado una sola vez se ejecuta de forma idéntica en cada ocurrencia del evento.
- Un hook se declara en settings.json o en el archivo hooks.json de un plugin, asociado a un tipo de acción entre comando de shell, llamada HTTP, herramienta MCP, instrucción o agente.
- Cada tipo de hook tiene su propio plazo de expiración por defecto, detallado evento por evento en la lección siguiente.
Crea un archivo .claude/settings.json mínimo en un repositorio de prueba, declara en él un hook PreToolUse que muestre un mensaje antes de cada comando Bash para observar cómo se dispara el mecanismo, y luego retira ese hook una vez hecha la demostración.
Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.