你有没有好奇过,当你让 Codex 帮你做一件事的时候,它手里到底攥着多少张牌?

大部分人对 AI 编程助手的想象,还停留在「读代码、写代码、跑命令」这三件事上。但 Simon Willison 最近做了一件很有意思的事:他把一个 Codex 工作会话里所有可调用的工具、所有可复用的技能,全部导成了一份公开的参考文档,挂在网上供人查阅。结果有点出人意料,这份清单里有 232 个工具接口,还有 44 份完整的 SKILL.md 技能文件。

这就像把一台车的引擎盖掀开,让所有人都能看清楚里面到底装了什么。今天这篇文章,我想借这份清单,聊聊一个 AI Agent 的能力边界到底是怎么构成的。

工具和技能,是两个完全不同的东西#

清单里最核心的一句话,是把「工具」和「技能」做了明确的区分:

工具是可调用的端点,技能是可复用的指令包,用来指导这些工具怎么用。

这句话听起来抽象,其实很关键。工具是「手」,比如执行命令的 exec_command、改文件的 apply_patch、看图片的 view_image。它们本身没有智能,只是暴露了一个接口,告诉模型「我能做这件事」。

技能则是「说明书」。一个技能通常是一个 SKILL.md 文件,里面写的是:在什么情况下该用这个技能、应该先调用哪些工具、按什么顺序、有什么坑要避开。技能不会自己执行,它是在告诉模型「遇到这类任务时,你应该这样做」。

打个比方:工具是一盒螺丝刀和扳手,技能是教你「怎么拆这台发动机」的那本维修手册。扳手不会告诉你先用哪个,手册会。

这个区分解释了为什么同样的工具集,在不同人手里效果天差地别。工具给的是能力下限,技能决定了能力上限。

232 个工具,到底多在哪#

232 这个数字本身不算什么,有意思的是它的构成。这份清单把 232 个接口拆成了 223 个注册工具,加上 9 个直接的会话控制原语。

真正让我惊讶的是分类。GitHub 一个类目下面就挂了 89 个工具,Gmail 21 个,Google Calendar 15 个,连 Zillow(一个美国房产网站)都有 9 个,宠物相关有 11 个。这跟我们印象里「Codex 就是写代码的」完全对不上。

原因在于,这是一个运行在 ChatGPT 个人环境里的 Codex。它通过 MCP(Model Context Protocol)和插件,接进了用户几乎所有的数字生活:代码仓库、邮箱、日历、联系人、房产、健身数据,甚至宠物档案。

所以它才会出现 89 个 GitHub 工具。这 89 个不是重复,而是把 GitHub 的一整套 API 都翻译成了工具:创建 PR、添加评论、比较提交、把 PR 转成草稿、合并分支……几乎 GitHub 网页上能点到的按钮,都被拆成了一个独立的工具调用。

工具的几种「出身」#

仔细看每个工具的标注,会发现它们标注着不同的「出身」:

  • built-in(内置):Codex 自带的基础能力,比如 apply_patchexec_commandupdate_plan
  • direct control(直接控制)functions.execfunctions.waitfunctions.request_user_input 这类,属于会话层面的控制原语。
  • connected app / plugin:通过 MCP 或插件接入的第三方能力。GitHub、Gmail 这些都属于这类,命名也很直白,比如 mcp__codex_apps__github_add_review_to_pr

其中有一个工具我觉得设计得特别有意思,就是 functions.exec。它的作用是:在一个全新的 V8 隔离环境里跑一段 JavaScript,用代码来编排、组合其他工具的调用。也就是说,模型可以写一小段 JS,把多个工具像搭积木一样串起来,一次性完成一个复杂的流程。

这其实是一种「元能力」。工具是给模型直接用的,而 functions.exec 是让模型可以「编程地」用工具,等于把 Agent 的编排能力又往上提了一层。

技能即代码,这个模式值得注意#

44 份技能文件,也是这份清单的重头戏。它们按用途分成了几组:文档与可视化 10 个,浏览器与站点 4 个,上下文与交互 4 个,等等。

技能本身用两个工具来支撑:skills__list 列出当前有哪些技能,skills__read 读取某个技能的完整内容。换句话说,模型是在运行时动态地去「查阅」技能手册,而不是把这些指令全部塞进系统提示词里。

这个设计背后的思路,是把「prompt 工程」给工程化了。过去我们写长提示词,是把所有规则一股脑塞给模型;现在则是一条规则一个文件,按需加载。你给一个 Agent 写技能,本质上就是在写一份可复用的、带触发条件的 Markdown 说明书。

这一点对开发者来说特别有借鉴意义。无论你用的是 Codex、Claude Code 还是别的 harness,SKILL.md、AGENTS.md、CLAUDE.md 这类文件的本质是相通的:把稳定的、可复用的工作流沉淀成文本,让 Agent 在需要的时候自己去找、自己去读。

清单本身,是一次能力边界的可视化#

最后想说的是,Simon Willison 做这件事的价值,不只是列了个清单。更重要的是,它让我们第一次能直观地看到,一个现代 AI Agent 的能力边界到底是什么样。

边界不是由「它有多聪明」单独决定的,而是由「它手里有哪些工具」和「它知道怎么用这些工具」共同决定的。工具决定了它能触达的世界,技能决定了它在每个场景里的熟练程度。

而且这份清单明确写了一句:这些能力会随着会话配置、权限、已连接的 App 和已安装的插件而变化。也就是说,Codex 不是一个固定的产品,而是一台根据你接入了什么而不断变化的机器。

这大概就是 Agent 时代最值得玩味的一点:我们过去评价一个软件,是看它「出厂自带什么功能」;而现在评价一个 Agent,得看它「能接进什么、能学会什么」。


参考来源:Codex Tool Reference (Simon Willison)