Qué se transfiere realmente
La superficie de personalización de Copilot tiene tres capas, y GitHub documenta un orden de precedencia preciso para ellas: primero las instrucciones personales, luego las instrucciones del repositorio y después las instrucciones de la organización, con lo cual "se proporcionan todos los conjuntos de instrucciones relevantes a Copilot".
Dentro de la capa del repositorio hay tres subtipos, clasificados en orden:
- Instrucciones específicas de ruta en
.github/instructions/**/*.instructions.md - Instrucciones para todo el repositorio en
.github/copilot-instructions.md - Instrucciones del agente, "especificadas en archivos llamados
AGENTS.md,CLAUDE.mdoGEMINI.md"
Por otra parte, Copilot tiene un sistema de memoria. Copilot Memory está "actualmente en vista previa pública y sujeto a cambios", y almacena dos tipos de elementos: "Hechos a nivel de repositorio", como "convenciones de código, decisiones arquitectónicas, comandos de compilación y reglas específicas del proyecto", y "Preferencias a nivel de usuario", descritas como "Preferencias personales implícitas o explícitas sobre cómo un usuario desea interactuar con Copilot".
Ahora, el inventario.
Se transfiere tal cual. AGENTS.md. Ambas herramientas lo leen, no se necesita conversión. Esta es la única victoria gratuita, y es real.
Se transfiere con reescritura. .github/copilot-instructions.md y tus archivos .instructions.md específicos de ruta. El contenido es markdown portable; lo que cambia es el mecanismo de activación, que se detalla más adelante.
No se transfiere. Tres cosas, cada una por una razón diferente.
Instrucciones personales, debido al alcance: "Las instrucciones personalizadas personales solo son compatibles con GitHub Copilot Chat en GitHub". En primer lugar, nunca llegaban a tu editor, por lo que no hay nada que mover, pero pueden contener preferencias que valga la pena anotar.
Instrucciones personalizadas de la organización, porque son configuraciones de GitHub a nivel de organización, "actualmente solo compatibles con Copilot Chat en GitHub.com, Copilot code review en GitHub.com y Copilot cloud agent en GitHub.com". Si tu organización depende de ellas, ten en cuenta que dejar Copilot en un equipo no las elimina para los demás.
Copilot Memory, debido a dónde reside y qué tan estrechamente está vinculada. Los hechos a nivel de repositorio están "disponibles para cualquier usuario que tenga acceso a Copilot Memory en ese repositorio, pero esos hechos solo se pueden usar en operaciones en el mismo repositorio". Las preferencias a nivel de usuario "solo están disponibles en las interacciones posteriores de ese mismo usuario". No existe una ruta de exportación documentada hacia la herramienta de otro proveedor. Puedes verlos, y los propietarios del repositorio pueden revisar y eliminar los hechos a nivel de repositorio, pero extraerlos manualmente es el camino de migración.
Un detalle hace que esto sea menos doloroso de lo que parece: Copilot Memory es más limitada de lo que la mayoría de la gente asume. Según GitHub, "Copilot Memory se utiliza actualmente en Copilot cloud agent, Copilot code review y Copilot CLI". Si el uso de Copilot por parte de tu equipo ha sido principalmente la autocompletación en el editor y el chat, es posible que haya mucho menos allí de lo que temías. Compruébalo antes de presupuestar tiempo para ello; la misma confusión de superficies que hace que la gente se pregunte por qué Copilot olvida el contexto de la base de código se aplica aquí.
Esta guía no vuelve a explicar cómo funcionan las propias capas de Copilot; si necesitas eso primero, configurar la memoria de Copilot en VS Code cubre el lado de origen por completo. Lo que sigue asume que has decidido migrar y deseas realizar el mapeo.
La migración manual
Paso 1: Determina de qué capa de Copilot provenía realmente cada regla y luego haz el inventario
Haz esto antes de escribir nada en el lado de Devin, porque el orden de precedencia te indica cuál era tu comportamiento efectivo.
El orden completo de Copilot, de mayor a menor prioridad, es: instrucciones personales, instrucciones específicas de ruta, instrucciones para todo el repositorio, instrucciones del agente como AGENTS.md y, por último, instrucciones personalizadas de la organización. Si una convención existía tanto en copilot-instructions.md como en AGENTS.md, la primera ganaba. Migrar ambas a la capa siempre activa de Devin resucita a la perdedora.
Recopila cuatro cosas:
.github/copilot-instructions.md, completo.- Cada
.github/instructions/**/*.instructions.md, con sus patrones de ruta. Los patrones son la parte valiosa. AGENTS.md,CLAUDE.mdoGEMINI.mdsi están presentes.- El contenido de tu Copilot Memory, extraído manualmente. Los hechos a nivel de repositorio son los que valen la pena; las preferencias a nivel de usuario son individuales y es más fácil simplemente volver a declararlas. GitHub señala que "los usuarios pueden ver y eliminar sus propias preferencias a nivel de usuario independientemente de su plan de Copilot", por lo que cada persona puede encargarse de las suyas.
Mientras lees los hechos a nivel de repositorio, ten en cuenta algo útil sobre cómo se mantenían veraces: se "almacenan con citas que apuntan al código que los respalda", y cuando Copilot usa uno, "verifica esas citas con la rama actual para confirmar que la información sigue siendo precisa. Solo se utilizan hechos validados". Nada en Devin hace eso por ti. Un hecho que migras es un hecho del que ahora eres responsable.
Paso 2: Elige un modo de activación para cada regla, porque Devin te obliga a hacerlo
Este es el verdadero trabajo, y es donde una migración perezosa produce una ventana de contexto saturada.
Las reglas de Devin Desktop residen en .devin/rules (preferido, y "tiene precedencia sobre .windsurf/"), con búsqueda en "tu directorio de espacio de trabajo actual", "cualquier subdirectorio de tu espacio de trabajo" y "directorios padre hasta la raíz de git". Cada regla del espacio de trabajo declara un modo de activación en el frontmatter a través del campo trigger:
| Modo | trigger: | Cómo llega a Cascade | Costo de contexto |
|---|---|---|---|
| Siempre activo | always_on | Contenido completo de la regla en el prompt del sistema en cada mensaje | Cada mensaje |
| Decisión del modelo | model_decision | "Solo se muestra la description en el prompt del sistema" | Descripción siempre; contenido completo bajo demanda |
| Glob | glob | Se aplica cuando se lee o edita un archivo que coincide con los globs | Solo cuando se tocan archivos coincidentes |
| Manual | manual | No está en el prompt del sistema; se activa escribiendo @nombre-regla | Solo cuando se menciona con @ |
El mapeo desde Copilot es casi mecánico. Los archivos .instructions.md específicos de ruta se convierten en reglas glob (transfiere los patrones directamente). El contenido de copilot-instructions.md para todo el repositorio se divide: las partes que siempre deben aplicarse se convierten en always_on, y las partes que son situacionales se convierten en model_decision. Las preferencias personales van al archivo de reglas globales.
Dos límites a tener en cuenta: "Los archivos de reglas del espacio de trabajo están limitados a 12,000 caracteres cada uno. El archivo de reglas globales está limitado a 6,000 caracteres". Y ten en cuenta dónde vive ese archivo global: ~/.codeium/windsurf/memories/global_rules.md, dentro del directorio memories, razón por la cual mucha gente cree que no tiene ninguna regla global.
Luego, la excepción del frontmatter: "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". Esa es la trampa de la introducción. Tu AGENTS.md era la instrucción de repositorio de menor prioridad para Copilot; en Devin es incondicional.
Por último, una advertencia que cambia lo que deberías intentar migrar. El documento de memories de Devin Desktop comienza con esto: "Las Memories se aplican únicamente al agente heredado Cascade." Y: "El agente Devin Local (el agente predeterminado para nuevas pestañas) no conserva las memories". Si tu plan era mover Copilot Memory a las memories de Devin, el agente predeterminado no las mantendrá. La propia recomendación del proveedor apunta a otra parte: "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 depender de las Memories generadas automáticamente. Las Reglas están controladas por versiones, se pueden compartir con tu equipo y te brindan un control explícito sobre la activación".
Sigue ese consejo. El destino para los hechos migrados de Copilot Memory es una Regla, no una memory.
La mejor manera: mantén los hechos donde no se apliquen los modos de activación
Los pasos 1 y 2 producen una configuración correcta de Devin. También te otorgan un límite global de 6,000 caracteres, un límite de espacio de trabajo de 12,000 caracteres por archivo y la necesidad de decidir un modo de activación para cada cosa que sabes sobre tu proyecto.
Los modos de activación son un buen diseño para las reglas (instrucciones sobre cómo comportarse). No se adaptan bien a los hechos. "Usamos bun, no npm" requiere un disparador. "El servicio de pagos reintenta tres veces debido a una peculiaridad del sistema ascendente documentada en el ticket 4471" no requiere un disparador; quiere ser localizable cuando sea relevante, para siempre, sin consumir espacio en el prompt del sistema en cada mensaje.
Esa es la brecha que llena una capa de memoria, y también es lo que hace que la próxima migración sea económica. MemoryLake se configura en tres pasos.
Paso 1: Crea una clave de API
Inicia sesión y genera una clave de API desde tu panel de control. La credencial pertenece a tu equipo, no a Copilot ni a Devin, por lo que el almacenamiento es accesible desde cualquier agente que esté frente a él, incluido el agente Devin Local que no conserva sus propias memories.

