Claude Code一次只保持一个登录状态,这是同时运行多个账户的方法
在同一台机器上同时运行工作账户和个人账户的实战指南:决定哪个登录状态生效的那个环境变量、为什么开到第三个终端后shell方案就不管用了,以及如何为每个项目固定一个账户。
大多数既拿Claude Code干活、又用它做自己项目的人,都会遇到这样一个瞬间。您结束一段工作会话,切到副业项目,然后发现代理还登录在雇主付费的那个账户上。于是您退出登录,用自己的账户重新登录,半小时之后又得反过来再来一遍。
这个循环并不是因为缺了什么功能。它是Claude Code存放登录信息的方式带来的结果,而一旦您知道它存在哪里,把多个账户并排跑起来就从一个工作流问题变成了一个配置细节。
一个环境变量决定哪个账户处于活动状态
Claude Code不会把凭据放在数据库里,也不会放进按配置档案索引的钥匙串条目里。它需要的一切都从同一个目录读取:凭据、会话元数据,以及按项目划分的历史记录。
这个目录就是CLAUDE_CONFIG_DIR所指向的位置。如果您从未设置过它,它就是~/.claude。

这就是全部机制,而它有一个很有用的特性:因为一个账户就是一个目录,而不是一项全局设置,所以拥有两个账户就等于拥有两个目录。两者之间不共享任何东西。它们都可以无限期保持登录状态,而且谁也不知道对方的存在。
所以最朴素的做法是可行的:
# 个人
CLAUDE_CONFIG_DIR=~/.claude claude
# 工作
CLAUDE_CONFIG_DIR=~/.claude-work claude
在第二个目录里运行一次/login,您就在一台机器上拥有了两个处于活动状态的账户。
shell方案从哪里开始变得难受
如果您一次只开一个终端而且足够自律,上面那两行确实够用。它会因为三个原因不再够用,而且这三点会叠加。
这个变量是按进程生效的,不是按机器生效的。 每开一个新终端、每拆一个新窗格、每个编辑器内置的shell,都从您配置文件里的默认值开始。把它导出到.zshrc里,您只是把问题挪了个位置:现在轮到另一个账户成为您老是忘记的那个。
没有任何东西告诉您当前用的是哪个账户。 Claude Code不会在提示符里打印账户信息。如果您开着两个终端,其中一个用的是工作账户,它们看起来一模一样。您察觉到的那一刻,通常就是您去查账单的那一刻。
它扛不住并行。 真正有意思的用法是同时在多个项目上运行多个代理。一旦超过两个并发会话,记住哪个窗格是用哪个变量启动的就不再是自律问题,而是设计问题。

解决办法不是再往shell里堆配置,而是不要在启动那一刻才做这个决定,转而把账户附加到真正决定它的那个东西上:项目。
把账户附加到项目,而不是终端
您真正想要的通常是一条规则,而不是一条命令。类似这样:这个客户的仓库始终运行在这个客户的账户上。这条规则一旦存在,就没人需要再记什么了。
要把它做对,就意味着按一个明确的顺序来解析账户,因为规则需要例外。项目级的默认值在大多数时候是对的,但某个特定的代理可能需要跑在别处:一个用测试账户做的一次性实验,或者一个跑在配额更大的席位上的评审代理。

