¿Qué son los hooks de Claude Code? Ejecuta comandos de shell de forma determinista
Los hooks de Claude Code son comandos de shell definidos por el usuario que se ejecutan automáticamente en puntos concretos del ciclo de vida de Claude Code, haciendo que el "esto siempre debe ocurrir" sea real y determinista sin depender del criterio del LLM. Los eventos clásicos son nueve —SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, SubagentStop, SessionEnd, PreCompact—, de los cuales PreToolUse y otros pueden bloquear (deteniendo ediciones a archivos protegidos o comandos peligrosos). Se configuran en settings.json bajo la clave "hooks" como nombre de evento -> matcher -> type + command. El contrato de E/S: un hook recibe JSON en stdin (session_id, tool_input, etc.) y devuelve mediante el código de salida 0 (éxito) / 2 (bloquear, con stderr devuelto a Claude) o JSON estructurado (continue, decision:block, permissionDecision: deny/allow/ask). El principio clave es "los hooks pueden endurecer pero no relajar las restricciones" (deny siempre gana, bloquea incluso bajo bypassPermissions; un mod de plugin puede anularlo en algunos casos). Casos de uso clásicos: formateo automático tras editar (PostToolUse + Edit|Write), proteger archivos críticos, detener comandos peligrosos, reinyectar contexto (SessionStart), notificaciones/registro de auditoría y probar antes de detenerse (Stop). Sobre seguridad, los hooks ejecutan comandos de shell arbitrarios con tus privilegios, así que configura solo los de confianza y valida/entrecomilla las entradas; en las sesiones interactivas, los hooks de los archivos de configuración no se ejecutan hasta que confías en la carpeta (una función de seguridad), y los cambios directos en esos archivos normalmente se aplican solos. Con base en la documentación oficial, anclado en los nueve eventos clásicos y el contrato de E/S.