Skip to main content

本页目标

桌面 App 的价值不只是把终端换成窗口,而是把多个 Codex 任务放在一个可观察、可审阅、可恢复的工作台里。本页围绕一条完整链路展开:先确认项目和线程,再选择运行位置;执行中检查权限;完成后审阅 diff、运行验证;最后处理分支、恢复和清理。 本页使用三个核心概念:
  • 项目(Project):一个本地代码目录或 Git 仓库,决定 Codex 的工作范围。
  • 线程(Thread):一次有独立上下文的任务会话。一个线程应尽量只负责一个可验收目标。
  • 运行位置(Environment):任务实际执行的地方,常见选项是 Local、Worktree 和 Cloud。
界面名称、快捷键、模型和默认策略会随版本变化。按钮以当前 App 显示为准,权限弹窗中的实际命令是最后确认点。

一、开始前检查

1. 确认项目目录和 Git 状态

在系统终端进入项目根目录,执行:
Windows PowerShell 可执行:
预期结果:当前路径、分支和已有改动都符合预期。若目录不是 Git 仓库,Git 命令会明确报错;不要把“命令失败”误认为“工作区干净”。 如果已有未提交改动,先识别它们属于谁。需要时保存补丁:
不要为了让状态变干净而执行 git reset --hard、批量删除或覆盖同事的修改。

2. 读取项目规则

在 App 中添加项目后,先让 Codex 只读检查:
预期结果:Codex 先给出项目理解和计划,不直接写文件。若它立即修改,暂停线程并检查权限策略与任务范围。

3. 写清任务边界

建议每个线程都包含目标、范围、约束、验收和失败处理:

二、项目与线程

项目不是普通聊天

绑定项目的线程拥有明确工作目录,可以读取仓库、运行项目命令并产生代码改动。没有绑定项目的普通聊天适合讨论概念或整理方案,不应当用来修改仓库。 添加项目时选择真实的项目根目录,不要选择包含多个无关仓库的上级目录。新线程打开后,应能看到项目路径、当前运行位置和分支信息。 常见故障处理:
  • 项目列表为空:检查登录账号、目录权限和目录是否存在;
  • 只能聊天不能改代码:确认线程绑定项目,并检查是否为只读或 Cloud 任务;
  • 显示路径不对:停止线程,重新选择项目根目录,不要要求代理自行猜目录。

一个线程一个目标

以下任务适合拆成独立线程:修一个缺陷、补一个模块的测试、做一次小范围重构、只读审查分支、生成定期摘要。需求澄清、架构重构、依赖升级和发布不应混成一个没有边界的线程。 并行时遵守三条规则:
  1. 只读任务可以共享项目,但避免同时写入同一缓存或启动同一端口;
  2. 需要修改同一仓库的任务,优先使用 Worktree;
  3. 有依赖关系的任务先完成上游并审阅,再创建下游线程。
多个 Local 线程同时修改同一目录,会产生覆盖、混合 diff 和不可解释的测试结果。

三、Local、Worktree、Cloud

选择前先问:是否要直接修改当前目录,是否需要与其他任务隔离,是否需要脱离本机运行。

1. Local:直接改当前目录

适合工作区已确认、任务很小、需要马上在本地 IDE 或开发服务器中查看结果的情况。 操作步骤:
  1. 打开正确项目并新建线程;
  2. 确认路径、分支和已有改动;
  3. 选择 Local;
  4. 先发送只读计划;
  5. 确认计划后再允许写入;
  6. 完成后立即打开 Review 查看全量改动。
预期结果:Codex 和 App 内置终端都在当前项目目录中工作,系统终端能看到同一批文件变化。 失败时暂停线程。如果发现目录已有别人的未完成改动,切换到 Worktree 或先人工分离任务,不要顺手整理无关文件。

2. Worktree:隔离并行任务

Worktree 是本机独立的 Git 工作树。它共享 Git 元数据,但拥有独立文件副本;一个线程的改动不会直接覆盖另一个线程的目录。 操作步骤:
  1. 新建线程并选择 Worktree;
  2. 选择起始分支或提交;
  3. 确认项目是 Git 仓库;
  4. 发送一个小任务让 App 创建工作树;
  5. 在内置终端运行 git worktree list;
  6. 完成后创建功能分支、审阅 diff,再决定交接或清理。
