Skip to main content
← 返回博客
claude-codeproductivityclidevtools

在一台设备上运行多个 Claude Code 账号

如何并行使用两个(或更多)Claude Code 账号——个人和企业——通过单个环境变量实现完全隔离。

发布于 2026年5月5日4 分钟阅读

我每天都在使用 Claude Code——既用于个人项目,也用于公司工作。问题是:这是两个完全不同的账号,有不同的 OAuth 会话、不同的 CLAUDE.md 指令、不同的 MCP 服务器和独立的项目记忆。以下是我如何通过一个 shell 别名在同一台设备上并行运行它们。

问题

Claude Code 默认将所有内容存储在 ~/.claude 中——OAuth 令牌、对话历史、全局 CLAUDE.md、项目记忆、MCP 服务器配置和设置。当你有两个账号时,你需要两个完全隔离的环境:

  • 个人账号:自己的 Max/Pro 订阅、带有个人偏好的 CLAUDE.md、你的 MCP 服务器(Obsidian、个人工具)
  • 企业账号:公司管理的计划、包含 Jira/Slack 集成指令的工作 CLAUDE.md、公司 MCP 服务器
  • 不同的 OAuth 会话:无法在同一配置目录中登录两个账号
  • 独立的项目记忆:你不希望工作项目的上下文泄露到个人会话中,反之亦然

每次切换上下文都要注销再登录不是办法。你会丢失会话状态,而且这真的很痛苦。

解决方案:CLAUDE_CONFIG_DIR

Claude Code 支持一个环境变量:CLAUDE_CONFIG_DIR。将其设置为任意路径,Claude 就会使用该目录代替 ~/.claude 来存储一切——认证、历史、设置、记忆。整个设置只需 60 秒。

步骤 1:创建第二个配置目录

选择一个适合你用例的名称:

Terminal
mkdir ~/.claude-work

就这样。Claude 会在首次启动时填充必要的结构。

步骤 2:认证第二个账号

使用新的配置目录运行 Claude 一次以触发 OAuth 登录:

Terminal
CLAUDE_CONFIG_DIR=~/.claude-work claude

浏览器会打开。用你的企业账号登录。OAuth 令牌会存储在 ~/.claude-work 中——与 ~/.claude 中的个人会话完全分离。

步骤 3:添加 shell 别名

将以下内容添加到你的 shell 配置中,这样就不需要记住变量名:

~/.zshrc
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'

重新加载 shell:

Terminal
source ~/.zshrc

你会得到什么

现在你有两个完全隔离的 Claude 环境:

  • claude——使用个人账号、个人 CLAUDE.md、个人记忆启动
  • claude-work——使用企业账号、工作 CLAUDE.md、独立记忆启动
  • 隔离的历史:工作对话留在工作中,个人的留在个人中
  • 独立的 MCP 服务器:你的个人 Obsidian vault MCP 不会出现在工作会话中
  • 独立的设置:每个账号有不同的允许工具、不同的权限级别、不同的模型偏好

底层工作原理

配置目录是 Claude Code 状态的唯一真实来源。以下是每个目录内部的内容:

~/.claude/              ← personal account
├── CLAUDE.md           ← personal global instructions
├── projects/           ← personal project memory
├── settings.json       ← personal permissions & MCP servers
└── ...                 ← OAuth session, history, cache

~/.claude-work/         ← corporate account
├── CLAUDE.md           ← company-specific instructions (Jira, Slack, etc.)
├── projects/           ← separate project memory
├── settings.json       ← different MCP servers, permissions
└── ...                 ← separate OAuth session

当你运行 claude-work 时,Claude 从 ~/.claude-work 读取所有内容。它不知道 ~/.claude 的存在。两个实例完全独立——你甚至可以在不同的终端标签页中同时运行它们。

扩展到 N 个账号

这个模式可以扩展到任意数量的账号。有多个客户的自由职业者?添加更多别名:

~/.zshrc
# Personal (default — no alias needed)
# Just run: claude

# Corporate
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'

# Freelance client
alias claude-client='CLAUDE_CONFIG_DIR=~/.claude-client claude'

每个别名都有自己的配置目录、自己的 OAuth 会话、自己的 CLAUDE.md 和特定于客户的指令。

实用建议

  • 目录命名要清晰:~/.claude-work~/.claude-clientname——当有三四个的时候你会感谢自己
  • 为每个写定制的 CLAUDE.md:工作的可以包含公司特定指令(如何创建 Jira 工单、Slack 频道、部署流程)。个人的保持精简。
  • 每个账号不同的 MCP 服务器:仅在工作配置中配置工作工具(Jira MCP、Slack MCP、内部 API)。保持个人配置干净。
  • 检查哪个账号处于活动状态:在会话中运行 claude config list——会显示配置目录路径

这种方案的局限

CLAUDE_CONFIG_DIR账号 隔离,而不是按 项目。在单个配置目录内,Claude 能看到你为该账号注册过的所有 MCP 服务器——跨所有项目都可见。如果只是个人单独使用,通常没什么问题。但一旦一个账号下挂着多个生产关键项目,尤其是在像计费、管理后台或基础设施这类相互重叠的领域,就会带来一个具体的跨项目风险:AI 助手可能在做项目 B 时调用了项目 A 的工具,特别是当两个项目都暴露了名字相似的操作时。

配置目录这套模式回答的是 which account am I in?,而不是 which project's tools should be active right now?。对于风险更高的工作,在按账号隔离之上再叠加第二层隔离:

  • 每个生产关键项目一个配置目录,而不仅仅是每个账号一个:不要只用 ~/.claude~/.claude-work,而是建 ~/.claude-work-billing~/.claude-work-admin。每个配置目录只看到它真正需要的 MCP 服务器。
  • 通过 .mcp.json 做项目级 MCP:在项目根目录提交一份 .mcp.json,只列出该项目的 MCP 服务器。Claude 从这个目录启动时会自动加载它们。让全局配置保持精简——只放通用工具(笔记、搜索),不放任何生产环境的端点。
  • MCP 服务器命名要明确无歧义:避免像 adminbillingmcp-server 这种泛化名称。用项目名做前缀:acme_billing_prodacme_admin_stage。一个描述性的名字会在某个调用即将从错误的上下文中触发时,逼你停下来想一想。
  • 批准前审查每一个 MCP 工具调用:*_create_**_delete_**_charge_* 这类调用值得有意识地多看一眼。一刀切的自动批准带来的速度优势,会在某个错误项目的工具第一次打到生产环境的那一刻就蒸发殆尽。

总体原则:积极地拆分配置目录、把生产级 MCP 从默认配置目录中剥离出去,并把项目之间工具名重叠当成一种值得重构的 code smell 来对待。

总结

一个环境变量。一个别名。账号之间完全隔离。没有注销/登录的折腾,没有配置冲突,没有上下文泄露。这种解决方案简单得几乎令人失望——但正是这一点使它优秀。设置一次,永远不用再想。