在 Codex 里开新会话,哪些内容会自动进上下文?怎么少花 token?
在 Codex 里开新会话,哪些内容会自动进上下文?怎么少花 token?
调研时间:2026-07-08
最近有没有感觉到 Codex 的订阅越来越不抗用了?尤其是当你安装的skill、插件越来越多,这种现象尤其明显。
我对照了一遍 OpenAI 的 Codex 文档,发现 Codex 不会把整个仓库、浏览器历史、外部系统内容一口气塞进模型上下文。它会先加载一些长期背景和能力清单,比如项目规则、配置、skills、插件、MCP 工具定义,以及当前工作环境。
如果你的环境中安装了大把的skill、插件,那么你在每次对话时上下文窗口中都会自动加入这些工具的描述信息。如果你的使用场景很简单、根本就用不到这一堆工具,这就造成了token的浪费。很显然这并不是我们想要的。
想省 token,重点不是把提示词少写两句,而是管好这些“每次都会自动出现”的内容:AGENTS.md、Memories、Skills、MCP、插件和浏览器权限。

新会话通常会带上什么
1. 项目指导:AGENTS.md
Codex 开始工作前会读取 AGENTS.md。官方文档里说,它会构建一条 instruction chain:先读全局的 ~/.codex/AGENTS.override.md 或 ~/.codex/AGENTS.md,再从项目根目录一路读到当前目录。每层最多取一个指导文件,越靠近当前目录的规则越晚出现,也就更容易覆盖前面的规则。
默认合并上限是 project_doc_max_bytes = 32 KiB。
来源:AGENTS.md 指南
也就是说,如果你在全局、仓库根目录、子目录都放了 AGENTS.md,新会话读到的不是某一个文件,而是一组规则的组合。
2. Codex 配置
Codex 会在会话启动前由客户端/运行时解析多层配置文件,包括用户级 ~/.codex/config.toml 和可信项目中的 .codex/config.toml。这些配置主要作为控制平面生效,用来决定模型、沙盒、审批、MCP、工具和功能开关。
一般情况下,原始配置文件不会作为普通文本自动塞进模型上下文;真正可能进入上下文的是配置解析后带来的工具定义、MCP 指令、功能状态或环境摘要。
配置文件不一定会原样变成一段自然语言提示词,但它会影响会话里有哪些工具、哪些边界、哪些服务器和功能开关。这些内容最后都会改变模型看到的上下文和工具清单。
3. Memories,前提是你打开了它
Memories 默认关闭。启用后,Codex 可以把以前线程里的稳定偏好、常用流程、技术栈和项目约定带到后续工作里。官方明确写了,已有 memories 可以注入到未来会话中;你也可以按线程控制是否使用旧 memories、是否让当前线程参与生成新 memories。
来源:Memories
所以,打开 Memories 后,它就是跨会话自动上下文的主要来源之一。
4. Skills 的初始清单
Skills 用的是 progressive disclosure。Codex 一开始不会把所有 SKILL.md 全文读进来,而是把可用 skill 的名称、描述和路径放进上下文,让模型判断要不要用。
官方也给了限制:初始 skills 列表最多占模型上下文窗口的 2%;如果上下文窗口未知,最多 8,000 字符。真正选中某个 skill 后,才会读取完整 SKILL.md。
来源:Agent Skills
这点很容易被忽略。装很多 skills,即使一个都没触发,初始清单也会变长。
5. 插件、Apps 和 MCP 暴露的能力
插件可以包含 Skills、Apps 和 MCP servers。安装插件后,相关 workflow、外部 app 连接、MCP 能力会变成 Codex 可用的东西。
来源:Plugins
MCP 这边,Codex 会读取 MCP server 初始化时返回的 instructions 字段,并把它作为这个 server 的指导。MCP 工具定义也会进入可用工具集合。官方 token counting 文档也提醒过:工具定义,包括 function schemas、MCP servers 等,都会增加上下文 token。
6. 当前工作环境和权限边界
Codex 会知道当前工作区、沙盒模式、审批策略、文件访问边界、可用 shell 和工具。这些信息来自客户端和配置,目的是让它知道能读写哪里、哪些操作需要你批准。
官方 best practices 里也把 sandbox mode 和 approval mode 单独拎出来讲:一个决定文件边界,一个决定什么时候问你。
7. 浏览器内容不会默认全量加载
In-app browser 适合本地开发页面、文件预览和不需要登录的公开页面。它不使用你的 Chrome profile、cookies、扩展或已有标签页。需要登录态的网站,才用 Chrome extension。
Chrome 浏览器历史也不是默认加载。Codex 想用历史时会询问,而且没有 always-allow 选项。
来源:In-app browser、Chrome extension

