插件:
把整套本事打包带走
第 8 到 10 课,你给 order-admin 写了一个技能、接了 GitHub MCP、加了两个钩子。它们都在 order-admin 仓库里,拉下仓库就有;可团队还有别的仓库,换一个就得一样一样照着配。插件就是一个能安装的箱子:把这些装进去,别人点一下就装齐,不用每个仓库再配一遍。这一课先装别人做好的插件,再把你自己的这一套打包成 order-admin-kit。
时间紧就先看"入门"和"实战":会装、会用、会打包。"原理"讲清单文件和分发,决定你做的插件同事装上能不能直接用。
插件是什么
插件是一个可以安装的包。装上一个,Codex 就多会几样本事。ChatGPT 和 Codex 共用同一个插件目录。
一个插件里能装四样东西
点每一样看看。前三课做的东西,正好对上其中三样。
大多数插件只装其中一两样。除了这四样,插件还能带图标、截图这类素材,用来在插件目录里展示自己。
在哪能用
在 ChatGPT 桌面 App 的 Codex 里,插件装和用都最完整。IDE 扩展不支持插件,这一点和技能不一样。
| 入口 | 能不能装 | 装上以后 |
|---|---|---|
| 桌面 App · Codex 本教程主线 | 能 在 Plugins 页装 | 新对话里就能用插件带的技能和 MCP 工具;插件带的钩子,你审查、信任以后才运行 |
| Codex CLI (命令行) | 能 输入 /plugins 打开插件浏览器,从配置好的 marketplace 装 | 开一个新会话后能用;在插件浏览器里按空格键开关已装的插件 |
| IDE 扩展 | 不能 | 插件在 IDE 扩展里用不了,要去桌面 App 或 CLI 装。单独放在技能文件夹里的技能,IDE 扩展照样能用 |
| ChatGPT 网页、手机 Chat 和 Work | 能 网页上在 Plugins 页装;手机上用账号里已有的 | 插件里的技能、远程 MCP 工具能用;钩子脚本不会跟着部署过去;标着 Desktop only 的插件用不了 |
在桌面 App 里装好的插件,ChatGPT 的 Chat、Work 和 Codex 都能用。公开插件只发布一次,ChatGPT 和 Codex 两边都搜得到。
标着 Desktop only 的插件只能在桌面 App 里装和用:网页上看得到,但要回到桌面 App 安装;手机上用不了。
能。用 API key 登录 Codex 时,在桌面 App 和命令行里都能浏览、安装 OpenAI 精选的插件。个别插件的连接流程要用 API key 不支持的登录方式,这些就装不了。插件的用量在 OpenAI Platform 的 Usage 页查看。
技能是写法,插件是分发
官方用一句话说清两者的关系:"Skills remain the authoring format; plugins are the installable distribution unit." 技能是你写流程用的格式,插件是把它装箱、发给别人安装的单位。
什么时候做成插件
| 你的情况 | 官方建议 |
|---|---|
| 还在反复打磨一个自己用的流程 | 先写成技能,在技能文件夹里改 |
| 流程只跟一个仓库有关 | 直接放在仓库的技能文件夹里,clone 下仓库的人都有 |
| 要分享给别人装;要把两个以上相关的技能打包;技能要配一个外部服务的连接;要给团队发一个稳定的能力 | 做成插件 |
| 别人已经做好了类似的 | 先装现成的插件,复用验证过的做法 |
插件的四种形状
| 形状 | 什么时候选 |
|---|---|
| 只有技能 | 说明写清楚,再用上 Codex 现有的工具就够了 |
| 只有 MCP 服务器 | 需要 MCP 工具,不需要额外的流程说明 |
| 技能 + MCP 服务器 | 要用技能带着 Codex 走完一套用到这些工具的流程 |
| MCP 服务器 + 界面 | 有一部分工作用可视界面操作明显更好 |
官方建议从够用的最小形状开始,以后再加 MCP 服务器或界面,插件的用途不用变。这张表没把钩子算进去;钩子可以和技能、MCP 服务器一起装进插件。本课的 order-admin-kit 是"技能 + MCP 服务器",外加两个钩子。
练一练:写技能,还是做插件
6 个场景,每个选一种做法。选完会看到解析。
装一个现成的插件
打开 Plugins,挑一个,点 + 装上,开个新对话就能用。五步。
@,选插件或插件带的某个技能。下面是一个可以点的插件目录:切换来源、搜索、打开详情、安装、连接、卸载都能试。
插件名称和用途取自官方文档里的例子;"你的工作区"那一栏是虚构的示例;每个插件要不要连接、什么时候连接,以你 App 里的提示为准。
部分合作方的插件(例如 Airtable、GitLab、HubSpot、Notion、Supabase、Vercel)连接时可以选 Sign in with ChatGPT,直接用 ChatGPT 账号在对方那边建号或关联。它只会把你的名字、邮箱和头像给对方,不会因此让插件读你的数据,也不会自动批准任何操作。插件要的权限,你还得单独审一遍。
命令行里输入 /plugins 打开插件浏览器:按 marketplace 分栏,能装、能卸,按空格键开关已装的插件,装完开一个新会话。
打开箱子看看:目录和清单
插件就是一个文件夹。最要紧的是清单文件 plugin.json,它说明"我是谁";其余东西按固定位置放,Codex 自己会找到。
order-admin-kit/插件文件夹。清单里写的路径都相对于它,而且不能跑出这个文件夹。plugin.json清单:名字、版本、说明。名字要稳定,用 kebab-case(小写字母加连字符),它既是插件的标识,也是里面各组件的命名空间。skills/技能。一个技能一个子文件夹,里面是 SKILL.md,连同它用到的 scripts/、references/、assets/ 整个搬进来。放进来就会被自动发现。mcp.json插件带的 MCP 服务器。装好以后,服务器由插件启动,你的配置管不着它的启动命令,但能开关它、调它的工具审批(第 10 节)。hooks/hooks.json钩子配置,默认就在这个位置。脚本也放在 hooks/ 里,命令里用 ${PLUGIN_ROOT} 指向插件装好后的位置。assets/素材:图标、logo、截图,在插件目录里展示用。两种清单格式
现在有两种写法,Codex 都认。官方说新做的包应该用便携格式(Agent Plugins);而 $plugin-creator 目前生成的是兼容格式。
| 便携格式 | 兼容格式 | |
|---|---|---|
| 清单在哪 | 插件根目录的 plugin.json,开头写 $schema | .codex-plugin/plugin.json |
| 谁会生成 | 自己手写(官方推荐新包用) | $plugin-creator 目前生成这种;它一定会建的只有这个清单文件,其余文件按需生成 |
| 技能 | 放进 skills/ 自动发现,清单里不用写 | 清单里写 "skills": "./skills/" |
| MCP 服务器 | 根目录 mcp.json,开头写 $schema,传输类型按便携格式写(例如 streamable-http) | .mcp.json,由清单引用;传输类型是另一种写法(官方示例里是 http) |
| 钩子 | 默认 hooks/hooks.json;要换位置,写在 extensions.com.openai.hooks | 默认 hooks/hooks.json;要换位置,写在清单的 hooks |
| 显示名、图标等 | 写在 extensions.com.openai 里 | 写在清单的 interface 等字段里 |
① 根目录 plugin.json 里一旦写了 extensions.com.openai,显示名、钩子路径这类 OpenAI 专属设置就只看它,.codex-plugin/plugin.json 里的这些设置整个不用了,两边不合并。名字、版本和 skills/、mcp.json 这些,不管哪种情况都以根目录的清单为准。② 别把 .mcp.json 直接改名成 mcp.json:便携格式开头要写 $schema,每个服务器的传输类型也要按便携格式写(例如 streamable-http),两种写法不一样。
便携格式下,skills/ 和 mcp.json 的位置是固定的,在清单里另写 skills 或 mcpServers 既不能替换、也不能增减它们。
9 月 29 日的 CLI 更新说明写着:去掉了内置的 plugin-creator 技能。可插件打包的官方文档还在教"在 Codex 里用 $plugin-creator",两边没对上。你的 Codex 里输入 $ 找不到它,就照上面表里的便携格式自己建:一个根目录的 plugin.json,加上 skills/ 等文件夹,也可以直接让 Codex 照这个结构帮你建。第 9 节的演练按文档里的流程演示。
装箱:做一个 order-admin-kit
把第 5–10 课做过的东西往箱子里装。点一张卡片装进去(电脑上也可以直接拖进箱子),再点一次拿出来;切换清单格式,看文件怎么变。有几张卡是装不进去的,试试看。
第 5–10 课做过的东西
文件内容为示意:GitHub MCP 的地址是虚构的,技能和钩子沿用第 8、10 课的示例;目录位置、文件名、字段名与官方文档一致。
技能在 .agents/skills/、钩子在 .codex/hooks.json,是跟着 order-admin 仓库走的。打包以后它们还留在原处,同事拉取仓库、信任项目、再装上插件,就会有两份:钩子从项目和插件各加载一次,同一个钩子会跑两遍(prettier 跑两遍,.env 检查也跑两遍),审查、信任也得各做一次;技能也是仓库里一份、插件里一份,两份都可能出现在技能列表里。所以打包后,把 .agents/skills/add-api-endpoint/、.codex/hooks.json 里这两个钩子和 protect_env.py 移走,和插件一起提交(第 9 节演练第 6 步)。项目 .codex/config.toml 里第 9 课那段 [mcp_servers.github],也可以把工具限制改写到插件的配置下(第 10 节),免得同一个服务配两份。
放上货架:marketplace
做好的插件要放进一个 marketplace 才能安装。marketplace 就是一张货架清单:一个 JSON 文件,写着有哪些插件、各在哪个文件夹。
.agents/plugins/marketplace.json,插件一般放在仓库的 plugins/ 下。拉下这个仓库的人都能在 Plugins 里看到它。~/.agents/plugins/marketplace.json,插件常放在 ~/.codex/plugins/。适合先在自己电脑上试。加好或改了 marketplace 文件以后,重启 ChatGPT 桌面 App。在 Plugins 里,每个 marketplace 是一个可以选的来源,选中它就能装上面的插件。一个 marketplace 可以只放一个插件,也可以慢慢攒成你们团队自己的精选清单。
name:货架的名字。配置里点名某个插件时写成插件名@货架名,比如order-admin-kit@order-admin。interface.displayName:App 里显示的货架标题。source.path:插件文件夹在哪。以./开头,相对于 marketplace 的根(这里是仓库根),不是相对于.agents/plugins/。policy.installation:AVAILABLE(可以装)、INSTALLED_BY_DEFAULT(默认装上)、NOT_AVAILABLE(不提供)。policy.authentication:什么时候登录外部服务,ON_INSTALL(安装时)或ON_USE(第一次用时)。每一项都要写policy.installation、policy.authentication和category。
App 安装插件时,会把它复制到 ~/.codex/plugins/cache/货架名/插件名/版本/(本地插件的"版本"这一级叫 local),之后用的是这份副本。所以改了插件文件,要重启 App,本地安装才会拿到新文件。
另外,.agents 文件夹即使在项目里也是只读的。让 Codex 写 marketplace 文件,默认档位下它会先停下来问你(第 9 节演练里会遇到)。
其他分发方式
| 方式 | 给谁用 | 怎么做 |
|---|---|---|
| 发布到工作区 | 工作区里你指定的角色 | 要工作区管理员权限:在 ChatGPT 的 Plugins 页选 Personal,打开插件的 ⋯ 菜单,选 Publish,再选哪些角色能用。只在工作区里,不会进公共目录 |
| 管理员导入 GitHub marketplace | 整个工作区(按角色) | 管理员在 Admin > Plugins 里导入,之后每天自动同步。管理员的事,这里只提一句 |
| 提交到公共目录 | 所有 ChatGPT 和 Codex 用户 | 走 OpenAI 的插件提交和审核流程,上架后两边都能搜到 |
| 命令行添加货架 | 你自己的电脑 | codex plugin marketplace add owner/repo(命令行) |
想给同事一个直达链接:codex://plugins/install/order-admin-kit?marketplace=order-admin 会打开这个插件的安装页;找不到这个货架或插件时,会打开 Plugins 页。
练一练:发给谁,走哪条路
完整走一遍:装、用、打包、分享
先装一个现成的 Slack 插件用一用,再用 $plugin-creator 把你的东西打包成 order-admin-kit,最后看同事怎么装上。中途有三处要你拿主意,可以点允许,也可以点拒绝。
画面为教学示意:Slack 里的消息、issue 编号、提交号、测试数量和 Codex 说的话都是虚构的;插件目录的分栏、安装流程、清单位置、受保护文件夹的规则与官方文档一致。
进阶与避坑
插件装得多了、做给团队用了,会碰到的事。
- "每个插件都必须有
.codex-plugin/plugin.json":这是 2026 年 3 月插件刚上线时的写法。现在新做的包推荐用根目录的plugin.json(便携格式),.codex-plugin/plugin.json作为兼容写法继续支持,$plugin-creator目前也还生成它。 - "IDE 扩展里也能装插件":上线公告里这么写过,现在的文档写的是 IDE 扩展不支持插件,要在桌面 App 或 CLI 里装。
- "Codex 有自己的一套插件目录":现在 ChatGPT 和 Codex 共用一个插件目录,公开插件发布一次,两边都能搜到。
- "在 Codex 里输入
@plugin-creator":那是 ChatGPT 里的写法。在 Codex 里调用技能用$plugin-creator。
在配置里管插件
本地 marketplace 里的插件,可以在 config.toml 里单独开关,还能收紧它带的 MCP 服务器,不用改插件本身。键名写成 插件名@货架名。
# 在这个仓库里开关插件;设成 false 就关掉,不用卸载 [plugins."order-admin-kit@order-admin"] enabled = true # 只放行插件里 GitHub MCP 的两个工具,而且每次用都先问 [plugins."order-admin-kit@order-admin".mcp_servers.github] enabled_tools = ["get_issue", "list_issues"] default_tools_approval_mode = "prompt"
项目里的 .codex/config.toml 只在信任的项目里加载(第 3、7 课)。这些设置管不到工作区管理员导入的插件,那些插件的开关由工作区决定。enabled_tools、disabled_tools、审批方式的含义和第 9 课讲的一样;工具名是示意。
常见问题
装了插件,Codex 好像不知道它
@ 直接点名这个插件试试。插件里的钩子没有运行
- 插件带的钩子默认不信任,审查、信任之前会被跳过。命令行里用
/hooks审查;App 里在哪审查,以你的 App 为准。 - 信任是按钩子当时的内容记下的。插件更新后钩子内容变了,要重新审查。
- 钩子脚本和它调用的程序,得在运行 Codex 的那台电脑上有。在网页上装插件,不会把脚本部署到任何地方。
- 公司管理员可以设成只运行托管的钩子(
allow_managed_hooks_only),这时插件带的钩子都不会运行。
同一个钩子跑了两遍,技能也出现了两个
.codex/hooks.json 和 .agents/skills/ 没移走。钩子的规矩是:用户、项目、插件各处的钩子全部加载,谁也不覆盖谁,所以项目里一份、插件里一份,同一件事就做两遍。把仓库里原来那份移走,只留插件里的。改了插件文件,装好的那份没变
~/.codex/plugins/cache/ 下的副本。改完插件文件夹,重启 App。同事那边,拉取仓库后也要重启。插件装多了,会不会影响 Codex
插件能拿我的数据做什么
为什么有的插件标着 Desktop only
mcp.json 或 .mcp.json 里声明了 MCP 服务器(哪怕是远程的 HTTPS 地址),就会被标成 Desktop only,只能在桌面 App 里用。公司管着插件,我能做什么
features.plugin_sharing = false)、限定能添加哪些 marketplace 来源。这些都是管理员的事,知道有就行。Claude Code 里的插件能搬过来吗
.claude-plugin/marketplace.json;插件钩子的命令除了 PLUGIN_ROOT,还会拿到 CLAUDE_PLUGIN_ROOT,方便沿用已有的钩子脚本。小测验
8 道题,每题选完会立刻看到解析。
