MemoryLake
Volver a todos los artículos
Tutorial8 de septiembre de 2026·11 min de lectura

Cómo migrar de Codex a OpenHands sin perder el contexto (2026)

Esta migración parece que debería tomar diez minutos. Codex lee AGENTS.md. OpenHands lee AGENTS.md. Copias el repositorio, apuntas el nuevo agente hacia él, y listo.

Luego, el agente comienza a ignorar las pautas que solían funcionar o, peor aún, las sigue todas a la vez en situaciones donde solo se aplica un tercio de ellas. El nombre del archivo es idéntico en ambos lados. La estrategia de carga detrás de él no es ni remotamente la misma, y en eso consiste toda la migración.

Un límite antes de comenzar: esto trata sobre mover la capa de instrucciones de Codex a un entorno de ejecución de agente diferente. Si en su lugar te estás mudando de Codex a un agente nativo de terminal, migrating from Codex to Warp cubre un destino diferente. Y si tu problema actual es que Codex no está detectando las reglas que ya escribiste, why Codex skips your AGENTS.md rules es el punto de partida adecuado en lugar de una migración, al igual que why Codex forgets project context si la pérdida ocurre a mitad de la sesión en lugar de al momento de la carga.

Qué se transfiere realmente

Ambas herramientas documentan su descubrimiento con precisión, lo que hace que la diferencia sea fácil de ver una vez que las lees lado a lado.

Codex ensambla todo en una sola cadena ordenada antes de comenzar a trabajar:

"Codex construye una cadena de instrucciones cuando se inicia (una vez por ejecución; en la TUI esto generalmente significa una vez por sesión iniciada)".

El descubrimiento comienza de forma global, en el directorio de inicio de Codex, donde "lee AGENTS.override.md si existe. De lo contrario, Codex lee AGENTS.md" y "utiliza solo el primer archivo no vacío en este nivel". Luego recorre el proyecto:

"Comenzando en la raíz del proyecto (normalmente la raíz de Git), Codex desciende hasta tu directorio de trabajo actual".

En cada directorio a lo largo de esa ruta, busca AGENTS.override.md, luego AGENTS.md, luego cualquier nombre alternativo configurado en project_doc_fallback_filenames, e "incluye como máximo un archivo por directorio". La fusión es una concatenación: "Codex concatena los archivos desde la raíz hacia abajo, uniéndolos con líneas en blanco. Los archivos más cercanos a tu directorio actual anulan las pautas anteriores porque aparecen más tarde en el prompt combinado".

Y hay un límite estricto: Codex "deja de agregar archivos una vez que el tamaño combinado alcanza el límite definido por project_doc_max_bytes (32 KiB por defecto)".

OpenHands parte de la premisa opuesta. Su AGENTS.md raíz está siempre activo, pero todo lo demás se retiene deliberadamente hasta que sea relevante. La documentación detalla los mecanismos en una tabla: AGENTS.md en la raíz del repositorio significa "El contenido completo se incluye en el prompt de sistema inicial", mientras que una Agent Skill en .agents/skills/<nombre-del-skill>/SKILL.md significa "El nombre y la descripción se anuncian primero; el agente invoca el skill completo cuando es relevante".

La pauta que sigue es la frase más importante para cualquiera que llegue desde Codex:

"Usa AGENTS.md para convenciones cortas a nivel de repositorio. Usa SKILL.md para conocimientos específicos que solo se necesitan para algunas tareas".

Y la advertencia asociada a ella:

"El contenido siempre activo ocupa el contexto de la conversación desde el principio. Mantén AGENTS.md conciso y mueve las instrucciones extensas o especializadas a skills y referencias bajo demanda".

Por lo tanto: el contenido de tus reglas se transfiere textualmente. La estructura de tus reglas no. En Codex, anidar directorios es el mecanismo de condicionalidad: colocas un archivo cerca del trabajo especializado y este llega tarde en el prompt concatenado. En OpenHands, la anidación no es el mecanismo en absoluto; el mecanismo es la descripción de un skill, un disparador declarado o un patrón de ruta declarado.

Aplanar una cadena de Codex en un solo AGENTS.md de OpenHands no es un atajo. Es precisamente lo que la documentación del destino te dice que no hagas.

La migración manual

Paso 1: Dividir la cadena según la frecuencia con la que se aplica realmente cada parte

Recorre tu cadena de instrucciones de Codex desde la raíz hacia abajo y clasifica cada bloque en uno de tres grupos.