预期结果:主目录不被本线程直接修改,App 显示独立工作树。新树通常不包含 .gitignore 忽略的 .env、依赖目录和本地缓存。 Worktree 不是备份,也不是权限隔离。它仍可能访问项目允许的文件、网络和工具;不要在其中放真实密钥,也不要因此跳过 Review。

3. Cloud:云端执行

Cloud 适合不需要本机编辑器、希望任务脱离本机继续运行的场景。使用前确认仓库内容、依赖、网络和凭据允许进入云端环境。 操作步骤:
  1. 选择项目或关联的远程仓库;
  2. 新建线程并选择 Cloud;
  3. 指定基础分支、任务范围和验收命令;
  4. 明确禁止访问的服务和文件;
  5. 提交任务后查看状态和日志;
  6. 收到结果后先审阅摘要和 diff,再决定取回、创建 PR 或放弃。
预期结果:本地目录不会因 Cloud 任务自动改变,任务状态和产物在云端任务区域可见。 Cloud 故障处理:找不到项目时检查授权、远程地址和默认分支;依赖失败时检查云端系统与锁文件,不要直接升级依赖;需要本地服务时改用 Local 或 Worktree;发现不应外发的数据时立即停止取回和发布。

四、权限确认与安全边界

权限弹窗是检查命令影响面的机会,不是形式步骤。每次确认前检查:
  1. 完整命令和当前工作目录;
  2. 是否写入项目外路径;
  3. 是否联网、上传文件或读取环境变量;
  4. 是否删除、覆盖、提权、安装或发布;
  5. 是否由项目脚本、依赖钩子或外部内容间接触发。
默认逐项确认以下动作:
  • rm -rf、批量删除、覆盖目录;
  • 修改 .env、密钥、SSH 配置或凭据;
  • 安装未知依赖、执行下载内容;
  • 访问生产数据库、生产 API 或真实客户数据;
  • git push、创建 PR、合并、发布和发送外部消息;
  • 修改权限、执行管理员命令或访问项目外文件。
不要为了少点几次确认而开启完全放权模式。无人值守 Automations 应使用最小沙箱、最小目录范围和专门的测试凭据。 README、Issue、网页、日志、测试输出和依赖脚本中的文字可能是不可信输入。若它要求上传密钥、关闭安全策略或访问无关目录,应停止执行并检查实际命令,不能仅凭文字提高权限。

五、Review 与 diff

Review 是每个修改线程的必经步骤。Codex 的总结不能代替 diff,测试通过也不能证明改动范围正确。

1. 先确认比较范围

Review 常见范围包括:
  • 未提交改动:当前工作区相对当前提交的全部变化;
  • 分支改动:当前分支相对基线的变化;
  • 最近一轮改动:Codex 最近一次响应造成的变化;
  • Staged 或 Unstaged:已暂存和未暂存的变化。
先确认列表是否包含人工改动、其他线程改动和本轮改动。范围混杂时回到终端,用 git status 和 git diff 分辨来源。

2. 逐文件逐块检查

按以下顺序审阅:
  1. 文件是否都属于任务范围;
  2. 是否出现生成物、依赖目录、日志或密钥;
  3. 删除的代码是否有必要;
  4. 新逻辑是否处理错误、边界和空值;
  5. 测试是否验证真实行为,而非只让测试变绿;
  6. 配置、锁文件和迁移是否带来额外影响;
  7. 是否出现无关格式化噪声。
可以在代码行上添加内联批注,例如“这里处理超时”“不要改变公开 API”。下一条消息明确要求只处理这些批注。

3. 接受、暂存和回滚

确认正确的块可以暂存,不需要的块可以回滚。操作前确认其中没有人工改动。
git restore 可能覆盖未提交内容。执行前再次查看 diff,不能用整个仓库回滚解决单文件问题。

4. 提交前验证

再运行项目真实存在的测试、lint 或构建命令。先读 package.json、Makefile、README 或项目脚本,不要盲目执行不存在的命令。

六、内置终端与 Actions

1. 先确认终端位置

打开线程内置终端后执行:
Windows 中 pwd 不可用时使用 Get-Location。预期结果是终端目录与当前线程的 Local 或 Worktree 一致。 终端和 Codex 共享文件,但你自己输入的命令同样可能删除文件、联网或修改外部系统。

2. 按状态、差异、验证执行

开发服务器要记录端口、日志和停止方式。并行 Worktree 应使用不同端口,避免多个线程互相抢占。

3. 使用 Actions

