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

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

Claude Code에서 Codex로 전환하려는 분들을 위해 좋은 소식부터 전해드립니다. Codex는 임포터(importer)를 제공하며, 이는 대부분의 사람들이 예상하는 것보다 더 많은 것을 이동해 줍니다. `/import` 명령어를 사용하면 지침 파일, MCP 서버, 스킬 및 플러그인, 훅(hooks) 및 슬래시 명령어, 서브에이전트(subagents), 그리고 지난 30일 동안의 채팅 중 최대 50개를 가져올 수 있습니다. 처음부터 다시 빌드할 필요가 없습니다.

하지만 계획을 세워야 할 부분은 이 기간의 경계선입니다. 30일보다 오래된 데이터는 가져오지 않습니다. Claude Code가 아닌 일반 Claude 채팅 데이터는 아예 임포트할 수 없습니다. 그리고 애초에 파일에 저장된 적이 없는 지식, 즉 "그렇게 시도해 봤는데 스테이징 서버가 망가졌다"와 같이 축적된 경험적 지식은 소스가 없기 때문에 임포트할 수 없습니다.

이 가이드에서는 정확히 무엇이 전송되고, 나머지는 어떻게 수동으로 이동하는지, 그리고 다음 마이그레이션(어느 방향이든)은 마이그레이션이라고 부를 필요도 없게끔 환경을 설정하는 방법을 다룹니다.

실제로 전송되는 항목

Codex의 임포터는 Claude Code를 소스로 지원합니다. CLI에서는 /import를 실행하고, 데스크톱 앱에서는 Settings → Import로 이동하여 단계를 따르시면 됩니다.

Codex 문서에 따르면, 임포트 대상은 다음과 같습니다:

  • AGENTS.md 파일
  • settings.jsonconfig.toml
  • 지침 파일 및 MCP 서버 구성
  • 스킬 및 플러그인
  • 프로젝트 폴더 및 메모리
  • 지난 30일 동안의 채팅 세션
  • 훅 및 슬래시 명령어
  • 서브에이전트

문서에 명시된 제한 사항도 목록만큼이나 중요합니다:

  • 지난 30일 동안의 채팅 중 최대 50개까지 지원합니다.
  • "일반 Claude 채팅 데이터는 임포트할 수 없습니다" — 이것은 Claude 임포터가 아니라 Claude Code 임포터입니다.
  • /import 명령어는 "작업이 실행 중이거나, 원격 세션 중이거나, 로컬 앱 서버 데몬에 연결된 상태에서는 사용할 수 없습니다."
  • 임포트된 플러그인은 재인증이 필요할 수 있습니다.

이동의 나머지 과정을 결정짓는 두 가지 사실이 더 있습니다.

Codex는 `CLAUDE.md`가 아니라 `AGENTS.md`를 읽습니다. AGENTS.md는 Cursor, Jules, Amp, Factory도 읽는 개방형 포맷입니다. 마이그레이션이 재작성이 아니라 거의 이름 바꾸기에 가까운 이유가 바로 이 때문입니다. 내용은 변경 없이 그대로 유지되며 파일 이름과 로드 경로만 다릅니다. Codex는 이 파일들을 계층화합니다. Codex 홈 디렉터리 아래의 글로벌 파일(~/.codex/AGENTS.md 또는 설정한 경우 $CODEX_HOME/AGENTS.md), 리포지토리 루트, 그리고 루트와 현재 작업 중인 디렉터리 사이의 디렉터리 순으로 적용됩니다. 파일은 루트에서 아래쪽으로 병합되며, 충돌이 발생하면 현재 디렉터리에 가장 가까운 파일이 우선 적용됩니다.

Codex에는 자체 메모리 기능이 있으며, 기본적으로 비활성화되어 있습니다. 메모리는 "이전 채팅의 요약, 영구 항목, 최근 입력 및 지원 증거"를 ~/.codex/memories/에 로컬 파일로 저장합니다. config.toml 파일의 [features] 아래에 memories = true를 추가하거나, 데스크톱 앱의 Settings → Personalization → Enable memories에서 활성화할 수 있습니다. 이는 프로젝트별이 아닌 글로벌 설정이며, 세션 간에 유지됩니다. 기능을 사용하기 전에 문서에 명시된 주의 사항을 읽어볼 가치가 있습니다. 메모리는 "채팅이 끝난 직후에 업데이트되지 않을 수 있고", Codex는 "활성 상태이거나 수명이 짧은 세션은 건너뛰며", 속도 제한에 도달하면 생성이 일시 중지됩니다. 또한 문서에서는 메모리에 비밀번호나 보안 키를 저장하지 않아야 하며, 해당 파일들을 생성된 상태(generated state)로 취급해야 한다고 명시하고 있습니다.

