Hooks
Dónde va
Sección titulada «Dónde va»{ "hooks": { "afterFileEdit": [{ "command": "npx prettier --write \"$FILE_PATH\"" }], "beforeShellExecution": [ { "command": "scripts/bloquear-comandos-peligrosos.sh" } ] }}Eventos disponibles
Sección titulada «Eventos disponibles»| Evento | Cuándo corre |
|---|---|
sessionStart / sessionEnd | Al empezar/terminar la sesión |
beforeSubmitPrompt | Antes de mandar el prompt al modelo |
beforeShellExecution | Antes de correr un comando de shell (puede bloquear) |
beforeMCPExecution | Antes de invocar una tool de MCP |
beforeReadFile | Antes de leer un archivo (útil para redactar contenido sensible) |
afterFileEdit | Después de editar un archivo |
stop | Cuando el agente termina de responder |
Ejemplo: bloquear un comando
Sección titulada «Ejemplo: bloquear un comando»#!/bin/bashinput=$(cat)command=$(echo "$input" | jq -r '.command')
if echo "$command" | grep -qE 'rm -rf /'; then echo '{"decision": "block", "message": "Comando bloqueado por hook"}' exit 0fi
exit 0El hook recibe JSON por stdin y puede devolver JSON por stdout para bloquear/permitir.
Resumen
Sección titulada «Resumen»| Uso típico | Evento |
|---|---|
| Formatear código automáticamente | afterFileEdit |
| Bloquear comandos destructivos | beforeShellExecution |
| Redactar archivos sensibles | beforeReadFile |
| Logging/auditoría | beforeMCPExecution, beforeShellExecution |
Consideraciones
Sección titulada «Consideraciones»- Los hooks son bundleables dentro de un Cursor Plugin (no de la spec Agent Plugins portable) — si el plugin necesita ser portable a otras herramientas, los hooks no viajan con él.
- Shippeado en Cursor 1.7 (~octubre 2025) — relativamente nuevo, verificar la doc oficial si algo no se comporta como aquí.