Codex Plugin、Skill、MCP、Internet Access 到底怎么选?扩展能力前先把边界讲清楚

Codex Internet Access安全配置需区分不同执行环境。在Cloud的Agent阶段和Setup脚本中,应分别设置网络访问权限。只为任务提供必要的网络出口,限制访问特定域名和方法。避免"允许所有域名"等宽泛权限,防止prompt injection、Secret泄露和恶意软件等安全风险,确保最小权限原则。

49 分钟阅读
Codex Plugin、Skill、MCP、Internet Access 到底怎么选?扩展能力前先把边界讲清楚

AI Code With · Codex 扩展能力与安全边界指南

第一次把 Codex 用到“能改代码”以外的场景时,很容易掉进一个坑:看到 Plugin、Skill、MCP、Internet Access 这些名字,就下意识把它们理解成四种“给 Codex 加功能”的方式。

结果就是,本来只想让 Codex 按固定规则写一份报告,却先接了远程 MCP;本来只是需要查询一份官方文档,却把 Cloud Agent 的网络出口全部放开;或者安装一个插件以后,没搞清里面到底包含 Skill、外部 App,还是一个需要额外认证的 MCP 服务。

这些能力确实都能扩展 Codex,但扩展的是完全不同的层。选错了,最轻是多维护一套配置,最麻烦的是把不必要的账号权限、网络权限和敏感数据一起带进任务。

先问“任务缺的是规则、工具、打包交付,还是网络出口”,再决定装什么。

1. 先记住这张图:四种能力不在同一层

能力它主要解决什么会不会引入外部权限最适合的场景
Skill告诉 Codex 按什么流程做事、读什么事实、如何验收不一定;纯本地 Skill 可以完全不联网固定写作流程、代码审查规则、项目内操作规范
MCP / App让 Codex 访问外部工具、数据或动作通常会,取决于连接的服务和工具权限查数据库、访问第三方系统、调用远程工具
Plugin把一组可复用能力打包交付;可包含 Skills、Apps、App templates取决于插件包含的能力团队分发一套完整工作流
Internet Access允许特定执行环境访问外部网络是,风险与允许的域名/方法有关下载依赖、读取站点、调用外部 API

这张表最重要的不是背定义,而是避免“谁替代谁”的错误理解。Skill 不等于 MCP,MCP 不等于 Internet Access,Plugin 也不是一个更高级的 MCP。

OpenAI 当前的产品术语也已经比早期教程更清晰:Plugin 是工作流能力的打包容器,可以包含 Skills、Apps 和 App templates;Apps 负责连接外部系统、数据与动作;自定义外部工具仍可以通过 MCP 构建。

2. 只缺一套稳定的做事方法,优先用 Skill

Skill 最像一份“可执行的工作说明书”。它不一定给 Codex 新增一个外部能力,而是把原本需要你每次重复交代的流程固定下来。

Skill 特别适合这三类任务

• 规则重复:同样的检查、写作、测试、审计流程会反复出现。

• 事实源固定:需要读取项目里的 PRODUCT_KNOWLEDGE、AGENTS.md、规范文件等。

• 验收标准明确:任务完成前必须经过固定 QA、测试或发布门禁。

什么时候不该为了“更完整”强行加 MCP

如果任务只需要当前仓库、本地文件、命令和固定规则,Skill 已经够了。

例如“扫描当前项目的 Markdown,按既定 House Style 重写”并不需要访问外部账号。为了这个任务再接一个远程 MCP,只会多出认证、可用性、数据边界和故障排查。

能在本地闭环的流程,先让它留在本地。

3. 真正缺的是外部数据或动作,再考虑 MCP / App

当任务必须离开当前项目,访问第三方系统、远程数据库、团队账号或外部工具时,MCP / App 才真正有价值。

这类能力新增的不只是“能查到更多信息”,还会新增四件事:身份认证、可读范围、可写范围、失败后的撤销路径。

安装之前,至少问清 5 个问题

• 它能读取什么数据?是整个账号,还是只读一个项目/仓库?

• 它能执行哪些写操作?发消息、删记录、修改配置是否都包含在内?

• 凭证放在哪里?OAuth、Token、环境变量还是本机配置?

