切换主题

Codex Skills 与 Plugin 实战:把团队流程固化成可复用能力

Easton editorial illustration: large four-position entry selector dial, single starter task card, four mode sockets

"OpenAI Codex Agent Skills 文档用于核验 Skill 与 Plugin 的分工、Skill 目录结构和 progressive disclosure 机制。"

同一套代码审查清单在 5 个仓库里复制粘贴,每次 PR 还要手动提醒”先跑失败测试”、“检查权限边界”、“别漏 changelog”。问题不在提示词不够长,而是这些流程没有被产品化。

Codex 的 Skills 和 Plugins 就是为了解决这个问题:把团队的重复流程从提示词和 AGENTS.md 中抽出来,沉淀成可复用能力。Skill 是可复用工作流的作者格式,Plugin 是可安装的分发单元。两者和项目规则分工不同:常驻规则留 AGENTS.md,多步骤流程、示例、脚本和长参考进 Skill,团队分发再打包成 Plugin。

一张决策表能帮你快速判断该用 Skill、Plugin、MCP、AGENTS.md 还是 Subagent;然后从一个最小 Skill 文件树开始,写到 role-specific plugin 的拆法、团队分发路径和权限边界检查清单。

一、复制粘贴的团队流程:问题不在提示词

代码审查、发布前检查、测试流程、文档更新,这些清单在团队里往往有固定格式。你可能会在每个 PR 评审时手动复制一段提示词给 Codex:“检查是否漏了 changelog、测试覆盖率有没有下降、API 文档要不要同步更新”。问题很快就暴露出来:

  • 维护散落在多个地方:清单更新时,要同步修改 5 个项目的 .github/PULL_REQUEST_TEMPLATE.md 或各自独立的提示词文件
  • 执行质量不稳定:Codex 每次都从零开始理解流程,容易漏掉”先跑失败测试”这类重要步骤
  • 角色职责混乱:前端、测试、安全、文档四个角色的检查项堆在一个提示词里,Codex 难以判断该用哪个标准

有些团队选择把这些规则写进 AGENTS.md,但这又带来新问题:项目规则文件越写越长,常驻的构建命令、目录约定和临时的流程指导混在一起,超出它原本”持久项目约束”的设计范围。

Codex 提供了更清晰的分层:用 AGENTS.md 管持久规则,用 Skills 管可复用流程,用 Plugins 打包分发。知道每一层适合什么内容才能避免堆砌。

二、一张决策表说清 Skill、Plugin、MCP、AGENTS.md

Skill 是可复用工作流的作者格式,通常是一个 SKILL.md 文件加上可选的脚本、参考文档和资产。Plugin 是 Codex 中可安装的分发单元,可以打包 Skills、应用集成、MCP 服务器和资产。MCP 是外部工具和上下文连接协议,给 Codex 访问第三方文档、浏览器、Figma 等能力。AGENTS.md 是持久项目约束,适合存放构建命令、目录约定、审查期望等常驻规则。Subagent 是委派角色,用于处理嘈杂或专用任务。

何时选择哪种方式

内容类型适用方式典型场景不要用在
构建命令、测试脚本路径、目录约定AGENTS.md”所有新组件放在 src/components/”、“测试用 npm run test:unit多步骤流程、示例、外部工具调用
多步骤流程、需要示例/脚本/参考文档Skill代码审查 10 步检查、发布前 7 项清单、API 文档生成流程仅一条命令或一句话规则
团队分发、打包应用集成/MCP 配置Plugin前端角色插件,包含 4 个审查 Skills + Figma 连接器仅在单个仓库迭代、不需要共享
外部工具调用、第三方文档访问MCP连接 Figma 获取设计规范、访问 GitHub API 拉取 issue 列表纯工作流定义、不需要外部数据
嘈杂/专用任务委派Subagent让专用 agent 处理测试诊断、日志分析简单流程、可以直接在主对话完成

何时从 AGENTS.md 抽成 Skill

