过去一年里,同一个需求在 Codex 仓库被提了两次,关掉两次。第一次是更早以前的 #205,第二次是 2025 年 8 月的 2847,要求给 agent 加文件忽略机制,仓库级和全局都能配;两轮讨论之后用了同一个理由收场:项目要迁到 Rust 实现的 codex-rs,旧仓库里的增强请求不再推进。issue 本身挂着 enhancement 和 sandbox 两个标签,官方清楚这属于代理沙盒边界的范畴,只是清楚归清楚,不做归不做。
单看每次关闭,都挑不出工程上的毛病。放回时间线上,“挑不出毛病”反而是值得停一下的地方:迁移这句话同时干了两桩活,既在说“不在这个仓库做”,也在说“不做也没有关系”。前者是个技术决策,后者是个优先级决策,性质不同的两件事被同一个现成说法打包处理了。更说明问题的是时点——2547 提出的当天,被寄予厚望的 codex-rs 里同样没有这个能力。迁移作为理由,隐含一个没验证过的假设:新栈会自然长出它来。至少在那个时点上,没有兑现。
把它要的东西拆开看。两个约束,一个叫确定性,一个叫可跨团队共享。确定性针对的是惯例——agent 的行为如果依赖每个开发者在对话框里口头补一句“别读那个文件”,它就是不可复现、不可审计的,出了事你都不知道该回查什么;可跨团队共享针对的是归属——规则跟着项目走,不跟几个人的默契走。两条加在一起,实质是在要求一件事:把“什么文件能被 agent 读”从人的自觉领域搬进系统约定领域。搬完安全责任就换了主人,从人换到机制(这里“机制”指的不是某个引擎的某次实现,而是可配置、可共享、可审计的边界本身)。
再往下拆一层,需求比表面深。要同时保住 node_modules 的搜索能力和 .env 的不可读,文件访问规则不能是简单路径黑名单;系统必须在机制上区分两种可见性,索引层对目录的可见性服务于搜索与补全,上下文层对内容的可见性服务于模型的实际读取,前者对 node_modules 开放,后者对 .env 关闭。一个文件系统访问要按用途拆成两个通道,比 .gitignore 那种一揽子不可见的语义整个高出一维。也正因高这一维,它不是某个 PR 顺手能做完的小改动,牵扯到索引层和上下文构建层之间的协调。这大概解释了它为什么被搁置:不是难到做不到,是从工作量到收益都夹在“能拖”的位置上。能拖的事,永远排在那些不修就要上事故的任务后面。
放回三层棋盘看,这个 issue 名义上报在壳层,引擎该实现的行为;它真正戳中的是场景层的洞。模型层的能力一路往上抬,抬上去的能力最终都要落成具体动作——能读哪些文件、能写哪些文件、能执行哪些命令。边界规则至今没有形成一种可配置、可共享、可审计的标准形态。能力越涨,没有边界的读取破坏面越大;这个问题不随模型发布消失,只会跟着能力一起放大。它不产生 benchmark 分差,也不进发布说明,等你想起“刚才那个 agent 到底看见了什么”是个黑盒时,通常已经晚了。
把镜头拉远一点看。操作系统把“进程能看哪些文件”磨成权限位、ACL、能力列表,花了几十年;浏览器把“网页代码能碰什么数据”收敛成同源策略,也用掉一代人。两条线走过同一条弯路:先给全量再做减法,然后为事后补墙付出比事前设计高一个数量级的代价。agent 正在以季度为单位重演这个过程,弯路的形状几乎没变——读了敏感路径、把不该传的内容传到不该去的地方、在记录里留下一份副本。这些不是孤立的工程失误,是“先给全量再做减法”在每个项目上固定收取的过路费。区别只在于操作系统补墙是在慢节奏里,一代人有时间总结经验再交棒;agent 的迭代周期短了两个数量级,同一个坑被踩的频次也跟着放大。
这里认一个一年前的误判,不放在草稿里了。当时我倾向于认为文件权限这类问题会被模型能力冲淡:agent 越聪明,越不需要大范围翻文件系统,权限边界的紧迫性自然下降。过去四个季度给出的答案是反的——能力每上一档,就有人放开一档默认权限,被读进 context 的文件总量在变大,不是变小。边界没有因为能力变强而变得不重要,它跟着能力一起膨胀了。方向判错,连带那段时间我对壳层工具的乐观预期也站不住。教训和这次的事是同一条:模型层往前跑的每一步,都在给场景层没有建好的边界累积账单。
接下来怎么走。有一条路是配置文件标准化:各家引擎先后长出自己版本的 .codexignore,功能大同小异,最后被某个框架级工具或行业惯例收编成事实标准;最平和,但碎片期最长,跨团队共享只能局部达成。另一条是平台层沙盒拦截:agent 的执行重活继续往云端沙盒集中,平台在服务端过滤和审计“什么内容能进上下文”,本地忽略文件退化成信号,不再承担最终裁决;这条路跟平台厂商向需求侧扩张的路径依赖天然对齐,我判断阻力最小的是这条。还有第三条,让模型现场判断一段内容敏感与否、直接绕开文件级配置;前提是模型对“该读/不该读”的可靠性全面超过显式规则——这个前提我看不到接近满足的迹象,至少两个季度内看不到;就算判断力真到了,审计要的那层确定性仍然要求显式规则兜底,作为完整替代不成立。
压注:第一条会先发生,第二条在更长的时间尺度上接管主要位置。文件级忽略规则会以各种名字长期存在,但它最终的形态更像是平台默认能力的一部分,而不是每个开发者各自维护的手工门槛。推翻这条判断的条件是:接下来十二个月,主流 agent 引擎的默认行为里始终没有实现“检索可见、上下文不可见”这一类的分层读取(或等效的服务端拦截机制),而这个缺口也不再有人作为正式需求提出——到那时说明权限模型的收敛没有跟上能力扩张,上面整个推演的前提就不成立,该扔。