两种 Handoff 模式
Handoff 分两步推出。首先是在 2026 年 3 月初实现的本地与工作树之间的对话迁移;OpenAI 的每周摘要称其“实现了在保留上下文的同时移动活跃对话”。随后在 6 月实现了主机间的对话迁移:“对话接力(Chat handoff)可在本地计算机与连接的远程主机之间迁移对话及其 Git 状态。”
本地与工作树 (Local and Worktree)
工作树是代码仓库的第二个检出副本。OpenAI 的工作树页面这样描述两者关系:“你可以将本地(Local)视为前台,将工作树(Worktree)视为后台。Handoff 让你能在两者之间移动对话。”
要将对话带到前台,你在对话页眉中选择 Hand off 并将其移至 Local。你也可以反向操作,将对话从 Local 移至工作树,以便 Codex 在你处理其他事情时继续工作。
Handoff 如此重要的一个原因是 Git 规则。工作树页面解释道:“Git 仅允许一个分支在同一时间只能在一个地方检出。”Handoff 负责处理 Git 步骤,因此当你想要在本地查看工作时,不会遇到这个障碍。
一个细节让往返变得简单:“每个对话都会长期关联同一个工作树。如果你稍后将对话交还给工作树,Codex 会将其返回到同一个后台环境,以便你从上次中断的地方继续。”
主机之间 (Between hosts)
远程主机是桌面应用连接的另一台计算机,例如 SSH 主机。远程连接页面描述了使用场景:“使用它在本地开始工作,在远程计算机的工作树中继续,并在稍后将对话带回。”
你打开对话,在对话页脚选择当前的运行位置,选择目标主机,检查目标路径和分支,然后选择 Hand off。根据 OpenAI 的说法,在另一端,“Codex 会在目标主机上创建或重用工作树,传输对话和 Git 状态,并将对话切换到该主机。”
随对话迁移的内容
对话内容。 对话本身会迁移,因此下一条消息会延续同一个线程。你不需要重新陈述任务。
Git 状态。 Handoff 处理两个检出副本之间的 Git 操作。对于远程主机,OpenAI 表示它会传输“对话和 Git 状态”。
返回链接。 对于工作树,每个对话都保留相同的工作树,因此交还对话会将其返回到该环境。
留在原处的内容
这部分内容值得在第一次执行 handoff 之前阅读。
被忽略的文件
由于 Handoff 使用 Git,因此 Git 忽略的文件不会随之迁移。工作树页面指出:“由于 Handoff 使用 Git 操作,除非 Codex 使用 .worktreeinclude 将其复制到本地托管的工作树中,否则 .gitignore 文件中的任何文件都不会随对话移动。”
这涵盖了 .env 和本地密钥等文件。代码仓库根目录下的 .worktreeinclude 文件列出了 Codex 在创建托管工作树时应复制的忽略路径。OpenAI 指出,这种行为“适用于本地 ChatGPT 桌面应用托管的工作树,不适用于远程工作树或你自己从命令行创建的 Git 工作树。”对于远程主机,请计划好自己在那里设置这些文件。
内置了一个例外情况:“Codex 会自动将忽略的 AGENTS.override.md 复制到本地托管的工作树中,因此你不需要在 .worktreeinclude 中列出它。”
另一台机器的设置
当对话迁移到远程主机时,它会使用该主机的环境运行。远程连接页面明确说明了这在一般情况下的含义:“远程访问使用连接主机的项目、对话、文件、凭据、权限、插件、Computer Use、浏览器设置和本地工具。”
因此,handoff 后可用的插件、凭据和工具是目标主机上的,而不是你笔记本电脑上的。
记忆与个人指令
Codex 记忆(memories)与机器绑定。记忆页面将该设置描述为“为所选机器开启或关闭”该功能,并且记忆文件存储在该机器的 ~/.codex/memories/ 下。IDE 扩展也遵循同样的模式:它“使用连接的 Codex 主机的本地记忆库”。
你的全局指令也以同样的方式工作。Codex 从运行它的机器上的 Codex 主目录(默认为 ~/.codex)读取全局指南。
Handoff 文档没有描述在主机之间复制记忆或全局 AGENTS.md 的操作。因此,在对话迁移到远程主机后,预计它将使用该主机的记忆和全局指令(如果有)。提交到 Git 的仓库级 AGENTS.md 则在两端都存在。
Handoff 无法做到的事
文档列出了一些限制:
- 需要匹配的项目。 “在交接对话之前,请连接目标主机并为该主机上的同一个 Git 仓库保存一个项目。”如果项目是一个子目录,请在两台主机上保存相同的子目录。“Codex 仅显示具有匹配已保存项目的目标。”
- 会中断正在运行的工作。 “如果对话正在运行,handoff 会在传输前中断当前的响应。”
- 不支持迁移到云端。 你可以在另一个对话中要求 Codex 交接某个命名的对话,但“Codex 无法交接发起请求的当前对话,且不支持交接到 Codex 云环境。”
- 一个分支,一个地方。 如果你在工作树上使用“在此创建分支”创建了分支,则无法同时在本地检出它。OpenAI 的建议是:“如果你计划在本地检出该分支,请使用 Handoff 将对话移至 Local,而不是尝试在两个地方同时检出同一个分支。”
对于你想在 OpenAI 云端运行的工作,我们的为项目上下文准备 Codex 云环境指南 涵盖了该路径。
人们常犯的尝试
在另一台机器上开启新对话。 这可行,但你会丢失上下文,并花费前几条消息重新解释。
在本地检出工作树的分支。 Git 会拒绝,因为该分支已在工作树中检出。Handoff 才是预期的路径。
期望远程主机拥有你的本地设置。 在远程主机上,对话使用该主机的文件、插件、凭据和记忆,而不是你笔记本电脑上的。
在任务中途交接正在运行的对话。 Handoff 会先停止当前响应,所以请让它达到一个停止点。
解决方案:准备两端,在停止点交接,然后确认上下文
第一步:在交接前准备好目标端
对于工作树,添加一个 .worktreeinclude 文件,列出新检出所需的忽略文件,例如 .env 文件。对于远程主机,连接它,为同一个仓库保存一个项目,并设置其环境:忽略的文件、凭据、插件以及你依赖的任何全局指令。如果你使用记忆功能,决定是否也想在该主机上开启它;记忆页面涵盖了按机器开启它们的设置。
第二步:在对话达到停止点时进行交接
让当前响应完成。然后要求 Codex 简要总结现状:已完成的工作、下一步计划以及在此过程中做出的任何决定。该总结存在于对话中,因此会随之迁移,并为另一端的对话提供一个清晰的起点。然后使用 Hand off。
第三步:检查对话在另一端能看到什么
交接后,要求 Codex 总结它正在遵循的指令,并确认它可以运行该项目。如果缺少某些内容,通常是忽略的文件、凭据或存在于另一台机器上的全局指令。在目标端修复它并继续。我们的防止 Codex 跳过 AGENTS.md 规则指南 更详细地涵盖了指令检查。
在 MemoryLake 中进行设置
Handoff 迁移了对话及其代码。但围绕工作的上下文——你喜欢如何处理事情、哪些决定已定稿、项目的惯例是什么——部分存在于对话中,部分存在于某台机器的文件中,部分存在于留在该机器上的记忆中。
MemoryLake 是一个记忆层,用于将这些上下文保存在你维护的一个列表中,供 Codex 以及你连接的其他助手(如 ChatGPT 和 Claude Code)使用。
你用自己的语言编写条目。不会从你的 Codex 对话、Codex 记忆、工作树、远程主机或任何供应商的存储中读取、写入或删除任何内容。对于工作仓库,请遵循你组织关于在仓库之外保留内容的政策。
第一步:创建 API 密钥
登录并从控制面板生成一个密钥。该密钥属于你的 MemoryLake 工作区,与你的 ChatGPT 账号相互独立。

