Два аккаунта Claude Code на одной машине

У меня два аккаунта Claude. Первый - корпоративный. Второй - личный, за него я плачу сам и пользуюсь им в своих проектах. Оба живут на одной машине, и довольно быстро стало ясно, что держать их желательно раздельно.
Причин несколько. Рабочий код должен идти через рабочий аккаунт, потому что у компании на этот счёт свои правила. Свои проекты я, наоборот, не хочу гонять за счёт работодателя и оставлять в корпоративной истории. Переключаться вручную через /logout и /login можно, но "разве это жизнь".
Хотелось, чтобы аккаунт выбирался сам, в зависимости от того, какой проект я открыл. Оказалось, это очень легко было сделать. Ниже расскажу, как это настроить на Linux. Для Windows делается по аналогии - думаю, разберетесь.
Где Claude Code хранит свои файлы
Всё, что относится к пользователю, Claude Code держит в одной папке. По умолчанию это ~/.claude (папка пользователя в windows). Рядом с ней лежит ещё файл ~/.claude.json.
Что | Где (Linux) |
|---|---|
Токен авторизации |
|
Глобальные настройки |
|
Глобальные инструкции |
|
Агенты, skills, плагины |
|
История сессий |
|
Состояние, MCP-серверы |
|
Расположение этой папки меняется переменной окружения CLAUDE_CONFIG_DIR (переменные окружения). Если она задана, Claude Code ищет всё в указанном месте, и .claude.json тоже переезжает внутрь. Две папки дают два независимых Claude Code, у каждого свой аккаунт, свои настройки и своя история.
Личный аккаунт я оставил на старом (стандартном) месте, а для рабочего создал ~/.claude-work:
~/.claude личный аккаунт
~/.claude-work рабочий аккаунт
CLAUDE_CONFIG_DIR=~/.claude-workОсталось добиться, чтобы переменная выставлялась сама и только там, где нужно. Начнём с терминала.
Разделяй и влавствуй
Linux / macOS
Сначала один раз запускаем Claude с новой директорией и логинимся рабочим аккаунтом:
CLAUDE_CONFIG_DIR=“$HOME/.claude-work” claudeДиректория пустая, поэтому Claude Code пройдёт первичную настройку и предложит авторизацию. Если не предложит, можно его заставить через /login. Входим рабочим аккаунтом.
Затем добавляем короткую команду ( в данном случае для шелла bash / zsh, строка в ~/.bashrc или ~/.zshrc):
alias claude-work='CLAUDE_CONFIG_DIR="$HOME/.claude-work" claude'Проверим теперь в любом терминале:
claudeзапускает личный аккаунтclaude-workзапускает рабочий
Неплохое начало, пол дела сделано. Но что там по vscode?
Используем профили VSCODE
С терминалом разобрались. В VS Code сложнее, потому что расширение Claude Code само запускает процесс claude и про наш алиас не в курсе от слова совсем.
Первое, что приходит на ум, это настройка claudeCode.environmentVariables: список переменных окружения, с которыми оно запускает Claude. Первое, что приходит в голову, — положить её в .vscode/settings.json рабочего проекта. Но увы, это не сработает.
Почему не работает .vscode/settings.json
В package.json расширения у этой настройки указан "scope": "machine". Для VS Code это значит:
свойство нельзя задать на уровне рабочей области (.vscode/settings.json): VS Code её просто игнорирует. Это и логично: иначе любой склонированный репозиторий мог бы подменить окружение процесса.
настройку можно задать в пользовательских настройках, а у каждого профиля VS Code они свои. На все профили сразу действуют только настройки со scope
application, аmachineхранится в каждом профиле отдельно.
Отсюда решение: отдельный профиль VS Code для работы.
И тут на помощь нам приходят профили vscode.
Создаем новый профиль:
Ctrl+Shift+P → Profiles: New Profile... (или оно же File → Preferences → Profile → Profiles).
Name: например
WorkCopy from:
Default. Таким образом новый профиль унаследует все ваши настройки из базового профиля Default (ну, если вы не использовали профили до этого. Или же скопируйте из того, что используете из нужного вам профиля).
Далее, переключаем vscode в новый профиль (File → Preferences → Profile → Profile (Work)).

И открываем настройки vscode для нашего пользователя (но уже для нового профиля - File → Preferences → Settings):

Нажимаем редактировать настройку и добавляем в открывшийся json файл (обратите внимание, что claudeCode.environmentVariables - массив, туда и добавляем):
{
"claudeCode.environmentVariables": [
{ "name": "CLAUDE_CONFIG_DIR", "value": "/home/<user>/.claude-work" }
],
"terminal.integrated.env.linux": {
"CLAUDE_CONFIG_DIR": "/home/<user>/.claude-work"
}
}Также, внимание на <user> - очевидно нужно заменить своим аккаунтом.
Два важных момента:
Путь только абсолютный.
~,$HOMEи%USERPROFILE%расширение не распознает: строка передаётся как есть, и Claude будет искать конфиг где угодно, но не там, где нам надо. К сожалению.Вторая настройка (
terminal.integrated.env.*) нужна для встроенного терминала.claudeCode.environmentVariablesдействует только на панель расширения. Без второй настройки командаclaude, набранная во встроенном терминале рабочего окна, запустится под личным аккаунтом. Это ровно та ошибка, от которой мы защищаемся.
Для macos это будет terminal.integrated.env.osx а для винды terminal.integrated.env.windows соотвественно.
Привязываем рабочие папки к профилю
Конечно, переключать вручную профили куда проще, чем переключать аккаунты Клода. Но, vscode позволяет даже это автоматизировать.
Переходим снова в настройки профиля, выбираем наш профиль Work.
В разделе `Folders & Workspaces` добавляем наши рабочие папки с проектами.
Всё. Теперь vscode при открытии любого проекта, будет автоматически переключаться в рабочий профиль, а тем самым - запускать claude-work вместо стандартного claude (а значит авторизовываться под нашим рабочим аккаунтом).
Осталось лишь перезагрузить IDE и проверить, что все работает, как мы настроили.
Проверяем
Открываем любой рабочий проект в редакторе.
В рабочем окне VS Code открываем панель Claude и выполняем
/status. Мы должны увидеть наш рабочий аккаунт.В встроненном терминале можно выполнить
echo $CLAUDE_CONFIG_DIRВ обычном терминале ОС можно также проверить
/statusвclaudeиclaude-code.
Итог
Одна переменная
CLAUDE_CONFIG_DIRдаёт два (или более) полностью независимых Claude Code.В терминале это разные cli-команды:
claude,claude-workи тп.В VS Code это профиль Work с
claudeCode.environmentVariablesиterminal.integrated.env.*.Рабочие папки привязаны к профилю, поэтому аккаунт выбирается тем, какой проект мы открыли.
/statusпомогает быстро убедиться, не слетело ли что-то и в каком аккаунте исполняется текущая сессия. На всякий пожарный.
Если вы решаете ту же задачу иначе, (может через отдельных пользователей ОС, контейнеры или dev containers, или еще как-то) расскажите в комментариях. Интересно сравнить.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.