Saltar al contenido
MaestrIA

Formación › Programar con Claude Code en 12 horas › Hora 10

Programar con Claude Code en 12 horas · hora 10 de 12

Hooks

CLAUDE.md es un consejo; un hook es una obligación. Es un programa que Claude Code ejecuta siempre en un momento concreto, y que puede bloquear una acción antes de que ocurra. Verás un hook real que protege los datos de origen, cómo lo probó Claude y lo que no cubre.

Al terminar sabrásAñadir un hook PostToolUse que actúe tras cada edición y un PreToolUse que bloquee una acción con el código de salida 2, y explicar qué cubre un hook y qué no.

60 minutos· 1 esquema· 7 preguntas· 1 ejercicio· entregable

Repaso

Comprueba De la hora 9: quieres un revisor que no pueda editar. ¿Dónde lo garantizas?

Comprueba De la hora 3: escribes en CLAUDE.md «no toques datos/». ¿Qué consigues?

Comprueba De la hora 7: una acción coincide con Bash(npm *) en allow y con Bash(npm publish *) en deny. ¿Qué pasa?

Vocabulario

Hook
Un comando que Claude Code ejecuta automáticamente en un momento concreto de su trabajo.
PreToolUse
El evento de antes de usar una herramienta: el hook puede bloquear la acción.
PostToolUse
El evento de después de usar una herramienta, por ejemplo para formatear lo editado.
Código de salida 2
La forma en que un hook dice «bloquea esto»; su mensaje de error le llega a Claude como motivo.

El ejemplo: proteger los datos de origen

Antes y después Un hook que bloquea las ediciones en datos/

Qué son los hooks y por qué obligan

Según la documentación de Claude Code, los hooks son comandos que se ejecutan en momentos concretos del trabajo de Claude, y dan un control determinista: ocurren siempre, en lugar de depender de que el modelo decida hacerlo. Por eso lo que debe pasar siempre, sin excepciones, va en un hook y no en CLAUDE.md.

Qué carga Claude Code y cuándoCLAUDE.md, CLAUDE.local.md y la memoria se cargan siempre al empezar; las reglas por ruta, las skills y los subagentes se cargan cuando hacen falta. Todo eso es contexto que Claude tiene en cuenta; los hooks, en cambio, se ejecutan siempre y obligan.Se carga siempre, al empezarCLAUDE.md del proyecto~/.claude/CLAUDE.md y CLAUDE.local.mdMemoria automática (200 líneas o 25 KB)Se carga cuando hace faltaReglas con paths: (.claude/rules)Skills: primero solo la descripciónSubagentes: en su propio contextoTodo lo anterior es contexto: Claude lo tiene en cuenta.Los hooks son otra cosa: se ejecutan siempre y pueden bloquear (código de salida 2).
Todo lo que se carga es contexto; los hooks son lo único que se ejecuta siempre y puede bloquear.

Se configuran en .claude/settings.json. Este es el ejemplo oficial para formatear tras cada edición:

Hook PostToolUse de la documentación (formatea con Prettier tras cada edición)
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
        ]
      }
    ]
  }
}

Cómo bloquea un hook: el hook recibe el evento por la entrada estándar. Si sale con código 2, la acción se bloquea y su mensaje de error le llega a Claude como motivo, para que cambie de enfoque. Según la documentación de permisos, un hook que sale con código 2 bloquea incluso antes de mirar las reglas allow.

Tras editar, el código de salida 2 no deshace nada. En PostToolUse la edición ya está hecha: salir con código 2 solo le enseña a Claude tu mensaje de error, para que lo corrija. Este hook, sin jq ni Prettier, pasa las pruebas del repositorio de práctica después de cada edición y le enseña a Claude el resultado si fallan:

Hook PostToolUse para el repositorio de práctica (pasa las pruebas tras cada edición)
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npm test --silent 1>&2 || exit 2" }
        ]
      }
    ]
  }
}

El hook Stop como puerta de calidad: un hook en el evento Stop puede ejecutar tus pruebas y no dejar que Claude termine el turno hasta que pasen. Es la versión determinista de «verifica antes de terminar» (hora 5).

Si usas Windows: los hooks de comando se ejecutan con Git Bash; si no lo tienes instalado, con PowerShell, y entonces un PreToolUse que falla puede bloquear la herramienta. Instala Git para Windows, prueba el hook antes de confiar en él y, para un hook que protege algo, declara "onFailure": "block" (desde la versión 2.1.295): así, si falla, bloquea siempre en lugar de depender del equipo.

Escribe /hooks en la sesión para ver los hooks configurados.

Practica

Clasifica ¿CLAUDE.md o hook?

  1. Formatear el código tras cada edición, sin excepciones
  2. Explicar la arquitectura de los informes a Claude
  3. Impedir cualquier edición en la carpeta datos/
  4. Preferir funciones pequeñas y nombres en español
  5. Ejecutar las pruebas antes de que Claude dé el turno por terminado

Comprueba lo que has aprendido

Comprueba El hook real bloquea las ediciones de Claude en datos/. ¿Qué no impide?

Comprueba ¿Qué tiene que hacer un hook PreToolUse para bloquear una acción?

Comprueba Un hook PostToolUse sale con código 2 porque las pruebas fallan. ¿Qué ocurre con la edición?

Comprueba ¿Por qué probó Claude el hook con datosfalsos/a.txt y datos/../README.md?

Entregable Dos hooks funcionando

Mínimo: añade al repositorio de práctica el hook PostToolUse de arriba y el PreToolUse que protege datos/. Abre una sesión, pide a Claude que edite datos/paradas.csv y comprueba que recibe el motivo del bloqueo. Ampliación: un hook tuyo para algo que nunca debe pasar en tu trabajo. Pega aquí la configuración, el script y lo que viste.

Está bien si: el bloqueo se ve dentro de una sesión real, no solo con entradas simuladas; has probado al menos un caso límite que no debe bloquearse; y anotas qué vía queda sin cubrir. Tiempo: unos 30 minutos el mínimo.

Lo esencial

  • Un hook se ejecuta siempre: lo que debe pasar sin excepciones va en un hook, no en CLAUDE.md.
  • PreToolUse puede bloquear con código 2; su mensaje le llega a Claude como motivo.
  • Prueba los hooks con casos límite antes de confiar en ellos.
  • Un hook de edición no vigila lo que se hace con Bash: cubre las vías que importan.

Fuentes y para seguir

Lección revisada el 24/10/2026 con la documentación oficial enlazada en sus fuentes. Revisamos los cursos cada trimestre.