工作流
把任务从 Claude Code 交接给 Codex,不丢上下文
重构做到一半,Claude 的用量用完了;或者你想听听另一种意见。下面讲清楚哪些内容必须交给下一个智能体,以及三种交接方式。
简要回答
两个智能体都不会加载对方的对话记录,所以要靠一份交接说明把任务带过去:目标和你的最后一条指令、计划、改动过的文件、git 状态,代码本身就在磁盘上。把共享规则写进 AGENTS.md,提交进行中的工作或用 git stash create 存一份,然后自己写交接说明、用 hop 这类工具生成,或者让 Maude 这样的应用在切换时自动生成。
你可以在任务进行到一半时从 Claude Code 切换到 Codex,不必从头再来,但两个智能体都不会自己接上对方的对话。真正把任务带过去的,是一份简短的交接说明:目标、计划、改动过的文件、git 状态和你的最后一条指令,再加上磁盘上的代码。这份说明可以手写,可以用小工具生成,也可以交给一个在你切换时自动生成它的应用。
为什么要在编程智能体之间交接任务
- 用量到了上限。这是最常见的原因。重构做到一半,Claude 套餐的用量用完了,而 ChatGPT 套餐还有余量。等额度重置要花上几个小时,在 Codex 里从头开始又会丢掉上下文。
- 第二意见。一个智能体在某个 bug 上原地打转。换一个模型、用干净的上下文读同一份代码,常常能发现前一个已经视而不见的问题。提交之前让一个智能体审阅另一个的 diff,成本也很低。
- 各有所长。有人用一个智能体做规划,用另一个做大量机械性修改;也有人在某种语言或框架上固定用自己觉得顺手的那个。谁更擅长什么,每次模型更新都会变,所以把它当作你自己的判断,而不是定律。
Codex 能读取 Claude Code 的会话吗?
不能直接读取。两个智能体都会把完整对话记录以 JSONL 文件保存在磁盘上。Claude Code 写入 ~/.claude/projects/<project>/<session>.jsonl(Claude Code 文档),Codex 则写入按日期命名的 rollout-*.jsonl 文件,位于 ~/.codex/sessions/ 下。它们都能恢复自己的会话(claude --resume、codex resume),但都没有在文档中说明能加载对方的会话。Claude Code 的 /import 命令可以导入另一个智能体的配置,比如指令文件、MCP 服务器和 skills,但不包括对话。
你也可以让新智能体直接去读原始的对话记录文件。但实际上这是一份糟糕的交接说明:篇幅长,满是工具输出,还把新智能体最需要的那件事——你进行到哪一步、下一步做什么——埋在了里面。
哪些上下文必须交接
| 上下文 | 为什么重要 | 从哪里来 |
|---|---|---|
| 目标和最后一条指令 | 新智能体必须知道怎样才算“完成”,以及你最近要求的是什么 | 你最后一条提示词,一字不改 |
| 计划 / 待办列表 | 避免智能体重新规划已经划定范围的工作 | 前一个智能体的待办列表 |
| 改动过的文件 | 告诉智能体修改前应该先读哪些文件 | 对话记录中的修改,加上 git status |
| Git 状态 | 分支、HEAD 和未提交的改动。缺了这些,新智能体可能会重做工作或覆盖着提交 | git status、git diff --stat |
| 已做的决定和走不通的路 | 免得新智能体重试一个已经失败的方案 | 最近的对话,或一份书面总结 |
项目约定,比如构建命令和代码风格,根本不该写进交接说明。它们应该放在两个智能体都会读取的指令文件里。
自己动手:用 AGENTS.md 和 CLAUDE.md 共享指令
Codex 从 AGENTS.md 文件构建指令,读取范围包括 ~/.codex/,以及从 git 根目录到当前工作目录的各级目录(Codex AGENTS.md 文档)。从 v2.1.277 起,Claude Code 也会读取 AGENTS.md,但默认仅在当前工作目录及其上级目录中都没有 CLAUDE.md 或 CLAUDE.local.md 时才读取(Claude Code memory 文档)。让两个智能体都能读到的最简单做法:把共享规则放在 AGENTS.md 里;如果需要只给 Claude 的规则,就在 CLAUDE.md 开头加一行导入:
@AGENTS.md
## Claude Code
Use plan mode for changes under src/billing/.
反过来也行。Codex 的 project_doc_fallback_filenames 设置(位于 ~/.codex/config.toml)可以让它在没有 AGENTS.md 时读取其他文件名。
自己动手:交接文档加 git
切换之前,如果前一个智能体还有用量,就趁它还掌握上下文时,让它把交接说明写出来:
Write HANDOFF.md for another coding agent taking over this task:
the goal, what is done, what is in progress or broken, decisions
and dead ends, files touched, and the exact next steps.
Don't change any other file.
然后让代码状态清晰无歧义。把进行中的工作提交到一个分支是最清楚的做法。如果你不想提交,git stash create 会把已跟踪文件的未提交改动记录成一个 commit 对象,且不动你的工作区;万一下一个智能体出了岔子,你就有一个可以对比 diff 的固定点。在同一目录下启动另一个智能体,让它先读 HANDOFF.md,并在修改前重新读一遍相关文件。
自动化工具
hop(MIT 许可)一条命令就能完成:hop codex 从 Claude Code 交接到 Codex,hop cc 则反过来。它直接读取源智能体的会话文件,因此即使那个智能体已经没有额度也能用。你甚至可以在卡住的 Claude Code 会话里运行 ! hop codex。它会在大小预算内(默认 48 KB)写出一份交接文档,包含你的指令、git 分支和最近的对话,并在新的终端标签页中打开另一个智能体。类似的项目还有 cli-handoff 和 session-handoff。
| 方式 | 额度用完时能否使用 | 每次切换的工作量 | 是否带上对话 |
|---|---|---|---|
| 仅共享 AGENTS.md | 能 | 无,但它传递的是约定,不是任务状态 | 否 |
| 智能体写的 HANDOFF.md + git | 仅当前一个智能体还能回应时 | 一条提示词加一次提交 | 以总结形式 |
| hop 及类似 CLI | 能 | 一条命令 | 最近几轮,有大小预算 |
| 内置切换功能的应用 | 能 | 点一下 | 取决于应用 |
Maude 中的交接如何运作
Maude 在你自己的服务器上运行智能体,而且一个会话不绑定某一个智能体。会话空闲时,你可以在手机上把它从比如 Claude Code 切换到 Codex(或 OpenCode、Grok Build、Antigravity)。服务器上的守护进程会根据会话本身的记录生成交接说明,而不是依赖一份仓促写成的总结:
- 一段开场说明,告诉新智能体它正在接手、磁盘上的文件才是唯一可信来源,以及修改前应先重新读取
- 你的最后一条指令,置顶
- 当前的计划或待办列表
- 改动过的文件,来自智能体的修改记录以及 git 报告的变更文件
- git 状态:分支、HEAD、简短状态和 diff 统计。未提交的工作还会用
git stash create做一份快照,保存在一个 ref 下,不动你的工作区 - 最近的对话,原文照录,最多约 120,000 个字符
- 指向完整对话记录的链接,记录以 markdown 格式导出到项目中的
.maude/handoff/,并排除在git status之外
交接说明会附在你发给新智能体的下一条消息前面,聊天界面会显示一条分隔线,展开即可看到实际发送的完整内容。由于交接说明来自会话记录,它不依赖前一个智能体还能回应——而这在它刚刚用完额度时最为关键。
切回去时情况不同。如果你要切回的智能体之前已经在这个会话中工作过,并且支持恢复会话,Maude 会恢复那个智能体自己的对话,只发送它离开期间发生的事情,不会再发一份完整的交接说明。
能做到这一点的并不只有 Maude。Happier 允许你在对话中途更换引擎,并为新智能体提供读取之前对话记录的工具。AgentsRoom 在你切换提供商时,会生成一份交接摘要,包含修改过的文件、会话活动和最后一条回复。我们在 Maude vs Happier 中比较了两者的取舍。想决定搭配哪些智能体,请看 Claude Code vs Codex vs OpenCode。
常见问题
Codex 能读取 Claude Code 的会话吗?
~/.claude/projects/ 下,Codex 不会加载它们。你需要用一份交接说明把任务带过去:自己写、用 hop 这类工具生成,或者使用在切换时自动生成说明的应用。AGENTS.md 和 CLAUDE.md 会冲突吗?
AGENTS.md 的前提是没有 CLAUDE.md。要共用一个文件,就把规则写在 AGENTS.md 中,并把 @AGENTS.md 放在 CLAUDE.md 顶部。Codex 原生读取 AGENTS.md。任务做到一半 Claude 用量到了上限怎么办?
切换智能体会丢失未提交的改动吗?
git stash create,万一下一个智能体出了岔子,你就有一个可以对比的固定点。