11 月 4 日的变化
v2.1.318 版本说明列出了 Claude Code 报告即将结束或已结束登录的三项变化。
- 可读的结束日期。 该版本“在
claude auth status(loginExpiresAt) 和claude -pJSON 结果 (credential_expires_at) 中增加了存储的 claude.ai 登录结束日期”。 - 脚本的早期预警。 它还“在存储的 claude.ai 登录结束前 10 天开始,向
claude -p文本输出添加了一行 stderr 警告”。 - 更清晰的失败提示。 它“修复了存储的 claude.ai 登录达到时间限制时的登录失败问题:现在会明确提示,并在
claude -p中指明claude auth login和claude setup-token”。
同一版本还修复了一个相关问题:“修复了当另一个终端或主机在同一主目录下重新登录同一账号和组织时,任务以 Not logged in 退出”。错误页面解释了旧版本的原因:“在 v2.1.318 之前,Claude Code 在保存新登录之前,会在该登录过程中删除存储的登录。”
在此版本之前,您可以依赖的警告是交互式会话启动时的警告。现在,调用 claude -p 的脚本或计划任务也能看到日期,并能在任务停止前向您发出警告。
“登录过期”的含义
Anthropic 的错误参考精确描述了这种状态:“Claude Code 尝试续期您保存的 claude.ai 登录,但 OAuth 服务拒绝了存储的刷新令牌,因此 Claude Code 清除了保存的凭据。此后,每个模型请求在到达 API 之前都会在本地停止并显示此消息,因为只有 /login 才能创建新凭据。”
该描述中的三个细节至关重要。
它适用于 claude.ai 登录。 即您通过 /login 为 Pro、Max、Ultra、Team 或 Enterprise 计划创建的登录。Anthropic 补充道:“使用 API 密钥、CLAUDE_CODE_OAUTH_TOKEN 或第三方提供商进行身份验证的会话不使用保存的登录,永远不会看到此消息。”
Claude Code 自行停止请求。 模型请求在到达 API 之前就已停止。在未登录的情况下重试,每个请求都会返回相同的消息。
这与令牌被撤销不同。 文档将两者区分开来:“这与 OAuth 令牌被撤销或过期不是同一种状态。那些消息报告的是 API 返回的拒绝。Claude Code 本身对已经续期失败的登录产生 Login expired,因此它不会发送任何请求。”
脚本和 SDK 中的相同状态
在非交互模式和 Agent SDK 中,措辞会有所变化。Anthropic 给出的消息为 Failed to authenticate: OAuth session expired and could not be refreshed,结构化错误代码为 authentication_failed。请在日志中搜索此措辞,而非交互式界面的措辞。
看起来相似的消息
错误页面上的几个邻近项值得区分:
- Not logged in (未登录)。 “此会话没有可用的有效凭据。”解决方法相同,但原因可能是缺少环境变量而非登录过期。
- Anthropic profile login expired (Anthropic 配置文件登录过期)。 以重新验证 Anthropic 配置文件指令结尾的登录过期消息属于不同的凭据,即
antCLI 使用的凭据。 - Account on hold (账号被挂起)。 当由于账号本身被封禁而导致续期失败时,Anthropic 表示 Claude Code 会显示一条单独的消息。
过期前的警告
Anthropic 的身份验证指南描述了早期信号:“当您通过 /login 创建的登录距离过期还有三天时,Claude Code 会在启动时显示警告:Your login expires in 3 days · run /login to renew。”
该警告不会停止任何操作。用 Anthropic 的话来说,“该警告仅供参考,绝不会阻塞请求:身份验证会一直工作到登录实际过期为止。”此外,它仅针对 claude.ai 登录显示。指南指出,当“云提供商、ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN 或 apiKeyHelper 提供凭据时”,不会显示该警告。
您可以自行检查状态。运行 /status。当保存的登录是您的活动凭据且无法再续期时,文档称“Login”行将显示“Expired — log in again”,以及为该登录保存的组织和电子邮件。在会话之外,claude auth status 现在将结束日期包含在 loginExpiresAt 中。
登出期间哪些功能会停止
会话中的每个模型请求
由于每个模型请求都在本地停止,Claude 在您重新登录前无法回复。会话保持开启状态,您之前的对话轮次仍显示在屏幕上。
无人值守运行的会话
这是 Anthropic 特别指出的情况。“提前续期对于无人值守运行的会话最为重要。在 agent view 中的后台会话或寿命超过登录期限的 Remote Control 会话,一旦凭据过期就无法继续进行,直到您再次登录。”
如果您让后台会话运行过夜,或者通过 Remote Control 从手机驱动会话,登录过期就是它们停滞的时刻。我们的 Claude Code agent view 指南解释了这些后台会话如何共享您的项目上下文。
脚本和计划任务
使用 claude.ai 登录的 claude -p 任务会因上述非交互式消息而停止。从 v2.1.318 开始,stderr 警告会提前十天通知,JSON 结果包含 credential_expires_at 供脚本检查。
哪些内容保留在您的机器上
过期的凭据和您的工作成果存储在不同的位置。
您的登录信息。 Anthropic 的凭据部分指出,在 macOS 上,“凭据存储在加密的 macOS Keychain 中”;在 Linux 上,它们位于 ~/.claude/.credentials.json。这就是续期失败时被清除的内容。
您的会话记录。 Anthropic 的会话文档称:“Claude Code 将会话存储在 ~/.claude/projects/<encoded-cwd>/*.jsonl 下。”错误页面描述的是清除凭据,而非这些文件。重新登录后,/resume 和 --continue 会像以前一样读取它们。我们的查找 Claude Code 会话历史指南解释了文件夹布局。
您的自动记忆 (Auto Memory)。 记忆文档将其放在同一个配置目录中:“每个项目在 ~/.claude/projects/<project>/memory/ 都有自己的记忆目录。”我们的 Claude Code 自动记忆指南涵盖了会话开始时从那里加载的内容。
您的指令和设置。 CLAUDE.md 文件和 settings.json 也是文件,分别位于您的仓库和配置目录中。
关于记录的一个提醒:.claude 目录指南指出“记录和历史在存储时未加密。操作系统文件权限是唯一的保护措施。”无论您是否登录,这都是事实。
使用相同账号重新登录
Anthropic 给出的修复方法很简短:“运行 /login 重新登录。在未登录的情况下重试,每个请求都会显示相同的消息。”
请使用会话所属的账号登录。在同一个配置目录中登录不同的账号会更改凭据,但保留相同的本地文件夹,因此该账号随后会接管您的会话和自动记忆。云端会话与您的 claude.ai 账号绑定,这是使用相同账号的另一个原因;我们的 Claude Code 跨机器遗忘指南涵盖了云端会话携带和不携带的内容。
如果您已从另一个 Claude Code 窗口登录,则可能无需在停滞的窗口中执行任何操作。错误页面称,如果您“在另一个使用相同配置目录的 Claude Code 窗口中登录,显示此消息的交互式会话将自动开始使用该登录”。
登录后恢复旧会话时,第一个请求可能需要重新读取大量上下文。我们的恢复使用量警告指南解释了 Claude Code 何时会发出警告以及该如何应对。
针对自动化:不依赖浏览器登录的凭据
Anthropic 对非交互式运行的建议是在同一环境中进行一次交互式登录,然后重新运行命令。“对于无法进行交互式登录的自动化,请使用 ANTHROPIC_API_KEY 进行身份验证,或使用 claude setup-token 生成长效令牌。”
长效令牌有其自身的限制。身份验证指南将其描述为“一年期的 OAuth 令牌”,并补充道:“它只能发出模型请求,因此无法建立 Remote Control 会话或获取 claude.ai 连接器。”指南还提到该命令“不会在任何地方保存令牌”,因此您需要自行存储,例如存储在 CI 系统的机密存储中。
如果您添加了其中之一,请记住凭据优先级。Anthropic 的优先级列表将 ANTHROPIC_API_KEY 和 CLAUDE_CODE_OAUTH_TOKEN 置于 /login 的订阅登录之前,因此留在 shell 配置文件中的密钥可能会改变会话使用的凭据。/status 会显示正在使用的凭据。
人们首先尝试的操作
重试提示词。 请求在到达 API 之前就已停止,因此重试会返回相同的消息。
重启会话。 重启不会创建新凭据。只有 /login 或另一个使用相同配置目录登录的 Claude Code 窗口才能创建。
删除配置文件夹以清除登录。 这会连同凭据文件一起删除您的会话记录和自动记忆。官方记录的修复方法是 /login。
使用浏览器提供的任何账号登录。 如果是不同的账号,它现在将使用您的本地会话和记忆。登录后请检查 /status。
认为启动警告会阻塞工作。 它不会。它只是一个提醒,工作会一直持续到登录实际结束。
解决方法:检查日期,提前续期,保持无人值守工作运行
第 1 步:检查登录何时结束
在会话中运行 /status,或在终端运行 claude auth status。在 v2.1.318 或更高版本中,输出包含结束日期。如果您没看到,请更新 Claude Code。
第 2 步:在无人值守工作运行前续期
如果后台会话、Remote Control 会话或计划的 claude -p 任务将在您离开时运行,请在离开前运行 /login,而不是等它们停滞后再处理。对于在无人值守情况下运行的任务,请在上述限制范围内使用 ANTHROPIC_API_KEY 或来自 claude setup-token 的令牌。
第 3 步:重新登录相同账号并恢复
出现错误后,使用会话所属的账号运行 /login,通过 /status 确认,然后使用 /resume 或 --continue 恢复。您的记录和自动记忆都在原处。
在 MemoryLake 中进行设置
登录过期只是短暂的中断,但它展示了您的工作上下文有多少是存放在一台机器、一个配置目录、一个登录名之下的。如果您更换机器或工具,除非手动复制,否则这些文件中的决策和规范就会被遗留下来。
MemoryLake 是一个记忆层,用于将这些事实保存在一个由您维护的地方,供您连接的助手(如 ChatGPT、Claude Code 和 Codex)使用。
您可以用自己的语言亲自编写条目。不会从您的 Claude Code 会话、配置目录、凭据、CLAUDE.md 文件、自动记忆或任何供应商的存储中读取、写入或删除任何内容。/login、claude auth status 和 Claude Code 的凭据处理将继续按照 Anthropic 描述的方式工作。
第 1 步:创建 API 密钥
登录并在控制面板生成密钥。该密钥属于您的 MemoryLake 工作区,与您的 Claude 登录相互独立。

第 2 步:上传您的第一条记忆
从您希望在任何中断后都能保留的项目决策和规范开始:代码的功能、您排除的方案、下一步计划。每条记录一个要点。

第 3 步:连接您的 AI 和智能体
连接 Claude Code 和您使用的任何其他助手。在您重新登录、更换机器或使用其他工具后,这些条目依然可用。

这在实践中带来了哪些改变
第一个区别是预警时间。通过 claude auth status 中的结束日期和 claude -p 的十天 stderr 警告,您可以按照自己的计划续期,而不是从停滞的任务中才发现问题。
第二个区别是对错误反应更冷静。该消息是关于凭据的。您的会话和自动记忆是磁盘上的文件,使用相同账号登录即可重新找回它们。
第三个区别是当发生更大变化(如更换新机器或新账号)时,需要重建的内容更少。您依赖的事实不再仅仅存在于一个配置目录中。
Claude Code 登录的最佳实践
查看结束日期。 在 v2.1.318 或更高版本上使用 claude auth status。
在离开前续期。 后台和 Remote Control 会话会在过期时停滞。
使用相同账号重新登录。 同一目录下的不同账号会使用相同的本地会话和记忆。
为自动化使用正确的凭据。 使用 API 密钥或 claude setup-token 令牌,并注意其文档说明的限制。
留意多余的环境变量。 它们的优先级高于 /login。
不要为了修复登录而删除配置文件夹。 它保存着您的记录和自动记忆。
保护记录文件。 它们在存储时未加密。
结论
登录过期意味着 Claude Code 无法续期您的 claude.ai 登录并清除了保存的凭据。此后每个模型请求都会在本地停止,直到您运行 /login。您的会话记录、自动记忆和指令文件是配置目录中的独立文件,官方修复方法是重新登录。
v2.1.318 增加的是通知机制:claude auth status 中的结束日期、claude -p 的 JSON 字段以及提前十天的 stderr 警告。利用这些功能在无人值守会话和计划任务停滞前进行续期,并使用会话所属的账号重新登录。