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

Casi todas las guías de Cursor para sistemas de diseño terminan en "cree .cursor/rules/design.mdc". Ese es el primer paso correcto, pero es insuficiente. Un archivo de reglas que excede el tamaño de una pantalla deja de cumplirse, una regla limitada a components/ ignora la página donde aparece el nuevo layout y una regla que describe el gusto estético nunca ha servido para restringir nada.

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 real 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 es 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 carganTodas 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
Peso de las reglas permanentesTodo, siempreSolo lo no negociable
Dos formas de dividir un conjunto de reglas de diseño.

Esta es la misma estructura que adoptan los sistemas de diseño a gran escala 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 permanente

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 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 altera el resultado y uno que no lo hace.

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

Por qué usar prohibiciones específicamente

Analizamos 299 archivos DESIGN.md públicos —el mismo tipo de artefacto que un archivo de reglas de diseño, escrito con el mismo propósito— y medimos qué contienen en lugar de qué pretenden 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 que intenta definir el estilo54%
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 indica lo que está permitido deja que todo lo demás también lo esté. 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 excluye nada.

Las reglas con alcance limitado

Una vez que la regla permanente contiene solo los universales, las reglas específicas de cada 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 salvedades, 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: obtiene 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 suelen poner en los archivos de reglas que pertenecen a otro lugar, y cada una tiene un coste.

Por qué falla ahíDónde pertenece
La lista completa de tokensDuplica el archivo de tokens. Ambos divergen y el agente termina con dos fuentes contradictoriasSu archivo CSS o de tema, referenciado desde DESIGN.md
Documentación de la API de componentesDemasiado extenso para el contexto permanente y queda obsoleto en la siguiente versiónUn servidor MCP, consultado bajo demanda
Descripción estética"Sofisticado, minimalista, premium" no impone ninguna restricción y consume contextoEn ningún lugar. Sustitúyalo por las restricciones que produzcan esa impresión
Errores comunes y dónde pertenece realmente el contenido.

El problema de la duplicación de la primera fila merece especial atención. Una vez que un valor hexadecimal aparece tanto en el archivo de reglas como en el de tokens, uno de ellos se actualizará y el otro no, y el agente utilizará con seguridad el valor obsoleto. Las reglas deben apuntar a la fuente de verdad, nunca repetirla.

La capa inferior a las reglas

Todo lo anterior asume que hay algo a lo que valga la pena apuntar. Un archivo de reglas que dice "lea DESIGN.md" es tan bueno como lo sea el propio DESIGN.md, y las estadísticas del corpus indican que la mayoría de esos archivos son solo una paleta con adjetivos adjuntos.

Lo que marca la diferencia es siempre la misma lista: colores como roles semánticos en lugar de valores hexadecimales, una escala tipográfica con números reales, una escala de espaciado, un modo oscuro definido en lugar de derivado, motivos que declaren qué hace el diseño y una lista explícita de lo que está prohibido. Una vez redactado esto, el archivo de reglas se vuelve breve, ya que la mayor parte consiste en punteros.

Los kits de diseño de Identity Forge implementan 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 de sistemas de diseño para Cursor explica cómo configurar el servidor MCP junto a él.

Un conjunto operativo

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

  1. design.mdcalwaysApply: true. Una sola pantalla. Apunta a DESIGN.md, contiene las prohibiciones universales y ordena al agente preguntar antes de inventar un patrón.
  2. surface-marketing.mdc — alcance por glob. Las reglas que solo se aplican donde el lector escanea la información durante unos segundos.
  3. surface-app.mdc — alcance por glob. Las reglas que solo se aplican donde el usuario pasa todo el día.
  4. a11y.mdcalwaysApply: true si su equipo necesita que se especifique por separado. Estados de foco, mínimos de contraste, elementos semánticos, requisitos de etiquetas.

Si siente la necesidad de un quinto archivo, compruebe si realmente es un nuevo ámbito de verdad o 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 el contexto de cada solicitud; globs adjunta una regla cuando hay archivos coincidentes. Una regla de diseño que deba aplicarse durante la creación de páginas debe ser permanente, no estar limitada por glob a los componentes.

¿Debería mi sistema de diseño estar en una regla de Cursor o en DESIGN.md?

En DESIGN.md, con la regla apuntando hacia él. Mantener el sistema en un archivo versionable y agnóstico a la herramienta permite que la misma definición sirva para Cursor, Claude Code, un servidor MCP y cualquier humano que lea el repositorio. 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, compite con la tarea real por la atención del modelo y el cumplimiento de cada línea individual disminuye. Si el archivo crece, es una señal para mover el contenido a DESIGN.md o a una regla con ámbito 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 alcance por glob y no se está adjuntando (verifíquelo con las rutas reales de los archivos), la regla describe una estética en lugar de establecer restricciones que puedan incumplirse, o el archivo permanente ha crecido tanto que ninguna línea destaca. Las prohibiciones en un archivo breve se siguen con mucha más fiabilidad que las descripciones en uno largo.

¿Puedo usar .cursorrules en su lugar?

El enfoque de archivo único .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 surge 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.