• 每次写操作是否需要确认?能否把默认权限收缩到只读?

• 断开连接、撤销 Token 或移除 MCP 后,能力是否真的停止?

一个现实例子:让 Codex 查公司知识库

如果需求只是“以后写方案时参考公司知识库”,最容易犯的错是给它一个能读全部空间、还能编辑页面的账号。

更合理的做法是:先只开放目标知识库或目标空间的读取权限,用一个最小查询验证能否拿到需要的信息;确认没有意外数据越界以后,再决定是否真的需要写能力。

这里的思路和网络权限一样:不是问“能不能开”,而是问“为了这项任务最少要开多少”。

4. Plugin 适合“把一整套能力交付给别人”,不是功能越多越好

Plugin 更像一个可以安装、分发和维护的工作流包。根据当前 OpenAI 插件体系,一个 Plugin 可以只包含 Skills,也可以带上外部 Apps,或者包含需要管理员配置的 App template。

所以团队里如果已经有一套稳定流程,例如:

代码安全 Review Skill

+

GitHub / 工单系统 App

+

必要的模板和配置

=

一个可分发的 Plugin

这时候 Plugin 的价值才明显:使用者不需要自己知道每个 Skill 放在哪里、每个连接怎样组合,维护者可以按版本交付整套能力。

Plugin 带来的责任,也比单个 Skill 更大

一旦 Plugin 包含外部 App 或 MCP 服务,维护者就不只是在维护提示词,还要考虑:版本、权限、OAuth、工作区角色、可用区域、升级和撤销。

OpenAI 当前的 Plugin Directory 还会显示插件包含的 Skills、Apps 和连接要求;即使插件标有 Verified,也不等于可以跳过组织自己的隐私、安全和供应商审查。

Plugin 的好标准不是“装完功能最多”,而是“这组能力确实值得作为一个版本化单元长期维护”。

5. Internet Access 解决的是“网络出口”,不是工具能力

这一点特别容易和 MCP 混淆。

MCP / App 决定的是 Codex 能调用什么外部工具;Internet Access 决定的是某个执行环境能不能向外发网络请求。一个 MCP 可能自己就是远程服务,但“能连这个 MCP”不等于 Agent 拥有任意互联网访问。

反过来也一样:你给 Cloud Agent 打开互联网,并不会自动多出数据库、Slack 或内部系统的专用工具。网络只是通道,不是业务能力。

6. “Codex 连不上网”不是完整问题:先确认你在哪个执行面

原稿里最值得保留的一点,就是先区分执行环境。Cloud Agent、本地 CLI、IDE/桌面客户端的网络边界不一样,不能拿一篇 Cloud 教程的开关直接套到本地。

Codex Cloud:setup 和 agent phase 是两件事

OpenAI 当前文档明确说明:Codex Cloud 默认会阻止 agent phase 的互联网访问,但 setup scripts 仍然可以联网,用来安装依赖。需要时,可以按 environment 单独开启 Agent internet access。

这就解释了一个很常见的现象:依赖安装明明成功,Agent 真正开始处理仓库以后却访问不了某个网站。这不是网络“时好时坏”,而是两个阶段本来就有不同的边界。

本地 CLI / IDE:不要套 Cloud 的答案

本地 Codex 还受到当前机器的代理、企业证书、沙箱、系统网络和项目权限影响。浏览器能打开某个页面,不代表终端进程一定使用同样的代理;同样,某个 MCP 能连通,也不代表普通 shell 请求可以任意出网。

本地排查时,应该记录:当前客户端、运行目录、目标域名、请求方式和具体错误。DNS、TLS、超时、401/403 分别指向不同层,不要为了一个域名访问失败直接解除所有限制。

7. Cloud Agent 要联网,最稳的是“域名白名单 + 只读 HTTP 方法”

OpenAI 当前对 Codex Cloud 的建议非常直接:只开放任务需要的域名和 HTTP 方法,并检查 Agent 输出与工作日志。

Cloud Internet Access 可以按 environment 设置为 Off 或 On;开启后仍然可以使用 domain allowlist,同时限制允许的 HTTP methods。

如果只是读文档,优先考虑把方法限制在:

GET

HEAD

OPTIONS

这样 POST、PUT、PATCH、DELETE 等写入型请求会被阻止。

