
【Codex】폴더 이동 시 세션 히스토리가 사라지는 문제를 경로 일괄 치환으로 해결하기
요약
프로젝트 폴더 이동 시 Codex의 세션 히스토리가 유실되는 문제를 해결하는 방법을 다룹니다. 세션 파일 내에 하드코딩된 절대 경로(cwd)를 sed 명령어를 통해 일괄 치환하여 기존 대화 컨텍스트를 복구하는 가이드를 제공합니다.
핵심 포인트
- 폴더 이동 시 세션 히스토리가 사라지는 원인은 내부 JSONL 파일의 절대 경로(cwd) 불일치 때문임
- 데이터 삭제가 아닌 경로 참조 오류이므로 파일 내부의 경로를 수정하면 복구 가능
- sed 명령어를 사용하여 여러 세션 파일의 경로를 한 번에 일괄 치환할 수 있음
- 작업 전 반드시 세션 디렉토리를 백업하여 데이터 유실에 대비해야 함
개발 환경 정리 등으로 프로젝트 폴더를 다른 장소(예: ~/Documents에서 ~/dev 등)로 이동시킨 직후, Codex의 세션 히스토리(Session History)가 사라져 버린(참조할 수 없게 된) 경험이 없으신가요?
(필자는 부끄럽게도 이전까지 Mac에서 Documents가 특별한 폴더라는 사실을 알지 못해, Documents 바로 아래에서 개발을 진행해 왔습니다.)
이 기사에서는 에디터의 세션을 버리지 않고, CLI 커맨드(sed)를 사용하여 내부 경로를 안전하게 다시 쓰고, 원래의 채팅 히스토리나 컨텍스트(Context)를 완전히 복원하는 방법을 해설합니다.
결론부터 말씀드리면, 히스토리 데이터 자체가 삭제된 것은 아닙니다.
Codex는 세션의 메타데이터(Metadata)나 대화의 이벤트 로그(Event Log)를 내부의 .jsonl 파일에 저장하고 있습니다. 이 파일 안에는 **세션 시작 시의 절대 경로(cwd: Current Working Directory)가 하드코딩(Hard-coded)**되어 있습니다.
아래는 2026년 6월 2일에 새로 추가된 세션이 저장되어 있는 파일의 예시입니다. cwd 부분에 절대 경로가 직접 작성되어 있는 것을 알 수 있습니다.
$ pwd
/Users/yoshikoei98/.codex/sessions/2026/06/02
$ ls
...
$ cat rollout-2026-06-02T09-51-20-019e85d0-47fa-70b0-8784-3cec96c840ea.jsonl
{"timestamp":"2026-06-02T00:51:20.299Z","type":"session_meta","payload":{"id":"019e85d0-47fa-70b0-8784-3cec96c840ea","forked_from_id":"019e66ce-5cb9-7241-a8b3-7101d30baf27","timestamp":"2026-06-02T00:51:20.200Z","cwd":"/Users/yoshikoei98/dev/.../User-Action-Sequence-Modeling","originator":"codex-tui","cli_version":"0.135.0","source":"cli","thread_source":"user","model_provider":"openai","base_instructions":{...},"git":{"commit_hash":"...","branch":"...","repository_url":"https://github.com/..."}}}
그렇기 때문에 실제 폴더를 이동시키면, 툴 측에서 "이 경로에 연결된 프로젝트를 찾을 수 없다"라고 판단하여 기존 세션에 접근할 수 없게 됩니다.
에디터 상에서 하나하나 경로를 다시 설정하는 것은 비현실적입니다. 터미널에서 sed 커맨드를 사용하여 세션 파일 내의 오래된 경로를 새로운 경로로 일괄 치환하는 것이 가장 빠르고 확실합니다.
이하에 복구를 위한 3단계(3 steps)를 해설합니다.
치환 실수를 대비하여, 우선 세션 데이터가 저장되어 있는 디렉토리(Directory)를 통째로 백업해 둡니다.
실수를 하지 않을 분들은 이 단계는 건너뛰어도 무방합니다.
$ cp -r ~/.codex/sessions ~/.codex/sessions_backup
모든 폴더를 하나의 상위 폴더로 이동한 경우에는 스킵해도 괜찮습니다. 하지만 "A 폴더는 ~/dev로, B 폴더는 ~/docs로"와 같이 목적지가 나뉜 경우에는, 오작동(誤爆)을 방지하기 위해 개별적으로 경로를 치환해야 합니다.
다음 커맨드로 특정 프로젝트의 경로만을 타겟팅하여 치환합니다. 커맨드의 의미나 옵션에 대해서는 이번에는 생략하겠습니다.
# 예: shukatsu 폴더를 ~/docs로 이동했을 경우
$ find ~/.codex/sessions -type f -name "*.jsonl" -exec sed -i '' 's|/Users/username/Documents/shukatsu|/Users/username/docs/shukatsu|g' {} +
개별 대응이 끝난 것이나, 혹은 모든 프로젝트를 동일한 계층(예: ~/dev/...
)로 이동한 경우에는, 아래 명령어를 사용하여 남은 오래된 경로들을 한꺼번에 새로운 경로로 다시 작성합니다.
# 남아 있는 Documents/ 하위의 모든 경로를 dev/로 변경
find ~/.codex/sessions -type f -name "*.jsonl" -exec sed -i '' 's|/Users/username/Documents/|/Users/username/dev/|g' {} +
이렇게 하고 다시 Codex를 실행하면, 아래와 같은 표시가 나타납니다.
> You are in /Users/yoshikoei98/dev/coding/atcoder
Do you trust the contents of this directory? Working with untrusted contents comes with higher risk of prompt injection. Trusting the directory allows project-local config, hooks, and exec policies to load.
› 1. Yes, continue
...
이것은 평소와 같이 1을 선택하여, 이 디렉토리 위에서 codex가 작업하는 것을 허용하면 됩니다.
Choose working directory to resume this session
Session = latest cwd recorded in the resumed session
Current = your current working directory
...
이것은 세션을 사용하는 디렉토리가 바뀌었기 때문에,
- 과거의 디렉토리를 사용할 것인가?
- 현재의 디렉토리를 사용할 것인가?
라고 묻는 것입니다. 의도적으로 폴더를 변경했으므로, 이 경우에는 2를 선택합니다.
이를 통해 이동한 새로운 디렉토리를 참조하면서도, 과거의 대화 이력이나 컨텍스트 (Context)가 완전히 복원됩니다.
디렉토리 구조는 깔끔하게 유지하고 싶지만, AI의 컨텍스트 (세션)는 절대로 잃고 싶지 않다는 상황에서 매우 유용한 접근 방식이므로, 꼭 활용해 보시기 바랍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기