MemoryLake
모든 글로 돌아가기
Tutorial2026년 9월 1일·12 분 소요

컨텍스트 손실 없이 Devin Desktop에서 Codex로 마이그레이션하는 방법 (2026)

대부분의 마이그레이션 가이드는 현재 가지고 있는 자산을 인벤토리화하는 것부터 시작합니다. 하지만 이 가이드는 Devin Desktop 자체 메모리 문서의 맨 위에 인쇄된 경고로 시작합니다. 이 경고가 인벤토리에 포함될 내용 자체를 바꾸기 때문입니다:

"메모리는 레거시 Cascade 에이전트에만 적용됩니다. 새 탭의 기본 에이전트인 Devin Local 에이전트는 메모리를 유지하지 않습니다."

최근 Devin Desktop에서 새 탭을 열었다면, 메모리를 기록하지 않는 에이전트와 작업해 온 것입니다. 여러분이 몇 달 동안 구축해 왔다고 믿었던 메모리 시스템은 Cascade의 것이며, 위 문장에서 Cascade는 레거시로 설명되어 있습니다. Devin 문서에서는 탈출 경로까지 명시하고 있습니다: "Devin: Open Cascade Migration Wizard 명령을 사용하여 의존하고 있는 메모리를 스킬로 마이그레이션하십시오."

이로 인해 마이그레이션의 전체 틀이 바뀝니다. Codex로 무엇을 옮길지 묻기 전에, 솔직하게 던져야 할 첫 번째 질문은 '나에게 아직 무엇이 남아 있는가'입니다. 그리고 좋은 소식은, 가장 가치 있는 단일 아티팩트는 아무런 변환 없이 그대로 이동한다는 점입니다.

목적지가 Codex가 아니라 Claude Code라면, 해당 조합은 Devin에서 Claude Code로 마이그레이션하기에서 다룹니다. 여전히 Windsurf 이름 변경 자체를 다루고 있다면, Windsurf에서 Devin Desktop으로 마이그레이션하기를 참고하세요. 이 페이지는 Devin Desktop에서 Codex로의 마이그레이션을 레이어별로 다룹니다.

실제로 전송되는 것

Devin Desktop은 두 가지 메커니즘으로 컨텍스트를 유지하며, 해당 문서에서는 어떤 것을 신뢰해야 하는지 이례적일 정도로 직접적으로 설명합니다: "Devin Desktop에는 이를 위한 두 가지 메커니즘이 있습니다. 하나는 Cascade에 의해 자동으로 생성되는 Memories(메모리)이고, 다른 하나는 사용자가 글로벌, 워크스페이스 또는 시스템 수준에서 수동으로 정의하는 Rules(규칙)입니다."

AGENTS.md는 무료로 전송되며, 이것이 핵심입니다. Devin은 이를 최우선 규칙 소스로 취급합니다. AGENTS.md는 "자동으로 감지"되어 ".devin/rules/ (및 레거시 .windsurf/rules/)를 구동하는 동일한 Rules 엔진에 공급됩니다. 단지 프론트매터 대신 파일의 위치에서 활성화 모드를 유추할 뿐입니다." 루트 수준 파일은 항상 켜져 있으며, 하위 디렉터리 파일은 "<directory>/**라는 자동 생성된 패턴을 가진" glob 규칙이 됩니다. 그리고 현재 기본 에이전트를 사용하는 모든 사람에게 중요한 점은 다음과 같습니다: "Devin Local 에이전트는 Devin CLI 규칙 시스템을 통해 AGENTS.md를 읽습니다."

Codex도 동일한 파일 이름을 읽습니다. Codex 문서의 시작 부분에는 "Codex는 작업을 수행하기 전에 AGENTS.md 파일을 읽습니다"라고 명시되어 있습니다. 따라서 하나의 파일을 레거시 Cascade, 현재 Devin Local 에이전트, 그리고 Codex가 모두 읽습니다. 변환할 것이 없습니다.

