Hooks: Automatizaciones Inteligentes
Hooks son comandos definidos por el usuario que se ejecutan automaticamente en momentos especificos en el ciclo de vida de Claude Code.
Son automatizaciones que no dependen de que Claude "recuerde" hacer algo - se disparan automaticamente cuando ocurren eventos especificos.
Tipos de Hooks Disponibles
| Hook | Cuando se Ejecuta |
|---|---|
| PreToolUse | Antes de que Claude ejecute una herramienta (puede bloquear) |
| PostToolUse | Despues de que una herramienta se ejecute exitosamente |
| UserPromptSubmit | Cuando el usuario envia un prompt |
| Notification | Cuando Claude envia notificaciones |
| Stop | Cuando Claude termina de responder |
Como Configurar Hooks
Escribi /hooks en tu chat con Claude. Te va a guiar en el proceso de configuracion.
Los hooks se guardan en tres lugares posibles:
~/.claude/settings.json # Global (todos los proyectos)
.claude/settings.json # Proyecto (commitear para compartir)
.claude/settings.local.json # Local (no commitear)Ejemplos Reales Que Uso
Hook 1: Auto-formatear Codigo Despues de Cada Edit
Cada vez que Claude edita un archivo TypeScript, Prettier lo formatea automaticamente:
# PostToolUse hook for Edit tool
prettier --write {file_path}Codigo consistente, cero esfuerzo manual.
Hook 2: Logging de Todos los Comandos Bash
Para compliance y debugging, loggeo todos los comandos que Claude ejecuta:
# PostToolUse hook for Bash tool
jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txtTengo un registro completo de todo lo que Claude hace.
Hook 3: Bloquear Edits en Archivos de Produccion
PreToolUse hook que bloquea modificaciones a archivos criticos:
# PreToolUse hook for Edit tool
if [[ "{file_path}" == *"production/"* ]]; then
echo "ERROR: Cannot edit production files directly"
exit 1
fiClaude fisicamente no puede tocar archivos de produccion. Safety first.
Hook 4: Notificacion Custom
# Notification hook
osascript -e 'display notification "Claude Code necesita tu atencion" with title "Claude Code"'En Mac, recibo una notificacion del sistema cuando Claude necesita que revise algo.
Hook 5: Validar que Tests Pasen Antes de Commit
# PreToolUse hook for Bash(git commit*)
npm test || exit 1Si los tests fallan, el commit se bloquea. No mas "fix tests later".
Seguridad de Hooks
IMPORTANTE: Los hooks corren con las credenciales de tu ambiente actual.
Un hook malicioso podria:
- Exfiltrar datos
- Modificar archivos sin tu conocimiento
- Ejecutar comandos destructivos
Siempre revisa hooks antes de agregarlos, especialmente si vienen de repos publicos.
Organizacion de Hooks para Proyectos Grandes
Para proyectos complejos, crea un directorio dedicado:
project/
├── .claude/
│ ├── hooks/
│ │ ├── format.sh
│ │ ├── test.sh
│ │ └── security-check.sh
│ └── settings.jsonLuego en settings.json referencia los scripts:
{
"hooks": {
"PostToolUse:Edit": ".claude/hooks/format.sh {file_path}",
"PreToolUse:Bash(git commit*)": ".claude/hooks/test.sh"
}
}Mucho mas mantenible que bash de una linea.
Mi Setup Real de Hooks
En mis proyectos uso esta combinacion:
- PostToolUse(Edit): Auto-format con Prettier
- PostToolUse(Bash): Logging de comandos
- PreToolUse(Edit en /config/): Bloquear edits en configs de prod
- UserPromptSubmit: Validar que no haya API keys en el prompt
Esto me ahorra facilmente 2-3 horas por semana en formatting, logging manual, y evita que rompa produccion por accidente.
Hooks vs Comandos Custom
| Caracteristica | Hooks | Comandos Custom |
|---|---|---|
| Ejecucion | Automatica | Manual |
| Trigger | Eventos de Claude | Usuario escribe /comando |
| Uso tipico | Validaciones, formateo | Workflows repetitivos |
| Ubicacion | settings.json | .claude/commands/ |
Usa hooks para cosas que SIEMPRE deben pasar. Usa comandos custom para workflows que ejecutas a veces.
Siguiente Paso
Ahora que tenes automatizaciones configuradas, vamos a ver como garantizar calidad con testing y CI/CD bulletproof.