まとめ
- Claude Codeは
CLAUDE_CONFIG_DIRで設定ディレクトリを切り替えられる CLAUDE_PROFILEは標準ではないので、シェル関数でCLAUDE_PROFILE→CLAUDE_CONFIG_DIRに変換する~/.claude.jsonはOAuth sessionなどを含むので共有しないsettings.json、skills、commands、projects、sessionsあたりをsymlinkすると、認証は分けつつ設定・拡張・履歴はだいたい共有できる
CLAUDE_PROFILEを作る
~/.zshrcなどに追加する:
claude() {
local dir
case "${CLAUDE_PROFILE:-default}" in
default|work) dir="$HOME/.claude" ;;
personal) dir="$HOME/.claude-personal" ;;
*)
echo "unknown CLAUDE_PROFILE: ${CLAUDE_PROFILE}" >&2
echo "expected: default, work, or personal" >&2
return 2
;;
esac
CLAUDE_CONFIG_DIR="$dir" command claude "$@"
}
claude
CLAUDE_PROFILE=personal claude
CLAUDE_PROFILE=personal claude auth login
設定とセッションを共有する
~/.claude-personalを作り、ユーザー設定、skillやcommand、セッション履歴を~/.claudeへsymlinkする。
profile="$HOME/.claude-personal"
shared="$HOME/.claude"
mkdir -p "$profile"
for item in \
settings.json \
skills commands \
projects sessions transcripts todos tasks plans file-history history.jsonl
do
[ -e "$shared/$item" ] || continue
[ -e "$profile/$item" ] || [ -L "$profile/$item" ] || ln -s "$shared/$item" "$profile/$item"
done
hooksのようにスクリプト実体を置くディレクトリは、settings.json側で絶対パス参照していればsymlinkしなくても動く。pluginsはprofileごとに実体を持つ。
注意点
~/.claude.jsonやcredentials、token、oauth、authっぽいファイルは共有しない--continueやtrust設定など、.claude.json側のstateに寄るものはprofileごとに分かれることがある- Claude Code公式の想定は
CLAUDE_CONFIG_DIR単位の分離なので、この構成はsymlink運用