まとめ
- piは
~/.pi/agent(PI_CODING_AGENT_DIRで変更可)配下にauth.json、settings.json、models.json、sessions等を置く auth.jsonはprovider 1つにつき1credentialなので、同じproviderの複数アカウントは持てない(#1391)- 別の
PI_CODING_AGENT_DIRを作ってauth.json以外をデフォルト側へsymlinkすれば、認証だけ分けてsessionsや設定は共有できる PI_PROFILEはpi標準の環境変数ではないが、wrapperでPI_PROFILE→PI_CODING_AGENT_DIRへ変換すればCodex CLIと同じ感覚で使える- シェル関数だと
sh -cやスクリプトから呼んだときに効かないので、PATH上のwrapperにする
auth.json以外を共有する
cd ~/.pi
mkdir -p agent/prompts agent/themes agent/tools
mkdir -p agent-alternate && chmod 700 agent-alternate
for f in bin extensions skills prompts themes tools sessions \
settings.json models.json models-store.json keybindings.json mcp.json trust.json; do
ln -s "../agent/$f" "agent-alternate/$f"
done
prompts・themes・toolsのようにまだ無いディレクトリは先に作っておく。mcp.jsonなどのファイルはリンク先が無くても、piが書き込むときに作られる。
PI_PROFILEで切り替える
binary版のpiは~/.local/share/pi/piが本体で、~/.local/bin/piはそこへのsymlinkになっている。~/bin/piにwrapperを置く。
#!/bin/sh
# PI_PROFILE=<name> pi [...]
set -eu
real="$HOME/.local/share/pi/pi"
case "${PI_PROFILE:-default}" in
default) dir="$HOME/.pi/agent" ;;
alternate) dir="$HOME/.pi/agent-alternate" ;;
*)
echo "unknown PI_PROFILE: ${PI_PROFILE}" >&2
echo "expected: default or alternate" >&2
exit 2 ;;
esac
export PI_CODING_AGENT_DIR="$dir"
exec "$real" "$@"
~/.local/binが~/binよりPATH前方にあっても必ずwrapperを通るように、~/.local/bin/piをwrapperへのsymlinkに張り替える。
chmod +x ~/bin/pi
ln -sfn ~/bin/pi ~/.local/bin/pi
pi
PI_PROFILE=alternate pi # 起動して /login
PI_PROFILE=alternate pi auth check --provider openai
PI_PROFILE=alternate bash -c 'pi -p "hello"' # 非対話shellからも効く
注意点
auth.jsonは共有しない。OAuthのrefresh tokenはrefreshのたびに更新されるので、同じアカウントを複数のdirに置くと片方が失効する- piは
settings.json等をrenameせずにその場で書き込むので、symlinkは壊れない - sessionsは混ざる。そのかわり、どのprofileからでも
-cで同じsessionを再開できる - MCPのOAuth credential(
mcp-auth.json)はprofile別のまま。共有したければsymlinkする - binary版の
pi updateはreleasesへの案内を出すだけで~/.local/bin/piを作り直さないので、wrapperは残る - oh-my-zshのpnpm pluginは
alias pi='pnpm init'を定義する。~/.zshrcでunalias piしておく
ref
pi --helppi auth --help- Codex CLIで複数アカウントを切り替える