作者:互联网 时间: 2026-07-02 09:57:05
很多新手第一次用 Codex,会遇到类似场景:
你说:
代码语言:javascript复制帮我把桌面上的 notes.txt 也一起整理一下。
Codex 却只处理了当前项目里的文件,桌面文件没有动。
这时很容易误会它“没听懂”或者“偷懒”。但很多时候,真正原因不是理解问题,而是权限边界在起作用。
Codex 不是一个能随便碰你电脑所有文件的程序。它通常会在一个受限制的范围里工作。这个范围就叫沙箱。它如果想越过这个范围,就可能需要审批。

graph TD A[Agent 袋里] -->|在沙箱内执行| B[Sandbox 沙箱] B -->|超出边界时| C[Approval 审批] D[AGENTS.md] -->|开工前读取| A E[Memory / Chronicle] -->|跨会话复用| A B --> F[工作区文件] B --> G[外部资源<br/>需审批] style A fill:#e3f2fd style B fill:#fff3e0 style C fill:#ffebee style D fill:#e8f5e9 style E fill:#f3e5f5
第二章要讲的核心,就是这些边界和规则:
• Agent:Codex 为什么能自己拆步骤、跑命令。• Sandbox:Codex 能碰哪里,不能碰哪里。• Approval:什么时候必须停下来问你。• AGENTS.md:项目规则应该怎么提前告诉 Codex。• Memory / Chronicle:哪些信息可以跨会话延续,哪些不能依赖记忆。可以先把它们理解成一套协作机制,而不是一堆术语。
Agent 通常翻译成“袋里”或“智能体”。在 Codex 里,你可以把它理解成:
普通聊天模型更像这样:
代码语言:javascript复制你问一个问题 -> 它回答一段内容 -> 对话结束
Codex 更像这样:
代码语言:javascript复制你给一个目标 -> 它观察项目 -> 它采取行动 -> 它验证结果 -> 不对就继续调整
用代码任务举例更容易理解。
如果你问:
代码语言:javascript复制为什么这个测试失败了?请修一下。
一个普通 AI 可能会根据你贴出来的报错猜原因,然后给你一段建议。
Codex 则可能会:
1. 找到失败的测试文件。2. 找到被测试的源码。3. 读取报错和断言。4. 修改相关代码。5. 运行测试。6. 如果测试没过,继续排查。7. 测试通过后,告诉你改了什么。这就是 Agent 的核心:它不是只给答案,而是会沿着任务往前走。
不过这也意味着,你给它的任务不能太含糊。你说“优化一下项目”,它会很难判断该优化性能、结构、样式、测试,还是文档。你说“给登录失败补一个错误密码测试,并保持现有返回格式”,它就容易做对。
很多问题不是 Codex 不会,而是它缺上下文。
上下文就是 Codex 当前能看到、能用来判断的信息。常见上下文包括:
• 你发的任务描述• 当前项目文件• 报错日志• Git diff•README• AGENTS.md• 你在当前会话里补充过的说明• 可用工具返回的结果这里有个重要提醒:
比如你说:
代码语言:javascript复制按我们项目规范补测试。
如果项目里没有 AGENTS.md,测试文件也很少,Codex 可能不知道“项目规范”到底是什么。它会根据常见习惯去猜,猜出来的东西不一定符合你的团队。
更好的说法是:
代码语言:javascript复制请先阅读 AGENTS.md 和 tests/ 目录里的现有测试。补测试时保持相同风格,不要新增测试框架。
这句话就把上下文入口说清楚了。
Sandbox 就是沙箱。它决定 Codex 在执行命令时能做什么。
你可以把它想成给临时同事发门禁卡:
• 只让他看资料,不让改,就是只读。• 让他在项目办公室里改东西,就是工作区可写。• 给他整栋楼权限,就是完全访问。从安全角度看,日常开发最常见的思路是:让 Codex 在当前项目里有足够权限,但不要让它随便碰项目外的东西。
常见模式可以这样理解:
模式 | 白话解释 | 适合场景 |
|---|---|---|
read-only | 只读为主,写文件通常要额外确认 | 新项目分析、代码审查、架构理解 |
workspace-write | 可以在当前工作区内读写 | 日常改代码、补测试、改文档 |
danger-full-access | 权限很大,风险也很大 | 只适合隔离环境或你完全清楚后果的任务 |
这里不要死记配置名。先记住判断方法:
• 如果你只是想让 Codex 看项目,用只读。• 如果你要它改当前项目,用工作区可写。• 如果它要碰项目外文件、联网、安装东西,要更谨慎。官方文档也强调:沙箱不只影响 Codex 自己的文件操作,也影响它运行的命令。也就是说,如果 Codex 调用 git、测试命令、包管理器,这些命令也会受到同样的边界约束。
这就是为什么你有时会看到:命令看起来没问题,但被权限拦住了。不是命令坏了,而是它越界了。
Approval 是审批。它和沙箱不是一回事。
可以这样分:
• 沙箱决定“技术上能不能做”。• 审批决定“做之前要不要问你”。举个生活例子:
沙箱像办公室门禁。你有哪张卡,就能进哪些房间。
审批像门口的确认流程。普通会议室刷卡就进;机房可能需要主管确认;财务室可能直接禁止。
在 Codex 里,常见审批策略大致可以这样理解:
策略 | 白话理解 | 适合谁 |
|---|---|---|
untrusted | 很保守,很多操作都要问 | 不熟项目、不熟命令的新手 |
on-request | 在允许范围内自动做,越界时问你 | 日常开发最常用 |
never | 尽量不问,自己跑到底 | 自动化或隔离环境,慎用 |
新手建议先用保守组合:
代码语言:javascript复制sandbox_mode = "workspace-write"approval_policy = "on-request"
这表示:项目内常规工作可以继续做,超出边界时停下来问你。
更稳的流程是:
1. 新项目先只读分析。2. 确认方案后再给工作区写权限。3. 看到审批请求时,先看它要运行什么命令。4. 不懂就拒绝,让 Codex 解释风险。审批弹窗不是打扰你,而是在帮你守门。
每个项目都有一些不会写在代码里的规矩:
• 用npm 还是 pnpm• 测试命令是什么• 哪些目录不能动• 提交前要不要跑 lint• API 返回格式有什么约定• 单测应该放在哪里如果每次开新会话都重新说一遍,很麻烦,也容易漏。
AGENTS.md 就是用来放这些规则的。你可以把它看成 Codex 的项目入职手册。Codex 开工前会读取这些说明,知道这个项目该怎么做事。
一个新手可用的 AGENTS.md 不需要很长。比如:
# 项目说明这是一个 Node.js 后端项目。## 常用命令- 安装依赖:`pnpm install`- 运行测试:`pnpm test`- 运行 lint:`pnpm lint`## 修改规则- 不要新增依赖,除非先说明理由。- API 返回格式不要随意变更。- 改完后优先跑相关测试。
写 AGENTS.md 的关键不是“全面”,而是“有用”。
好规则通常长这样:
• “测试用pnpm test。”• “不要修改 fixtures/ 里的快照文件,除非任务明确要求。”• “前端组件统一放在 src/components/。”差规则通常长这样:
• “代码要优雅。”• “注意质量。”• “尽量写好一点。”后面这些话听起来正确,但 Codex 很难执行和验证。
AGENTS.md 最有价值的用法,是把 Codex 犯过的固定错误沉淀进去。
比如 Codex 第一次把测试命令猜成了 npm test,但你的项目实际用 pnpm test。你不要只在当前会话里纠正它。你可以说:
请把“本项目测试命令是 pnpm test,不是 npm test”补充到 AGENTS.md。
下一次再开会话,它就更不容易犯同样的错。
这就是“项目越用越顺”的关键。
除了 AGENTS.md,Codex 还有和记忆相关的能力。这里新手先理解区别就够了。
Memories 可以让 Codex 把一些有用背景带到未来会话里,比如:
• 你常用的技术栈• 你喜欢的工作方式• 某个项目常见坑• 你反复强调过的偏好但它不是万能的。官方也建议:团队必须遵守的规则,仍然应该放在 AGENTS.md 或项目文档里。Memory 更像本地回忆层,不应该当成唯一规则来源。
一句话:
Chronicle 更进一步,它可以利用你最近屏幕上的内容来帮助 Codex 理解你正在做什么。比如你正在看某个 PR、某个文件、某段文档,它可以减少你重复解释的成本。
但这类能力也更敏感。官方文档明确提醒过:Chronicle 仍是 opt-in research preview,只在特定平台和订阅条件下可用,并且会更快消耗额度、增加提示注入风险,还会在本机保存未加密的记忆数据。
新手建议是:
• 先不要依赖 Chronicle。• 先把AGENTS.md 和基础权限用好。• 处理敏感信息时,不要随便开启屏幕上下文能力。理解权限最好的方式,不是背概念,而是做一个小实验。
你可以新建一个空目录:
代码语言:javascript复制mkdir -p ~/codex-democd ~/codex-democodex
然后先切到只读模式。不同入口的界面不同,CLI 里通常可以通过权限相关菜单或命令调整。
接着对 Codex 说:
代码语言:javascript复制请创建一个 hello.txt,内容是 hello codex。
如果当前是只读模式,它通常不会直接创建文件,而是会提示需要批准或告诉你权限不足。
然后再切到工作区可写模式,重复同样请求。
这次它就应该可以在当前目录里创建文件。
这个实验说明两件事:
1. 同一句话,在不同权限模式下结果会不同。2. Codex 没有“想不想做”的问题,它首先受权限边界约束。做完实验后,可以让 Codex 自己解释:
代码语言:javascript复制请用新手能懂的话解释:刚才为什么只读模式不能创建文件,而工作区可写模式可以?
这比只看概念更容易记住。
如果你还没形成习惯,可以先照这个流程走:
代码语言:javascript复制flowchart LR A["只读分析"] --> B["确认计划"] B --> C["工作区内修改"] C --> D["运行相关验证"] D --> E["你审查 diff"] E --> F["接受或继续修改"]