第二步:上传你的第一批记忆
从“解决方案”第二步中的总结以及你原本需要在每个主机上重新设置的惯例开始。每个条目一个要点,注明日期,并标记其适用的仓库。

第三步:连接你的 AI 和代理
连接 Codex 和你使用的其他助手。无论是在你的笔记本电脑、远程主机,还是对话落脚的任何检出副本中,都可以使用相同的上下文。

这在实践中改变了什么
第一个区别是迁移对话不再是一场赌博。你知道对话和 Git 状态会随之迁移,也知道哪些本地碎片不会。
第二个区别是目标端在你到达之前就已准备就绪。忽略的文件已列出,远程项目已保存,你依赖的设置也已到位。
第三个区别是你关心的上下文不依赖于对话在哪个机器上运行。如果你是要完全迁移到新电脑而不是交接对话,我们的将 Codex 设置迁移到新电脑指南 涵盖了整个迁移过程。
Codex Handoff 最佳实践
使用工作树进行后台工作,使用本地(Local)进行检查。 这是 Handoff 设计的核心分工。
在 .worktreeinclude 中列出忽略的设置文件。 否则它们会留在原处。
在每个主机上保存匹配的项目。 Handoff 仅提供具有匹配项目的目标。
在停止点进行交接。 正在运行的响应会被中断。
在迁移前要求提供总结。 它随对话迁移,并在另一端提供帮助。
按机器设置记忆。 Codex 按机器设置记忆。我们的开启 Codex 本地记忆指南 涵盖了相关设置。
不要在两个地方同时检出一个分支。 请改用 Handoff 迁移对话。
结论
Codex Handoff 在本地检出与工作树之间,或在你的计算机与连接的远程主机之间迁移对话及其 Git 状态。这是将后台工作带到前台,或将工作发送到另一台机器而无需开启新对话的方法。
它不会迁移忽略的文件(除非 .worktreeinclude 将其复制到本地托管的工作树中),并且在远程主机上,它使用该主机的插件、凭据、记忆和全局指令。它无法交接到 Codex 云环境。请准备好目标端,在停止点交接,并在到达后检查对话能看到的内容。如果你也使用 Claude Code,我们的 Claude Code 工作树是否共享记忆指南 涵盖了该工具的相同问题。