以下情况说明流程已经超出项目规则文件的设计范围,应该写成 Skill:

  • 同一套检查清单在多个 PR 反复出现,且每次都要手动复制粘贴
  • 流程包含多个步骤,且需要示例、脚本或外部参考文档支撑
  • 流程有明确触发条件,如”在发布前执行”、“在合并请求时运行”,而不是常驻约束
  • 不同角色有不同的执行标准,不适合全部塞进一个文件
  • 需要版本管理和变更记录,而不是每次改动都要修改项目规则

何时从 Skill 升级到 Plugin

Skill 在单个仓库或个人工作流内迭代时足够用,但当出现以下需求时,应该打包成 Plugin:

  • 需要跨团队共享,而不是只在个人目录或单一仓库内使用
  • 需要打包应用集成,如 Figma、GitHub、CI/CD 工具,或 MCP 服务器配置
  • 需要版本管理、变更记录和升级机制,而不是每次都重新复制 Skill 文件
  • 需要通过 Codex App 的 Plugin Directory 分发给 workspace 成员
  • 准备发布稳定包,而不是频繁修改实验性流程

推荐顺序:先用 AGENTS.md 固化仓库约定;已有现成 Plugin 就安装;否则创建 Skill;团队分发时再打包成 Plugin;需要外部系统时再接 MCP;准备委派嘈杂或专用任务时再用 Subagent。

三、最小可用 Skill 实战:从代码审查开始

最小 Skill 文件树

一个 Skill 至少需要:

.agents/skills/code-review/
├── SKILL.md
├── references/
│   └── security-checklist.md
└── scripts/
    └── run-failed-tests.sh

目录名和 SKILL.md frontmatter 中的 name 必须匹配,lowercase alphanumeric + hyphen。

SKILL.md 示例:代码审查 Skill

---
name: code-review
description: Use for pull request reviews in frontend projects. Checks changelog, test coverage, security boundary, and API docs. Do not use for backend-only changes or infrastructure PRs.
---

# Code Review Checklist

## Before Starting
1. Run failed tests first: `npm run test:failed`
2. Check if PR has clear description and scope

## Review Steps
1. Changelog: Does `CHANGELOG.md` need update?
2. Test Coverage: Did coverage decrease? Check report in `coverage/`
3. Security: Review changes in `src/auth/`, `src/api/`, and `src/middleware/`
4. API Docs: If API changed, update `docs/api.md`

## Security Boundary Checks
See `references/security-checklist.md` for detailed items.

## Failed Test Runner
Use `scripts/run-failed-tests.sh` to rerun previously failed tests.

description 触发设计:before/after 对比

Codex 会根据 description 判断何时隐式调用 Skill。写得太模糊容易误触发或不触发:

Before(容易误触发)After(触发更可靠)
“Code review skill for frontend projects""Use for pull request reviews in frontend projects. Checks changelog, test coverage, security boundary, and API docs."
"Help review code""Use when reviewing PRs with frontend changes. Do not use for backend-only changes or infrastructure PRs."
"Review checklist""Trigger on: PR reviews, code audit requests. Exclude: backend changes, config-only updates.”

写法要点:明确 “Use when…” 和 “Do not use when…”,触发关键词前置,例如 pull request、review、frontend。大 Skill 集描述可能被截短,核心判断要放在前半部分。如果只想显式调用,设置 allow_implicit_invocation: false

Skill 保存位置与作用域

位置作用域适用场景注意事项
.agents/skills/(仓库根目录)当前仓库团队项目的审查、测试、发布流程签入 Git,团队共享
$HOME/.agents/skills/(用户目录)个人跨项目个人习惯的代码风格、常用命令提示不会自动同步到仓库
/etc/codex/skills/(admin 目录)组织级别组织统一的安全审查、合规检查需要 admin 权限
System bundled系统内置Codex 默认提供的 $skill-creator$skill-installer不可修改

同名 Skill 不会合并;优先级通常为 repo > user > admin > system,具体行为可能随 Codex 版本变化,以官方文档为准。