규칙은 전송되지만, 활성화 모델은 전송되지 않습니다. Devin의 워크스페이스 규칙은 프론트매터의 trigger 필드를 통해 모드를 선언하며, 네 가지 값과 서로 다른 컨텍스트 비용을 가집니다: always_on은 "모든 메시지의 시스템 프롬프트에 전체 규칙 내용..."을 넣고, model_decision은 "시스템 프롬프트에 description만..." 표시하고 Cascade가 관련이 있다고 판단할 때 본문을 로드하며, glob은 "Cascade가 globs 패턴과 일치하는 파일을 읽거나 편집할 때" 규칙을 적용하고, manual은 "Cascade 입력 상자에 @rule-name을 입력하여 활성화"할 때까지 규칙을 프롬프트에서 제외합니다.

Codex에는 이와 동등한 제어판이 없습니다. Codex는 실행당 하나의 지시 체인을 빌드합니다. 글로벌 스코프에서는 AGENTS.override.md 또는 AGENTS.md를 읽으며, "Codex는 이 수준에서 비어 있지 않은 첫 번째 파일만 사용합니다." 프로젝트 스코프에서는 "현재 작업 디렉터리까지 내려가며" 각 디렉터리를 확인하고 "디렉터리당 최대 하나의 파일"을 포함합니다. 그런 다음 병합합니다: "Codex는 루트에서부터 아래로 파일을 연결하고 빈 줄로 결합합니다. 현재 디렉터리에 더 가까운 파일은 결합된 프롬프트에서 더 나중에 나타나기 때문에 이전 지침을 재정의(override)합니다."

위치가 프론트매터를 대체합니다. 이것이 이번 마이그레이션의 실제 작업이며, 여기에는 제한이 있습니다: "Codex는 빈 파일을 건너뛰고, 결합된 크기가 project_doc_max_bytes(기본값 32 KiB)로 정의된 제한에 도달하면 파일 추가를 중단합니다."

메모리는 전송되지 않으며, 이미 고립되어 있었습니다. Cascade의 메모리는 "생성된 워크스페이스와 연결되며 ~/.codeium/windsurf/memories/에 로컬로 저장됩니다." 한 문장에 두 가지 제한 사항이 명시되어 있습니다: "한 워크스페이스에서 생성된 메모리는 다른 워크스페이스에서 사용할 수 없으며, 리포지토리에 커밋되지 않습니다." Devin은 솔직하게 덧붙입니다: "자동 생성된 메모리는 오직 사용자의 컴퓨터에만 존재합니다."

의존할 수 있는 가져오기 도구(importer)도 없습니다. Codex의 가져오기 흐름은 지원되는 소스를 명시적으로 지정합니다. 데스크톱 앱은 "Claude Code, Claude Cowork 또는 Cursor에서 가져올 수 있고", CLI는 "Claude Code 또는 Cursor에서 가져올 수 있습니다." Devin은 두 목록 모두에 없으므로, 버튼을 찾기 전에 이 점을 알아두는 것이 좋습니다. 혹시 이 중 하나에서 마이그레이션하는 경우라면 Codex가 Cursor 및 Claude에서 가져올 수 있는 항목에서 해당 흐름을 다룹니다.

수동 마이그레이션

1단계: 어떤 에이전트가 컨텍스트를 읽고 있었는지 확인하고 인벤토리 작성하기

Cascade의 Customizations 패널 또는 Devin Settings를 열고 실제로 무엇이 있는지 확인하십시오. Devin 문서에서는 두 영역을 모두 설명합니다: 메모리와 규칙은 "Cascade의 우측 상단 슬라이더 메뉴에 있는 Customizations 아이콘을 클릭하거나 'Devin - Settings'를 통해 언제든지 액세스하고 구성할 수 있습니다."

