¿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). 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; la configuración de los hooks se captura al iniciar la sesión (una función de seguridad), de modo que los cambios a mitad de sesión no se aplican. Con base en la documentación oficial, anclado en los nueve eventos clásicos y el contrato de E/S.