Siempre verdadero, en todas partes. El comando de prueba, el gestor de paquetes, la regla de "nunca editar archivos generados", la convención de nomenclatura que se mantiene en todo el repositorio. Este es tu nuevo AGENTS.md raíz, y debe ser corto. Si tu AGENTS.md raíz actual es largo porque creció hacia el límite de 32 KiB, este es el momento de descubrir cuánto de él era realmente universal.

Solo verdadero en un área. Todo lo que vivía en un AGENTS.md anidado porque se aplicaba al servicio de pagos, al frontend o a la carpeta de migraciones. Estos se convierten en skills con una declaración de paths. OpenHands documenta esto como una regla determinista en lugar de una sugerencia: paths "convierte el archivo en una regla activada por ruta. La regla no se anuncia al modelo y se inyecta una vez por conversación cuando se lee, edita o crea un archivo coincidente".

Este grupo es donde la migración gana algo. En Codex, un archivo anidado se aplica porque iniciaste la sesión en ese directorio o debajo de él; el alcance es un efecto secundario de dónde te encuentras. Un patrón de paths se aplica cuando el agente realmente toca un archivo coincidente, independientemente de dónde comenzó la sesión. Esa es una versión más precisa de lo que intentabas expresar.

Solo verdadero para ciertas tareas. Listas de verificación de lanzamientos, runbooks de incidentes, la larga explicación de cómo está conectado el flujo de datos. Estos se convierten en skills ordinarios con un nombre y una descripción. No cuestan casi nada hasta que se invocan, por lo que pueden ser tan largos como sea necesario, lo opuesto a la restricción bajo la que trabajabas con una cadena concatenada y un límite de bytes. Una advertencia que vale la pena tener en cuenta al mover cosas a los skills: agent skills are not memory. Un skill es un procedimiento que el agente puede invocar, no un registro de lo que decidió tu equipo.

Hay un cuarto grupo que vale la pena mencionar: pautas que se activan por una frase en lugar de un archivo. OpenHands también admite eso: triggers "inyecta el skill cuando aparece una palabra clave o comando en un mensaje del usuario" y el skill sigue estando disponible para la invocación del modelo también. Si un archivo declara ambos, la documentación es explícita en que "paths tiene prioridad".

Paso 2: Corregir las suposiciones de nombres de archivos que cambian de dirección

Dos detalles te darán problemas, y apuntan en direcciones opuestas.

Codex requiere que registres cualquier nombre de archivo de instrucciones no estándar. Su documentación establece que los nombres de archivos que no están en la lista project_doc_fallback_filenames "se ignoran para el descubrimiento de instrucciones". Si tu repositorio terminó con un CLAUDE.md que Codex lee, lo lee porque alguien lo puso en esa lista.

OpenHands hace lo contrario por defecto: "OpenHands también reconoce CLAUDE.md y GEMINI.md como contexto de repositorio específico del modelo". No hay nada que registrar. Lo que significa que un CLAUDE.md que habías estado ignorando, o que habías dejado deliberadamente fuera de la lista de alternativas de Codex, se activa al llegar. Verifica si tienes uno antes de tu primera ejecución.

El otro detalle es AGENTS.override.md. Codex lo usa en dos lugares: globalmente, donde se impone sobre AGENTS.md por completo, y por directorio, donde se verifica primero. Es una vía de escape útil para comportamientos locales temporales. La documentación de skills de OpenHands no describe un nombre de archivo de anulación de ese tipo, por lo que cualquier AGENTS.override.md en tu árbol es un archivo sin lector documentado en el otro lado. Decide por cada archivo si su contenido pertenece al AGENTS.md raíz, a un skill acotado o a ninguna parte.

Una nota más sobre archivos heredados: OpenHands documenta que "un skill .md heredado sin un disparador siempre se carga por completo" y recomienda preferir AGENTS.md para ese caso para que la intención quede clara. Si estás portando un montón de Markdown suelto, esa es la frase sobre la cual planificar: un skill .md simple se comportará como contenido siempre activo, lo que te devuelve exactamente a la posición de la que estás migrando. Si tus archivos de instrucciones comenzaron su vida como un CLAUDE.md, converting a CLAUDE.md into an AGENTS.md cubre las diferencias de nomenclatura y contenido con más detalle.

La mejor manera: Una capa de decisión que no pertenece a ningún entorno de ejecución

Todo lo anterior es un trabajo de reestructuración, y harás una versión de ello cada vez que el modelo de carga cambie debajo de ti. Codex utiliza una concatenación limitada por bytes. OpenHands utiliza la divulgación progresiva. La próxima herramienta utilizará otra cosa.