从上往下读,第一条匹配的规则生效。代理级覆盖优先于项目固定。项目固定优先于您设置的通用默认值。如果哪里都没配置,就落到~/.claude,这正是全新安装本来的行为。最后这层兜底很重要:它意味着把这套机制加到已有的配置里,在您明确固定某个账户之前不会改变任何东西。
这就是AgentsRoom所实现的模型。每个账户都是一个受管理的目录,登录在应用内完成而不是在shell里进行,上面那套解析顺序会在代理启动时执行,并且只在该进程上设置CLAUDE_CONFIG_DIR。如果您已经在用CCS这类第三方切换工具,可以直接把一个账户指向已有的配置目录,而不必重新登录一次。
同样的问题在Codex上也存在,只是变量不同
如果您使用不止一个提供方,这个坑您会踩两遍。形态完全一样,变量却不一样,所以为其中一个做的切换工具并不能覆盖另一个。Codex这一侧我们单独做了文档:Codex多账户,其中也说明了登录流程上有哪些差异。
有一点值得明确说一次:账户隔离是按提供方实现的机制。任何声称能全局处理它的工具,要么是在逐个提供方分别做包装,要么就是只支持其中一个。
搞清楚到底是哪个账户在消耗令牌
分离账户只是人们这么做的一半理由。另一半是搞清楚消耗落在了哪里,尤其是在有客户付费的时候。
这正是shell方案会悄悄出问题的地方。只查看~/.claude的用量统计工具,一旦有代理跑在别的地方就会少报,而这些数字看起来又足够合理,以至于好几周都没人察觉。一个真正区分账户的统计工具,必须遍历每一个已配置的目录,而不只是默认那一个。
如果您想要按账户和按会话的数字,我们在如何检查Claude Code令牌使用情况里讲过测量这一侧,实时视图则在令牌使用情况页面。
这不是用来干什么的
有一点需要澄清,因为这个问题总会被提出来,而它值得一个直接的回答,而不是沉默。
上面讲的一切,都是关于把本来就合法存在的账户分开。雇主为您付费的席位和您自己付费的个人订阅是两种不同的商业关系,把它们放在同一台机器上而互不污染,是一个真实且普通的需求。把客户消耗的令牌算到该客户头上也是,把实验账户和生产账户隔开也是。
为了绕开您所在套餐的容量限制而额外创建账户,是另一回事,而这正是使用政策所针对的行为。这里描述的机制并不会让那种做法变得可以接受,一个把它自动化的工具,等于是在帮您违反您自己签署过的协议。如果您的第二个账户之所以存在是因为有别人在为它付费,那您站得住脚;如果它存在只是为了重置速率限制,那就站不住脚。以Anthropic的使用政策为准,而不是这篇文章。
大家真正会问的问题
我可以在同一台电脑上使用两个Claude Code账户吗?
可以。Claude Code从CLAUDE_CONFIG_DIR指向的目录中读取凭据、会话元数据和项目历史记录,这个变量默认指向~/.claude。把它指向第二个目录并在那里登录,您就在同一台机器上拥有了两个彼此独立的账户。两个目录之间不共享任何内容,所以两个账户可以同时保持登录状态。
如何在不退出登录的情况下切换Claude Code账户?
根本不需要退出登录。退出再重新登录用的是同一个目录,为了拿到第二个会话就得丢掉第一个。正确的做法是给每个账户一个独立的配置目录,然后在启动CLI时通过设置CLAUDE_CONFIG_DIR来选择用哪一个。两份凭据都继续留在磁盘上并保持有效,切换不需要任何代价。
Claude Code把登录信息存在哪里?
存在CLAUDE_CONFIG_DIR指向的目录里,如果您没有改过,就是~/.claude。凭据本身位于该目录内的.credentials.json文件中,旁边是会话元数据和按项目划分的历史记录。这一个目录就是账户的全部,正因如此,替换它是一次干净的切换,而不是取巧的做法。
两个代理可以同时运行在两个不同的Claude账户上吗?
可以,只要每个代理进程在自己的环境中拿到各自的CLAUDE_CONFIG_DIR。这个变量是在进程启动时按进程读取的,而不是全局生效,所以用两个不同取值启动的两个代理会并行运行在两个不同的账户上。这正是让工作项目和个人项目能在同一个窗口里共存的原因。
拥有不止一个Claude账户是否违反Anthropic的条款?
为不同用途持有各自独立的账户是很平常的事:雇主为您付费的席位和您自己付费的个人订阅,是两种不同的商业关系。使用政策针对的是为了绕开您所在套餐的容量限制而去创建账户。如果您的第二个账户之所以存在是因为有别人在为它付费,那您站得住脚;如果它存在只是为了重置速率限制,那就站不住脚。以Anthropic的使用政策为准。
简短版本
Claude Code把一个账户存成一个目录,由CLAUDE_CONFIG_DIR决定哪一个处于活动状态。两个目录就是两个账户,可以长期保持登录,彼此之间不共享任何东西。
这件事的shell版本,在您只开着一个终端的时候是够用的。再往后,您想要的是让账户成为项目的一个属性,并为例外情况提供按代理的覆盖,这样在代理启动时就会附上正确的凭据,谁都不需要记住什么。
下载 AgentsRoom
在一个窗口中运行你所有项目的 AI 智能体(Claude、Codex、Antigravity CLI、OpenCode、Aider、Grok Build、Mistral Vibe、Kimi Code)。
配套应用:随时随地监控你的 Agent
使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。
把 Bug 和需求直接发送到您的公开待办清单。
AgentsRoom 实际运行一瞥。
继续阅读
Claude 现在会给输出打水印,但你的代码几乎不受影响
Anthropic 开始给 Claude 的输出打水印。它到底标记了什么、为什么生成的代码基本逃得掉、谁才真的能检测到,以及为什么你的 SEO 一点都不用动。
阅读全文一次 Claude Code 会话会触发 30 个 hook 事件。只有 3 个能回话。
Claude Code hook 事件的完整清单:每个事件何时触发、其中哪 15 个能阻断,以及那条悄悄吞掉大部分 hook 输出的 stdout 规则。一份在数千次代理会话的生产环境中跑出来的实战参考。
阅读全文给 AI 智能体用的反馈看板:让用户来写提示词
反馈工具只负责收集需求,没有一个能把需求做出来。当用户写入的那块看板,正好就是编码智能体执行任务的那块看板,重写这一步就消失了。
阅读全文