P PasteCode
Regla

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
.md .json Actualizado 8 jun 2026

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

Claude Code Rules
# 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 dev en 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.