Lo que sobrevive a todo esto es el razonamiento: por qué existe la convención, qué rechazaste y qué incidente hizo que se creara la regla en primer lugar. Eso nunca encaja cómodamente en un archivo de instrucciones, porque un archivo de instrucciones es una lista de comandos y debe mantenerse corto en ambas plataformas.

MemoryLake mantiene esa capa fuera de ambos entornos de ejecución y la sirve al agente que la solicite, a través de MCP o la API. Codex conserva sus propias memorias locales y OpenHands mantiene su catálogo de skills exactamente como están.

Paso 1: Crear una clave de API

Genera una clave y realiza tu primera solicitud en unos treinta segundos, antes de comenzar a dividir archivos.

Crear una clave de API de MemoryLake para que los datos del proyecto vivan fuera de la cadena de instrucciones de Codex y del conjunto de skills de OpenHands
Crear una clave de API de MemoryLake para que los datos del proyecto vivan fuera de la cadena de instrucciones de Codex y del conjunto de skills de OpenHands

Paso 2: Subir tus primeras memorias

A medida que clasificas cada bloque en el Paso 1, te seguirás preguntando "por qué está esto aquí". Escribe la respuesta a medida que avanzas: la decisión, la alternativa que rechazaste, la restricción detrás de ella. Los documentos y otros archivos van al mismo lugar.

Subir a MemoryLake las decisiones del proyecto que de otro modo se verían limitadas por el tope de 32 KiB de la cadena de instrucciones de Codex
Subir a MemoryLake las decisiones del proyecto que de otro modo se verían limitadas por el tope de 32 KiB de la cadena de instrucciones de Codex

Paso 3: Conectar tu IA y agentes

Dale acceso a Claude, Codex, OpenClaw y OpenHands a través de MCP o la API. Un agente que puede consultar la capa de decisión ya no necesita el razonamiento integrado en el archivo siempre activo, lo que permite que el AGENTS.md raíz se mantenga tan corto como recomiendan ambos proveedores.

Conectar OpenHands, Codex y otros agentes a MemoryLake a través de MCP y la API
Conectar OpenHands, Codex y otros agentes a MemoryLake a través de MCP y la API

Qué cambia esto en la práctica

El primer cambio es que se termina la conversación sobre los 32 KiB. Los equipos que alcanzan el límite de Codex tienen dos opciones documentadas (aumentar el límite o dividir en directorios anidados) y ambas son formas de gestionar un presupuesto. En el lado de OpenHands, la cuestión del presupuesto cambia: el archivo raíz debe ser corto no por un límite de bytes, sino porque el contenido siempre activo compite por el contexto desde el primer mensaje. Una capa de decisión que se consulta bajo demanda es la forma en que el archivo corto se mantiene corto sin perder el razonamiento.

El segundo cambio es que el alcance se vuelve más preciso. Un patrón de paths es una declaración más fuerte que "este archivo se encuentra en el directorio de pagos", y se activa en el archivo que el agente realmente toca en lugar de donde comenzó la sesión.

El tercer cambio se manifiesta durante el período de transición. La mayoría de los equipos ejecutan ambos durante unas semanas. Dos árboles de instrucciones con dos modelos de carga diferirán de formas que nadie nota hasta que un agente hace algo que el otro no habría hecho. Una capa de decisión compartida significa que los motivos siguen siendo idénticos incluso cuando las distribuciones de archivos difieren.

Buenas prácticas para la migración de Codex a OpenHands

Mide tu archivo raíz antes de copiarlo. Si tu cadena de Codex estaba al límite de bytes, la pregunta honesta es cuánto de ella fue alguna vez universal. La mayor parte de la respuesta es "menos de lo que crees".

Convierte la anidación de directorios en patrones declarados. No reproduzcas tu estructura de directorios de Codex en OpenHands esperando el mismo comportamiento. La anidación era el mecanismo de alcance en un lado; una declaración de paths es el mecanismo de alcance en el otro.

Audita CLAUDE.md y GEMINI.md antes de la primera ejecución. Pasan de necesitar registro a ser reconocidos automáticamente. Eso suele ser bienvenido y, ocasionalmente, una sorpresa.

Dale a cada skill una descripción que indique cuándo se aplica. El descubrimiento anuncia solo el nombre y la descripción. Una descripción que dice qué hace el skill pero no cuándo usarlo no se invocará en el momento adecuado.

