Skip to main content

任务循环、沙箱、审批与 Git

理解 Codex 的能力之后,还需要理解它为什么有时会直接修改文件,有时会停下来请求批准,以及为什么每次重要任务前都建议创建 Git 检查点。
本篇参考了 参考/codex/02-core-concepts.md、参考/codex/06-first-task.md、参考/codex/15-permissions.md、参考/codex/16-security.md 和 参考/codex/26-git-github.md。其中“沙箱管能不能,审批管问不问”和“先看 diff,再决定提交”是贯穿这些材料的两个核心原则。

一次任务如何从开始走到交付

一个典型的本地任务通常会经历下面的过程:
关键点是:Codex 可以执行很多中间步骤,但“是否接受改动”和“是否发布到共享环境”仍然应该由人确认。

沙箱:给执行范围画一个圈

沙箱(Sandbox)是 Codex 运行时的技术边界,主要限制它能访问哪些文件、能否修改文件以及能否联网。参考资料把它比作围栏:在围栏内的动作可以直接完成,想越过边界则会被阻止或触发审批。 在 workspace-write 下,工作区外的文件通常不在可写范围内,.git、.codex 等敏感目录也可能受到额外保护。即使 Codex 派生出 git、测试脚本或包管理器进程,这些子进程也应继承相同的边界。

工作区不等于整台电脑

如果你在项目目录中启动 Codex,它默认关注的是这个目录及其允许的临时目录,而不是桌面、下载目录或整个用户主目录。因此,下面这样的请求可能需要额外批准,甚至直接无法执行:
这不是 Codex “挑剔”,而是沙箱正在阻止工作区之外的访问。不要为了绕过这个限制直接开启完全访问,应先确认任务是否真的需要这些文件。

审批:到了边界要不要问你

审批(Approval)与沙箱是两个独立维度:
  • 沙箱决定动作在技术上能不能做;
  • 审批策略决定 Codex 什么时候停下来问你。
要记住:never 只表示“不问”,不等于“拥有无限权限”。read-only 配合 never 仍然可以是只读分析;完全访问配合 never 才是非常宽的执行组合。 日常可以优先使用:
需要在会话中查看或调整当前权限时,可以使用入口提供的权限选择器或 /permissions;菜单名称会随版本变化,实际以本地界面为准。

为什么网络默认要谨慎

参考材料把提示词注入解释得很具体:代码注释、README、GitHub issue 或网页内容原本是“数据”,但其中可能藏着写给 AI 的恶意指令,例如诱导代理读取密钥并通过网络发送。 因此,默认关闭网络是一道重要防线。下面这段内容即使出现在项目文件中,也不应该被自动当成用户命令执行:
遇到联网、读取凭证、修改系统配置、删除大量文件、提权或强制推送等动作时,批准前至少确认:这一步是否与当前任务相关,目标路径和域名是否符合预期,以及是否存在不需要联网或提权的替代方案。 能不开网络就不开;确实需要时,应使用尽可能小的域名白名单和只读请求方式。不要把来自陌生网页或 issue 的内容直接通过管道喂给 Codex。

Git:给任务创建可回退的检查点

沙箱和审批控制“现在能做什么”,Git 负责保存“做错后如何回去”。参考材料反复建议:在重要任务前后创建 Git 检查点。

动手前检查状态

先确认工作区没有你不认识的未提交改动,避免把自己已有的工作与 Codex 的改动混在一起。

创建任务前检查点

如果项目还没有 Git,可以先初始化:

任务完成后审查 diff

阅读 diff 时可以固定问自己三句话:
  • 它改的是不是我要求的文件和范围?
  • 新增的逻辑是否符合需求,我是否真正理解?
  • 有没有删掉、覆盖或顺手改变不应该改变的内容?
确认后再运行项目的测试、构建和 lint。不要因为模型说“已完成”就跳过这些检查。

不满意时怎么处理

小范围问题可以直接在同一个会话中补充要求:
如果要放弃本轮所有未提交改动,可以使用:
git restore . 会丢弃工作区中所有未提交的修改。执行前必须确认其中没有你自己想保留的内容;必要时先复制、暂存或逐文件恢复。

一个最小安全实验

可以在一次性练习目录中观察沙箱和审批的区别,不要在重要项目或包含敏感数据的目录里做实验。

只读模式

进入会话后请求:
预期结果是:写文件动作超出只读边界,Codex 会拒绝、失败或请求批准,具体表现取决于版本和当前权限配置。

工作区可写模式

退出后重新启动:
再次请求创建 hello.txt。在工作区内,写文件通常属于允许动作,可能直接完成;完成后用下面的命令查看改动:
这个实验展示了两个事实:同一个任务在不同沙箱下会有不同结果;“能否写入”与“是否需要审批”不是同一个开关。

从本地改动到 GitHub

当你准备把 Codex 的改动交给团队时,可以把流程分成两道关:
  1. 本地查看 diff、运行测试和必要的 /review;
  2. 确认后再 commit、push,并在 GitHub Pull Request 中让人和 Codex 继续审查。
参考材料对本地 /review 和 GitHub 中的 @codex review 做了区分:前者是本地提交前的只读自查,后者是远端 PR 协作记录。无论使用哪一种,Codex 的 review 结果都是审查意见,不是自动合并许可。 尤其不要把下面两类动作交给未经确认的自动流程:
  • 将 Pull Request 直接合并到主分支;
  • 使用 git push --force 改写远程历史。
可回退的修改、审查和分支内修复可以交给代理协助;影响共享主干或可能覆盖他人工作的动作,应该由人明确执行。

小结

  • 任务循环是“目标 → 上下文 → 工具动作 → 反馈 → 验证”;
  • 沙箱限制 Codex 能访问和修改的范围;
  • 审批决定越过边界时是否停下来问你;
  • 网络、凭证、删除、提权和强推是必须人工多看一眼的高风险动作;
  • Git 检查点、diff、测试和人工审查共同构成回滚与验收闭环;
  • Codex 可以帮你修改、审查和准备提交,但主干合并和强制推送仍应由人明确把关。
完成这四篇入门内容后,可以继续阅读第一次使用和完成第一个任务。