따라서 Codex가 완전히 빈 도화지 상태인 것은 아닙니다. 다만 Claude Code 내부에서 구축한 작업 컨텍스트와는 메모리의 형태가 다를 뿐입니다.

수동 마이그레이션

1단계: 지침 이동 및 분할하기

임포터가 아직 AGENTS.md를 생성하지 않았다면, CLAUDE.md 파일의 이름을 AGENTS.md로 변경하세요. 내용이 특정 제공업체에 종속되지 않는 중립적인 내용이라면, 심볼릭 링크(symlink)를 사용하여 두 도구를 동시에 실행하는 동안 하나의 파일을 모두 읽게 할 수 있습니다. 만약 Claude Code 전용 명령어, 훅 또는 파일 규칙과 같은 Claude 전용 마커가 포함되어 있다면, 심볼릭 링크를 사용하는 대신 파일을 복사하여 해당 부분을 수정하세요. 그렇지 않으면 두 도구 중 하나가 혼란을 겪을 수 있습니다.

그 다음, Codex의 계층화 기능을 활용할 수 있도록 범위를 기준으로 파일을 분할하세요:

  • 시스템 전반의 기본 설정(커밋 스타일, 기본 언어, 선호하는 대화 방식 등)은 ~/.codex/AGENTS.md에 넣습니다.
  • 리포지토리 규칙(빌드 명령어, 테스트 실행, 디렉터리 규칙, 절대 수정해서는 안 되는 사항 등)은 리포지토리 루트의 AGENTS.md에 넣습니다.
  • 하위 시스템 관련 세부 사항(이 패키지는 다른 린트 설정을 사용함, 이 서비스는 자체 배포 경로를 가짐 등)은 해당 디렉터리의 AGENTS.md에 넣습니다.

하나의 긴 루트 파일로도 작동은 하지만, 그렇게 하면 모든 하위 디렉터리의 모든 세션이 모든 규칙을 처리하는 비용을 치러야 합니다.

2단계: 임포터가 가져오지 못하는 부분 재구축하기

30일, 50개 채팅 제한 범위를 벗어나는 항목들을 신속하고 신중하게 검토하세요:

  • 과거의 결정 사항. 중요하다고 기억나는 Claude Code 세션들을 훑어보고 대화 기록이 아닌 '결론'을 기록해 두세요. "재시도 래퍼(retry wrapper)는 3월에 비동기 버전에서 이중 청구가 발생했기 때문에 동기식으로 유지함"과 같은 한 줄의 기록이 반나절의 시간을 아껴줄 수 있습니다.
  • 막다른 길(실패한 시도). 이미 제외하기로 결정한 접근 방식은 잃어버리기 가장 아까운 지식입니다. 새로운 에이전트는 이를 모르고 기꺼이 다시 제안할 것이고, 여러분은 이미 해결된 문제를 다시 논쟁하느라 시간을 낭비하게 될 것입니다.
  • MCP 서버. 구성은 전송되지만 인증은 전송되지 않을 수 있습니다. 해당 서버에 의존하는 세션을 신뢰하기 전에, 각 서버를 다시 연결하고 실제로 응답하는지 확인하세요.
  • 훅, 슬래시 명령어, 서브에이전트. 이 항목들은 전송되지만 Claude Code의 시맨틱에 맞춰 작성되었습니다. 무해한 작업을 대상으로 각각 한 번씩 실행해 보세요.

한 시간 정도 투자하세요. 이 한 시간이 마이그레이션을 성공적으로 느끼게 하느냐, 아니면 2주 동안 다운그레이드된 것처럼 느끼게 하느냐의 차이를 만듭니다.

더 나은 방법: 도구에 종속되지 않는 단일 메모리 레이어

이제 불편한 진실을 마주할 시간입니다. 여러분은 조만간 이 작업을 또 하게 될 것입니다. Codex의 임포터가 존재하는 이유는 사람들이 끊임없이 에이전트를 갈아타기 때문이며, 이 업계의 변화 속도는 줄어들지 않고 있습니다. 프로젝트 지식이 현재 사용 중인 에이전트 내부에만 머물러 있다면, 도구를 바꿀 때마다 수동으로 재구축해야 하는 비용이 발생하고, 해당 도구의 내보내기 범위를 벗어난 모든 데이터를 잃게 됩니다.

Codex Memories 기능은 유용하며 활성화할 가치가 있습니다. 하지만 그 형태를 명확히 이해해야 합니다. 이는 단일 기기에서 작동하는 단일 도구이며, 옵트인 방식이고, 프로젝트별이 아닌 글로벌 설정이며, 사용자가 직접 작성한 것이 아니라 생성된 상태입니다. Claude Code, Cursor 또는 팀원이 이를 읽을 수 없습니다.

