Capítulo 6: Hooks: Automatización por Eventos

Por: Artiko
claude-codehooksautomatizacioneventos

¿Qué son los Hooks?

Los hooks son automatizaciones que se disparan cuando ocurren eventos específicos en Claude Code. Ejemplo: advertir sobre console.log cada vez que se edita un archivo JS.

Tipos de Eventos

EventoCuándo se dispara
PreToolUseAntes de ejecutar una herramienta
PostToolUseDespués de ejecutar una herramienta
StopCuando el agente termina
SessionStartAl iniciar sesión
SessionEndAl cerrar sesión

Anatomía de un Hook

{
  "matcher": "tool == \"Edit\" && tool_input.file_path matches \"\\\\.(ts|tsx|js|jsx)$\"",
  "hooks": [{
    "type": "command",
    "command": "#!/bin/bash\ngrep -n 'console\\.log' \"$file_path\" && echo '[Hook] Remove console.log' >&2"
  }]
}

Componentes:

Hooks Incluidos en ECC

Memory Persistence

Guardan y restauran contexto entre sesiones automáticamente:

Strategic Compact

Sugiere /compact en momentos lógicos en vez de esperar al auto-compact al 95%.

Seguridad

Code Quality

Hook Runtime Controls

Controlar hooks en runtime sin editar archivos:

# Perfil de severidad
export ECC_HOOK_PROFILE=minimal    # minimal | standard | strict

# Deshabilitar hooks específicos
export ECC_DISABLED_HOOKS="pre:bash:tmux-reminder,post:edit:typecheck"

Scripts Cross-Platform

Los hooks usan scripts Node.js para compatibilidad cross-platform:

scripts/
├── lib/
│   ├── utils.js              # Utilidades de archivos y sistema
│   └── package-manager.js    # Detección de package manager
└── hooks/
    ├── session-start.js      # Cargar contexto
    ├── session-end.js        # Guardar estado
    ├── pre-compact.js        # Pre-compactación
    ├── suggest-compact.js    # Sugerencias de compactación
    └── evaluate-session.js   # Extraer patrones

Hooks en Diferentes Herramientas

Claude CodeCursorOpenCode
PreToolUsebeforeShellExecutiontool.execute.before
PostToolUseafterFileEdittool.execute.after
Stopsession.idle
SessionStartsession.created
8 tipos15 tipos11 tipos

Cursor tiene un DRY adapter (adapter.js) que transforma el formato de Cursor al de Claude Code, reutilizando los mismos scripts.

Crear tu Propio Hook

Ejemplo: alertar cuando un archivo supera 200 líneas:

{
  "matcher": "tool == \"Edit\"",
  "hooks": [{
    "type": "command",
    "command": "#!/bin/bash\nLINES=$(wc -l < \"$file_path\"); [ $LINES -gt 200 ] && echo \"[Hook] $file_path tiene $LINES líneas (máx 200)\" >&2"
  }]
}