怎么关掉或缩小这些上下文
1. 精简 AGENTS.md
如果不想某些规则每次自动进上下文,可以从这些地方下手:
- 删除、重命名或精简对应目录里的
AGENTS.md/AGENTS.override.md。 - 全局规则在
~/.codex/AGENTS.md;临时覆盖用~/.codex/AGENTS.override.md,移除 override 后会恢复普通全局规则。 - 用
CODEX_HOME指向另一个目录,可以得到一套干净的 Codex home。 - 用
project_doc_max_bytes控制项目指导的最大合并体积。 - 用
project_doc_fallback_filenames控制哪些备用文件名会被当作指导文件。
官方建议也很朴素:AGENTS.md 要小而实用。等某类错误反复出现,再把规则补进去。别把它写成项目百科。
来源:AGENTS.md 指南、Best practices
2. 关闭 Memories
Codex app 设置里可以直接关 Memories。配置文件方式是在 ~/.codex/config.toml 里写:
[features]
memories = false
[memories]
use_memories = false
generate_memories = false
disable_on_external_context = true
use_memories = false 表示不把已有 memories 注入未来会话。generate_memories = false 表示新线程不再作为生成 memories 的输入。disable_on_external_context = true 可以避免用过 MCP、web search、tool search 的线程进入 memory 生成。当前线程里也可以用 /memories 控制。
来源:Memories、Configuration Reference
3. 减少 Skills 和插件
Skills 太多时,先看哪些只是“可能有一天会用”。这类东西通常可以先移走。
- 卸载或禁用不用的插件。
- 删除或移走不常用的个人 skills。
- 仓库级 skills 放在
.agents/skills,只放和项目直接相关的。 - skill 描述写短、写准,因为初始上下文主要加载 name、description、path。
插件可以在 Codex app 的 Plugins 页面管理;CLI 里可以用 /plugins 浏览、安装、卸载或切换启用状态。
4. 减少 MCP 暴露面
MCP 很方便,但每个 server 的 instructions 和工具定义都可能增加上下文成本。可以在 config.toml 里关掉某个 server:
[mcp_servers.context7]
enabled = false
也可以只开放少数工具:
enabled_tools = ["tool_a", "tool_b"]
disabled_tools = ["heavy_tool"]
官方的建议是:不要一开始就把所有工具接进来。先接入能明确减少人工流程的一两个工具。
5. 控制浏览器和 Computer Use
本地网页优先用 in-app browser。它不牵涉你的 Chrome 登录态、cookie 和扩展。只有任务确实需要登录态时,再用 Chrome extension。
Computer Use 可以在设置里管理允许列表和阻止列表。不要随手打开 “always allow browser content”,除非你明确接受更高风险。Chrome 浏览器历史每次都会单独问你;不想让历史进上下文,就不要批准。
来源:In-app browser、Chrome extension、Computer Use

省 token 的做法
1. AGENTS.md 写成路标,不写成长文档
AGENTS.md 只放每次都必须知道的内容:项目结构、测试命令、关键约定、完成标准。
如果内容开始变大,把主文件写成索引就够了:什么任务读哪个文档,哪类代码看哪个目录。让 Codex 按需读取,比每次自动塞进上下文更省。
2. Prompt 只给任务相关信息
官方推荐 prompt 包含目标、相关文件或错误、约束、完成标准。
不要粘整份日志、整份 README、整份设计文档。更好的做法是提到具体文件或目录,让 Codex 自己去读需要的部分。
3. 用 Skills 替代反复粘贴的长提示词
如果你经常复制同一套步骤,把它做成 skill。这样初始上下文只放短描述,只有真正触发时才读完整说明。比每次在 prompt 里塞大段流程经济得多。
来源:Agent Skills
4. MCP 少接一点
MCP 适合那些外部的、频繁变化的、需要工具调用的上下文。不要因为“可能有用”就装一堆 server。每个 server 都可能带来 instructions 和工具 schema 成本。
5. 复杂任务先规划,长任务靠 compaction
复杂任务先让 Codex 规划一下,通常能减少无效探索和乱读文件。长对话则依赖 compaction,把历史压缩成保留关键状态的上下文,在质量、成本和延迟之间做个折中。
6. 无关任务开新线程
同一个线程越聊越长,历史越容易占上下文。修 bug、写文章、改 UI,如果彼此没关系,就分开开线程。

7. 定期查一下自动上下文
可以重点看这些位置:
~/.codex/AGENTS.md- 仓库内的
AGENTS.md/AGENTS.override.md ~/.codex/config.toml- 仓库内
.codex/config.toml ~/.codex/memories/$HOME/.agents/skills- 仓库
.agents/skills - Codex app 里的 Plugins、MCP servers、Computer Use、Browser/Chrome 权限设置
结论
Codex 的上下文成本主要来自两类东西:持久指导和可用能力。前者包括 AGENTS.md、Memories、项目配置;后者包括 Skills 列表、MCP instructions、工具 schema、插件和浏览器授权。
想省 token,就把默认加载的东西变少、变准、变可控:AGENTS.md 写短,少装工具,skills 只保留真常用的,memories 按需开,MCP 别贪多,浏览器权限按任务批准。
更多推荐



所有评论(0)