No pongas el razonamiento en el archivo siempre activo. Ambos proveedores te recomiendan mantenerlo conciso. El razonamiento pertenece a un almacén que el agente consulta, no al bloque que se carga en cada mensaje.

Espera resúmenes en sesiones largas. OpenHands documenta un condensador de contexto que mantiene intactos los mensajes recientes y resume el contenido más antiguo una vez que el historial supera un tamaño configurado. Esa es una forma sensata de gestionar una conversación larga, y es una buena razón para no tratar la conversación como tu registro de nada.

Conclusión

Codex y OpenHands leen un archivo con el mismo nombre y lo tratan de formas casi opuestas. Codex concatena una cadena ordenada desde la raíz del proyecto hasta tu directorio de trabajo, un archivo por directorio, hasta que alcanza un límite de bytes. OpenHands carga el archivo raíz por completo y retiene todo lo demás detrás de una descripción, un disparador de palabra clave o un patrón de ruta.

Esa diferencia es la migración. El contenido se porta textualmente; la estructura tiene que reconstruirse en torno a un modelo de carga que premia un archivo siempre activo corto y detalles ilimitados bajo demanda. En el camino, te encuentras con dos sorpresas en los nombres de archivos que apuntan en direcciones opuestas, y una vía de escape (AGENTS.override.md) sin equivalente documentado.

Divide la cadena según la frecuencia con la que se aplica cada parte, convierte la anidación en patrones declarados y mantén el razonamiento en un lugar que no pertenezca a ningún entorno de ejecución. Así, el próximo modelo de carga será un trabajo de reestructuración y no un proyecto de arqueología.

Preguntas frecuentes

¿Puedo simplemente copiar toda mi cadena de AGENTS.md en un solo AGENTS.md de OpenHands?

Puedes hacerlo y funcionará, pero es el caso sobre el cual advierte la documentación de destino: el contenido siempre activo ocupa el contexto de la conversación desde el principio, y OpenHands recomienda explícitamente mantener AGENTS.md conciso y mover las instrucciones extensas o especializadas a skills bajo demanda. Una cadena aplanada también pierde todo el alcance que proporcionaba la ubicación de directorios en Codex.

¿Tiene OpenHands un límite de tamaño en AGENTS.md como el tope de 32 KiB de Codex?

Su documentación de skills no especifica un límite de bytes para AGENTS.md. Lo que sí especifica es el modelo de costo (el contenido siempre activo está en el contexto desde el primer mensaje) y la recomendación de mantener el archivo conciso. Por lo tanto, la restricción es real, pero se expresa como una pauta sobre la ocupación del contexto en lugar de un límite de bytes configurable.

¿Qué pasa con mis archivos AGENTS.md anidados?

Su contenido se transfiere; su mecanismo de alcance no. En Codex, un archivo anidado se aplica porque tu directorio de trabajo está dentro de ese subárbol. En OpenHands, convierte cada uno en un skill con una declaración de paths para que se inyecte cuando el agente toque un archivo coincidente. La documentación señala que la regla no se anuncia al modelo y se inyecta una vez por conversación en la primera coincidencia.

¿Debería desactivar las memorias locales de Codex antes de migrar?

No es necesario hacerlo, y vale la pena comprenderlas en lugar de descartarlas; turning on Codex's local memories cubre lo que contiene ese espacio y cómo controlarlo. La propia guía de OpenAI es mantener las pautas requeridas del equipo en AGENTS.md o en la documentación registrada en el repositorio, en lugar de confiar en las memorias para reglas que siempre deben aplicarse. Ese consejo sobrevive a la migración sin cambios.

¿Cómo manejo una regla que solo debería activarse cuando digo una palabra determinada?

Para eso sirve triggers: una palabra clave o comando en un mensaje del usuario inyecta el skill, y este sigue estando disponible también para la invocación del modelo. Si declaras tanto triggers como paths en el mismo archivo, la documentación establece que paths tiene prioridad.

¿El condensador de contexto descartará las reglas de mi proyecto a mitad de la sesión?

El condensador opera sobre el historial de la conversación: mantiene intactos los mensajes recientes, preserva la información clave y resume el contenido más antiguo una vez que el historial supera un tamaño configurado, reteniendo los eventos más antiguos. Tu contenido de AGENTS.md siempre activo y tus skills son fuentes de instrucciones en lugar de turnos de conversación. La lección práctica es la misma que se aplica en todas partes: un chat largo no es un registro duradero, así que mantén las cosas que necesitas que sobrevivan en archivos y en un almacén consultable.

Lecturas relacionadas