> ## Content Index
> Fetch the complete content index at: https://sanghunkang.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# How to Make Orca Codex Threads Appear in the ChatGPT App
- URL: https://sanghunkang.com/orca-codex-threads-chatgpt-en/
- Published: 2026-08-19T18:21:39.000Z
- Updated: 2026-10-24T17:02:25.000Z
- Author: Sanghun Kang
- Tags: dev, #en, #multi, Codex, Orca

[Orca](https://github.com/stablyai/orca?ref=sanghunkang.com) was getting a lot of attention, so I gave it a try. It turned out to be genuinely useful for managing worktrees and terminal sessions in one place. Then I hit a deal-breaker: Codex threads created in Orca did not appear in the ChatGPT app. The reverse worked fine. Threads created in ChatGPT were visible when I launched Codex from Orca. For someone who wants the same setup everywhere, that asymmetry was a serious problem.

The cause was simple. Orca was using its own `CODEX_HOME`. Pointing it to the same directory as the ChatGPT app fixed the issue.

The solution is to set `CODEX_HOME` to `~/.codex` for the Codex process that Orca launches.

```
env CODEX_HOME="$HOME/.codex" codex
```

There is one catch: putting this in `.zshrc` does not work.

## The Problem

A Codex thread is represented by roughly two kinds of data:

- `sessions/.../rollout-*.jsonl`: the actual conversation and execution events
- `state_5.sqlite`: an index containing the thread ID, title, working directory, timestamps, and JSONL path

The ChatGPT app and a regular Codex CLI session use this directory by default:

```
~/.codex/
├── sessions/
└── state_5.sqlite
```

At the time, Orca forced Codex to use a separate managed directory:

```
~/Library/Application Support/orca/codex-runtime-home/home/
├── sessions/
└── state_5.sqlite
```

That split the thread storage into two independent paths:

```
Thread started in the ChatGPT app
└── ~/.codex

Thread started in Orca
└── ~/Library/Application Support/orca/codex-runtime-home/home
```

The ChatGPT app reads `~/.codex`, so it could not display threads that existed only in Orca's managed directory. Orca, however, could import existing sessions from `~/.codex`. That one-way import explained the odd behavior: ChatGPT threads were visible in Orca, but Orca threads were missing from ChatGPT.

## Root Cause

Reading Orca's source revealed the following launch sequence:

1. Orca prepares its own managed runtime home.
2. It starts Codex with `CODEX_HOME` set to that directory.
3. It reapplies the managed value after the shell starts.

That is why adding the following line to `.zshrc` is not enough:

```
export CODEX_HOME="$HOME/.codex"
```

The shell may load the value, but Orca overwrites it when launching Codex.

Symlinking only the `sessions` directory is not a complete fix either. The conversation body lives in JSONL files, but the thread list and metadata also live in `state_5.sqlite`. If the JSONL files and SQLite index point to different stores, a thread may exist on disk without appearing in the app.

The important part is to make Codex use the same `CODEX_HOME` as the ChatGPT app **from the moment the process starts**.

## The Fix

Open the following setting in Orca:

```
Settings > Agents > Codex > Command
```

Replace the default `codex` command with:

```
env CODEX_HOME="$HOME/.codex" codex
```

Do not add this command to `.zshrc`. It belongs in Orca's **Codex Command** field as a command override.

New Codex threads started from Orca will now be written to:

```
~/.codex/sessions/
~/.codex/state_5.sqlite
```

Because the ChatGPT app reads the same store, those threads appear in its sidebar as well.

### Existing Orca Threads Are Not Migrated Automatically

This setting changes where future threads are stored. Threads created before the change remain in Orca's managed store:

```
~/Library/Application Support/orca/codex-runtime-home/home/sessions/
~/Library/Application Support/orca/codex-runtime-home/home/state_5.sqlite
```

To make an existing Orca thread visible in ChatGPT, copy or hard-link its JSONL file into `~/.codex/sessions/`, then migrate the matching `threads` row into `~/.codex/state_5.sqlite`. Back up both databases first and move only the required row. Replacing the entire database can wipe out threads that already exist in ChatGPT.

---

## Detours and Dead Ends

**Why not just set CODEX\_HOME in .zshrc?**

My first attempt was:

```
export CODEX_HOME="$HOME/.codex"
```

It failed because Orca sets `CODEX_HOME` to its managed runtime home when Codex launches and reapplies that value after shell startup. Changing only the shell configuration is therefore not reliable.

**What does “Codex home to import from” do?**

This option does not change the home directory used by the Codex process. It performs a one-way import of existing sessions from `~/.codex/sessions` into Orca's managed home.

That behavior explains the asymmetry: threads created in ChatGPT were visible in Orca, while threads created in Orca were invisible in ChatGPT.