⚡ Hookify Rules · Claude Code

Reglas de Seguridad para NovaBuild SaaS

novabuild-app / .claude/
5 reglas activas
Stack: Next.js · Supabase · Stripe
Generado por CULTIVA IA
5
Reglas totales
2
Bloqueantes
3
Avisos
4
Eventos cubiertos
📁

Ubicación de los ficheros en el proyecto

  • novabuild-app/
  • .claude/hookify.block-rm-rf.local.md
  • .claude/hookify.warn-env-secrets.local.md
  • .claude/hookify.warn-console-log.local.md
  • .claude/hookify.warn-push-main.local.md
  • .claude/hookify.stop-run-tests.local.md
  • .gitignore ← añadir: .claude/*.local.md
Reglas generadas
block-rm-rf-destructive
bash ⛔ block ● enabled
Fichero: .claude/hookify.block-rm-rf.local.md
--- name: block-rm-rf-destructive enabled: true event: bash action: block conditions: - field: command operator: regex_match pattern: rm\s+(-\w*r\w*f|--recursive) --- [Mensaje del agente]
Mensaje al agente
OPERACIÓN BLOQUEADA — rm -rf detectado.

Este comando puede eliminar código fuente de NovaBuild de forma irreversible. Antes de borrar:

1. Confirma la ruta exacta con ls -la <ruta>
2. Mueve a papelera en vez de borrar: mv <ruta> /tmp/backup-$(date +%s)
3. Si es código, usa git rm para mantener historial

Solicita autorización explícita al desarrollador antes de continuar.
Incidente que previene: Claude ejecutó rm -rf src/ al limpiar temporales → pérdida de código fuente
warn-env-api-secrets
file ⚠ warn ● enabled
Fichero: .claude/hookify.warn-env-secrets.local.md
--- name: warn-env-api-secrets enabled: true event: file action: warn conditions: - field: file_path operator: regex_match pattern: \.env(\.local)?$ - field: new_text operator: regex_match pattern: (STRIPE_SECRET|SUPABASE_SERVICE_ROLE|OPENAI_API_KEY)=\S+ --- [Mensaje del agente]
Mensaje al agente
⚠️AVISO DE SEGURIDAD — Secret key detectada en .env.

Estás escribiendo una clave sensible de NovaBuild. Verifica:

1. ¿Está .env en el .gitignore? → cat .gitignore | grep .env
2. Nunca uses claves sk_live_* o service_role en .env.example
3. Si es una clave real, usa Vercel env vars en producción, no el fichero local

Confirma que entiendes el riesgo antes de guardar.
Incidente que previene: STRIPE_SECRET_KEY=sk_live_xxx comiteado en el repo sin verificar .gitignore
warn-debug-code-production
file ⚠ warn ● enabled
Fichero: .claude/hookify.warn-console-log.local.md
--- name: warn-debug-code-production enabled: true event: file action: warn conditions: - field: file_path operator: regex_match pattern: \.(ts|tsx|js|jsx)$ - field: new_text operator: regex_match pattern: console\.(log|warn|error)\s*\(\s*(user|userData|session|token|auth) --- [Mensaje del agente]
Mensaje al agente
⚠️AVISO — console.log con datos de usuario detectado.

Estás haciendo log de datos sensibles (userData, session, token…) que pueden exponerse en producción en Vercel.

Alternativas correctas:
• Usa el logger interno: logger.debug() (silenciado en prod)
• O envuelve en: if (process.env.NODE_ENV !== 'production')
• Para errores en producción → usa Sentry, no console
Incidente que previene: console.log(userData) enviado a producción → datos de usuario visibles en logs Vercel
block-direct-push-main
bash ⛔ block ● enabled
Fichero: .claude/hookify.warn-push-main.local.md
--- name: block-direct-push-main enabled: true event: bash action: block conditions: - field: command operator: regex_match pattern: git\s+push\s+.*\b(origin\s+main|origin\s+master|--force)\b --- [Mensaje del agente]
Mensaje al agente
BLOQUEADO — Push directo a main detectado.

NovaBuild usa el flujo de Pull Requests. El proceso correcto es:

1. git checkout -b feat/nombre-descriptivo
2. git push origin feat/nombre-descriptivo
3. gh pr create --title "…" --base main

Los pushes directos a main disparan deploys en Vercel sin revisión de código ni CI.
Incidente que previene: Claude pusheó directamente a main en 2 ocasiones, disparando deploy en Vercel sin PR ni revisión
stop-remind-run-tests
stop ⚠ warn ● enabled
Fichero: .claude/hookify.stop-run-tests.local.md
--- name: stop-remind-run-tests enabled: true event: stop action: warn pattern: .* --- [Mensaje del agente]
Mensaje al agente
Checklist de cierre — NovaBuild.

Antes de dar la tarea por finalizada, verifica:

npm run test — ¿pasan todos los tests?
npm run lint — ¿sin errores de ESLint?
npm run build — ¿build de Next.js sin warnings?
• ¿Dejaste algún TODO o FIXME sin resolver?

Reporta el resultado del suite antes de cerrar.
Incidente que previene: Claude terminaba tareas largas sin ejecutar el suite de tests → regresiones en CI no detectadas
Referencia rápida — Estructura de reglas
Campo Requerido Valores posibles Descripción
name ✅ Sí kebab-case ID único. Usar prefijo de acción: block-*, warn-*, stop-*
enabled ✅ Sí true / false Activa/desactiva sin borrar la regla
event ✅ Sí bash file stop prompt all Tipo de hook que dispara la regla
action No warn (default) / block warn muestra el mensaje; block cancela la operación
pattern ✅ (o conditions) Regex string Patrón único. Alternativa: usar conditions[] para AND múltiple
conditions[] No Array de objetos Condiciones AND: field + operator + pattern
Operadores disponibles en conditions
Operador Descripción Ejemplo
regex_match Evalúa una expresión regular contra el campo rm\s+-rf
contains Busca una subcadena literal API_KEY
equals Coincidencia exacta del valor completo production
not_contains Verdadero si el campo NO contiene la subcadena test
starts_with El campo empieza por el patrón dado sk_live_
ends_with El campo termina con el patrón dado .pem