·tips

Claude Codeで認証だけ分けてセッションを共有する

CLAUDE_CONFIG_DIRをprofile化し、認証は分けつつprojectsやsessionsはsymlinkで共有する

2 min read
Writing style

まとめ

  • Claude CodeはCLAUDE_CONFIG_DIRで設定ディレクトリを切り替えられる
  • CLAUDE_PROFILEは標準ではないので、シェル関数でCLAUDE_PROFILECLAUDE_CONFIG_DIRに変換する
  • ~/.claude.jsonはOAuth sessionなどを含むので共有しない
  • projectssessionstranscriptshistory.jsonlあたりだけ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を作り、共有したいものだけ~/.claudeへsymlinkする。

profile="$HOME/.claude-personal"
shared="$HOME/.claude"

mkdir -p "$profile"

for item in projects sessions transcripts todos file-history history.jsonl; do
  [ -e "$shared/$item" ] || continue
  [ -e "$profile/$item" ] || [ -L "$profile/$item" ] || ln -s "$shared/$item" "$profile/$item"
done

注意点

  • ~/.claude.jsoncredentialstokenoauthauthっぽいファイルは共有しない
  • --continueやtrust設定など、.claude.json側のstateに寄るものはprofileごとに分かれることがある
  • Claude Code公式の想定はCLAUDE_CONFIG_DIR単位の分離なので、この構成はsymlink運用

ref