一个叫Simon Willison的人,把ChatGPT Work和Codex会话里能调用的工具全扒了出来,做成一个网站,列出232个工具接口44份完整技能源码。乍一看是个技术极客的爱好项目,可翻到他自己写的另一篇文章,数字变了:他说自己最初发现的是223个已注册工具,其中6个还来自他自己接的MCP服务器。223和232,同一个人,同一个产品,两个不同的答案。

这个矛盾比清单本身更值得琢磨。它说明"Codex到底有多少工具"从来不是能写进产品手册的固定数字,而是随会话状态漂移的变量——你连没连MCP服务器、装没装插件、开没开哪些权限,答案都不一样。把这份清单当成Codex的能力规格书去读,本身就理解错了它的性质。

清单从哪来,又漂移在哪

这个站点不是OpenAI官方文档,是第三方逆向工程拼出来的快照,标题写的是"ChatGPT Work Tool and Skill Reference",但站点真名其实是Codex Tool Reference——名字对不上,内容也和OpenAI自己的Skills/Plugin/Apps文档体系有重叠但不是同一入口。

站点自己也写明:工具与技能的可用性会随会话配置、权限、连接的应用和安装的插件变化。这句免责声明本该是整篇报道的第一行,却常被读者跳过,直接盯着"232"这个吸引眼球的数字。

同一份清单,两个数字 223 最初发现的已注册工具 含6个个人MCP服务器工具 232 补充技能后的完整快照 同一作者,同一产品 差值取决于连接了哪些MCP服务器与插件 工具总数是会话变量,不是固定规格
  • 结论.任何工具清单都是某一次会话的快照,不是产品的固定规格书

Skill不是新招,是OpenAI在补一门课

OpenAI这次真正的动作,是把Skills机制悄悄塞进了ChatGPT和Codex CLI。这套东西和Anthropic去年力推的Agent Skills长得几乎一样:一个skill文件夹里放一份SKILL.md,定义目的、输入、工作流程、输出要求和校验步骤,外加脚本、引用资料和资产文件——本质是一份操作手册,告诉模型某类任务该按什么步骤走,不是给模型新增了底层能力。

与此同时,OpenAI把原来的"connectors"改名叫"apps",又造出一个新词Plugin,用来打包Skills、Apps和workflow,取代了原来的App Directory。几个月一次改名,对普通用户不是没有代价的——工具、技能、应用、插件这几个词现在互相嵌套,连官方文档都在追着这套架构更新。

说明书上写的安全规则,不是强制执行的锁

清单里control-browser这个技能写了一套听起来很负责的安全规则:把用户提供的网页内容当成潜在恶意信息,不把第三方指令当成许可,区分"读取"和"发送"数据,发消息、上传文件、改权限、下单购买之前都要确认。

这套规则读起来像个尽职的助理守则。但要弄清楚一件事:这是模型被要求"自愿遵守"的行为指令,不是系统层面强制拦截的安全边界。真正能拦住越权操作的,是沙箱、权限系统、作用域令牌和服务器端授权——技能文件写得再周全,也只是说明书,不是锁。

  • 风险.SKILL.md里的确认规则靠模型自愿执行,理论上可能被提示注入绕过
细粒度权限,Codex差在哪 Claude Code · 工具按server__tool命名 · allowedTools精确到单工具 · 用前需权限确认 · 官方支持子代理隔离 Codex · 官方文档称无等价机制 · 需手动拼沙箱+权限+过滤器 · 技能规则靠模型自愿遵守 · 子代理细粒度限制缺失

对照Claude Code更能看清这层差距。Claude的MCP工具按mcp__servername__toolname这种命名方式暴露,用之前要走权限确认,allowedTools可以精确到给单个工具授权,也能直接放行整个服务器。而OpenAI自己的官方迁移文档承认,Codex目前没有等价的子代理细粒度工具限制机制,想做到同样的最小权限设计,得靠沙箱、权限设置、MCP过滤器和应用过滤器手动拼装。

清单能读,不代表风险能控。

谁该盯着这件事

232个工具、44份技能堆在一起,对写自动化流程的开发者是把双刃剑:工具越多,描述之间的歧义和上下文token膨胀的风险也越大,一个庞大工具清单本身就可能成为新的攻击面。

企业安全团队更该留心审计方式:不能拿SKILL.md里写的"确认后再操作"当成唯一防线,而要去查脚本实际调用了什么网络接口、传了什么数据。Anthropic自己的文档也是这么建议的——把技能当第三方软件一样审计,别当说明书信。

在多代理编排上做选型的技术负责人,也该把"Codex暂无子代理细粒度权限控制"记进决策清单——这不代表Codex不能用,而是意味着想在Codex上做最小权限设计,现在得自己手工拼装,而不是调一个现成开关。