对应到提示词,可以这样写:
代码语言:javascript复制请先只读分析,不要修改文件。请告诉我:1. 你需要看哪些文件?2. 你理解的任务目标是什么?3. 你计划怎么改?4. 哪些操作可能需要更高权限?等我确认后,你再开始修改。
这个提示词适合新项目,也适合你不确定 Codex 会不会改太多的时候。
不用一次背下所有配置名。先记住这几条:
1. Agent 是会推进任务的 Codex,不只是回答问题。2. 上下文决定它能不能理解你的真实意图。3. Sandbox 决定它能碰哪里。4. Approval 决定它什么时候停下来问你。5.AGENTS.md 是项目规则的主要落点,比口头重复可靠。6. Memory 可以帮忙记偏好,但不能替代项目硬规则。7. 新手最稳流程是:先只读,再计划,再小改,再验证,再 review。理解这些概念之后,你再去看安装、配置、模型、权限,就不会觉得它们是一堆零散按钮。它们本质上都在回答同一个问题:
本文参考 OpenAI Codex 官方文档中的以下主题整理:
• Sandbox / sandboxing:沙箱与权限边界• Agent approvals & security:审批策略与安全机制• Config basics / config reference:配置文件与权限配置• AGENTS.md / custom instructions:项目说明文件• Memories:跨会话记忆• Chronicle:屏幕上下文相关记忆能力本文参与腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2026-07-01,如有侵权请联系[email protected] 删除