VS CodeのCodex履歴をWorkspaceごとに分離する
TL;DR
Workspaceごとにセッション履歴(というかCodexの大体の設定)を分けました。
-
やったこと
- CodexをWSLで実行
-
chatgpt.cliExecutableでラッパーを挟む - ラッパー内で
CODEX_HOME="$PWD/.codex"を設定
-
結果
project-a/.codex project-b/.codexという感じで、WorkspaceごとにCodexの設定を置くようにしました。
検証環境
Windows 11
VS Code 1.140.0
OpenAI Codex extension 26.928.31416
WSL2 Ubuntu
Codex CLI 0.159.2
やりたいこと
Codexの履歴をWorkspace単位にしたい
VS CodeのCodex拡張、全セッションが ~/.codex に保存されてるので何のWorkspaceで作業してても全部のセッションが表示されてウザい。とても。
Codexの状態保存先(設定やセッション履歴など)は CODEX_HOME で指定できます。VS Code拡張では、これが ~/.codex を固定で指名してて、融通利かない。
じゃあ code を立ち上げる時に CODEX_HOME を上書きしてあげればいいのですが、Workspaceごとに専用のショートカットを作りたくない1。
だからCodex起動時、現在のWorkspace直下に .codex を作ります。これを CODEX_HOME にします。
手順
1. VS CodeでCodexをWSL実行にします
{
"chatgpt.runCodexInWindowsSubsystemForLinux": true
}
2. WSLにラッパーを作ります
mkdir -p ~/bin
cat > ~/bin/codex-workspace <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
export CODEX_HOME="$PWD/.codex"
mkdir -p "$CODEX_HOME"
CODEX_BIN="$(
find /mnt/c/Users/<Windowsユーザー名>/.vscode/extensions \
-maxdepth 4 \
-path '*/openai.chatgpt-*-win32-x64/bin/linux-x86_64/codex' \
-type f \
-printf '%T@ %p\n' |
sort -nr |
head -n1 |
cut -d' ' -f2-
)"
if [[ -z "${CODEX_BIN:-}" || ! -x "$CODEX_BIN" ]]; then
echo "Bundled Codex binary not found" >&2
exit 127
fi
exec "$CODEX_BIN" "$@"
EOF
chmod +x ~/bin/codex-workspace
3. VS Code側でラッパーを指定します
{
"chatgpt.runCodexInWindowsSubsystemForLinux": true,
"chatgpt.cliExecutable": "/home/<WSLユーザー名>/bin/codex-workspace"
}
4. VS Codeを再起動します
- サインインを要求されるのでやります
- Workspaceに
.codexが作成されるので、必要に応じて.gitignoreに追記してあげてください
結果
VSCodeでWorkspace Aを開くと、
Workspace-A/.codex/
Workspace Bでは、
Workspace-B/.codex/
が使われます。
肝
export CODEX_HOME="$PWD/.codex"
chatgpt.cliExecutable を使ってCodex本体の手前にラッパーを挟むことで、Workspaceごとに CODEX_HOME を切り替えています。
注意
-
単一ルートWorkspaceでの話です
-
chatgpt.cliExecutableはCodex実行ファイルを差し替える設定なので、Codex拡張側の実装変更によって動かなくなる可能性があります -
現時点(2026/10/1)では、セッション履歴を自動分離できています
-
別のVS Codeが既に起動している場合、新たに立ち上げたVS Codeは既存プロセスの環境変数を引き継ぎます。複数Workspaceを同時起動する用途ではショートカットは安定しません。ただ、ショートカットで問題ない場合は、リンク先を
C:\Windows\System32\cmd.exe /d /c "set "CODEX_HOME=C:\work\project-a\.codex" && code "C:\work\project-a""とすればOKです。 ↩