대안은 두 도구 외부에서 지식을 유지하는 것입니다. MemoryLake는 에이전트가 MCP 또는 API를 통해 연결할 수 있는 메모리 레이어입니다. 즉, 30일이라는 제한 때문에 보관할 데이터를 잃어버릴 염려가 없으며, Claude Code와 Codex를 병행하여 실행하더라도 두 개의 컨텍스트 세트를 따로 관리할 필요가 없습니다.

1단계: API 키 생성하기

키를 생성하고 약 30초 만에 첫 번째 요청을 완료하세요.

MemoryLake API 키 생성하기
MemoryLake API 키 생성하기

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

아키텍처 노트, 위의 2단계에서 작성한 결정 로그, API 계약서, 런북(runbook), 사람들이 계속해서 다시 설명해야 하는 다이어그램 등 영구적으로 보관해야 할 자료를 입력하세요. 문서, 이미지 및 기타 파일 모두 업로드할 수 있습니다.

MemoryLake에 첫 번째 메모리 업로드하기
MemoryLake에 첫 번째 메모리 업로드하기

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

Codex, Claude, OpenClaw 및 기타 에이전트에 MCP 또는 API를 통해 액세스 권한을 부여하세요. 그러면 두 에이전트 모두 동일한 메모리에서 읽어오게 되며, AGENTS.md는 끊임없이 늘어나는 지식 저장소 역할 대신 본연의 역할인 '규칙 정의'에만 집중할 수 있게 됩니다.

MCP를 통해 AI 및 에이전트 연결하기
MCP를 통해 AI 및 에이전트 연결하기

실제 적용 시 변화하는 점

가장 즉각적인 효과는 AGENTS.md 파일의 크기가 더 이상 늘어나지 않는다는 것입니다. 대부분의 파일이 비대해지는 이유는 지침("커밋하기 전에 항상 make lint를 실행할 것")과 지식("웹훅 서명 확인은 verify.ts에 있으며 레거시 경로는 여전히 두 고객을 위해 활성화되어 있음")이라는 두 가지 역할을 동시에 수행하기 때문입니다. 지침은 파일에 있어야 합니다. 반면 지식은 매주 늘어나고 아무도 900줄짜리 프롬프트 서문을 수동으로 관리하고 싶어 하지 않으므로, 쿼리할 수 있는 레이어에 있어야 합니다.

두 번째 효과는 다음 도구 변경 시 나타납니다. 지식이 이미 두 에이전트 외부에 존재한다면, 마이그레이션은 과거 데이터를 발굴하는 고고학 프로젝트가 아니라 단순한 설정 작업이 됩니다. 새 에이전트가 동일한 메모리를 가리키도록 설정하기만 하면 됩니다.

또한 많은 사람들이 의도적으로 두 에이전트를 모두 실행하는 경우, 하나의 공유 메모리를 사용하면 동기화 문제가 완전히 해결됩니다. 그렇지 않으면 동일한 사실에 대해 두 가지 버전을 유지 관리해야 하며, 가장 중요한 순간에 두 버전이 서로 다르다는 것을 발견하게 됩니다. 이러한 현상은 여러 에이전트가 작업을 공유할 때 공유 메모리가 없는 경우 항상 발생합니다.

두 에이전트 동시 사용을 위한 모범 사례

규칙과 지식을 의도적으로 분리하기

무엇이든 복사하기 전에 한 가지 질문을 던지며 CLAUDE.md를 읽어보세요. '이것이 에이전트가 항상 준수해야 하는 지침인가, 아니면 시스템에 대한 사실인가?' 지침은 AGENTS.md로 보냅니다. 사실은 메모리 레이어로 보냅니다. 이 한 가지 분리 작업이 그 어떤 프롬프트 튜닝보다 결과물의 품질을 높이는 데 더 큰 기여를 합니다.

Codex Memories를 활성화하되, 이에만 의존하지는 마세요

작업 스타일이나 반복적인 설정을 유지하는 데는 정말 유용합니다. 다만 문서에 명시된 동작 방식을 기억하세요. 채팅이 끝난 후 반영이 지연될 수 있고, 짧은 세션은 건너뛰며, 단일 기기에 로컬로 저장됩니다. 이를 영구적인 기록이 아닌 편의 기능으로 취급하세요.

삭제하기 전에 검증하기

실제 디버깅 세션을 포함하여 Codex에서 일주일 동안 완전히 사용해 볼 때까지는 Claude Code 구성을 그대로 유지하세요. 마이그레이션의 빈틈은 처음 한 시간 동안에는 절대 나타나지 않으며, 당연히 전송되었을 것이라 믿었던 무언가가 처음으로 필요해지는 순간에 나타납니다. Codex를 사용하기 시작한 후 왜 Codex가 프로젝트 컨텍스트를 잊어버리는지 미리 알아두고, 다시 전환하기로 결정할 경우를 대비해 Claude Code로 되돌아가는 역경로가 어떻게 작동하는지 파악해 두는 것이 좋습니다.

