Hooks
Los hooks son scripts de shell que se ejecutan automáticamente en respuesta a eventos de Claude Code. Te dan control total sobre el comportamiento de la herramienta.
¿Qué son los hooks?
Los hooks te permiten interceptar y reaccionar a eventos del ciclo de vida de Claude Code: antes de ejecutar una herramienta, después de hacerlo, cuando Claude termina una respuesta, etc.
Casos de uso comunes:
- Formatear automáticamente el código tras cada edición.
- Registrar en un log todas las operaciones de Claude.
- Bloquear operaciones peligrosas con lógica personalizada.
- Enviar notificaciones cuando Claude termina una tarea larga.
- Ejecutar tests automáticamente después de cada cambio.
Tipos de hooks
| Evento | Cuándo se dispara | Puede bloquear |
|---|---|---|
PreToolUse | Antes de ejecutar cualquier herramienta | Sí |
PostToolUse | Después de ejecutar cualquier herramienta | No |
Stop | Cuando Claude termina una respuesta completa | No |
SubagentStop | Cuando un subagente termina su tarea | No |
Notification | Cuando Claude emite una notificación al usuario | No |
Configurar hooks
Los hooks se configuran en .claude/settings.json (proyecto) o ~/.claude/settings.json (global):
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "prettier --write $CLAUDE_FILE_PATH"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification "Claude terminó" with title "Claude Code"'"
}
]
}
]
}
}Variables de entorno disponibles en hooks
| Variable | Descripción |
|---|---|
CLAUDE_TOOL_NAME | Nombre de la herramienta que se ejecutó |
CLAUDE_TOOL_INPUT | Input de la herramienta (JSON) |
CLAUDE_TOOL_OUTPUT | Output de la herramienta (PostToolUse) |
CLAUDE_FILE_PATH | Ruta del archivo afectado (Edit/Write/Read) |
CLAUDE_SESSION_ID | ID único de la sesión actual |
CLAUDE_PROJECT_DIR | Directorio raíz del proyecto |
CLAUDE_HOOK_TYPE | Tipo de hook (PreToolUse, PostToolUse, Stop...) |
El matcher
El campo matcher es una expresión regular que se compara con el nombre de la herramienta. Si no se especifica, el hook se aplica a todas las herramientas.
# Solo edición de archivos TypeScript
"matcher": "Edit"
# Herramientas de bash y edición
"matcher": "Bash|Edit|Write"
# Cualquier herramienta de lectura
"matcher": "^Read"Hook de tipo command
El tipo más común. Ejecuta un comando de shell. El hook puede leer información del evento via variables de entorno o via stdin (JSON):
{
"type": "command",
"command": "bash /ruta/a/mi-hook.sh",
"timeout": 30
}Ejemplo: hook que lee datos del evento por stdin
#!/bin/bash
# mi-hook.sh — recibe el evento completo como JSON por stdin
EVENT=$(cat)
TOOL=$(echo $EVENT | jq -r '.tool_name')
FILE=$(echo $EVENT | jq -r '.tool_input.path // ""')
echo "Herramienta: $TOOL, Archivo: $FILE" >> ~/.claude/hook.logBloquear operaciones con PreToolUse
Un hook PreToolUse puede devolver un código de salida distinto de 0 para bloquear la operación:
#!/bin/bash
# Bloquear rm -rf
TOOL=$(cat | jq -r '.tool_name')
CMD=$(cat | jq -r '.tool_input.command // ""')
if [[ "$CMD" == *"rm -rf"* ]]; then
echo "BLOQUEADO: rm -rf no permitido"
exit 1 # exit 1 = bloquear la operación
fi
exit 0 # exit 0 = permitirConfigúralo así en settings.json:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "bash ~/.claude/hooks/bloquear-rm.sh"
}]
}]
}
}Ejemplos prácticos
Formatear con Prettier tras edición
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "npx prettier --write "$CLAUDE_FILE_PATH" 2>/dev/null || true"
}]
}]
}
}Ejecutar tests tras cambios
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "npm test --watchAll=false 2>&1 | tail -20"
}]
}]
}
}Log de todas las operaciones
{
"hooks": {
"PostToolUse": [{
"hooks": [{
"type": "command",
"command": "echo "$(date) - $CLAUDE_TOOL_NAME: $CLAUDE_FILE_PATH" >> ~/.claude/audit.log"
}]
}]
}
}2>/dev/null || true al final de tus comandos de hook para evitar que errores menores interrumpan el flujo de Claude.Gestionar hooks desde la CLI
# Ver hooks configurados (dentro de Claude Code)
/hooks
# O abre settings.json directamente:
claude configMapa completo de AulafyConsulta cómo encaja esta lección sin salir de tu ruta.
Mapa completo de Aulafy
Cómo se relacionan todos los cursos
No es una lista que debas completar. Empieza por la base, elige un resultado y profundiza solo cuando tu proyecto necesite más control.
- 1Comprender
- 2Aplicar o construir
- 3Operar con confianza
Empieza aquí
Crea una base común: qué puede hacer la IA, cómo pedir resultados y cómo comprobarlos antes de especializarte.
Desde esta base puedes aplicar la IA a una tarea o aprender a construir con código.
Elige una aplicación
Convierte la base en un resultado visible: una web, una mejora de negocio, contenido o una experiencia interactiva.
Si necesitas mantener código, datos o infraestructura, continúa por la rama técnica.
Construye con código
Prepara el entorno, trabaja con agentes de programación y aprende a ejecutar modelos con control sobre tus proyectos.
Esta rama prepara los conocimientos necesarios para diseñar y operar sistemas de IA fiables.
Lleva sistemas a producción
Combina recuperación, agentes, evaluación, seguridad, despliegue y adaptación de modelos cuando el problema lo exija.
No es obligatorio completarlo todo: elige solo la pieza que tu sistema necesita y vuelve al mapa cuando crezca.