Por qué el modo importa más que la redacción
Windsurf explica el mecanismo en una sola frase: "Cada regla de espacio de trabajo declara un modo de activación en su frontmatter a través del campo trigger. Esto controla cuándo se entrega el contenido de la regla a Cascade y cuánta ventana de contexto consume".
Dos cosas en un solo campo: si la regla llega al agente y cuánto cuesta. Las opciones documentadas:
always_on — "El contenido completo de la regla se incluye en el prompt del sistema en cada mensaje". Coste: cada mensaje.
model_decision — "Solo se muestra la descripción en el prompt del sistema. Cascade lee el archivo de regla completo cuando decide que la descripción es relevante". Coste: descripción siempre; contenido completo bajo demanda.
glob — "La regla se aplica cuando Cascade lee o edita un archivo que coincide con el patrón de globs". Coste: solo cuando se tocan archivos que coinciden.
manual — "La regla no está en el prompt del sistema. La activas escribiendo @nombre-de-regla en el cuadro de entrada de Cascade". Coste: solo cuando se menciona con @.
Piensa en estos costes como en una escalera. Pasar de always_on a model_decision convierte un coste fijo por mensaje en uno del tamaño de la descripción, cargando el cuerpo bajo demanda. Pasar a glob hace que el coste dependa de lo que toques. Pasar a manual hace que dependa de que tú lo solicites.
Ahora, la parte que replantea todo el ejercicio:
"El archivo de reglas globales (global_rules.md) y los archivos AGENTS.md a nivel de raíz no usan frontmatter: siempre están activos".Esas dos superficies no tienen modo. Siempre están activas, por diseño. Así que antes de optimizar nada, parte de tu presupuesto ya está comprometido, y los límites te indican cuánto. El archivo global se encuentra en ~/.codeium/windsurf/memories/global_rules.md, se aplica a todos los espacios de trabajo y está "limitado a 6.000 caracteres". Las reglas del espacio de trabajo viven una por archivo en .devin/rules/ (preferido) o .windsurf/rules/ (alternativo) y están "limitadas a 12.000 caracteres por archivo".
Y hay una tercera superficie siempre activa que la gente olvida que tiene: "El archivo único heredado .windsurfrules en la raíz del espacio de trabajo también se sigue leyendo". Si migraste a un directorio de reglas hace años y nunca eliminaste ese archivo, todavía se está cargando.
AGENTS.md recibe su modo asignado por ubicación en lugar de frontmatter: "nivel de raíz = siempre activo, subdirectorio = auto-glob para ese directorio". Ese es un valor predeterminado genuinamente elegante, y significa que mover un archivo un directorio hacia arriba cambia silenciosamente su coste de condicional a permanente.
La versión general de este problema (reglas que están presentes pero no se comportan como esperas) se trata en por qué los agentes ignoran tus archivos de instrucciones.
Lo que la gente intenta en su lugar
Configurar todo en always_on. Parece lo más seguro: la regla definitivamente está ahí. Pero también gasta tu presupuesto por mensaje en una convención de Terraform durante una sesión en la que nunca sales del frontend, y el coste se acumula a lo largo de una conversación larga. El síntoma es la pérdida de rumbo descrita en cuando el agente de Windsurf pierde el contexto.
Escribir reglas más cortas en lugar de cambiar de modo. Es útil, pero resuelve la variable equivocada. Una regla de 400 caracteres cargada en cada mensaje sigue costando más a lo largo de una sesión que una regla de 3.000 caracteres cargada dos veces. La brevedad y la activación son palancas independientes, y la segunda es más fuerte. Los límites del enfoque centrado únicamente en la brevedad son el tema de por qué los prompts más cortos no son suficientes.
Confiar en su lugar en memorias autogeneradas. La propia Windsurf desaconseja esto con sus propias palabras: "Para el conocimiento que deseas que Cascade reutilice de manera confiable, escríbelo como una Regla o agrégalo a AGENTS.md en tu repositorio en lugar de confiar en las Memorias autogeneradas. Las Reglas están controladas por versiones, se pueden compartir con tu equipo y te brindan un control explícito sobre la activación". Su tabla comparativa también pone a las memorias en su lugar: "Deja que Cascade recuerde datos puntuales; para conocimiento duradero, prefiere Reglas o AGENTS.md". Ten en cuenta también la advertencia de alcance que ahora incluyen los documentos: las memorias están documentadas para aplicarse únicamente al agente Cascade heredado, y el agente Devin Local, que es el predeterminado para las nuevas pestañas, no las conserva.
Consolidar todo en un solo archivo para simplificar. Esto cambia un conjunto manejable de decisiones de modo por un único bloque indiferenciado siempre activo, y se topa con el límite de caracteres por archivo. La versión a nivel de carpeta de esta decisión se analiza en fusionar carpetas de reglas de Windsurf y Devin.
Asumir que las reglas empresariales anulan el desorden. No lo hacen, y la documentación es específica: las reglas a nivel de sistema se "fusionan con las reglas del espacio de trabajo y globales, proporcionando contexto adicional a Cascade sin anular las reglas definidas por el usuario". Una línea base de administración se suma a tu presupuesto en lugar de reemplazarlo.
La solución: Valora cada regla y luego adapta el modo al coste
La decisión no es "qué modo es mejor". Es "con qué frecuencia es realmente relevante esta regla", y los modos se corresponden con cuatro respuestas sinceras.
Paso 1: Inventariar cada superficie, incluidas las que no tienen modo
Haz una lista de todo antes de cambiar nada. Hay cinco lugares de donde puede provenir una regla, y solo uno de ellos tiene un campo trigger:
El archivo global en ~/.codeium/windsurf/memories/global_rules.md: siempre activo, 6.000 caracteres.
AGENTS.md a nivel de raíz: siempre activo, sin frontmatter.
Archivos AGENTS.md en subdirectorios: auto-glob para su directorio.
El archivo heredado .windsurfrules en la raíz del espacio de trabajo, si aún existe: comprueba esto, porque es la fuente más común de presupuesto que no sabías que estabas gastando.
Archivos de reglas del espacio de trabajo en .devin/rules/ o .windsurf/rules/: uno por regla, 12.000 caracteres cada uno, y la única superficie donde eliges un modo.
Suma primero el total de lo que está siempre activo. Ese número es tu suelo, y es lo que paga cada mensaje antes de que se cargue cualquier regla condicional.
Paso 2: Clasificar cada regla del espacio de trabajo en una de las cuatro respuestas sinceras
Ve regla por regla y pregunta con qué frecuencia es genuinamente relevante. Las respuestas se corresponden directamente:
Relevante en cada mensaje. Cosas como "responder en inglés británico" o "nunca hacer commit a main". Estas se ganan el modo always_on. Debería haber muy pocas, y su tamaño combinado es el número que te importa.
Relevante a veces, de forma impredecible. Conocimiento de dominio al que el agente debe recurrir cuando surge un tema: una restricción de pagos, una regla de cumplimiento. Estas son model_decision, y la descripción hace un trabajo real aquí, porque es la única parte cargada por defecto. Escríbela como una frase de "cuándo usar esto", no como un título.
Relevante cuando intervienen archivos específicos. Cualquier cosa con forma de archivo: convenciones de prueba, seguridad de migración, código generado. Estas son glob, y esta suele ser la mayor victoria, porque la mayoría de las convenciones tienen forma de archivo y la gente las tenía en siempre activas.
Relevante cuando tú lo digas. Listas de verificación de lanzamientos, procedimientos de incidentes, cualquier cosa que invoques deliberadamente. Estas son manual, y las activas con @nombre-de-regla.
Si una regla no encaja en ninguna de las cuatro, eso es un diagnóstico. Por lo general, significa que el archivo son dos reglas engrapadas juntas (una siempre verdadera y otra situacional) y dividirlas le da a cada mitad un modo que se ajusta.
Paso 3: Verificar por contradicción, no leyendo el archivo
No puedes confirmar un modo mirando el frontmatter, porque la pregunta es si el agente realmente recibió el contenido.
Para una regla glob, abre un archivo que no debería coincidir y pide algo que la regla cambiaría. Si el comportamiento de la regla aparece de todos modos, tu patrón es más amplio de lo que crees. Luego abre un archivo que debería coincidir y comprueba que aparezca el comportamiento.
Para una regla model_decision, pregunta sobre el tema sin nombrar la regla. Si el agente no recurre a ella, el problema es la descripción, no el cuerpo.
Para una regla manual, confirma que la invocación @nombre-de-regla se resuelva, y confirma que la regla no se aplique cuando no la hayas mencionado, que es todo el propósito del modo.
Haz esto una vez por regla después de un cambio de modo. Es la única manera de distinguir un modo configurado de un modo que funciona, y es la misma disciplina que detecta el problema en cuando Windsurf olvida las reglas de tu proyecto.
Configuración en MemoryLake
Dos cosas sobreviven a este ejercicio, y solo una de ellas cabe en un directorio de reglas. Las instrucciones (cómo comportarse, qué preferir) pertenecen exactamente a donde las coloca Windsurf. Las razones detrás de ellas no: "usamos facturación por día completo" es una regla, y "porque el sistema financiero rechaza días parciales" es lo que le permite a un agente saber cuándo deja de aplicarse la regla.
MemoryLake contiene esa segunda capa, fuera de los límites de caracteres y fuera de cualquier editor individual. Tus reglas se vuelven más cortas, tu suelo de siempre activo disminuye y el razonamiento sigue estando disponible para cada herramienta que utilices.
Paso 1: Crear una clave API
Inicia sesión, abre la configuración de tu espacio de trabajo y genera una clave API. Esta es la credencial que tu editor y tus agentes utilizan para leer la misma capa, así que créala una vez y mantenla accesible desde cada máquina.