결론

Claude Code에서 Codex로의 마이그레이션은 현재 가장 잘 지원되는 마이그레이션 중 하나입니다. /import를 통해 지침, 구성, MCP 서버, 스킬, 훅, 슬래시 명령어, 서브에이전트 및 한 달간의 채팅을 이동할 수 있으며, CLAUDE.mdAGENTS.md로 바뀌는 것은 재작성이 아닌 이름 바꾸기에 불과합니다. 절약한 노력을 임포터가 건드릴 수 없는 부분, 즉 과거의 결정 사항, 실패한 시도, 그리고 그 이면의 이유를 정리하는 데 투자하세요.

그리고 이 작업을 단 한 번만 하도록 만드세요. 두 도구 모두 중요한 부분에서는 상태가 저장되지 않으며(stateless), 자체 장벽 내에 메모리를 보관합니다. 그리고 6개월 뒤에는 또 다른 매력적인 에이전트가 등장할 것입니다. 현재 사용 중인 에이전트 외부에 존재하는 메모리 레이어는 다음 전환을 재구축이 아닌 단순한 설정 변경으로 만들어 주며, 지침 파일이 모든 지식을 잊어버리는 무덤이 되는 것을 방지해 줍니다. 매번 다시 설명하는 과정을 완전히 멈추고 싶다면, 그 습관을 해결할 방법이 있습니다.

자주 묻는 질문

Codex가 CLAUDE.md를 읽나요?

아니요. Codex는 Cursor, Jules, Amp, Factory에서도 사용하는 개방형 포맷인 AGENTS.md를 읽습니다. 임포터가 이 파일을 생성하지 않았다면 파일 이름을 변경하세요. 내용은 변경 없이 그대로 유지되며 파일 이름과 로드 경로만 다릅니다.

Codex `/import`는 Claude Code에서 정확히 무엇을 가져오나요?

AGENTS.md 파일, settings.jsonconfig.toml, 지침 파일 및 MCP 서버 구성, 스킬 및 플러그인, 프로젝트 폴더 및 메모리, 훅 및 슬래시 명령어, 서브에이전트, 그리고 지난 30일 동안의 채팅 세션(최대 50개)을 가져옵니다. Claude Code가 아닌 일반 Claude 채팅 데이터는 임포트할 수 없으며, 일부 플러그인은 이후에 재인증이 필요할 수 있습니다.

왜 지금 바로 /import를 실행할 수 없나요?

문서에 명시된 제한 사항에 따르면, /import는 작업이 실행 중이거나, 원격 세션 중이거나, 로컬 앱 서버 데몬에 연결된 상태에서는 사용할 수 없습니다. 작업을 완료하거나 취소한 후 로컬 세션에서 실행하세요.

Codex는 세션 간에 메모리를 유지하나요?

네, 옵트인 기능으로 제공됩니다. 메모리는 ~/.codex/memories/에 로컬 파일로 저장되어 세션 간에 유지되지만, 기본적으로는 비활성화되어 있습니다(config.toml 파일의 [features] 아래에 memories = true를 설정하거나 Settings → Personalization에서 활성화). 이는 프로젝트별이 아닌 글로벌 설정이며, 채팅이 끝난 후 즉시 업데이트되지 않을 수 있고, 수명이 짧은 세션은 건너뛰며, 보안 비밀번호나 키를 저장해서는 안 됩니다.

Claude Code와 Codex를 둘 다 계속 사용해야 할까요?

많은 사람들이 그렇게 하고 있습니다. 두 도구는 서로 다른 강점을 가지고 있으며, Codex의 오케스트레이션 모델(로컬, 클라우드 작업, SDK를 통한 CI, IDE, Slack)은 세션 중심 도구가 다루지 못하는 영역을 커버합니다. 둘 다 사용할 때 발생하는 비용은 컨텍스트의 불일치(context drift)입니다. MCP 또는 API를 통해 두 도구가 모두 읽을 수 있는 단일 메모리 레이어를 유지하면 이러한 비용을 없앨 수 있습니다.

다음 마이그레이션에서 컨텍스트 손실을 방지하려면 어떻게 해야 하나요?

프로젝트 지식을 특정 도구 전용 파일에서 벗어나 어떤 에이전트도 소유하지 않는 독립된 레이어로 이동하세요. API 키를 생성하고, 계속해서 다시 설명해야 하는 자료를 업로드한 다음, MCP를 통해 에이전트를 연결하세요. 그렇게 하면 도구를 변경할 때 3달 동안의 결정을 재구성할 필요 없이 단순히 설정을 다시 가리키기만 하면 됩니다. 이와 동일한 원리로 인해 애초에 Claude Code가 세션 간에 프로젝트 컨텍스트를 잊어버리는 현상이 발생합니다.