Progressive disclosure 设计原则

不要把所有内容塞进主 SKILL.md。Codex 的渐进式披露分三层:

  1. Metadata:Codex 初始只看 namedescription、file path
  2. Instructions:选中后才读完整 SKILL.md
  3. Resources:用到时才读 references/scripts/assets/

设计原则:主 SKILL.md 控制在 500 行内,长参考拆到单独文件;scripts/ 只放确定性检查脚本,如测试运行器、覆盖率检查;references/ 放详细清单、背景文档、历史案例;assets/ 放示例截图、模板文件。

显式/隐式调用方式

显式调用用 $code-review/skills 后选择 Skill。隐式调用让 Codex 根据 description 判断是否适用当前任务。禁用隐式调用则在 agents/openai.yaml 中设置 allow_implicit_invocation: false

隐式调用适合高频、边界明确的流程,如每次 PR 都要审查;显式调用适合低频、需要人工判断的场景,如季度安全审计。如果 Skill 包含外部脚本或敏感操作,优先显式调用。

四、Plugin 打包与团队分发:从本地 Skill 到团队套件

Plugin 最小结构

Plugin 不是只把 Skill 目录改个后缀,而是一个可安装包,至少包含 .codex-plugin/plugin.json manifest:

.agents/plugins/frontend-review/
├── .codex-plugin/
│   └── plugin.json
├── skills/
│   ├── code-review/
│   │   └── SKILL.md
│   ├── accessibility-check/
│   │   └── SKILL.md
│   └── performance-lint/
│       └── SKILL.md
├── assets/
│   └── templates/
└── README.md

plugin.json 必需字段

{
  "name": "frontend-review",
  "version": "1.0.0",
  "description": "Frontend team code review and accessibility check skills",
  "skills": "./skills/",
  "assets": "./assets/",
  "author": "frontend-team",
  "repository": "https://github.com/org/frontend-review-plugin"
}

可选字段包括 apps(打包应用集成,如 .app.json for Figma)、mcpServers(打包 MCP 服务器配置,如 .mcp.json)、policy(权限和数据共享策略,受 workspace admin policy 约束)。

marketplace 结构:团队插件目录

Plugin marketplace 是一个 JSON 清单,指向插件路径:

.agents/plugins/marketplace.json
{
  "plugins": [
    {
      "source": "local",
      "path": "./frontend-review"
    },
    {
      "source": "github",
      "owner": "openai",
      "repo": "role-specific-plugins",
      "ref": "main",
      "path": "plugins/data-analytics"
    }
  ]
}

local 适合团队内部未发布插件;github 指向 GitHub 仓库,适合公共插件或跨团队共享。

Plugin 分发命令清单

CLI 基本命令以官方文档为准,容易变化:

# Scaffold 新插件
codex plugin create frontend-review

# 添加插件到 marketplace
codex plugin marketplace add owner/repo --ref main --sparse

# 列出已安装插件
codex plugin marketplace list

# 升级插件
codex plugin marketplace upgrade frontend-review

# 移除插件
codex plugin marketplace remove frontend-review

Codex App 内:Plugin Directory 可浏览 Curated by OpenAI、Shared with you、Created by you;Local plugin 可分享给 workspace members 或 groups;Workspace admins 可禁用 plugin sharing 或设置 managed requirements。

分享到 workspace 不等于公开发布。外部 app 连接和 MCP server 仍需授权,approval settings 仍适用。

团队 marketplace 组织建议

仓库级 marketplace 放 $REPO_ROOT/.agents/plugins/marketplace.json,存放项目专用插件。组织级 marketplace 放 $HOME/.agents/plugins/marketplace.json 或 GitHub organization repo,存放团队通用插件。版本管理在插件 manifest 中明确 version,README 维护 changelog,升级前在测试环境验证。权限隔离把敏感插件,如安全审查、合规检查,放在组织级 marketplace,避免随意安装。

