まとめ
- Codex CLIは
CODEX_HOME配下にauth.json、config.toml、sessions、history、SQLite state等を置く - 認証だけ分けたい場合、別の
CODEX_HOMEを作ってauth.json以外をデフォルト側へsymlinkする CODEX_PROFILEはCodex CLI標準の環境変数ではないが、シェル関数でCODEX_PROFILE→CODEX_HOMEへ変換すればAWS profileっぽく使えるcodex_appsはChatGPT auth側に寄るため、auth.jsonを切り替えると利用アカウントも切り替わる(.credentials.jsonの共有では切り替えられない)
alternate用のCODEX_HOMEを作る
mkdir -p "$HOME/.codex-alternate"
CODEX_HOME="$HOME/.codex-alternate" codex login
CODEX_HOME="$HOME/.codex-alternate" codex login status
auth.json以外を共有する
auth.jsonだけを残して、それ以外は~/.codexへのsymlinkにする。作業前にCodex CLIは閉じておく。
backup="$HOME/.codex-alternate-local-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$backup"
find "$HOME/.codex-alternate" \
-mindepth 1 \
-maxdepth 1 \
! -name auth.json \
-exec mv {} "$backup"/ \;
find "$HOME/.codex" \
-mindepth 1 \
-maxdepth 1 \
! -name auth.json \
! -name 'auth.*' \
! -name .credentials.json \
-exec sh -c '
for src do
ln -s "$src" "$HOME/.codex-alternate/$(basename "$src")"
done
' sh {} +
確認してauth.jsonだけが出ればよい。
find ~/.codex-alternate -mindepth 1 -maxdepth 1 ! -type l -print
CODEX_PROFILEで切り替える
~/.zshrcなどに追加する:
codex() {
local profile="${CODEX_PROFILE:-default}"
local codex_home
case "$profile" in
default|primary)
codex_home="$HOME/.codex"
;;
alternate|secondary)
codex_home="$HOME/.codex-alternate"
;;
*)
echo "unknown CODEX_PROFILE: $profile" >&2
echo "expected: default or alternate" >&2
return 2
;;
esac
CODEX_HOME="$codex_home" command codex "$@"
}
codex
CODEX_PROFILE=alternate codex
CODEX_PROFILE=alternate codex login status
注意点
auth.jsonは共有しない- sessions/history/state/logsは混ざる。完全に分けたい場合はsymlinkせず
CODEX_HOMEを完全分離する - 通常MCPのOAuth credential(
.credentials.json)を共有したい場合はsymlinkできるが、どのアカウントの外部サービス認証を使うかは意識する
ref
codex --helpcodex login --helpcodex doctor --summary