Codex マルチプロファイル (Windows) は何をしますか?
Windows上の Codex Desktop で、複数のChatGPTログインを使いながらも、1つの共有ワークスペースを維持したい場合の非公式ヘルパーです。
デフォルト: ShareLive + AuthSwap
| 要素 | 配置場所 |
|---|---|
| セッション、スキル、MCP、メモリ、プロジェクト | 常に %USERPROFILE%\.codex |
| アカウント | profiles\<name>\auth.json、起動時に ~\..codex\auth.json とスワップ |
| クローズ時 | ウォッチャーがセカンダリ認証情報を保存し、メインの auth.json を復元 |
| Electron UI | --user-data-dir=profiles\<name> (プロファイルルート、electron\ フォルダの入れ子ではない) |
メインのストア版 Codex とプロファイル版を同時に開かないでください。
AuthSwap を採用した理由(2つ目の CODEX_HOME ではない理由)
Desktop アプリサーバーは CODEX_HOME を無視し、代わりに ~\..codex\auth.json を読み取ることがあります。そのため、2つ目のホームを設定してもメインアカウントが表示されてしまいます。AuthSwap は、アプリが実際に読み込むパスにセカンダリトークンを配置します。
起動ルール(検証済み)
WindowsApps内の実行可能ファイルは実行しないでください(アクセス拒否)。最初にChatGPT.exeをクローンしてください。- エントリポイントは
ChatGPT.exeです。Codex.exeは終了コード1で終了します。 Get-AppxPackage.InstallLocationが空の場合があります — 既存のローカルクローンを優先してください。- 両方の
CODEX_ELECTRON_USER_DATA_PATHと--user-data-dirをプロファイルルートに設定してください。 Start-Processが$env:CODEX_HOMEを継承することに依存しないでください。setとstartを含む.cmdファイルを記述してください。- PowerShell 5.1 の
Set-Content -Encoding UTF8は BOM を書き込みます。これによりconfig.tomlが無効になる可能性があります。代わりに[IO.File]::WriteAllText(..., UTF8Encoding $false)を使用してください。 - 永続的なユーザーレベルの
CODEX_HOMEを設定しないでください。 auth.jsonをマシン間やgitにコピーしないでください。
パス
| 項目 | パス |
|---|---|
| インストールルート | %LOCALAPPDATA%\CodexParallelDesktop |
| 共有モジュール | CodexMultiProfile.psm1 |
| プロファイル起動 | Launch-CodexProfile.ps1 |
| メイン復元 | Launch-CodexMain.ps1 |
| マネージャー | CodexProfile.ps1(new, list, stop, shortcut, launch) |
| プロファイル | ...\profiles\<name>\ |
| クローン | ...\versions\<ver>\app\ChatGPT.exe |
| 共有ホーム | %USERPROFILE%\.codex |
コマンド
$root = "$env:LOCALAPPDATA\CodexParallelDesktop"
# 推奨起動 (AuthSwap)
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\Launch-CodexProfile.ps1" -Name codex1
# メインのストア版 Codex を復元
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\Launch-CodexMain.ps1"
# マネージャー
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\CodexProfile.ps1" -Action new -Name codex2
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\CodexProfile.ps1" -Action list
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\CodexProfile.ps1" -Action status
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\CodexProfile.ps1" -Action verify
powershell -NoProfile -ExecutionPolicy Bypass -File "$root\CodexProfile.ps1" -Action stop -Name codex1
Agent ワークフロー
- 「アカウントを切り替える / データを維持する」 →
Launch-CodexProfile.ps1で AuthSwap。 - 「別のプロファイルを作成する」 →
-Action newで作成後、Launch-CodexProfile.ps1で起動。 - UI に間違ったアカウントが表示される → 2つの
auth.jsonファイル内のメールアドレスを比較。起動用のコマンドラッパーを修正。プロファイル認証がまだ有効な場合、ユーザーに再ログインを促さない。 - アクセス拒否 / パスが空 / 終了コード1 →
ChatGPT.exeをクローン。WindowsAppsは使わず、空のInstallLocationも避ける。 - スクリプト編集後、
CodexMultiProfile.psm1と ランチャーを%LOCALAPPDATA%\CodexParallelDesktopおよびこのスキルのscripts\にコピー。ランチャーは$PSScriptRootからモジュールをインポート。 - 「インストールされているか / どのアカウントがアクティブか?」 →
-Action status(メールアドレスはマスクされる)その後-Action verify。
毒されたプロファイル認証
プロファイルが実行中にユーザーが Codex メイン を開くと、復元処理によって メイン のトークンが profiles\<name>\auth.json に書き込まれる可能性があります。
スクリプトには既に以下の防御策が組み込まれています。
- ウォッチャー /
Launch-CodexMainは、アクティブなメールアドレスがauth.json.__main__と異なる場合にのみプロファイル認証を保存。 auth.json.secondary.bakを保持。- プロファイル認証がないか、メインと等しい場合 → ブートストラップログイン(アクティブな認証をクリアし、強制的にセカンダリサインイン)。
禁止事項
auth.jsonのコピーやコミット。- メインとプロファイルの ShareLive を同時に開く。
Codex.exeまたはWindowsAppsパスからの起動。- 明示的な cmd/
CODEX_HOMEなしでのStart-Process。 - Windows PowerShell 5.1 で
Set-Content -Encoding UTF8を使ってconfig.tomlを書き込む。