建议先用 local skill 迭代,稳定后再打包成 plugin 分发,而不是一开始就建 plugin。

五、Role-specific Plugin 拆法:把前端、测试、文档角色固化

OpenAI 在 role-specific-plugins 仓库提供了 Sales、Data Analytics、Product Design、Financial Markets 四个模板。开发团队不需要照搬金融或销售流程,但可以借鉴拆法:从一个角色出发,拆出 3-5 个小 Skill,再打包成 Plugin。

拆解框架:角色 → 重复产物 → 数据/工具来源 → 小 Skill 列表 → 共享方式

角色重复产物数据/工具来源应拆出的 Skills可能需要的 apps/MCP验收标准
前端工程师组件审查、性能检查、无障碍验证Figma 设计规范、Storybook 现有组件库component-auditaccessibility-checkperformance-lintdesign-system-syncFigma connector、Storybook MCP每个新组件都跑完 4 个检查
QA 工程师测试覆盖率报告、E2E 套件诊断、回归清单CI/CD 测试结果、历史失败记录test-coverage-checke2e-suite-runnerflaky-test-diagnosisregression-suite-builderCI/CD 工具连接,如 GitHub Actions/Jenkins失败测试优先运行、覆盖率不下降
技术文档工程师API 文档更新、Changelog 构建、迁移指南API schema、Git commit historyapi-doc-generatorchangelog-builderreadme-auditmigration-guide-writerGitHub API、Schema 工具API 变化时文档同步更新
安全工程师权限边界审查、密钥检查、依赖安全扫描依赖清单、密钥存储配置auth-boundary-checksecrets-scandependency-securitySnyk、Dependabot MCP每次发布前跑完安全清单

前端角色插件拆解示例

frontend-engineer-plugin/
├── .codex-plugin/
│   └── plugin.json
├── skills/
│   ├── component-audit/
│   │   ├── SKILL.md
│   │   └── references/
│   │       └── component-template.md
│   ├── accessibility-check/
│   │   ├── SKILL.md
│   │   └── scripts/
│   │       └── axe-audit.sh
│   ├── performance-lint/
│   │   ├── SKILL.md
│   │   └── scripts/
│   │       └── lighthouse-check.sh
│   └── design-system-sync/
│       ├── SKILL.md
│       └── references/
│           └── design-tokens.md
├── assets/
│   └── templates/
│       └── component-template.tsx
└── README.md

component-audit Skill 检查新组件是否符合团队规范,如命名、目录、props 类型;accessibility-check 用 axe-core 脚本跑无障碍检查;performance-lint 用 Lighthouse 检查核心指标;design-system-sync 对照 Figma 设计规范验证实现。

测试角色插件拆解示例

qa-engineer-plugin/
├── .codex-plugin/
│   └── plugin.json
├── skills/
│   ├── test-coverage-check/
│   │   ├── SKILL.md
│   │   └── scripts/
│   │       └── coverage-threshold-check.sh
│   ├── e2e-suite-runner/
│   │   └── SKILL.md
│   ├── flaky-test-diagnosis/
│   │   ├── SKILL.md
│   │   └── references/
│   │       └── flaky-test-log-analysis.md
│   └── regression-suite-builder/
│       └── SKILL.md
├── .mcp.json
└── README.md

test-coverage-check 检查覆盖率是否下降并标记未覆盖的文件;e2e-suite-runner 按优先级运行 E2E 测试;flaky-test-diagnosis 分析历史失败日志找出不稳定测试;regression-suite-builder 根据变更范围构建回归测试清单。

connector placeholder 替换清单

官方模板中的 .app.json 可能包含 placeholder connector id,安装前需要替换:

{
  "app_id": "figma-placeholder"
}

检查项:.app.json 中的所有 placeholder id 要替换为目标 workspace 可用的真实 id;不要直接复制别的 workspace 的 connector id,它们在不同环境可能无效或有权限问题;MCP server 配置中的 OAuth/Bearer token 要按你的环境配置,不是模板中的示例值;替换后先在测试环境验证连接器是否可用。

