Empezar

Reglas de Cursor para un sistema de diseño: por qué un solo archivo deja de funcionar

Casi todas las guías de sistemas de diseño para Cursor terminan en "crea .cursor/rules/design.mdc". Es el primer paso correcto, pero es incompleto. Un archivo de reglas que excede el tamaño de una pantalla deja de seguirse; una regla limitada a components/ ignora la página donde aparece el nuevo layout, y una regla que describe el «gusto» no restringió nada desde el principio.

Actualizado 2026-07-27

La versión de un solo archivo y dónde falla

El consejo inicial es acertado. Cursor lee los archivos .cursor/rules/*.mdc, cada uno con un frontmatter que controla cuándo se carga: alwaysApply para reglas que siempre están en contexto, y globs para reglas que se activan cuando hay archivos coincidentes. Un único design.mdc con alwaysApply: true es muy útil al principio.

Entonces ocurren tres cosas, en este orden.

  1. 1

    El archivo crece

    Cada vez que el agente comete un error, alguien añade una línea. A los seis meses, tiene cuatrocientas líneas que cubren color, tipografía, espaciado, animación, accesibilidad, patrones de formularios, estados vacíos y un párrafo sobre el tono de voz. Siempre está en contexto, compite con la tarea actual por la atención y el cumplimiento de cualquier línea individual ha disminuido.

  2. 2

    Las reglas empiezan a contradecirse

    "Use un espaciado generoso" se escribió para el sitio de marketing. "Mantenga las tablas densas" se escribió para el dashboard. Ambas están en el mismo archivo siempre activo, por lo que ambas son válidas en todas partes; por lo tanto, ninguna es realmente una regla.

  3. 3

    Alguien limita el alcance para solucionar esto y la regla deja de activarse

    La solución obvia es globs: components/**. Entonces el agente escribe un nuevo layout de página en app/, no se aplica ninguna regla de diseño y el resultado es genérico. Los nuevos layouts son precisamente donde la guía de diseño es más importante y exactamente lo que un glob de componentes ignora.

El tercer paso es la herida autoinfligida más común en las configuraciones de diseño de Cursor. Una regla de diseño que solo se aplica a archivos de componentes está desactivada durante la creación de la página, que es donde realmente se toman las decisiones de composición, jerarquía y espaciado.

Divida según cuándo es válido, no según de qué trate

El instinto es dividir por tema: colors.mdc, typography.mdc, spacing.mdc. Ese es el eje equivocado. Esas tres reglas son válidas al mismo tiempo, por lo que dividirlas no cambia nada, excepto la cantidad de archivos que debe mantener.

Divida, en cambio, por alcance de validez. La pregunta para cada regla es: ¿cuándo es esto falso? Si la respuesta es «nunca», pertenece al archivo siempre activo. Si la respuesta es «en el dashboard», pertenece a una regla limitada y su contraparte pertenece a otra.

Dividir por temaDividir por alcance de validez
Archivoscolores, tipografía, espaciado, movimientodiseño (siempre), superficies de marketing, superficies densas
Cuándo se carganTodo a la vez: comparten un alcanceSolo donde se aplican
ContradiccionesSiguen estando juntos en el contexto, por lo que se anulan entre síNunca coexisten, por lo que cada uno puede ser absoluto
Carga constante (always-on)Todo, siempreSolo lo no negociable
Dos formas de dividir un conjunto de reglas de diseño.

Esta es la misma estructura a la que llegan los sistemas de diseño grandes de forma independiente: Encore de Spotify es una base con subsistemas especializados encima; Carbon es un núcleo con capas de dominio. Un directorio de reglas es una versión muy pequeña de la misma idea, y falla de la misma manera cuando la base absorbe elementos que deberían haber sido locales.

Qué incluir en la regla constante

Limítela a una sola pantalla. Su función no es contener el sistema de diseño: el sistema de diseño reside en DESIGN.md y en su archivo de tokens. Su función es obligar al agente a leer esos archivos y mantener el puñado de restricciones que nunca deben violarse en ningún lugar.

---
description: Design system policy for all UI work
alwaysApply: true
---

Before writing or editing any UI, read DESIGN.md at the repo root.

## Non-negotiable

- Never write a literal colour value. No hex, no rgb(), no named
  CSS colours. Use the semantic tokens in DESIGN.md.
- Never introduce a font family that is not in DESIGN.md.
- Every spacing value comes from the scale. Any other value is a bug.
- Every interactive element has a visible focus state.
- Anything with a light-mode colour has a dark-mode counterpart.

## When unsure

Match the nearest existing component in this repo rather than
inventing a new pattern. If no similar component exists, say so
before writing one.

Cada línea allí es una restricción que puede violarse y verificarse. Ninguna de ellas describe una estética. Esto es deliberado, y es la diferencia fundamental entre un archivo de reglas que cambia el resultado y uno que no lo hace.

La última sección está infravalorada. "Busque el componente existente más cercano y, si no existe ninguno, indíquelo antes de escribir uno" convierte el fallo más común del agente —inventar silenciosamente un nuevo patrón— en una pregunta. Ese único párrafo evita más desviaciones que una página entera de descripción visual.

Por qué prohibiciones, específicamente

Analizamos 299 archivos DESIGN.md públicos (el mismo género de artefacto que un archivo de reglas de diseño, escrito para el mismo propósito) y medimos qué contienen en lugar de qué afirman contener.

Proporción de archivos
Sin prohibiciones de ningún tipo76%
Colores como hex raw, sin rol semántico86%
Sin definición de modo oscuro69%
Sin motivos distintivos57%
Al menos un adjetivo vago haciendo el trabajo54%
Sin ningún valor de tamaño concreto44%
Qué falta en las guías de diseño reales (n=299).

La cifra de las prohibiciones es la importante. Tres cuartas partes de estos archivos le dicen al modelo solo lo que está permitido, lo que deja todo lo demás permitido por defecto, y todo lo demás es la mayor parte de una interfaz.

Considere la diferencia concretamente. "Use --color-primary para acciones primarias" se cumple en una página que también usa el color primario para encabezados, enlaces, rellenos de iconos, un borde y un degradado. Añada "nunca use el color de acento para texto, bordes, fondos o degradados" y la misma frase produce ahora una interfaz contenida. El permiso no cambió. La prohibición hizo todo el trabajo.

Una regla que solo dice lo que está permitido deja que todo lo demás esté permitido. Y todo lo demás es la mayor parte de la interfaz.

La cifra de los adjetivos vagos lo agrava. "Limpio" aparece en el 39% de estos archivos y "moderno" en el 36%. Un modelo al que se le pide algo limpio y moderno produce el centro estadístico de sus datos de entrenamiento, que es precisamente por qué las interfaces generadas por IA convergen en la misma apariencia. Ninguna de las dos palabras descarta nada.

Las reglas con alcance (scoped rules)

Una vez que la regla constante contiene solo los universales, las reglas específicas de la superficie pueden ser absolutas en lugar de ambiguas. Dos ejemplos que muestran la estructura:

---
description: Marketing and landing surfaces
globs: app/(marketing)/**, app/page.tsx, components/marketing/**
---

Spacing runs one step above the app scale. Sections breathe.
Display type (48px+) is allowed here and nowhere else.
Cards may use shadow elevation.
One primary call to action per section. Never two competing buttons.
---
description: Dense application surfaces — tables, dashboards, settings
globs: app/(app)/**, components/table/**, components/dashboard/**
---

Compact spacing: controls 8-12px padding, table rows 32px.
Elevation is a surface step plus a 1px border. Never a shadow.
Type stays at body scale and below. No display type.
Status colours (success, warning, danger) are reserved for status.
Nothing decorative uses them.

Ninguna de las dos contiene una salvedad, porque ninguna está nunca en el contexto junto a la otra. Ese es todo el beneficio de la división.

Verifique sus globs frente a la realidad antes de confiar en ellos. Los grupos de rutas, los prefijos src/ y los directorios de componentes colocados juntos rompen los patrones ingenuos, y un glob que no coincide con nada falla silenciosamente. Obtendrá un resultado genérico y ninguna indicación de por qué. Abra un archivo en la superficie y confirme que la regla se aplica.

Qué no deben contener las reglas

Hay tres cosas que se ponen en los archivos de reglas que pertenecen a otro lugar, y cada una tiene un coste.

Por qué falla allíDónde pertenece
La lista completa de tokensDuplica el archivo de tokens. Ambos divergen y ahora el agente tiene dos fuentes contradictoriasSu archivo CSS o de tema, referenciado desde DESIGN.md
Documentación de la API de componentesDemasiado grande para el contexto permanente y queda desactualizado en la siguiente versiónUn servidor MCP, consultado bajo demanda
Descripción estética«Sofisticado, minimalista, premium» no impone restricciones y consume contextoEn ningún lugar. Reemplácelo con las restricciones que produzcan esa impresión
Errores comunes y dónde pertenece realmente el contenido.

Vale la pena analizar el problema de duplicación de la primera fila. Una vez que un valor hex aparece tanto en el archivo de reglas como en el de tokens, uno de ellos se actualizará y el otro no, y el agente usará con total seguridad el valor desactualizado. Las reglas deben apuntar a la fuente de verdad, nunca repetirla.

La capa inferior de las reglas

Todo lo anterior asume algo que merece la pena señalar. Un archivo de reglas que diga «lee DESIGN.md» es tan bueno como lo sea DESIGN.md, y las cifras del corpus indican que la mayoría de esos archivos son solo una paleta con adjetivos adjuntos.

Lo que marca la diferencia es la misma lista de siempre: colores como roles semánticos en lugar de valores hex, una escala tipográfica con números reales, una escala de espaciado, un modo oscuro definido en lugar de derivado, motivos que indiquen qué hace el diseño y una lista explícita de lo que está prohibido. Escriba eso y el archivo de reglas será breve, porque la mayor parte será simplemente una referencia.

Los design kits de Identity Forge ofrecen exactamente esa estructura y se serializan en un DESIGN.md. Instale uno en un proyecto de Cursor con npx --yes identityforge@latest install --client cursor, o explore los kits primero. La guía del sistema de diseño de Cursor explica cómo configurar el servidor MCP junto a este.

Un conjunto de trabajo

Para la mayoría de los proyectos, cuatro archivos es el número adecuado y tener más es una señal de alerta:

  1. design.mdc: alwaysApply: true. Una sola pantalla. Apunta a DESIGN.md, contiene las prohibiciones que son válidas en todas partes y le indica al agente que pregunte antes de inventar un patrón.
  2. surface-marketing.mdc: con alcance por glob. Las reglas que solo son válidas donde el lector está escaneando durante segundos.
  3. surface-app.mdc: con alcance por glob. Las reglas que solo son válidas donde el usuario pasa todo el día.
  4. a11y.mdc: alwaysApply: true si su equipo necesita que se especifique por separado. Estados de enfoque, mínimos de contraste, elementos semánticos, requisitos de etiquetas.

Si siente la necesidad de añadir un quinto, compruebe si realmente se trata de un nuevo ámbito de verdad o de un tema que pertenece a uno ya existente. Los temas se multiplican infinitamente; los ámbitos no.

¿Dónde residen las reglas de Cursor?

En .cursor/rules/ como archivos .mdc, cada uno con un frontmatter que controla cuándo se carga. alwaysApply: true mantiene una regla en contexto para cada solicitud; globs aplica una regla cuando hay archivos que coinciden. Una regla de diseño que deba aplicarse durante la creación de páginas debe ser permanente, no tener un alcance de glob limitado a los componentes.

¿Debe mi sistema de diseño residir en una regla de Cursor o en DESIGN.md?

En DESIGN.md, con la regla apuntando a él. Mantener el sistema en un archivo versionable y agnóstico a las herramientas significa que la misma definición sirve para Cursor, Claude Code, un servidor MCP y cualquier humano que lea el repo. Duplicar los valores de los tokens en el archivo de reglas garantiza que ambas copias diverjan.

¿Qué longitud debe tener una regla de diseño de Cursor?

Una regla permanente debe caber en una sola pantalla. Más allá de eso, está compitiendo con la tarea real por la atención del modelo, y el cumplimiento de cualquier línea individual disminuye. Si está creciendo, es una señal para mover el contenido a DESIGN.md o a una regla con un alcance específico, no una señal para seguir añadiendo.

¿Por qué el agente ignora mis reglas de diseño?

Tres causas habituales: la regla tiene un alcance de glob y no se está aplicando (compruebe las rutas de los archivos reales), la regla describe una estética en lugar de establecer restricciones que puedan infringirse, o el archivo permanente ha crecido tanto que ninguna línea destaca. Las prohibiciones en un archivo corto se siguen con mucha más fiabilidad que las descripciones en uno largo.

¿Puedo usar .cursorrules en su lugar?

El enfoque de un único archivo .cursorrules sigue funcionando, pero no permite la carga condicional, por lo que todas las reglas están siempre activas y el problema de las contradicciones aparece más rápido. El directorio .cursor/rules/ existe precisamente para permitir que diferentes reglas se apliquen en diferentes lugares, que es la estructura que necesita un sistema de diseño.