Claude Code 계정 분리, 세션이 아니라 폴더를 나누는 문제였다

한 컴퓨터에서 회사 팀 계정과 새로 만든 계정을 번갈아 써야 할 일이 생겼다. 처음엔 세션만 나누면 될 거라 생각하고 /login, /logout을 반복했다. 그런데 한쪽에서 인증해 둔 MCP 연결과 작업 히스토리가 다른 쪽 세션에 그대로 섞여 나왔다

원인은 단순했다. Claude Code는 설정·세션·히스토리·MCP 설정을 홈 디렉터리의 ~/.claude 한 폴더에 모아 둔다. 자격증명은 Linux·Windows에서는 이 폴더 안 .credentials.json에, macOS에서는 암호화된 Keychain에 저장된다. 로그인 계정만 바꿔도 이 저장 위치는 그대로다. 계정을 나누려면 세션이 아니라 저장 폴더를 나눠야 했다

분리의 열쇠는 CLAUDE_CONFIG_DIR 하나였다

Claude Code는 CLAUDE_CONFIG_DIR 환경변수로 설정 저장 위치를 바꿀 수 있다. 이 변수를 지정하지 않으면 기본값인 ~/.claude를 쓰고, 지정하면 그 경로를 쓴다

여기서 방향이 정해졌다. 명령어마다 이 변수를 다르게 줘서 각 계정이 물리적으로 다른 폴더를 쓰게 만들면 된다.

claude      → ~/.claude       (변수 미지정, 기본값)
claude-dev  → ~/.claude-dev    (변수로 지정)

이 방식의 장점은 설정 파일 어디에도 이메일이나 비밀번호를 적지 않는다는 데 있다. 자격증명은 로그인 시점에 OS가 관리하는 위치에 저장된다. Linux·Windows에서는 CLAUDE_CONFIG_DIR이 가리키는 폴더 안 .credentials.json에, macOS에서는 암호화된 Keychain에 들어간다. 셸 설정에 들어가는 건 “어느 폴더를 쓸 것인가”뿐이다

여기서 플랫폼 차이를 짚고 가야 한다. Anthropic 공식 문서에 따르면 CLAUDE_CONFIG_DIR로 자격증명 저장 위치가 바뀌는 건 Linux와 Windows에 한정된다. macOS는 자격증명을 Keychain에 두기 때문에, 폴더를 나눠도 자격증명 영역까지 폴더 단위로 갈린다고 단정할 수는 없다. macOS에서는 설정·세션·히스토리·MCP 인증 상태가 폴더 단위로 깔끔하게 분리되고, 계정이 의도대로 갈렸는지는 뒤에서 /status로 직접 확인했다

기존 계정은 건드리지 않고 새 계정만 함수로 추가했다

먼저 셸 종류를 확인했다

echo $SHELL   # /bin/zsh → zsh, ~/.zshrc 편집

핵심 판단은 여기였다. 기존 claude 명령어용 함수는 만들지 않았다. 함수를 만들지 않으면 claude는 기본값 ~/.claude를 그대로 쓰고, 이미 로그인해 둔 팀 계정이 유지되기 때문이다. 굳이 건드려서 재로그인을 자초할 이유가 없었다

그래서 ~/.zshrc 맨 아래에 새 계정용 함수 하나만 추가했다

# 새 계정 — claude-dev 명령어 (별도 폴더 사용)
claude-dev() {
  CLAUDE_CONFIG_DIR="$HOME/.claude-dev" command claude "$@"
}

command를 붙인 이유는 무한 재귀를 막기 위해서다. 함수 안에서 다시 claude를 부르는데, command 없이 쓰면 셸이 같은 이름의 함수를 또 찾을 위험이 있다. command는 함수를 건너뛰고 실제 실행 파일을 직접 부르게 한다

bash 환경이라면 ~/.zshrc 대신 ~/.bashrc에 같은 함수를 넣으면 된다

저장하고 적용한다.

source ~/.zshrc

그다음 새 명령어로 들어가 세션 안에서 로그인했다.

claude-dev   # 실행 후 세션에서 /login → 새 계정으로 로그인

/login을 실행하면 브라우저가 열리고, 거기서 새 계정으로 인증한다. 인증 정보는 ~/.claude-aws 폴더에 자동 저장된다

분리됐는지는 폴더와 /status 두 군데서 확인했다

설정만으로는 믿기 어려웠다. 두 군데를 직접 확인했다. 먼저 홈 디렉터리에 폴더가 따로 생겼는지 봤다

ls -al ~ | grep claude

~/.claude(기존 계정)와 ~/.claude-dev(새 계정)가 별도로 존재했다. .claude-dev의 생성 시각이 claude-dev로 로그인한 시점과 일치했다. 새 계정 데이터가 별도 폴더에 들어갔다는 증거였다.

다음은 각 명령어가 실제로 다른 계정으로 열리는지였다. 두 명령어를 각각 실행하고 세션 안에서 /status를 입력해 비교했다.

claude 실행 시        → Email: (팀 계정 이메일)
claude-dev 실행 시    → Email: (새 계정 이메일)

두 화면의 Email과 Session ID가 서로 다른 계정으로 표시됐다. 두 명령어가 독립된 계정으로 완전히 분리됐다는 걸 그제야 확신했다

/status의 경고 두 줄은 오류가 아니었다

새 계정으로 처음 들어갔을 때 /status에 경고처럼 보이는 줄이 떴다. 처음엔 설정이 잘못된 줄 알았는데 아니었다

MCP servers: N need auth는 새 폴더(~/.claude-aws)에서 MCP 연결이 아직 인증되지 않았다는 뜻일 뿐이다. 폴더가 분리됐으니 MCP 인증도 폴더마다 따로 해야 한다. 그 계정에서 MCP를 쓸 거라면 /mcp로 인증하고, 안 쓸 거면 그대로 둬도 작업에는 지장이 없다

launched in home directory 안내도 오류가 아니라 프로젝트 폴더에서 실행하는 게 낫다는 권장 팁이다

claude-aws: command not found가 뜨면 source ~/.zshrc를 안 했거나 함수를 다른 파일에 저장한 경우다. 새 터미널을 열거나 source ~/.zshrc를 다시 실행하면 된다

한 줄로 요약하면, 계정 분리는 폴더 분리다

세션을 나누는 것으로는 부족하다. Claude Code의 설정·세션·히스토리·MCP 설정이 한 폴더에 모이기 때문에, 작업 환경을 분리하려면 CLAUDE_CONFIG_DIR로 폴더 자체를 나눠야 한다. 한 번 설정하면 셸을 껐다 켜도 유지되고, 다른 터미널 탭에서 동시에 띄워도 섞이지 않는다. 다만 macOS는 자격증명을 Keychain에 두므로, 계정이 실제로 갈렸는지는 /status로 확인하는 단계를 건너뛰지 않는 게 좋다

기준은 하나다. 한 컴퓨터에서 두 계정을 자주 오간다면, 로그인을 반복하지 말고 명령어를 하나 더 만들어 폴더를 나눠라. 어느 계정인지 헷갈릴 땐 세션 안에서 /status로 확인하면 된다