Orca에서 만든 Codex thread를 ChatGPT 앱에 표시하는 방법
Orca라는 터미널 앱이 핫하길래 써봤다. 직접 써보니 worktree와 터미널을 함께 관리하기 편해 꽤 괜찮았다. 그런데 Orca에서 만든 Codex thread가 ChatGPT 앱에는 나타나지 않았다. 반대로 ChatGPT 앱에서 만든 thread는 Orca에서 실행하면 보였다. 모든 환경에서 동일한 설정을 추구하는 나로서는 치명적인 문제였다.
원인은 Orca가 자체적으로 별도의 CODEX_HOME을 사용하고 있었기 때문이다. 이 값을 ChatGPT 앱과 같은 경로로 맞추니 문제가 해결됐다.
해결 방법은 Orca가 실행하는 Codex 프로세스의 CODEX_HOME을 ~/.codex로 지정하는 것이다.
env CODEX_HOME="$HOME/.codex" codex단, 이걸 .zshrc에 넣으면 또 안 된다.
문제와 현황
Codex thread는 대략 두 종류의 데이터로 구성된다.
sessions/.../rollout-*.jsonl: 실제 대화와 실행 이벤트state_5.sqlite: thread ID, 제목, 작업 디렉터리, 생성 시각, JSONL 경로 등을 담은 인덱스
ChatGPT 앱과 일반 Codex CLI는 기본적으로 다음 저장소를 사용한다.
~/.codex/
├── sessions/
└── state_5.sqlite반면 당시 Orca는 자체 관리 디렉터리를 CODEX_HOME으로 강제했다.
~/Library/Application Support/orca/codex-runtime-home/home/
├── sessions/
└── state_5.sqlite그 결과 저장 흐름이 둘로 갈라졌다.
ChatGPT 앱에서 시작한 thread
└── ~/.codex
Orca에서 시작한 thread
└── ~/Library/Application Support/orca/codex-runtime-home/homeChatGPT 앱은 ~/.codex를 읽기 때문에 Orca 전용 저장소에만 기록된 thread를 표시하지 못했다. 반면 Orca에는 ~/.codex의 기존 세션을 가져오는 기능이 있어 ChatGPT 앱에서 만든 thread가 Orca 쪽에서는 보였다. 이 비대칭 때문에 한쪽 방향만 정상적으로 동작한 것이다.
원인
Orca 소스를 확인해 보니 Codex 실행 과정에서 다음 일이 일어났다.
- Orca가 자체 runtime home을 준비한다.
- Codex 프로세스를 실행할 때
CODEX_HOME을 해당 runtime home으로 설정한다. - 셸 시작 이후에도 Orca가 관리하는 값을 다시 적용한다.
따라서 .zshrc에 아래 설정을 넣는 것만으로는 해결되지 않는다.
export CODEX_HOME="$HOME/.codex"셸이 이 값을 읽더라도 Orca가 Codex를 시작하면서 다시 덮어쓰기 때문이다.
또한 sessions 디렉터리만 심볼릭 링크로 연결하는 것도 완전한 해결책이 아니다. 대화 본문은 JSONL에 있지만 thread 목록과 메타데이터는 state_5.sqlite에도 기록된다. JSONL과 SQLite가 서로 다른 저장소를 바라보면 thread가 파일로 존재해도 앱 목록에는 나타나지 않을 수 있다.
핵심은 Codex 프로세스가 시작되는 시점부터 ChatGPT 앱과 동일한 CODEX_HOME을 사용하게 하는 것이다.
해결책
Orca에서 다음 설정으로 이동한다.
Settings > Agents > Codex > Command기존 codex 명령을 다음 명령으로 교체한다.
env CODEX_HOME="$HOME/.codex" codex이 명령을 .zshrc에 추가하는 것이 아니다. Orca의 Codex Command 입력란에 설정하는 command override다.
이제 Orca에서 새 Codex thread를 만들면 다음 두 위치에 기록된다.
~/.codex/sessions/
~/.codex/state_5.sqliteChatGPT 앱도 같은 저장소를 읽으므로 Orca에서 만든 새 thread가 앱 사이드바에 표시된다.
기존 Orca thread는 자동으로 옮겨지지 않는다
위 설정은 앞으로 생성되는 thread의 저장 위치를 바꾼다. 설정 전에 Orca에서 만든 thread는 기존 저장소에 그대로 남는다.
~/Library/Application Support/orca/codex-runtime-home/home/sessions/
~/Library/Application Support/orca/codex-runtime-home/home/state_5.sqlite기존 thread까지 ChatGPT 앱에서 보이게 하려면 해당 JSONL을 ~/.codex/sessions/로 복사하거나 하드링크하고, 해당 threads 레코드도 ~/.codex/state_5.sqlite로 이전해야 한다. DB 전체를 덮어쓰면 기존 ChatGPT thread를 잃을 수 있으므로 먼저 백업하고 필요한 레코드만 옮기는 편이 안전하다.
삽질 로그
.zshrc에서 CODEX_HOME을 바꾸면 되지 않을까?
처음에는 다음 설정을 고려했다.
export CODEX_HOME="$HOME/.codex"하지만 Orca가 Codex 실행 시 CODEX_HOME을 자체 runtime home으로 다시 설정하고, 셸 시작 이후에도 관리 값을 재적용했다. 따라서 셸 설정만 수정하는 방식은 안정적인 해결책이 아니었다.
Codex home to import from 설정은 무엇인가?
이 설정은 Orca가 실행할 Codex의 홈을 바꾸는 옵션이 아니었다. ~/.codex/sessions에 있는 기존 기록을 Orca 관리형 홈으로 가져오는 단방향 import 설정이었다.
이 때문에 ChatGPT 앱에서 만든 thread는 Orca에서 보이지만, Orca에서 만든 thread는 ChatGPT 앱에서 보이지 않는 비대칭이 발생했다.