Muros y hooks
Lo que el agente NO puede hacer aunque quiera — y lo que se le recuerda solo.
Hooks en Node (.mjs, agnósticos de OS: funcionan igual en Windows/macOS/Linux). Los que BLOQUEAN salen
con exit 2 y el motivo; el resto solo informa. Solo Claude Code ejecuta hooks: en Codex/Cursor/Windsurf el
trabajo lo hacen las tablas de activación de las reglas generadas y los githooks (sync.ps1 -GitHooks).
| Hook | Evento | Qué hace |
|---|---|---|
session-start.mjs |
SessionStart | Inyecta estado: stack/perfil, si el proyecto es NUEVO (→ /brief + /plan) o EXISTENTE (→ /adoptar), diario propio detectado, versiones con aviso EOL, convenciones adoptadas, git, design system, plan, devlog y protocolo de skills. |
prompt-router.mjs |
UserPromptSubmit | Sugiere la skill que encaja con la petición (señales de docs/skills.md), una vez por skill y sesión. |
guard.mjs |
PreToolUse Bash/PowerShell | BLOQUEA: git push, destructivos de BD/git, rm -rf, deploy a prod sin aprobación (escape SENZU_ALLOW_DEPLOY=1), generadores de logos con logo ya elegido (SENZU_ALLOW_LOGO=1), jQuery/Bootstrap (SENZU_ALLOW_LIB=1), devops peligroso (curl|bash, chmod 777, dd, mkfs, docker prune, parar servicios, vaciar firewall, crontab -r); commits: rama protegida, Conventional ≤72, sin co-autores. |
protect-files.mjs |
PreToolUse Edit/Write | BLOQUEA editar: generados por Senzu, secretos (.env, *.pem, credentials), dependencias/artefactos, migraciones versionadas, conventions.md/json sellados, maestros del logo elegido (logos/final/) y protectedPaths del proyecto. |
secrets-guard.mjs |
PreToolUse Edit/Write | BLOQUEA escribir credenciales reales (AWS, GitHub, Stripe, OpenAI/Anthropic, PEM, JWT, cadenas con password); ignora placeholders. |
code-hygiene.mjs |
PreToolUse Edit/Write | BLOQUEA introducir: console.log/debugger/dd()/var_dump/ray, términos vetados en gustos.md §No, marcadores de conflicto de git, .only/.skip/xit en tests, y la lista negra anti-IA (badges de disponibilidad, numeración de secciones). Escape puntual: comentario senzu-allow. |
conventions-guard.mjs |
PreToolUse Edit/Write | BLOQUEA código que viole las reglas ejecutables de conventions.json (/adoptar): la convención del proyecto gana. |
backend-guard.mjs |
PreToolUse Edit/Write | BLOQUEA introducir: migraciones destructivas en la parte que se aplica (borrar o renombrar columnas o tablas: patrón expandir → contraer), env() fuera de config/ en Laravel, y datos personales en logs (request completa, cuerpos, contraseñas o tokens). Escape: senzu-allow con el motivo. |
back-skill-reminder.mjs |
PreToolUse Edit/Write (backend) | Primera edición de backend en la sesión: recuerda la receta del stack, las convenciones selladas y la versión real del framework. No bloquea. |
depurar-coach.mjs |
PostToolUse Bash/PowerShell | Si falla un test, build o verificación, activa el método de la skill depurar (reproducir, test que falla, hipótesis, acotar, arreglar la causa). Como mucho una vez cada 20 minutos. |
front-skill-reminder.mjs |
PreToolUse Edit/Write (front) | Primera edición de UI: BLOQUEA una vez si no hay design system NI brief (obliga a preguntar); después recuerda ui-ux-pro-max, el set de iconos del MASTER y las reglas duras de UI. |
format-on-save.mjs |
PostToolUse | Formatea el archivo guardado con la herramienta del stack (Pint/Prettier/ruff) si existe. Nunca bloquea. |
edit-tracker.mjs |
PostToolUse | Marca que se editó código; stop-guard exige verificación posterior. |
stop-guard.mjs |
Stop | BLOQUEA el cierre (una vez) si falta: devlog del día, verify-build tras editar código, o ui-verify móvil tras tocar UI. Además avisa de assets pesados añadidos en las últimas 24 h (imágenes de más de 500 KB, fuentes sin woff2, vídeos grandes). |
pre-compact.mjs |
PreCompact | Re-inyecta lo esencial (stack, versiones, design system, plan, reglas) para sobrevivir a la compactación de contexto. |
session-end.mjs |
SessionEnd | Limpia los marcadores de sesión. |
Escapes (siempre con aprobación explícita del usuario, documentada en el devlog)
Sección titulada «Escapes (siempre con aprobación explícita del usuario, documentada en el devlog)»SENZU_ALLOW_DEPLOY=1— deploy a producción tras la aprobación del checklist/desplegar.SENZU_ALLOW_LIB=1— instalar una librería vetada (jQuery/Bootstrap) si el usuario lo pide.- Comentario
senzu-allowen la línea — excepción puntual de code-hygiene (script CLI con console.log, test .skip justificado, patrón anti-IA pedido por su nombre). - Convenciones selladas: se cambian borrando
conventions.*y re-ejecutando/adoptar(decisión del usuario).