그런 다음 규칙이 사람들이 생각하는 것보다 더 많은 곳에 존재하므로 다음 네 가지 위치를 살펴보십시오:

  • ~/.codeium/windsurf/memories/global_rules.md — "모든 워크스페이스에 적용되는 단일 파일. 항상 켜짐. 6,000자로 제한됨." 경로에 유의하십시오: 글로벌 규칙(rules) 파일이 메모리(memories) 디렉터리 내에 위치해 있어, 많은 사람들이 글로벌 규칙이 없다고 생각하는 흔한 원인이 됩니다.
  • 워크스페이스의 .devin/rules/*.md "(권장)", 폴백으로 .windsurf/rules/*.md 사용, "파일당 12,000자로 제한됨."
  • 워크스페이스 루트, "워크스페이스 루트에 있는 레거시 단일 파일 .windsurfrules도 여전히 읽힙니다."
  • /etc/devin/rules/와 같은 경로 아래의 엔터프라이즈 관리 시스템 규칙. 이는 "IT 부서에서 배포하며 최종 사용자는 읽기 전용"이고 "워크스페이스 및 글로벌 규칙과 병합되어 사용자 정의 규칙을 재정의하지 않고 Cascade에 추가 컨텍스트를 제공합니다." 이러한 규칙이 존재한다면 여러분이 이동할 수 있는 것이 아니므로, 배포 소유자에게 알리십시오.

확인해야 할 또 다른 감지 특이사항: Devin은 "상위 디렉터리에서 규칙을 찾기 위해 git 루트 디렉터리까지 검색"하지만, "새 규칙을 생성하면 git 루트가 아닌 현재 워크스페이스의 .devin/rules 디렉터리에 저장됩니다." 모노레포에서는 규칙이 생각지도 못한 하위 디렉터리에 분산되어 있을 수 있음을 의미합니다.

메모리의 경우, 지금 바로 읽고 보관할 가치가 있는 내용을 텍스트로 복사해 두십시오. 내보내기 기능이 없고, 리포지토리에 저장되어 있지 않으며, 소속된 워크스페이스가 변경되면 연결이 끊어집니다.

2단계: 4가지 활성화 모드를 하나의 연결된 체인으로 평탄화하기

유지하려는 모든 규칙을 trigger 값에 따라 분류하고, 각 모드에 맞는 목적지를 지정하십시오:

always_on은 루트 AGENTS.md로 이동합니다. 두 도구 모두 루트 수준 파일을 무조건적인 것으로 취급하므로, 이는 그대로 복사하면 됩니다. 총합을 주의 깊게 살펴보십시오: Devin은 글로벌하게 6,000자, 워크스페이스 파일당 12,000자를 허용했지만, Codex는 결합된 크기가 32 KiB에 도달하면 추가를 중단합니다. 한계에 도달했을 때의 지침은 "제한을 늘리거나 지침을 중첩된 디렉터리로 분할"하는 것입니다.

glob은 디렉터리 배치로 변환됩니다. src/**/*.ts 범위의 규칙은 해당 디렉터리 내부의 AGENTS.md가 되며, Codex는 작업 디렉터리가 해당 디렉터리 또는 그 하위에 있을 때 이를 가져옵니다. Devin은 이미 하위 디렉터리의 AGENTS.md 파일을 자동 생성된 <directory>/** 패턴을 가진 glob으로 취급하므로, 이 모드가 가장 깔끔하게 변환됩니다.

model_decision은 직접적인 상응물이 없으며, 단순히 번역하기보다 고민이 필요한 유일한 부분입니다. 이 규칙은 프롬프트에 설명으로만 존재하다가 관련성이 있을 때 본문이 로드되었습니다. Codex에서는 선택해야 합니다: 항상 적용할 만큼 중요하다면 가장 가까운 AGENTS.md에서 무조건적인 규칙으로 승격시키거나, 지침에서 완전히 제외하고 스킬로 표현하십시오. Devin의 자체 마이그레이션 마법사가 Cascade 메모리에 대해 안내하는 방향이 바로 이 스킬입니다. 모든 것을 승격시키는 것은 흔히 저지르는 실수입니다. 가끔씩만 중요한 자료로 32 KiB 한도에 도달하는 가장 빠른 방법이기 때문입니다. 지침과 온디맨드 기능의 차이가 생소하다면, 에이전트 스킬이 메모리가 아닌 이유에서 그 경계를 설명합니다.

manual 규칙은 의도적으로 호출했던 것들입니다. 이들은 항상 로드되는 지시 체인에 전혀 속하지 않습니다. 필요할 때 붙여넣는 문서로 보관하거나 스킬로 유지하십시오.

마지막으로, Codex가 의도한 대로 AGENTS.override.md를 사용하십시오: "기본 파일을 삭제하지 않고 임시 글로벌 재정의가 필요할 때 ~/.codex/AGENTS.override.md를 사용하십시오." 이는 리포지토리에 개인적인 선호도가 유출되지 않으면서, 이전에 global_rules.md에 있던 개인 설정을 대체하기에 적합합니다.

완료하기 전에 마지막으로 확인하십시오. Codex 자체 문서도 Devin과 거의 동일한 단어로 동일한 경계를 설정합니다: "필요한 팀 지침은 AGENTS.md 또는 체크인된 문서에 보관하십시오. 메모리는 유용한 회상 레이어로 취급하되, 항상 적용되어야 하는 규칙의 유일한 소스로 취급하지 마십시오." 규칙이 항상 유지되어야 한다면, 두 도구의 생성된 메모리가 아니라 파일에 속해야 합니다. Codex가 여전히 배치된 파일을 무시하는 것처럼 보인다면, Codex가 AGENTS.md 규칙을 건너뛰는 이유에서 일반적인 원인을 다룹니다.

더 나은 방법: 학습된 절반을 두 에이전트 모두 소유하지 않는 곳에 두기

1단계와 2단계는 파일이었던 모든 것을 이동합니다. 하지만 이동할 수 없는 것은 두 벤더 모두 의존하지 말라고 경고하는 레이어입니다. 실제로 두 벤더 모두 그렇게 말합니다. Devin은 "자동 생성된 Memories에 의존하기보다는 규칙으로 작성하거나 리포지토리의 AGENTS.md에 추가할 것"을 권장합니다. "규칙은 버전 관리되고 팀과 공유할 수 있으며 활성화를 명시적으로 제어할 수 있기 때문"입니다. 한편 Codex의 로컬 메모리는 "기본적으로 꺼져 있으며", ~/.codex/memories/에 "생성된 상태"로 존재하고, "Codex 요율 제한(rate-limit) 잔여 비율이 구성된 임계값 미만일 때" 백그라운드 패스를 완전히 건너뜁니다. 즉, 가장 바쁜 세션이 기록될 가능성이 가장 낮다는 뜻입니다.

따라서 양쪽 모두에서 누적된 이해는 머신 로컬이거나, 자동 생성되었거나, 신뢰할 수 있는 소스(source of truth)로 명시적으로 권장되지 않습니다. 지침은 리포지토리에 속해야 합니다. 학습된 절반은 두 에디터 중 어느 쪽도 제어하지 않는 곳에 속해야 합니다.

MemoryLake가 바로 그 공간입니다. 사용자가 직접 소유하고, 특정 도구의 비공개 디렉터리가 아닌 API를 통해 실행 중인 에이전트가 읽을 수 있는 메모리 레이어입니다. 단 세 단계로 가능합니다.

1단계: API 키 생성

로그인한 후 워크스페이스 설정에서 API 키를 생성하십시오. 에디터가 아닌 사용자의 소유이므로, 향후 도구를 전환하더라도 무효화되지 않습니다.

Devin Desktop에서 Codex로 이동할 때 MemoryLake API 키 생성하기
Devin Desktop에서 Codex로 이동할 때 MemoryLake API 키 생성하기

2단계: 첫 번째 메모리 업로드

Cascade 메모리에서 복사한 내용부터 시작하여 규칙 파일에 맞지 않았던 자료들을 추가하십시오: 팀이 이미 시도했다가 거부한 접근 방식, 모듈이 그렇게 구성된 이유, 계속 반복되는 리뷰 의견, 1년 동안 일한 사람이라면 누구나 명백히 아는 제약 조건 등입니다. 멀티모달 파일을 포함하여 파일이 있는 그대로 업로드되므로, 아키텍처 다이어그램이나 컨벤션을 인코딩한 스프레드시트도 직접 입력할 수 있습니다.

32 KiB 지시 체인 대신 MemoryLake에 규칙 추론 작성하기
32 KiB 지시 체인 대신 MemoryLake에 규칙 추론 작성하기

3단계: AI 및 에이전트 연결

Codex를 연결하고, 여전히 사용 중이라면 Devin Desktop도 연결 상태를 유지하십시오. 그 이후부터는 학습된 레이어를 한 곳에서 읽기 때문에, 전환 기간 동안 두 도구를 모두 실행하더라도 두 개의 컨텍스트 세트를 유지 관리할 필요가 없어집니다.

Codex, Devin Desktop 및 기타 에이전트를 하나의 공유 메모리 레이어에 연결하기
Codex, Devin Desktop 및 기타 에이전트를 하나의 공유 메모리 레이어에 연결하기

세 가지 제한 사항이 있습니다. MemoryLake는 ~/.codeium/windsurf/memories/ 또는 ~/.codex/memories/를 읽거나 쓰지 않습니다. 이들은 각 도구의 생성된 상태이며, 이것이 바로 수동 마이그레이션의 1단계가 수동인 이유입니다. 또한 Codex가 지시 체인을 빌드하는 방식이나 32 KiB 제한이 적용되는 방식을 변경하지 않습니다. 그리고 AGENTS.md를 대체하지 않습니다. 모든 사람에게 적용되어야 하는 규칙은 팀원들과 코드 리뷰에서 볼 수 있도록 리포지토리에 있어야 합니다.

실제 적용 시 변화하는 점

즉각적으로 작업 순서가 바뀝니다. 어떤 에이전트가 컨텍스트를 읽고 있었는지 감사하고, AGENTS.md를 그대로 이동하며, 모든 것을 하나의 루트 파일에 쏟아붓는 대신 4가지 트리거 모드를 의도적으로 평탄화하고, 학습된 절반을 두 도구 외부로 유지합니다.

몇 달이 지나면 다음 전환 비용이 달라집니다. 이번 마이그레이션에는 특이한 특징이 있습니다. 소스 도구는 이미 파일을 선호하여 자체 메모리 시스템을 단종(deprecated)시켰고, 대상 도구는 로컬 메모리를 비활성화한 상태로 출시하며 이를 신뢰할 수 있는 소스로 취급하지 말라는 경고를 보냅니다. 서로 다른 두 독립 벤더가 동일한 결론에 도달했다는 것은 지속 가능한 지식이 어디에 머물러야 하는지에 대한 상당히 강력한 신호입니다. 그리고 두 대답 모두 "에디터 내부"가 아닙니다.

또한 대부분의 팀에서 계획보다 길어지는 중복 사용 기간 동안 발생하는 멀티 도구 비용을 제거합니다. Devin 메모리는 워크스페이스별 및 머신별로 작동하며, Codex 메모리는 머신별로 작동하고 기본적으로 꺼져 있습니다. 외부 레이어 없이 둘 다 실행한다는 것은 동일한 컨텍스트를 두 곳에서 다시 가르쳐야 함을 의미하며, 이는 코딩 에이전트가 실제로 읽는 것에서 설명한 패턴입니다.

전환 후 모범 사례

하나의 루트 AGENTS.md를 유지하고 구체적인 내용은 트리 아래로 내리십시오. Codex는 디렉터리당 최대 하나의 파일만 포함하고 더 깊은 곳에 있는 파일이 더 얕은 곳에 있는 파일을 재정의하도록 허용하므로, 이제 트리가 스코핑 메커니즘이 됩니다.

32 KiB 결합 제한을 주의 깊게 살펴보십시오. Codex는 이 제한에 도달하면 추가를 중단하며, 오류가 발생하는 것이 아니라 조용히 잘려 나갑니다.

모든 model_decision 규칙을 승격하여 포팅하지 마십시오. 해당 모드는 컨텍스트 비용을 저렴하게 유지하기 위해 존재했습니다. 모든 것을 승격시키면 방금 확보한 예산을 낭비하게 됩니다.

새로운 체인을 검증할 때까지 .windsurfrules를 그대로 두십시오. Devin은 여전히 이를 읽으므로 중복 사용 기간 동안 유효한 폴백 역할을 하지만, 장기적인 보관처로 취급해서는 안 됩니다.

규칙을 주제별로 분할하여 관심사당 하나의 파일로 만드십시오. 규칙을 "단순하고 간결하며 구체적으로" 유지하라는 Devin의 지침은 Codex에도 동일하게 적용되며, 주제 크기의 파일은 디렉터리 기반 스코핑 모델을 읽기 쉽게 만듭니다.

Codex의 로컬 메모리 사용 여부를 신중하게 결정하십시오. 기본적으로 꺼져 있습니다. 이를 켜는 경우 문서화된 동작을 기억하십시오: 생성된 상태이며, 수동 편집용이 아니고, 짧은 세션에서는 건너뛰며, 요율 제한 여유가 낮을 때는 완전히 건너뜁니다. 관련 증상은 Codex가 프로젝트 컨텍스트를 잊어버리는 이유에서 다룹니다.

결론

이번 마이그레이션에서 놀라운 점은 Codex 측에 있지 않습니다. Devin Desktop의 기본 에이전트가 메모리를 유지하지 않는다는 점이며, 이는 사람들이 가장 잃어버릴까 봐 두려워하는 레이어가 이미 루프에서 벗어나 있었을 수 있음을 의미합니다. 이 사실이 확인되면 나머지는 기계적입니다: AGENTS.md는 그대로 이동하고, 워크스페이스 규칙은 4가지 활성화 모드에서 바이트 제한이 있는 디렉터리 트리로 평탄화되며, 메모리는 다른 도구가 대신 읽어주지 않으므로 수동으로 읽어와야 합니다.

제대로 처리할 가치가 있는 부분은 마지막 단계입니다. 두 벤더 모두 자체적으로 생성된 메모리 대신 체크인된 파일을 가리키고 있으며, 파일이 규칙을 보관하기에 적합한 공간입니다. 규칙이 아닌 지식에 해당하는 모든 것에 대한 지속 가능한 해답은 이번 분기에 어떤 에디터를 사용하든 그보다 더 오래 지속되는 레이어입니다.

자주 묻는 질문

Devin Desktop은 여전히 메모리를 지원하나요?

레거시 Cascade 에이전트의 경우 지원합니다. 문서에 따르면 "메모리는 레거시 Cascade 에이전트에만 적용"되며 "새 탭의 기본 에이전트인 Devin Local 에이전트는 메모리를 유지하지 않는다"고 명시되어 있으며, 의존하는 메모리를 스킬로 이동할 수 있는 마이그레이션 마법사를 제공합니다. 어떤 동작이 나타나는지는 탭에서 실행 중인 에이전트에 따라 다릅니다.

Codex가 Devin Desktop 설정을 자동으로 가져올 수 있나요?

아니요. Codex의 가져오기 흐름은 소스를 명시적으로 나열합니다: 데스크톱 앱은 "Claude Code, Claude Cowork 또는 Cursor에서 가져올 수 있고", CLI는 "Claude Code 또는 Cursor에서 가져올 수 있습니다." Devin Desktop은 여기에 포함되어 있지 않으므로, 이번 마이그레이션은 수동으로 진행해야 합니다.

Cascade의 메모리는 어디에 저장되며, 내보낼 수 있나요?

메모리는 "~/.codeium/windsurf/memories/에 로컬로 저장"되며, 생성된 워크스페이스로 범위가 제한되고 "리포지토리에 커밋되지 않습니다." 내보내기 기능은 없으므로, Customizations 패널에서 읽고 중요한 내용을 직접 복사해야 합니다.

Codex를 위해 AGENTS.md를 다시 작성해야 하나요?

아니요. Devin은 AGENTS.md를 감지하여 .devin/rules/와 동일한 규칙 엔진에 공급하고, Devin Local 에이전트는 CLI 규칙 시스템을 통해 이를 읽으며, Codex는 "작업을 수행하기 전에 AGENTS.md 파일을 읽습니다." 차이점은 스코핑 방식입니다: Devin은 파일 위치에서 활성화를 유추하는 반면, Codex는 디렉터리당 최대 하나의 파일만 사용하여 루트에서부터 아래로 연결합니다.

How do I convert a rule that used model_decision?

그 규칙이 실제로 무엇이었는지 결정하십시오. 지침이 항상 적용되어야 한다면 가장 가까운 AGENTS.md로 이동하십시오. 상시 규칙이 아니라 가끔 필요한 기능이었다면 대신 스킬로 표현하십시오. 모든 model_decision 규칙을 항상 켜짐(always-on)으로 승격시키는 것은 프로젝트를 Codex의 32 KiB 잘림 제한으로 몰아넣는 원인이 됩니다.

글로벌 규칙 파일은 어떻게 되나요?

~/.codeium/windsurf/memories/global_rules.md는 6,000자로 제한된 단일 상시 활성화 파일이었습니다. 이와 가장 유사한 Codex의 상응물은 Codex 홈 디렉터리의 글로벌 AGENTS.md이며, "기본 파일을 삭제하지 않고 임시 글로벌 재정의가 필요할 때" AGENTS.override.md를 사용할 수 있습니다. 개인적인 선호도는 리포지토리 파일 대신 여기에 보관하십시오.