域名方面,可以从空白 allowlist 开始,也可以用 Common dependencies 作为安装依赖的起点,再补充真正需要的域名。All (unrestricted) 虽然最省事,但也是风险最大的一档。

为什么“允许所有域名”不是一个普通便利选项

官方明确列出的风险包括:不可信网页里的 prompt injection、代码或 Secret 外泄、下载恶意或存在漏洞的依赖,以及引入许可证受限内容。

最危险的组合是:Agent 既能访问任意外网,又能拿到高价值 Secret。此时一个来自 issue、README、网页或依赖描述里的恶意指令,就可能诱导 Agent 把仓库信息或凭证发到攻击者控制的地址。

网络权限越大,外部内容就越应该被当成不可信输入。

8. 四个现实需求,到底应该选哪一层能力?

真实需求优先选择为什么
每篇文章都按固定结构、QA 和产品事实写Skill缺的是稳定流程,不缺外部服务
Codex 需要查询远程数据库或第三方工单MCP / App需要专用数据和动作接口
把“写作 Skill + 外部数据连接”交给整个团队安装Plugin需要版本化打包和分发
Cloud Agent 需要读取官方文档网站Internet Access + 精确 allowlist需要网络出口,但不需要新增业务工具
Cloud Agent 需要调用某个外部 APIInternet Access + 凭证 + 精确域名/方法网络与认证都必须最小化
本地任务只需下载依赖本地网络 / setup 相关环境不需要因此给所有 Agent 工作阶段开放任意网络

9. 真正复杂的任务,可能同时用 Skill、MCP 和 Internet Access

这几种能力不是互斥的。一个高质量工作流完全可能同时使用它们,只是每一层要负责自己的事情。

以一篇带真实数据和配图的技术文章为例,可以这样分:

Skill

负责:选题、事实检查、结构、写作、SEO Review

MCP / App

负责:读取外部数据或工具结果

Internet Access

负责:允许必要的网络请求

外部 API

负责:真正执行生图 / 查询 / 远程动作

Plugin(可选)

负责:把这整套能力打包给团队复用

AI Code With 在这种结构里,更适合出现在“外部模型 / API 能力”这一层。例如你的 Skill 已经判断某个图片任务确实需要重新生成,才去调用对应的 AI Code With 生图能力;Skill 负责决策,API 负责执行,网络策略负责只让必要请求出去。

这比把“写作流程、API 能力、Plugin、网络权限”全部写成一个产品功能更可信,也更容易审计。

10. 如果任务需要访问 AI Code With,正确做法是“精确放行”,不是“为了省事开全网”

假设一个 Cloud 任务确实要调用 AI Code With。这里 AI Code With 只是一个经过核实的外部 API 服务,不是“打开互联网”的理由。

更稳的做法应该是:

• 先从当前官方 / 产品接入文档确认实际使用的 API 域名和 Endpoint,不靠旧文章或模型记忆猜。

• 只把任务真正需要的域名加入 allowlist。

• 如果请求只是读取资料,优先保留 GET / HEAD / OPTIONS;确实要调用生成或写入型 API 时,再开放所需方法。

• API Key 只在需要的执行步骤注入,不写进 prompt、仓库和日志。

• 任务结束后检查 Usage Records / 对应后台记录,确认请求确实走到了预期服务和 Key。

这样 AI Code With 的价值也更自然:它能提供模型/API入口、Key 管理和调用记录,但网络白名单、Codex 的 Agent 权限以及外部内容是否可信,仍然属于 Codex 环境和你的工作流责任。

11. 安装或开权限以后,不要靠“看起来能用”验收

不管是 Skill、Plugin、MCP 还是 Internet Access,我都建议第一次只做一个最小、只读、可回滚的验证。

能力第一次怎么验收失败后怎么撤
Skill新会话触发一次最小任务,确认读取了正确规则和事实源禁用 / 移走 Skill,再跑同一任务对照
MCP / App只读查询一条非敏感数据,确认权限范围正确断开连接、撤销 Token、禁用 Server/App
Plugin新会话确认插件加载,只测试一项核心能力卸载 / 禁用插件并确认相关 App 权限没有残留
Internet Access允许一个目标域名,确认它可访问且未授权域名仍被阻止关闭环境网络或收紧 allowlist / HTTP methods