Paso 2: Sube tus primeras memories
Aquí es donde va la extracción de Copilot Memory. Hechos a nivel de repositorio: decisiones arquitectónicas, comandos de compilación, reglas específicas del proyecto y las razones detrás de ellos. Luego, las preferencias a nivel de usuario que cada persona recuperó y las instrucciones personales que solo llegaban a Copilot Chat en GitHub.com.

Deja tus reglas de comportamiento reales en .devin/rules/ con los disparadores adecuados, y mantén las que siempre son verdaderas en AGENTS.md. La división es la clave: las reglas se mantienen lo suficientemente pequeñas como para no superar los límites de caracteres, y los hechos dejan de competir por ese espacio.
Paso 3: Conecta tu IA y agentes
Apunta Devin Desktop al almacenamiento. Como el almacenamiento es externo, no importa si la pestaña actual está ejecutando Cascade o el agente Devin Local, lo cual es la respuesta práctica a la advertencia en la parte superior de la página de memories de Devin.

Qué cambia esto en la práctica
El primer cambio es que los límites de caracteres dejan de ser una restricción de diseño para tu conocimiento. Seis mil caracteres es un límite razonable para saber cómo debe comportarse un agente, pero irracional para lo que debe saber.
El segundo es que dejas de pagar un impuesto de modo de activación sobre los hechos. model_decision coloca una descripción en el prompt del sistema en cada mensaje y recupera el cuerpo cuando parece relevante; algo sensato para una regla, pero un desperdicio para doscientos hechos de dominio que luego tendrías que describir individualmente.
El tercero es que la división entre Cascade y Devin Local pasa a ser problema de otro. Los proveedores reorganizan los agentes; tanto el archivo que confirmaste como el almacenamiento que posees sobreviven a ello. Los equipos que ya hicieron esto sobrevivieron al cambio de nombre de Windsurf a Devin Desktop sin tocar su base de conocimientos.
Buenas prácticas para una migración de Copilot a Devin
- Lee el orden de precedencia antes de copiar nada. Si una convención existía en dos capas de Copilot, solo la de mayor prioridad estaba en efecto.
- Comprueba primero qué contiene realmente Copilot Memory. Sirve a Copilot cloud agent, Copilot code review y Copilot CLI, no a todas las superficies. Puede que haya menos que mover de lo que esperas.
- Transfiere los patrones de ruta textualmente. Las instrucciones específicas de ruta de Copilot se mapean limpiamente al disparador
globde Devin. - Asigna un modo de activación deliberadamente. Dejar todo por defecto en
always_ones la forma en que una ventana de contexto se llena antes del primer prompt. - Busca
global_rules.mddentro del directorio de memories. Está en~/.codeium/windsurf/memories/global_rules.md, y siempre está activo sin frontmatter. - Prefiere
.devin/rulessobre.windsurf/rules. Es la ubicación preferida y tiene precedencia, y el archivo único heredado.windsurfrulesen la raíz del espacio de trabajo todavía se lee, así que elimínalo si está desactualizado. - No migres hechos a memories generadas automáticamente. Los propios documentos de Devin recomiendan Reglas o
AGENTS.mdpara cualquier cosa que desees reutilizar de manera confiable, y el agente predeterminado no conserva las memories en absoluto. - Audita lo que sobrevivió después de una semana. Un conjunto de reglas migrado que nadie verificó es un conjunto de reglas que silenciosamente se ignora a medias. Auditar lo que tu IA recuerda es un buen hábito para comenzar con una configuración limpia.
Conclusión
AGENTS.md hace que esta migración parezca trivial y es genuinamente la mejor parte de ella. El resto es un trabajo de traducción entre dos filosofías diferentes: Copilot clasifica las fuentes de instrucciones y se las entrega todas al modelo, mientras que Devin obliga a cada regla a declarar cuándo quiere ser cargada.
Do esa traducción una vez, deliberadamente, con el orden de precedencia frente a ti. Y coloca los hechos (las decisiones, el conocimiento de dominio, las razones) en un lugar que no requiera que elijas un disparador para cada uno de ellos.