Claude Code 將帳號的所有相關資訊(登入憑證、設定、歷史紀錄、MCP 伺服器)儲存在一個資料夾中,你可以在啟動時將其指向不同的資料夾。這表示你可以用兩個資料夾管理兩個帳號,並同時在兩個終端機中開啟它們。本指南將涵蓋 macOS、Linux 和 Windows(PowerShell、cmd 和 Windows Terminal)上的設定,如何並排運行兩個帳號,如何讓每個專案資料夾選擇自己的帳號,以及在 VS Code 和 CI 環境中的應用。
我已在 macOS 和 Windows 11 上驗證了其核心功能,包括別名設定、PowerShell 函數、Windows Terminal 設定檔、tmux 分割視窗、驗證狀態以及 MCP 伺服器的儲存位置。
簡而言之:如果你想在終端機中新增第二個帳號,請設定別名 alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude',然後運行 claude-work 並登入一次。在 Windows 上,則使用一個小的 PowerShell 函數來設定一次性的 $env:CLAUDE_CONFIG_DIR。
若要同時在螢幕上顯示兩個帳號,可以使用 tmux、iTerm2 或 Terminal 的分割視窗,或是 Windows Terminal 的分割窗格。讓每個專案使用正確的帳號,可透過 direnv 或基於資料夾的 shell 函數實現。要檢查當前使用的帳號,請執行 claude auth status。
為了避免混淆,請設定狀態列或終端機標籤顯示「WORK」。如果不想進行任何終端機設定,可以使用 Claude Sessions Pro,每個帳號一個應用程式或視窗。
Claude Code 如何判斷你正在使用哪個帳號?當 Claude Code 啟動時,它會檢查一個環境變數 CLAUDE_CONFIG_DIR。如果未設定,它會使用 ~/.claude。實際上,這個資料夾就代表一個帳號:登入憑證在 macOS 上儲存在與設定資料夾綁定的 Keychain 條目中,因此第二個資料夾會有自己的條目;在 Linux 和 Windows 上,則是一個位於資料夾內的 .credentials.json 檔案。
設定,包括狀態列、權限和模型,都儲存在 settings.json 中。使用者範圍的 MCP 伺服器,對於預設資料夾,它們位於 ~/.claude.json,與 ~/.claude 並列而非在其內部;當 CLAUDE_CONFIG_DIR 設定後,Claude Code 會將它們寫入該資料夾內的 .claude.json,這點很容易被忽略,但之後會很重要。
你的個人指令、技能和代理,例如 CLAUDE.md、skills/、agents/、commands/,以及專案下的會話歷史紀錄,這些都是 --resume 和 --continue 所讀取的內容。因此,「第二個帳號」實際上就只是「第二個資料夾」,沒有任何內容被複製或修改,你的預設設定也不會受到影響。
步驟一:在 macOS 和 Linux 上建立資料夾和別名。選擇一個名稱,本文將全程使用 ~/.claude-work;每個額外帳號都以相同方式運作,例如 ~/.claude-clientA 或 ~/.claude-personal。
將以下內容加入 ~/.zshrc(或 ~/.bashrc):# 預設帳號:直接使用 claude,對應 ~/.claude # 工作帳號:使用 claude-work,對應 ~/.claude-work alias claude-work = 'CLAUDE_CONFIG_DIR="$HOME/.claude-work" claude' 開啟一個新的終端機並執行 claude-work。
由於 Claude Code 在新資料夾中找不到登入憑證,它會引導你完成首次設定並開啟瀏覽器。使用另一個帳號登入,這將是唯一一次需要手動登入。從現在開始,claude 代表一個帳號,claude-work 代表另一個,你可以同時運行兩者。
檢查是否設定成功:執行 claude auth status 和 claude-work auth status。每個指令都會印出一個小的 JSON 區塊,檢查 email 和 configDirectory:第一個應該顯示你的預設帳號和 ~/.claude,第二個則顯示你的工作帳號和 ~/.claude-work。
(auth status 需要最新版本的 Claude Code,如果無法識別,請運行 claude update。)
請勿將變數指向預設資料夾。你可能會想透過第二個別名 claude-personal='CLAUDE_CONFIG_DIR=~/.claude claude' 來讓設定對稱,但請不要這麼做。在 macOS 上,只要設定了這個變數,即使是預設路徑,Claude Code 也會尋找不同的 Keychain 條目,導致你的個人帳號突然顯示為登出狀態。
這個問題已被追蹤為 issue #92252。請讓你的主要帳號保持在未設定變數的 claude 狀態,並為每個額外帳號指定一個新的獨立資料夾。
步驟一:在 Windows 上使用 PowerShell、cmd 和 Windows Terminal。概念是相同的,但 PowerShell 沒有 VAR=value 這種指令簡寫。如果你直接運行 $env:CLAUDE_CONFIG_DIR = ... 然後執行 claude,這個變數會持續設定在該視窗的所有後續指令中,導致下一個 claude 也變成你的工作帳號。
以下函數可以在一次呼叫中設定變數,然後再將其恢復,即使 Claude Code 執行出錯也一樣:function claude-work { $prev = $ env : CLAUDE_CONFIG_DIR $ env : CLAUDE_CONFIG_DIR = Join-Path $HOME '.claude-work' try { claude @ args } finally { $ env : CLAUDE_CONFIG_DIR = $prev } } 將此函數放入你的設定檔中,使其始終可用。
執行 notepad $PROFILE 會開啟該檔案(如果 Notepad 詢問,請建立它)。開啟一個新的 PowerShell 視窗,運行 claude-work,使用第二個帳號登入,然後像前面一樣使用 claude auth status 和 claude-work auth status 檢查。
@args 會將所有參數傳遞下去,因此 claude-work --resume 和 claude-work mcp list 都能如預期般運作。
對於 cmd.exe:請將整個賦值語句用引號括起來,否則 cmd 會將 && 前的空格視為資料夾名稱的一部分:set "CLAUDE_CONFIG_DIR= %USERPROFILE% \.claude-work" && claude 這個變數會持續設定在該 cmd 視窗的其餘部分,因此請為其使用一個專用的視窗。
Windows Terminal 設定檔。如果你希望在新分頁選單中看到一個「Claude (work)」的選項,請開啟「設定」,然後點擊「開啟 JSON 檔案」,並在 profiles.list 中新增一個設定檔:{ "name" : "Claude (work)" , "commandline" : "powershell.exe -NoExit -Command \" $env:CLAUDE_CONFIG_DIR = Join-Path $HOME '.claude-work'; claude \" " , "startingDirectory" : "%USERPROFILE%" , "tabTitle" : "WORK" } 這個變數只存在於該分頁中,因此其他分頁不會受到影響。
-NoExit 會在你退出 Claude Code 後保持視窗開啟,這樣你就可以透過輸入 claude 再次啟動相同帳號。
步驟二:同時在螢幕上顯示兩個帳號。一旦資料夾建立完成,「並排」就只是兩個終端機。對於 tmux(macOS 和 Linux),一個指令即可建立兩個窗格,每個窗格一個帳號:tmux new-session -s claude 'claude' \; split-window -h 'CLAUDE_CONFIG_DIR="$HOME/.claude-work" claude' 左側窗格是預設帳號,右側窗格是工作帳號。當你在其中一個窗格中退出 Claude Code 時,該窗格會關閉。
iTerm2。在「設定」中,複製你的設定檔並命名為「Claude work」。在「一般」選項下,將「啟動時傳送文字」設定為 export CLAUDE_CONFIG_DIR="$HOME/.claude-work",並在「徽章」中輸入「WORK」,這會在文字後方顯示一個大型的淡色標籤。現在,你可以使用該設定檔分割一個窗格(右鍵點擊窗格,選擇「Split Pane with Profile」)。
macOS Terminal。在「設定」中,複製一個設定檔並命名為「Claude work」。在「Shell」分頁中,勾選「執行指令」和「在 Shell 內執行」,然後輸入 CLAUDE_CONFIG_DIR="$HOME/.claude-work" claude。使用該設定檔開啟的新視窗將直接啟動 Claude Code 並登入工作帳號。你也可以順便為該設定檔設定不同的背景顏色。
Windows Terminal。按住 Alt 鍵並點擊新分頁下拉選單中的「Claude (work)」:它會以分割窗格的形式在當前窗格旁邊開啟,而不是一個新分頁。如果你想從一個普通的 shell 開始,可以使用 Alt+Shift+- 和 Alt+Shift+Plus 來分割當前窗格。
步驟三:讓專案資料夾自動選擇帳號。別名雖然有效,但你仍然需要記住要輸入哪一個。如果你的所有工作儲存庫都位於同一個資料夾下,可以讓該資料夾來決定。對於 direnv(macOS、Linux、WSL),請安裝它(direnv.net),將其掛接到你的 shell 中,然後在你的工作資料夾根目錄中建立 ~/.work/.envrc 檔案,內容為:export CLAUDE_CONFIG_DIR = "$HOME/.claude-work"。
執行 direnv allow 一次。現在,當你 cd ~/work/anything 時,變數會被設定;離開該資料夾時則會取消設定,這樣在該資料夾下的每個儲存庫中,直接運行 claude 都會使用正確的帳號。如果你的儲存庫是共享的,請將 .envrc 加入你的全域 .gitignore。
沒有 direnv 嗎?一個 shell 函數可以在每次啟動 Claude Code 時執行相同的檢查:在 ~/.zshrc 或 ~/.bashrc 中加入:claude () { case "$PWD/" in "$HOME/work/" * ) CLAUDE_CONFIG_DIR = "$HOME/.claude-work" command claude "$@" ;; * ) command claude "$@" ;; esac } command claude 會呼叫實際的二進位檔案,而不是再次呼叫這個函數。如果你有多於兩個帳號,請為每個客戶資料夾新增一行。
PowerShell 可以在之前的函數中實現相同的功能:function claude { $prev = $ env : CLAUDE_CONFIG_DIR if ( $PWD . Path -like ( Join-Path $HOME 'work\*' )) { $ env : CLAUDE_CONFIG_DIR = Join-Path $HOME '.claude-work' } try { claude.exe @ args } finally { $ env : CLAUDE_CONFIG_DIR = $prev } } 如果找不到 claude.exe,請檢查 Get-Command claude -All 列出了什麼,並改用該名稱呼叫(npm 會安裝 claude.cmd,所以在這種情況下是 claude.cmd @args)。
VS Code 和其他編輯器。Claude Code 擴充功能有一個環境變數設定 claudeCode.environmentVariables,這似乎是設定 CLAUDE_CONFIG_DIR 的理想位置。但問題是,這是一個機器範圍的設定。
VS Code 會忽略工作區的 .vscode/settings.json 中的此設定,因此你無法透過這種方式為一個專案指定工作帳號,為另一個專案指定個人帳號。如果你在使用者設定中設定它,它將應用於所有視窗。如果這樣做,請使用絕對路徑,因為 ~ 不會被展開。
每個專案都能運作的是整合式終端機。在工作專案的 .vscode/settings.json 中:{ "terminal.integrated.env.osx" : { "CLAUDE_CONFIG_DIR" : "/Users/you/.claude-work" }, "terminal.integrated.env.linux" : { "CLAUDE_CONFIG_DIR" : "/home/you/.claude-work" }, "terminal.integrated.env.windows" : { "CLAUDE_CONFIG_DIR" : "C: \\ Users \\ you \\ .claude-work" } } 在該視窗中開啟的新終端機將獲得此變數,並且在那裡運行的 claude 將使用工作帳號。
VS Code 會在你信任工作區後才應用終端機環境設定。Cursor 和 Windsurf 也讀取相同的鍵。JetBrains IDEs 在「設定」、「工具」、「終端機」、「環境變數」下也有類似的設定。
讓兩個帳號不可能混淆。兩個外觀相同的終端機,卻使用不同的帳號,很容易導致你將客戶的工作運行在個人方案上。為工作資料夾設定一個狀態列來標示。建立 ~/.claude-work/statusline.sh 檔案,內容為:`#!/bin/sh # Claude Code 會將會話資訊以 JSON 格式透過標準輸入傳入;我們只需要一個標籤。
cat > /dev/null printf '\033[44;97m WORK \033[0m %s' " $( basename "$PWD" ) "。使其可執行(chmod +x ~/.claude-work/statusline.sh),並將工作資料夾的 ~/.claude-work/settings.json 指向它:{ "statusLine" : { "type" : "command" , "command" : "~/.claude-work/statusline.sh" } } 預設帳號會保留自己的 settings.json`,因此只有工作會話會顯示藍色的「WORK」標籤。
結合有顏色的終端機設定檔或 iTerm2 徽章,你甚至可以從遠處區分它們。如果仍有疑問,在會話中輸入 /status 會顯示當前登入的帳號。
帳號之間應共享什麼,以及絕不共享什麼。一個新的資料夾是空的,沒有 CLAUDE.md、沒有技能、沒有代理。你可能希望這些內容在所有地方都相同,可以透過符號連結(symlink)來實現:ln -s ~/.claude/CLAUDE.md ~/.claude-work/CLAUDE.md ln -s ~/.claude/skills ~/.claude-work/skills ln -s ~/.claude/agents ~/.claude-work/agents ln -s ~/.claude/commands ~/.claude-work/commands(在 Windows 上,New-Item -ItemType SymbolicLink 也能做到相同效果,但需要開發人員模式或管理員權限;直接複製檔案也可以)。
絕不要共享或符號連結 .credentials.json、.claude.json 或整個資料夾。這些檔案儲存著登入憑證和每個帳號的狀態。共享它們會導致你在兩個終端機中都使用同一個帳號,或者每個終端機都將另一個帳號登出。MCP 伺服器不會自動帶入,使用者範圍的伺服器儲存在帳號自己的 .claude.json 中(參見圖表),因此工作帳號一開始是沒有的。
你可以透過工作別名再次添加它們,例如:claude-work mcp add --scope user --transport http notion https://mcp.