Reglas de Claude Code para proyectos Prisma
Reglas de Claude Code para proyectos de Prisma ORM que cubren seguridad de migraciones, patrones de consultas, carga de relaciones y prevención de que los agentes corrompan el esquema.
Claude CodeCursorCodex Next.jsPostgreSQLTypeScript
Agrega esto como un archivo CLAUDE.md en la raíz de tu repositorio. Claude Code lee CLAUDE.md automáticamente (además de AGENTS.md) y lo aplica como instrucciones a nivel de proyecto para cada sesión.
Archivo de reglas de Claude Code
# Prisma Project Rules
## Schema rules — highest risk area- NEVER edit `prisma/schema.prisma` without explicitly confirming the change with the developer first. Schema changes generate migrations that alter production data.- When asked to add a field, propose the schema diff and the migration name, then STOP and wait for approval before running `prisma migrate dev`.- New required fields MUST have a `@default(...)` value or be added as optional (`String?`). Adding a required field without a default breaks `migrate deploy` on a non-empty database.- Do NOT add `@@map` or `@map` attributes to rename existing tables or columns without explicitly discussing the migration strategy — renames require data migration steps.- Use `@db.Text` for long strings, `@db.VarChar(n)` for bounded strings. Never use bare `String` for fields that will store user-generated content longer than 255 chars.
## Migration rules- Run `prisma migrate dev --name <descriptive-name>` to generate migrations locally. Never hand-edit files in `prisma/migrations/` — they are append-only.- In CI/CD, run `prisma migrate deploy` (not `migrate dev`). Never run `migrate dev` against a production database.- After adding or changing models, always regenerate the client: `prisma generate`. Never commit code that imports from `@prisma/client` without a matching `generate` run.
## Query patterns- Import the Prisma client from `src/lib/prisma.ts` (the singleton). Never instantiate `new PrismaClient()` in application code — this leaks connections in serverless.- Use `select` or `include` explicitly on every query. Never rely on Prisma's default select-all behaviour — it causes over-fetching and leaks sensitive fields.- Paginate all list queries with `take` and `skip` (or cursor-based pagination with `cursor` + `take`). Never run a `findMany` without a limit on a user-facing endpoint.- Wrap multi-step mutations in `prisma.$transaction([...])` or the interactive transaction callback. Never perform two sequential writes that must be atomic outside a transaction.- Use `prisma.$queryRaw` and `Prisma.sql` template tag for raw SQL only. Never concatenate user input into a raw query string — this is a SQL injection vector.
## Relation loading- Prefer `include` over N+1 patterns. If a resolver loads a relation in a loop, refactor to a single query with `include` or use a DataLoader.- Do not `include` deeply nested relations more than 2 levels deep in a single query. Flatten with multiple targeted queries and join in application code if needed.
## Type safety- All repository functions must return typed Prisma result types or mapped domain types. Never return `any` or plain `object` from a database function.- Use `Prisma.validator()` to define reusable select/include shapes that keep return types precise.
## Definition of done- `prisma validate` passes.- `tsc --noEmit` passes.- No `new PrismaClient()` outside `src/lib/prisma.ts`.- No `findMany` calls without `take`.- Migration files are committed alongside schema changes.Por qué estas reglas
- Nunca editar el esquema sin confirmación es innegociable. Las migraciones de Prisma son irreversibles en producción — una columna eliminada o una tabla renombrada sin un plan de migración de datos causa pérdida de datos. Los agentes que son “serviciales” ejecutarán alegremente
migrate deven cuanto toquen el esquema. - Importación singleton del cliente previene uno de los errores más comunes en entornos serverless: el agotamiento del pool de conexiones. En las funciones serverless de Next.js, cada evaluación de módulo crea una nueva instancia de
PrismaClient(y un nuevo pool de conexiones) a menos que se use el patrón singleton. Los agentes que copian ejemplos de la documentación de Prisma a menudo omiten esto.
Buen ajuste
- Aplicaciones Next.js o Node.js que usen Prisma con PostgreSQL donde el esquema esté maduro y la seguridad de migraciones sea crítica.
No es adecuado
- Proyectos nuevos sin datos aún, donde quieras que el agente itere libremente sobre el esquema — afloja el requisito de aprobación de migraciones en esa fase.