任何一个步骤如果你说不清“它现在能读什么、能写什么、凭证在哪里、怎么撤销”,就不应该直接进入生产项目。

12. 最常见的 8 个误区

误区为什么不对更合适的判断
“Skill 就是更简单的 Plugin”Skill 是工作流指令;Plugin 是打包和分发单位先问是否需要把多种能力一起交付
“装了 MCP 就能上网”MCP 是工具协议,不等于任意网络出口网络权限和工具连接分别审计
“开了 Internet Access 就能访问公司系统”网络通道不等于账号授权和业务工具仍需 App/MCP 与对应身份认证
“Plugin 安装成功就代表权限都安全”底层 App/OAuth/工作区权限仍然生效单独检查读写范围和审批
“只读工具没风险”读取也可能暴露敏感数据或扩大数据面把读取范围限制到任务真正需要的对象
“Cloud setup 能联网,所以 Agent 也能”setup 与 agent phase 网络边界不同按实际运行阶段检查
“某个域名打不开就直接 All unrestricted”会同时扩大 prompt injection 与 Secret 外泄风险先定位 DNS/TLS/策略/认证层
“外部网页是资料,所以可以信”网页、issue、README 都可能包含 prompt injection外部内容一律按不可信输入处理

13. 最后,用这套决策顺序就够了

1. 任务只是缺固定流程?

→ Skill

2. 任务必须访问外部数据或执行外部动作?

→ MCP / App

3. 这组 Skill + 外部连接要长期分发给团队?

→ Plugin

4. 当前执行环境确实需要网络出口?

→ Internet Access

5. 需要联网时:

→ 先精确域名

→ 再最小 HTTP 方法

→ 最后才注入必要 Secret

6. 上生产前:

→ 最小只读测试

→ 检查日志与权限

→ 确认撤销路径

这套顺序的好处,是不会为了“功能更全”提前引入不必要的风险。一个任务如果用 Skill 就能完成,就停在 Skill;只有任务真的跨出本地边界,再一层层加外部能力。

14. 真正专业的扩展方式,不是让 Codex 什么都能做

Codex 的扩展能力越来越多以后,最有价值的能力反而不是记住多少插件名字,而是能判断“这个任务到底缺哪一层”。

Skill 负责让流程稳定;MCP / App 负责连接外部系统;Plugin 负责把能力组合成可维护的工作流包;Internet Access 负责控制网络出口。

边界一旦清楚,权限审计、故障排查和产品能力描述都会简单很多。

最好的扩展不是“全部打开”,而是让每一项任务只获得完成它所必需的那一点能力。

相关阅读

• Codex MCP 怎么配置:从第一个 Server 到 OAuth、权限和安全回滚

• Codex 多项目怎么管理:Profile、API Key、worktree 与 GitHub Actions

• Codex API Key 怎么配置:Key、Base URL、Provider 和模型分别做什么

• Codex 多工具怎么配才不串线

• Codex auth.json 是什么:位置、风险与安全排错

资料来源与核对说明

本文基于《Codex Internet Access 怎么开才安全?先分清你在哪个执行面》和《Codex Plugin、Skill、MCP 到底怎么选?安装前先弄清边界》两篇原稿合并重写,并对 2026 年当前的 Plugin 与 Codex Cloud Internet Access 术语和行为进行了核对。

需要特别注意:OpenAI 在 2026 年已经把 Plugin 作为 ChatGPT 与 Codex 的主要工作流能力发现入口,Plugin 可以包含 Skills、Apps 和 App templates;因此早期文章里把 Connector 作为主要产品术语的写法,发布时更适合更新为当前的 Apps / MCP 表述。

OpenAI - Plugins in ChatGPT and Codex:https://help.openai.com/en/articles/20001256-plugins-in-codex

OpenAI - Codex Cloud Agent internet access:https://developers.openai.com/codex/cloud/internet-access

OpenAI - Apps / MCP:https://help.openai.com/en/articles/11487775

OpenAI Developers - MCP and Connectors:https://developers.openai.com/api/docs/guides/tools-connectors-mcp

AI Code With 文档:https://docs.aicodewith.ai/zh/docs