官方 role-specific-plugins README 说明,这些插件模板需要先按团队环境定制;带 connector 的插件可能包含要替换的 app 或 connector id。

六、安全与维护:Plugin 不是权限通行证

Connector / MCP 权限边界

安装 Plugin 不绕过 Codex 的 approval settings。外部 app 和 MCP server 仍需授权,数据共享仍受各自政策约束:.app.json 中的 placeholder id 要替换,但不能直接复制别的 workspace 的 connector id,它们可能因权限或环境差异而无效;外部 app 如 Figma、GitHub 需要你单独授权,Plugin 只是打包配置,不是授权本身;MCP server 在 config.toml 中仍可控制 enabled 和 tool policy;Approval mode 仍适用,如果设置为 “suggest-only”,Plugin 中的脚本不会自动执行。

不要把 Plugin 当成权限通行证。它只是把工作流、配置和资产打包,权限边界仍然存在。

脚本来源审查

Skill/Plugin 中的 scripts/ 目录可能包含可执行文件。第三方 Plugin 或社区 marketplace 的脚本需要审查:检查 scripts 目录中的所有可执行文件,确认来源可信;避免直接运行来自未验证仓库的脚本;测试环境先行,不在生产环境直接安装未知 Plugin;版本锁定,不要每次都从 main 分支拉最新版本,使用明确的 tag 或 commit hash。

站内之前分析过 OpenClaw Skills 的恶意插件风险,同样的原则适用于任何可执行脚本和第三方 Plugin:来源审查、权限最小化、测试环境验证。

版本与变更记录

团队协作需要版本管理:plugin.json 中明确 version 字段,每次更新递增版本号;README 中维护 changelog,说明哪些 Skill 新增、哪些修改、哪些废弃;升级前在测试环境验证,运行所有 Skills,检查脚本是否正常,确认连接器仍可用;marketplace 中使用 ref 锁定版本,而不是每次都拉 main 分支最新代码。

Skill/Plugin 数量影响

Codex 初始 Skill 列表有上下文预算约束。官方文档说明:初始 skills 列表预算约占上下文 2% 或 unknown context 时 8,000 characters。

实际影响:Skill description 写得太长可能被截短,核心触发词要前置;同时加载过多 Skills 可能影响 Codex 判断哪个 Skill 适用当前任务;高频使用、边界明确的 Skill 适合放在 repo 或 user 目录,低频、不常用的 Skill 放在 plugin 中按需安装,而不是全部常驻。

如果发现 Codex 经常误触发或不触发某个 Skill,先检查 description 是否清晰、是否被截短,而不是继续增加 Skill 数量。

七、与相关技术的对比

与 Claude Code Skills 的类比

站内之前写过 Claude Code Skill 机制,两者心智相近但产品不同:都围绕 Agent Skills 开放标准和 SKILL.md 文件;都用 namedescription、可选的 scripts/references/assets/;都支持渐进式披露:metadata → instructions → resources。

差异在于:路径上 Codex 用 .agents/skills/,Claude Code 用 .claude/skills/;调用上 Codex 用 $skill-name/skills,Claude Code 用 /skill 命令;插件分发上 Codex Plugin 有 marketplace、CLI 命令和 workspace sharing,Claude Code 目前没有官方 Plugin marketplace;内置工具上 Codex 有 $skill-creator$skill-installer@plugin-creator,Claude Code 有不同的内置命令。

如果之前写过 Claude Code Skills,心智可以直接迁移,但路径和调用方式要以各自官方文档为准,不要把 .claude/skills 当成 Codex 路径。

与 MCP 的分工

MCP(Model Context Protocol)用于外部工具和上下文连接,不是 Skill/Plugin 的替代:Skill 定义工作流和流程;MCP 连接外部工具,如 Figma、GitHub、CI/CD 系统;Plugin 可以打包 MCP server 配置,但 MCP server 本身仍然在 config.toml 中受控。