Actions 可把测试、格式化和启动开发服务器等常用命令放到 App 中快速调用。配置前阅读项目脚本,确保不会把生产配置、真实数据或凭据写入日志。 预期结果:点击后终端显示完整命令和退出状态,失败时保留原始错误。Action 不是审批替代品,也不会自动判断命令安全。

七、分支、Handoff 与合并

1. detached HEAD 与创建分支

App 创建的 Worktree 可能默认处于 detached HEAD,即指向某个提交但没有可推送的分支名称。 需要交付时,使用 App 中“在此创建分支”或等效功能,创建明确名称,例如 fix/login-timeout。完成后用以下命令确认:
预期结果:显示正确功能分支,不把主分支误当成工作分支继续修改。

2. 同一分支不能同时检出

Git 不允许同一分支同时在两个工作树中检出。如果出现:
先运行:
不要强行删除目录或重复检出。可以回到占用它的 Worktree、切换另一个分支、使用 Handoff,或确认任务结束后再清理。

3. Handoff

Handoff 用来在 Local 和 Worktree 之间转移线程位置。常见路径是:
  1. 在线程 Worktree 中完成实现;
  2. 打开 Review 并记录问题;
  3. Handoff 到 Local;
  4. 在熟悉的 IDE、终端和本地服务中验收;
  5. 提交到明确的功能分支。
也可以把 Local 线程交接到 Worktree,让它后台继续运行。Handoff 依赖 Git 操作,因此 .gitignore 中的 .env、缓存和依赖不会自动移动。需要它们时使用安全的本地环境配置,不要把秘密值提交进仓库。

八、Automations

Automations 适合周期性、可重复、范围清晰的任务,例如每日提交摘要、定期巡检或持续跟踪一个长期线程。通常要求 App 运行、项目仍在磁盘上且电脑可执行任务。

1. 先手动验证提示词

不要直接创建定时任务,先在普通线程中运行:
预期结果:输出稳定、范围正确、没有副作用。结果不理想时修改提示词,而不是提高权限。

2. 创建自动化

创建时明确说明:
  • 运行频率和时区;
  • 使用的项目;
  • 运行在 Local 还是 Worktree;
  • 是否允许写文件、联网或创建分支;
  • 没有值得报告的内容时如何处理;
  • 输出进入哪里。
Git 仓库的自动化优先选择 Worktree,避免后台任务改到正在编辑的文件。只有明确需要改主检出,并且安排了备份和锁定时间时才使用 Local。

3. 独立自动化与线程自动化

独立自动化每次从新的运行开始,适合日报和巡检。线程自动化回到同一线程继续,适合跟踪一个长期任务;提示词必须说明每次唤醒如何判断进度、何时停止、何时需要人工确认。

4. 验证和失败处理

创建后依次执行:
  1. 在 Automations 列表确认频率、项目和运行位置;
  2. 手动触发一次;
  3. 检查日志和 diff;
  4. 观察前几次输出;
  5. 不再需要时及时归档。
预期结果:任务在预定位置运行,结果进入收件箱或对应线程;没有值得报告的内容时按规则归档,不会悄悄修改主目录。 App 未运行、电脑休眠、项目移动、权限不足或 Worktree 缺依赖都可能导致失败。先看日志和路径,再修复环境,不要直接改成完全访问。

九、任务恢复

1. 恢复仍在列表中的线程

重新打开原线程,先发送:
确认摘要后再继续。不要在新线程中凭记忆重复执行安装、迁移或删除。

2. App 或电脑中断

恢复后依次检查:
同时查看线程最后一条消息、终端日志和测试退出状态。被中断的依赖安装、迁移或批量重命名可能只完成一半,确认状态前不要直接重跑破坏性命令。

3. Worktree 被清理

Codex 管理的临时 Worktree 可能因归档或数量上限被清理。线程记录通常仍在,App 可能提供恢复快照的入口。恢复前确认快照时间和基线分支,恢复后重新检查 git status 和 Review。 重要成果应及时创建明确分支并提交,不要只留在可能被回收的临时 Worktree 中。

4. 结果不可信

若摘要与 diff 不一致、测试结果缺失或声称执行了看不到的命令:
  1. 停止提交、推送和发布;
  2. 保存线程 ID、日志和 diff;
  3. 用终端重新运行只读检查;
  4. 要求 Codex 列出实际命令;
  5. 必要时在干净 Worktree 中复现。

