Curso de Claude Code
Curso de Claude Code · Nivel 4: Superpoderes
Lección 19 de 28 · 8 minutos
Al acabar
Tu ordenador te avisará cuando Claude te necesite, y sabrás poner reglas que Claude no se puede saltar.
Un hook es una orden que Claude Code ejecuta sola en un momento concreto: antes de usar una herramienta, cuando te necesita, al terminar de responder...
Es un consejo. Claude lo sigue casi siempre, pero puede olvidarlo en una conversación larga.
Se ejecuta siempre, porque no depende de que Claude se acuerde. Para lo que tiene que pasar sí o sí.
Se escriben en un archivo de ajustes, settings.json: el tuyo (~/.claude/settings.json) para todo, o el de una carpeta (.claude/settings.json). Para ver los que tienes, escribe /hooks: hoy es solo un visor, no un asistente para crearlos.
Mientras Claude trabaja puedes hacer otra cosa. Con este hook, cuando se queda esperando tu permiso o tu respuesta, te salta un aviso. Es el ejemplo oficial de la documentación:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""
}
]
}
]
}
}{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}Si tu settings.json ya tiene cosas, no lo sustituyas entero: añade la parte de "hooks" junto a lo que haya. Lo más seguro es pedírselo a Claude:
Pídeselo así
Añade a mi ~/.claude/settings.json el hook oficial de Notification para mi sistema, el que muestra un aviso cuando necesitas mi atención. Si el archivo ya tiene cosas, no borres nada y comprueba que el JSON queda bien escrito.
Un hook también puede bloquear una acción antes de que ocurra. La documentación trae, por ejemplo, uno que impide borrar carpetas enteras y otro que impide tocar archivos protegidos. Un bloqueo de un hook funciona incluso en el modo que se salta los permisos.
Va en dos archivos dentro de tu carpeta de trabajo. Primero, la regla en .claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash|PowerShell",
"hooks": [
{
"type": "command",
"if": "Bash(rm *)",
"command": "powershell.exe",
"args": ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.ps1"]
},
{
"type": "command",
"if": "PowerShell(Remove-Item *)",
"command": "powershell.exe",
"args": ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.ps1"]
}
]
}
]
}
}Y el script que decide:
# .claude/hooks/block-rm.ps1
$callInput = [Console]::In.ReadToEnd() | ConvertFrom-Json
$command = $callInput.tool_input.command
if ($command -match 'rm -rf|Remove-Item.*-Recurse') {
@{
hookSpecificOutput = @{
hookEventName = "PreToolUse"
permissionDecision = "deny"
permissionDecisionReason = "Destructive command blocked by hook"
}
} | ConvertTo-Json
} else {
exit 0 # no decision; normal permission flow applies
}Si el script no dice nada, no aprueba la acción: Claude sigue pidiéndote permiso como siempre.
Un hook ejecuta órdenes con todos tus permisos: puede leer, cambiar o borrar cualquier archivo al que tú tengas acceso. Lee y entiende cada hook antes de añadirlo, sobre todo si viene en una carpeta o un plugin de otra persona.
Los hooks de una carpeta no se ejecutan hasta que dices que confías en ella al abrir Claude. Para apagarlos todos de golpe existe el ajuste "disableAllHooks": true.
Pon el aviso. Pídele a Claude que lo añada con la petición de arriba y compruébalo: escribe /hooks, pulsa Esc, cambia al modo manual con Mayús + Tab, pídele algo que necesite tu permiso (por ejemplo, crear un archivo) y cambia a otra ventana.
Sabrás que te ha salido si:
Mira en /hooks que aparece. Los nombres distinguen mayúsculas: tiene que ser Notification, tal cual. En el JSON no puede haber comas al final de una lista ni comentarios.
Sin Git Bash instalado, un hook escrito para bash se ejecuta en PowerShell y puede fallar. Usa la versión de Windows o instala Git para Windows.
Tres preguntas. Cada acierto suma 10 puntos.
1. ¿En qué se diferencia un hook de una instrucción en el CLAUDE.md?
El hook no depende de la memoria de Claude: lo ejecuta Claude Code cada vez.
2. ¿Qué hace hoy el comando /hooks?
Es un visor de solo lectura. Los hooks se escriben en settings.json, a mano o pidiéndoselo a Claude.
3. ¿Qué evento usas para que te avise cuando espera tu permiso?
Notification salta cuando Claude espera tu respuesta o tu permiso.
Márcala y suma 100 puntos. Tu avance se guarda en este navegador.
Recuérdatelo mañana a esta hora: Google Calendar · calendario del móvil o del ordenador
¿Conoces a alguien a quien le venga bien?
Fuentes (documentación oficial, consultada el 5-nov-2026):