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]
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]
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]
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]
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]
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 |