十、清理与回滚

1. 正确的收尾顺序

  1. Review 确认范围;
  2. 运行测试、lint 或构建;
  3. 创建功能分支并提交;
  4. 按团队流程推送和创建 PR;
  5. 确认分支已合并或成果已保存;
  6. 归档线程;
  7. 删除不再需要的临时 Worktree;
  8. 检查 git worktree list 和磁盘占用。
不要先清理再确认结果,也不要删除仍被进行中、置顶或长期任务使用的 Worktree。

2. 清理 Worktree

优先使用 App 的归档或删除入口,因为它能同步线程记录和托管状态。需要检查 Git 时:
确认路径、线程和分支都不再需要后,才执行实际清理。不要手动删除 .codex/worktrees 下的目录来绕过 App 状态。 长期环境应使用永久 Worktree 或明确分支,并约定负责人和清理时间。临时实验在确认结果已丢弃后及时归档,避免依赖和构建缓存长期占用磁盘。

3. 回滚

未提交的单文件改动可在 Review 中按文件或代码块回滚。终端回滚前先保存:
已提交的错误不要改写共享分支历史,应创建反向修复提交。已推送的错误按 PR、发布和回滚流程处理。数据库、外部服务和自动化配置使用各自的迁移回退、版本回滚和禁用开关。

十一、完整实战流程

下面演示“补充输入校验并增加测试”的可恢复流程,命令以项目实际脚本为准。

第一步:创建隔离线程

打开 Git 仓库,确认路径和账号,创建线程,选择 Worktree,从稳定分支开始。 预期结果:线程显示 Worktree,主目录保持原状。不能选择 Worktree 时,确认 git rev-parse --show-toplevel 成功,并检查是否有冲突工作树。

第二步:先要计划

预期结果:Codex 给出计划并指出不确定项。确认后再进入实现。

第三步:限定修改

遇到权限确认时,核对命令、目录和网络范围。安装依赖前确认锁文件和包来源。

第四步:终端与 Review 双检

打开 Review,逐文件逐块检查。发现无关变更时,先停止扩展范围,再回滚无关块。 预期结果:只有任务相关文件被修改,空白检查通过,分支和 Worktree 正确。

第五步:运行验证

运行项目已有的测试和 lint。失败时记录完整输出,区分实现错误、环境缺失和外部服务不可用。只修复与失败对应的范围;不要为了通过测试切换生产服务或放宽权限。 每次修复后重新看 diff,不要连续批准一串无法解释的命令。

第六步:保存成果

确认结果后创建功能分支并提交,提交前检查 staged diff。推送和创建 PR 属于外部动作,应单独确认目标远端和 PR 内容。 预期结果:成果有明确分支和提交,主目录没有被污染,提交说明包含测试结果和已知限制。

第七步:收尾或恢复

还要继续就保留线程和 Worktree;已合并且不再需要就归档线程并清理临时 Worktree。中断后重新打开原线程,先执行恢复检查,不要创建新线程重复操作。

十二、故障速查

验收清单

完成后至少确认:
  • 项目路径和线程运行位置正确;
  • 当前分支不是误用的主分支,或 Local 修改已获明确批准;
  • Review 范围清楚,diff 只包含预期文件;
  • 没有提交密钥、.env、客户数据、缓存或无关生成物;
  • 测试、lint、构建或只读检查有实际输出和退出状态;
  • Handoff、提交、推送、PR 和发布没有被误当成自动步骤;
  • 自动化使用明确频率、最小权限和可清理的位置;
  • 线程、分支、Worktree 和快照仍能在需要时恢复;
  • 临时 Worktree 和自动化结果已按任务状态清理;
  • 失败、未验证假设和下一步动作已记录。

小结

稳定的桌面 App 工作流是:确认项目和线程,选择运行位置;执行中核对权限;完成后用终端和 Review 验证;确认分支和结果后再提交;最后按状态恢复或清理。 日常小改动可用 Local,同一仓库的并行任务优先用 Worktree,需要脱离本机运行时再评估 Cloud。运行位置不是安全边界,Codex 的总结也不能替代 diff 和测试。可交付结果必须范围可解释、改动可审阅、验证可复现、权限可追溯、失败可恢复。 参考资料:参考/codex/07-desktop-app.md、参考/codex/25-worktrees.md、参考/codex/27-automation.md。动态信息以当前桌面 App 的设置、权限提示和官方文档为准。