如何在任务中途从 Claude Code 切换到 Codex 而不丢失上下文

碰到 Claude 用量上限,或者想听听 Codex 的意见?把上下文放在仓库里,而不是聊天里:两个代理都读取的 AGENTS.md、每次切换都重新生成的 HANDOFF.md,以及作为唯一可信来源的 git。

基于版本
CLI
0.2.17
预览 ref
a2c45c8

要点

你无法把一个正在进行的 Claude Code 对话搬进 Codex。两个工具各自保存会话,谁也不会导入对方的聊天记录。你能搬走的是所有重要的东西,前提是它们存在于仓库中:

  1. 两个代理都读取的同一份指令文件: 把项目规则放进 AGENTS.md。Codex 原生读取它,当前版本的 Claude Code 也会读取(直接读取,或通过 CLAUDE.md 中的 @AGENTS.md 导入)。
  2. 每次切换都重新生成的交接说明: 让即将交班的代理写一份 HANDOFF.md(目标、已完成的、接下来要做的、尝试过但失败的、待解决的问题)。
  3. git 作为唯一可信来源: 切换前提交或 stash 到一个 WIP 分支,让接手的代理读 diff,而不是读你的记忆。

这样切换大约只需两分钟,新代理从一份书面简报开始,而不是面对一个冷冰冰的仓库。

问题

通常是这样发生的:你用 Claude Code 重构了两个小时,5 小时上限到了,而另一个套餐的 Codex 就在旁边。或者 Claude 在一个 bug 上一直兜圈子,你想换个模型看看。

在同一个文件夹里打开 Codex 是可以的,但前十分钟都花在重新解释上:你在做什么,哪个方案已经否掉了,那个测试为什么是故意跳过的。而接手的代理还会兴高采烈地重做你刚告诉另一个代理不要做的事。

解决办法不是什么巧妙的工具,而是决定上下文存放在文件里,而不是聊天里。

常见做法

  • 把 Claude 对话记录的最后一段粘贴给 Codex。 能用一次。但它也会带进噪音(工具输出、放弃的计划),并漏掉已经滚走的内容。
  • 让 Codex “看看 git log 自己弄明白”。 对已完成的工作没问题,对做了一半的工作和从未变成代码的决定毫无帮助。
  • 手动维护两份指令文件。 CLAUDE.md 和 AGENTS.md 不到一周就对不上了。

第 1 步:两个代理共用一份指令文件

Codex 会从仓库(以及上层目录)读取 AGENTS.md。对于 Claude Code,截至 2026-10-11,Anthropic 的 memory 文档 写道:

  • 如果仓库有 AGENTS.md,而工作目录及其上层没有 CLAUDE.md 或 CLAUDE.local.md,Claude Code 会直接读取 AGENTS.md(需要 Claude Code v2.1.277 或更高版本)。
  • 如果有 CLAUDE.md,Claude 默认只读取 CLAUDE.md。这一点要当心:只要为个人笔记加一个 CLAUDE.local.md,就足以让 Claude 不再读取你的 AGENTS.md。
  • CLAUDE.md 可以用 @path 语法导入其他文件,被导入的 AGENTS.md 会一并加载。

对两者都有效(包括较旧版本的 Claude Code)的设置:

<!-- CLAUDE.md -->
@AGENTS.md

## Claude-only notes
- (anything that genuinely only applies to Claude Code, e.g. hook or subagent notes)

然后把所有共用的内容放进 AGENTS.md:构建和测试命令、代码风格、“不要手动改 migrations/”、文档在哪里。保持简短。Anthropic 建议每个文件不超过 200 行,指令文件太长,两个代理遵循得都会更差。

如果你不想保留 CLAUDE.md,可以删掉它,让 Claude 直接读取 AGENTS.md。如果不确定加载了哪些文件,在 Claude Code 中运行 /config 并查看 Project instructions 设置。会话开始时,Claude 读取到文件后会打印类似 AGENTS.md loaded: ... 的一行。

第 2 步:切换前写一份交接说明

在交班的代理丢失上下文之前(如果你能预见上限快到了,就在上限到来之前),让它写这份说明。一个可复用的提示:

Write HANDOFF.md at the repo root for another coding agent taking over this task.
Sections, in this order:
1. Goal (one paragraph, what "done" means)
2. Current state (what works, what's half-done, which files)
3. Next steps (numbered, smallest first)
4. Tried and rejected (approach + why it failed, so it isn't retried)
5. Gotchas (env vars, flaky tests, things that look wrong but are intentional)
6. Open questions for the human
Only facts you verified in this session. No code blocks longer than 10 lines; point to files instead.

两条规则让它真正有用:

  • 每次切换都重新生成,而不是一直往后追加。过时的交接说明比没有更糟。
  • 决定是否提交它。 对个人分支来说,在 WIP 分支上提交 HANDOFF.md 很方便。对共享仓库,把它加进 .git/info/exclude,让它永远不会进入 PR。

第 3 步:把工作放进 git

git checkout -b wip/refactor-auth     # if you aren't on a branch already
git add -A
git commit -m "WIP: auth refactor, handoff to codex" --no-verify

现在接手的代理可以运行 git log -p -1 或 git diff main...,准确看到改了什么,而不用相信一份摘要。(开 PR 之前把 WIP 提交 squash 掉。)

第 4 步:用一个明确的首条提示启动 Codex

codex
Read AGENTS.md and HANDOFF.md, then run `git diff main...` to see the work so far.
Summarize back to me in 5 bullets what you think the task is and what you'll do next.
Don't change any files until I confirm.

“先复述总结”这一步是很便宜的保险:如果总结错了,就修改 HANDOFF.md 而不是对话,这样下次切换也能受益。

之后切回来也是同样的循环反过来走:让 Codex 重写 HANDOFF.md,提交,启动 Claude Code(如果还想要它之前的上下文,claude --continue 会恢复该文件夹中上一次的 Claude 对话)。

Happier 的作用:两种切换方式

如果你想不离开手机就切换代理,Happier 是一款开源应用,可以在手机、桌面或网页上跨设备运行和编排 Claude Code、Codex 等代理。在代理之间切换时,你有两种方式:

方式 1:仓库文件法(上面的第 1–4 步)

这是通用的方法,有没有 Happier 都能用:

  • 它给你带来: 完全的控制权、可在不同工具间迁移,而且上下文留在团队都能看到的 git 中
  • 何时使用: 在机器之间切换、团队交接,或者你希望接手的代理拿着清晰的简报从头开始

真正起作用的是这些文件(AGENTS.md、HANDOFF.md、WIP 提交)。如果你用 Happier,只是意味着你可以在手机上启动新会话,而不用走回笔记本前。

方式 2:在 Happier 内原地切换

从 Happier 0.2.11 起,你可以用 Continue with another Agent 把现有的 Happier 会话原地切换到另一个代理:

  • 会带过去什么: 最近几轮对话的有限、纯文本摘要。图片、文件内容和工具输出不会带过去。
  • 需要了解: 这是一份对话简报,不是不同提供商之间共享的记忆。接手的代理能得到“我们刚才在讨论什么”的上下文,但不会有完整的会话历史,也不知道之前决定背后的理由。
  • 何时使用: 快速换个意见(“Codex 怎么看?”)、卡在某个 bug 上,或者想用另一个模型延续同一条思路

组合使用: 即使原地切换,第 1–3 步依然重要。AGENTS.md 让指令保持一致,HANDOFF.md 记录不该埋在对话轮次里的决定,WIP 提交让接手的代理准确看到改了什么。

账号池(同一个代理,不同账号)

这和切换代理是两回事:如果你切换的原因是用量上限,而你在同一个代理上还有第二个属于你自己的账号(比如你的个人订阅和工作订阅,都是你的,都以你的身份登录),Happier 的账号池可以把会话切换到另一个账号继续。在你有意建立账号池之前,什么都不会切换,而且账号池不会提高任何上限,也不会缩短重置时间。

适合谁

  • 同时有 Claude 和 ChatGPT 套餐、一个用完就换另一个的人
  • 用第二个代理做审查,或者让它用“新眼光”看一个卡住的 bug 的人
  • 同一个仓库里不同成员偏好不同代理的团队

常见错误

  • 两份手动维护的指令文件。 用导入,不要复制。
  • 一个 CLAUDE.local.md 让 Claude 悄悄地不再读取 AGENTS.md(见第 1 步)。
  • 交接说明里塞满粘贴的代码。 指出文件和行号范围即可,接手的代理自己能读。
  • 在编辑到一半时切换。 等当前这一轮结束,否则你交出去的是一个写了一半、没有任何解释的文件。
  • 相信摘要胜过 diff。 说明里写的是代理认为自己做了什么,git diff 才说明它实际做了什么。

故障排查

Claude Code 忽略了 AGENTS.md

检查文件夹或任何上层目录中是否有 CLAUDE.md、.claude/CLAUDE.md 或 CLAUDE.local.md。如果有,Claude 默认会读取它。在其中加上 @AGENTS.md,或在 /config 中修改 Project instructions。

Codex 不遵守 AGENTS.md 的规则

确认你是在仓库内启动 Codex 的,这样它才能找到这个文件。文件太长会被遵循得更差,所以精简一下。把一次性的任务细节移到 HANDOFF.md。

新代理重做了已被否定的工作

你的 “Tried and rejected” 部分缺失或太模糊。每一条用一行写清方案和原因。

常见问题

能把 Claude Code 对话导入 Codex 吗?

不能以对话的形式导入。它们分别保存会话。通过文件(AGENTS.md、HANDOFF.md)和 git 来转移上下文。

Codex 会读取 CLAUDE.md 吗?

Codex 的约定是 AGENTS.md。不要指望它读取 CLAUDE.md,把 AGENTS.md 作为共享文件,再让 CLAUDE.md 导入它。

应该提交 HANDOFF.md 吗?

在个人 WIP 分支上可以,而且很有用。在共享分支上,用 .git/info/exclude 在本地排除它。

这对 OpenCode、Gemini CLI 等也适用吗?

这个模式适用:现在大多数代理 CLI 都会读取 AGENTS.md,或者允许你指定一个文件。具体文件名请查看各工具的文档。

相关指南

claudecodexworkflowscontextusage-limits
最后更新: 2026-10-26