Paso 2: Subir tus primeras memorias
Saca el razonamiento de los cuerpos de tus reglas: por qué existe cada convención, qué enfoque rechazaste, qué restricción hace que la respuesta obvia sea incorrecta. El archivo de regla conserva la instrucción; la capa conserva la justificación.

Paso 3: Conectar tu IA y agentes
Conecta Windsurf y cualquier otra herramienta en la que trabajes. El mismo razonamiento llega a cada una, lo cual es importante porque el directorio de reglas no se traslada a la siguiente herramienta y las decisiones que contiene sí deberían hacerlo.

Qué cambia esto en la práctica
La primera diferencia es medible dentro de una sola sesión. Mover las convenciones con forma de archivo de always_on a glob las elimina de cada mensaje, y las conversaciones largas dejan de degradarse en la segunda hora.
La segunda es que model_decision se vuelve utilizable. Es el modo más interesante y el que más se desperdicia, porque una descripción escrita como una etiqueta no le da al agente nada sobre qué decidir. Escrita como una condición, se convierte en una superficie de trabajo bajo demanda funcional.
La tercera es que tu suelo de siempre activo se convierte en un número que conoces. Entre un archivo global de 6.000 caracteres, un AGENTS.md en la raíz y posiblemente un .windsurfrules olvidado, ese suelo suele representar la mayor parte del presupuesto que la gente cree estar gestionando.
La cuarta es que las reglas dejan de cargar con el razonamiento. Los archivos más cortos se ajustan cómodamente al límite de 12.000 caracteres, y la justificación vive en un lugar que una persona puede leer y una herramienta diferente puede cargar. El coste de no hacer esto se manifiesta como la pérdida de contexto en cuando Windsurf olvida el contexto de Cascade.
Buenas prácticas para la activación de reglas
Usa glob por defecto, no always_on. La mayoría de las convenciones se refieren a archivos. Haz que la exposición del agente coincida.
Escribe las descripciones de model_decision como condiciones. "Usar al trabajar en flujos de pago o lógica de reembolsos" supera a "Reglas de pagos". La descripción es la única parte cargada por defecto.
Elimina el archivo heredado once you have checked it. .windsurfrules en la raíz del espacio de trabajo se sigue leyendo. O es tu fuente de verdad o no debería existir.
Presta atención a lo que hace mover un archivo. Un AGENTS.md en un subdirectorio es auto-glob para ese directorio; el mismo archivo en la raíz es siempre activo. Los movimientos de directorio son cambios de coste.
Cuenta el total de siempre activo antes de optimizar el resto. Optimizar las reglas condicionales mientras se carga un archivo global de 6.000 caracteres en cada mensaje es el orden incorrecto.
Trata las memorias autogeneradas como datos puntuales. Ese es el propio posicionamiento de Windsurf, y su recomendación es escribir el conocimiento duradero como una Regla o en AGENTS.md en su lugar.
Vuelve a verificar después de cualquier cambio de modo. Una edición de frontmatter no es una prueba. La contradicción sí lo es.
Conclusión
Windsurf ya hizo la parte difícil: publicó lo que cuesta cada modo de activación y cuándo se carga cada uno. Los cuatro modos se corresponden claramente con cuatro respuestas sinceras sobre con qué frecuencia es relevante una regla, y la mayoría de los directorios de reglas están mal configurados solo porque nadie se sentó a responder esa pregunta por archivo.
Así que respóndela. Inventaría las superficies que no tienen modo, suma el suelo al que te comprometen, clasifica el resto en los cuatro grupos y verifica por contradicción en lugar de leer el frontmatter. Luego, saca el razonamiento de los cuerpos de las reglas, porque un límite de caracteres es un mal lugar para guardar la explicación de por qué existen tus convenciones, y porque la próxima herramienta que uses tendrá sus propios límites, sus propios modos y ninguna forma de leer este directorio.