任务循环、沙箱、审批与 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,再决定提交”是贯穿这些材料的两个核心原则。
一次任务如何从开始走到交付
一个典型的本地任务通常会经历下面的过程:沙箱:给执行范围画一个圈
沙箱(Sandbox)是 Codex 运行时的技术边界,主要限制它能访问哪些文件、能否修改文件以及能否联网。参考资料把它比作围栏:在围栏内的动作可以直接完成,想越过边界则会被阻止或触发审批。
在
workspace-write 下,工作区外的文件通常不在可写范围内,.git、.codex 等敏感目录也可能受到额外保护。即使 Codex 派生出 git、测试脚本或包管理器进程,这些子进程也应继承相同的边界。
工作区不等于整台电脑
如果你在项目目录中启动 Codex,它默认关注的是这个目录及其允许的临时目录,而不是桌面、下载目录或整个用户主目录。因此,下面这样的请求可能需要额外批准,甚至直接无法执行:审批:到了边界要不要问你
审批(Approval)与沙箱是两个独立维度:- 沙箱决定动作在技术上能不能做;
- 审批策略决定 Codex 什么时候停下来问你。
要记住:
never 只表示“不问”,不等于“拥有无限权限”。read-only 配合 never 仍然可以是只读分析;完全访问配合 never 才是非常宽的执行组合。
日常可以优先使用:
/permissions;菜单名称会随版本变化,实际以本地界面为准。
为什么网络默认要谨慎
参考材料把提示词注入解释得很具体:代码注释、README、GitHub issue 或网页内容原本是“数据”,但其中可能藏着写给 AI 的恶意指令,例如诱导代理读取密钥并通过网络发送。 因此,默认关闭网络是一道重要防线。下面这段内容即使出现在项目文件中,也不应该被自动当成用户命令执行:Git:给任务创建可回退的检查点
沙箱和审批控制“现在能做什么”,Git 负责保存“做错后如何回去”。参考材料反复建议:在重要任务前后创建 Git 检查点。动手前检查状态
创建任务前检查点
任务完成后审查 diff
- 它改的是不是我要求的文件和范围?
- 新增的逻辑是否符合需求,我是否真正理解?
- 有没有删掉、覆盖或顺手改变不应该改变的内容?
不满意时怎么处理
小范围问题可以直接在同一个会话中补充要求:
git restore . 会丢弃工作区中所有未提交的修改。执行前必须确认其中没有你自己想保留的内容;必要时先复制、暂存或逐文件恢复。
一个最小安全实验
可以在一次性练习目录中观察沙箱和审批的区别,不要在重要项目或包含敏感数据的目录里做实验。只读模式
工作区可写模式
退出后重新启动:hello.txt。在工作区内,写文件通常属于允许动作,可能直接完成;完成后用下面的命令查看改动:
从本地改动到 GitHub
当你准备把 Codex 的改动交给团队时,可以把流程分成两道关:- 本地查看 diff、运行测试和必要的
/review; - 确认后再 commit、push,并在 GitHub Pull Request 中让人和 Codex 继续审查。
/review 和 GitHub 中的 @codex review 做了区分:前者是本地提交前的只读自查,后者是远端 PR 协作记录。无论使用哪一种,Codex 的 review 结果都是审查意见,不是自动合并许可。
尤其不要把下面两类动作交给未经确认的自动流程:
- 将 Pull Request 直接合并到主分支;
- 使用
git push --force改写远程历史。
小结
- 任务循环是“目标 → 上下文 → 工具动作 → 反馈 → 验证”;
- 沙箱限制 Codex 能访问和修改的范围;
- 审批决定越过边界时是否停下来问你;
- 网络、凭证、删除、提权和强推是必须人工多看一眼的高风险动作;
- Git 检查点、diff、测试和人工审查共同构成回滚与验收闭环;
- Codex 可以帮你修改、审查和准备提交,但主干合并和强制推送仍应由人明确把关。