分工示例:前端审查 Skill 定义”检查组件是否符合设计规范”的流程;Figma MCP server 提供访问设计规范文件的能力;前端 Plugin 打包审查 Skill + Figma MCP 配置,但 Figma OAuth 仍需单独授权。

这里先澄清分工,Codex MCP tools 实战会单独展开。

结论

Codex Skills 和 Plugins 的核心价值是把团队的重复流程从复制粘贴和 AGENTS.md 中抽出来,沉淀成可复用能力。要点:用 AGENTS.md 管持久规则,用 Skill 管多步骤流程,用 Plugin 打包分发,用 MCP 接外部工具;description 写清触发条件,避免误触发或不触发;先用 local skill 迭代,稳定后再打包成 plugin;第三方 Plugin 的脚本、connector id 和 MCP 配置要审查和替换。

从一个最小 Skill 开始:先把团队的代码审查或测试流程写成 SKILL.md,跑几次验证触发是否可靠,再考虑是否需要打包成 Plugin 分发。如果团队有前端、测试、安全、文档等角色,可以参考 OpenAI role-specific-plugins 的拆法,按角色拆成 3-5 个小 Skill,再打包成角色 Plugin。

站内延伸阅读:

把一个重复 Codex 工作流沉淀成 Skill,再升级为 Plugin

从一个已反复使用的团队检查清单开始,先写最小 Skill,验证后再按团队共享需求打包成 Plugin。

⏱️ 预计耗时: 30 分钟

  1. 1

    步骤 1: 从重复 prompt 中抽出稳定流程

    挑一个已经在多个项目重复使用的检查清单或多步骤流程,删掉只属于当前项目的一次性细节。
  2. 2

    步骤 2: 写最小 SKILL.md

    在仓库的 .agents/skills/<skill-name>/SKILL.md 中写 name、description 和步骤,先不要加入复杂脚本。
  3. 3

    步骤 3: 验证显式和隐式触发

    用 $skill-name 显式调用,并用普通任务描述测试 description 是否会触发正确 Skill。
  4. 4

    步骤 4: 拆出 references、scripts 和 assets

    把长参考资料、确定性校验脚本和模板放到对应目录,让 Codex 按需读取。
  5. 5

    步骤 5: 达到团队分发条件后打包 Plugin

    用 @plugin-creator 或手动创建 .codex-plugin/plugin.json,把 skills、可选 app/MCP 配置和 marketplace entry 组织起来。

常见问题

Codex Skill 和 Plugin 有什么区别?
Skill 是可复用工作流的作者格式,Plugin 是把 Skill 和相关工具打包给别人安装的分发单元。
有了 AGENTS.md 还需要 Skill 吗?
需要看内容性质:常驻项目规则留在 AGENTS.md,多步骤重复流程更适合抽成 Skill。
Codex Plugin 和 MCP 插件是一回事吗?
不是;MCP 负责连接外部工具和上下文,Plugin 可以把 MCP server 和 Skill 一起打包。
我应该先写 Skill 还是直接做 Plugin?
先写 Skill;只有当流程稳定且需要共享、打包 app/MCP 或发布时,再做 Plugin。
Skill 会不会自动污染上下文?
Codex 先加载 Skill 的 name、description 和路径,完整 SKILL.md 只有选中后才加载。
role-specific-plugins 仓库可以直接拿来用吗?
可以作为模板参考,但 connector-backed 插件通常要先替换 workspace 可用的 app 或 connector id。

17 分钟阅读 · 发布于: 2026年7月25日 · 修改于: 2026年7月25日

当前属于系列阅读第 8 / 8 篇

Codex 实战专题:CLI、桌面 App、Cloud 与团队工作流

如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。

查看系列总览

相关文章

BetterLink

想持续收到这个主题的更新?

你可以直接关注作者更新、订阅 RSS,或者继续沿着系列入口往下读,避免下次又回到搜索结果重新找。

关注公众号

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog