欢迎光临
我们一直在努力

写一次 Skill,能否同时给 Codex、Cursor、Copilot 使用?Agent Plugins 1.0 来了

写一次 Skill,能否同时给 Codex、Cursor、Copilot 使用?Agent Plugins 1.0 来了

摘要

过去,为 Codex、Cursor、GitHub Copilot 编写同一种能力,经常要复制 Skill、重写 MCP 配置,再维护三套插件清单。2026 年 8 月发布的 Agent Plugins 1.0,第一次把可复用部分收敛为一个厂商中立的目录格式:根目录使用 plugin.json,工作流放进 skills/,MCP Server 放进 mcp.json。兼容客户端可以从同一份插件中发现并加载它们。

但“写一次,到处运行”并不等于所有配置都完全通用。Agent Plugins 1.0 目前只标准化了 Agent Skills 和 MCP Servers;Hooks、Rules、Commands、Custom Agents、安装入口、权限和认证仍由各客户端决定。

本文不只介绍概念,而是从零实现一个可以运行的 portable-sql-review 插件:同一份 SQL Review Skill 配合同一个本地 MCP Server,在 Codex、Cursor 和 GitHub Copilot 中复用,并给出安装、协议测试、功能验收和常见错误排查方法。


60 秒先看结论

答案是:可以,但要准确理解“写一次”的范围。

能力CodexCursorGitHub Copilot是否属于 Agent Plugins 1.0 可移植核心
skills/<name>/SKILL.md 支持 支持 支持
Skill 的 scripts/、references/、assets/ 支持 支持 支持
mcp.json 中的 stdio MCP Server 支持 支持 支持
Streamable HTTP MCP Server 支持 支持 支持
旧版 HTTP+SSE 未列为支持 支持 支持 标准允许,但客户端可选
Hooks 各自实现 各自实现 各自实现
Rules / AGENTS.md / Instructions 各自实现 各自实现 各自实现
Custom Agents / Commands 各自实现 各自实现 各自实现
插件市场与安装命令 各自实现 各自实现 各自实现
OAuth、密钥保存、权限确认 各自实现 各自实现 各自实现

官方兼容列表目前同时列出了 Cursor、GitHub Copilot、ChatGPT & Codex;三者都支持 Agent Skills、stdio MCP 和 Streamable HTTP MCP。Agent Plugins:Compatible Clients

因此,正确的工程方式不是复制三套 Skill,而是分成两层:

可移植核心
├── plugin.json
├── skills/
└── mcp.json

客户端适配层
├── 安装与 Marketplace 配置
├── Hooks / Rules / Commands
├── 权限与认证
└── UI 与企业治理

一句话概括:

工作流和工具尽量只写一次;客户端特有能力放进独立适配层,不要污染可移植核心。


一、Agent Plugins 1.0 到底解决了什么

1. 以前真正重复的不是业务能力,而是外包装

假设团队做了一个“数据库变更审查”能力:

  • Skill 规定审查步骤、风险等级和输出格式;
  • MCP Server 对 SQL 做确定性扫描;
  • Agent 负责理解上下文、判断业务语义并生成验证 SQL。

这些核心能力在 Codex、Cursor、Copilot 中没有本质区别。真正造成重复维护的通常是:

  • 每个客户端的插件清单位置不同;
  • Skill 目录约定不同;
  • MCP 配置字段和传输方式不同;
  • Hooks、Rules、Commands 混在插件主清单里;
  • 一个版本修复后,另外两份副本忘记同步。

Agent Plugins 1.0 的价值,就是给共同部分定义一个最小交集。官方将它定义为一种厂商中立的可移植包格式,首个版本只标准化两个组件:Agent Skills 和 MCP Servers。Agent Plugins 1.0 规范

2026 年 8 月 6 日发布该标准时,初始维护成员来自 Amazon、Cursor、Microsoft、OpenAI 和 Vercel,Google 随后加入。GitHub Copilot 已在 VS Code、Copilot CLI、Copilot SDK 和 Copilot App 中提供支持。GitHub 发布说明

2. 它不是新的 Agent 框架

Agent Plugins 1.0 不负责:

  • 调度 Agent;
  • 选择模型;
  • 保存聊天记忆;
  • 定义完整权限模型;
  • 统一所有厂商的 Hooks;
  • 规定插件商店必须如何实现。

它解决的是更基础的问题:如何把已经存在的 Skill 和 MCP Server 放进一个结构稳定、可被多个客户端识别的目录中。

可以把几层标准理解为:

层级解决的问题
Agent Skills 工作流和领域知识怎样组织
MCP Agent 怎样调用工具和外部系统
Agent Plugins Skill 与 MCP 怎样打包在一起
Marketplace 插件怎样被发现、安装和升级
客户端适配层 Hooks、Rules、Commands、权限和 UI 怎样实现

3. 为什么标准故意做得很小

如果第一版试图同时统一所有厂商的 Agent、Hook、Rule、Command 和权限机制,规范很可能还没发布就已经失效。

所以 Agent Plugins 1.0 只保留真正成熟的公共部分:

  • 根目录必须有 plugin.json;
  • Skills 固定放在 skills/;
  • MCP 固定写入根目录 mcp.json;
  • 客户端特有能力使用独立扩展命名空间;
  • 一个组件失败,不应该拖垮其他独立组件。
  • 这种设计的重点不是“什么都能统一”,而是“统一的部分以后不需要再复制”。


    二、一个标准 Agent Plugin 长什么样

    最小插件只需要:

    hello-plugin/
    ├── plugin.json
    └── skills/
    └── greet/
    └── SKILL.md

    一个同时包含 Skill 和 MCP Server 的实用插件通常是:

    portable-sql-review/
    ├── plugin.json
    ├── skills/
    │ └── sql-change-review/
    │ ├── SKILL.md
    │ └── references/
    │ └── review-rules.md
    ├── mcp.json
    ├── server/
    │ └── server.mjs
    ├── tests/
    │ └── test-server.mjs
    ├── samples/
    │ └── risky.sql
    └── package.json

    这里有三个不能混淆的文件:

    文件作用是否可移植
    根目录 plugin.json 声明 Agent Plugins 版本与插件身份
    skills/<name>/SKILL.md 声明任务工作流
    根目录 mcp.json 声明 MCP Server 的启动或连接方式

    1. plugin.json 不是随便写的 JSON

    {
    "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
    "name": "portable-sql-review",
    "version": "1.0.0",
    "description": "Review SQL changes with a portable workflow and a deterministic local MCP checker.",
    "author": {
    "name": "Example Author"
    },
    "license": "MIT",
    "keywords": ["sql", "database", "review", "migration", "safety"]
    }

    Agent Plugins 1.0 的根清单是闭合 Schema,只允许这些顶层字段:

    $schema, name, version, description, author,
    homepage, repository, license, keywords, extensions

    因此下面这种看起来合理的写法,反而不是合规的 1.0 清单:

    {
    "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
    "name": "wrong-example",
    "skills": "./skills/",
    "mcpServers": "./mcp.json",
    "hooks": "./hooks.json"
    }

    问题在于:

    • skills 不需要声明,客户端固定扫描 skills/;
    • MCP 必须放在根目录 mcp.json,不能内联;
    • Hooks 不是 Agent Plugins 1.0 的可移植组件;
    • 未定义的顶层字段会被报告并忽略,不能依赖它们产生行为。

    2. Skill 必须是 skills/ 的直接子目录

    正确:

    skills/sql-change-review/SKILL.md

    错误:

    skills/database/review/sql-change-review/SKILL.md

    规范只发现 skills/ 下的直接子目录,不会递归搜索更深层级。每个 Skill 内仍然可以使用标准的 scripts/、references/ 和 assets/。

    3. mcp.json 也有自己的 Schema

    {
    "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
    "mcpServers": {
    "portable-sql-review": {
    "type": "stdio",
    "command": "node",
    "args": ["${PLUGIN_ROOT}/server/server.mjs"],
    "cwd": "${PLUGIN_ROOT}"
    }
    }
    }

    这里有几个容易忽略的细节:

    • command 必须是一个可执行文件名,不能写成整段 Shell 命令;
    • 参数必须拆到 args 数组;
    • ${PLUGIN_ROOT} 指向插件安装目录;
    • ${PLUGIN_DATA} 指向客户端为插件分配的持久化可写目录;
    • 两个 Schema 版本必须一致;
    • 不要把 API Key 写进 env 或 HTTP headers。

    Agent Plugins 1.0 没有统一 OAuth 和凭据保存协议,认证仍由客户端管理。插件清单中的 env、headers 都属于可见配置,不是安全的密钥存储。Agent Plugins 1.0 规范


    三、实战:实现一个真正能用的 SQL Review Skill

    这个示例不是“你好世界”,而是一个有明确工程价值的插件:

    • Agent Skill 负责完整审查流程;
    • MCP Tool 负责确定性的危险 SQL 扫描;
    • Agent 再结合数据库类型、事务、锁和业务语义给出结论;
    • 同一套核心文件交给 Codex、Cursor、Copilot 使用。

    第一步:编写 Skill

    创建 skills/sql-change-review/SKILL.md:


    name: sql-change-review
    description: Review SQL files, database migrations, DML, DDL, and stored-procedure changes for destructive operations, semantic drift, transaction risks, locking risks, and missing verification steps. Use when the user asks to review, migrate, execute, or troubleshoot SQL changes.

    # SQL Change Review

    Review the change as an engineering change, not as isolated SQL syntax.

    ## Workflow

    1. Identify the target database, affected objects, execution environment, and intended business result.
    2. Read the complete SQL change or diff. Do not infer omitted statements.
    3. Call the `review_sql` tool from the `portable-sql-review` MCP server for every changed SQL script.
    4. Treat tool findings as a deterministic first pass, not as proof that the SQL is safe.
    5. Manually review:
    – row-selection semantics and NULL behavior;
    – transaction and exception boundaries;
    – lock duration, index support, and expected row count;
    – repeated execution and idempotency;
    – source-to-target data meaning during database migrations;
    – rollback, preimage capture, and post-execution verification.
    6. Never execute destructive SQL merely because the static checker returned no finding.

    ## Required output

    Return the review in this order:

    1. 60-second conclusion: safe, needs confirmation, or blocked.
    2. Risk table: severity, location, evidence, impact, and fix.
    3. Required changes: only changes necessary before execution.
    4. Verification SQL: pre-check, execution guard, and post-check.
    5. Remaining uncertainty: facts that must be confirmed by a human or database owner.

    这份 Skill 有四个关键点:

  • 触发条件明确:SQL、DML、DDL、存储过程、数据库迁移都能匹配;
  • 工具调用明确:不是模糊地说“检查一下”,而是要求调用 review_sql;
  • 工具边界明确:静态扫描通过不等于可以执行;
  • 输出结构明确:三种 Agent 最终都应该产生相似、可验收的报告。
  • 第二步:把领域规则放进 references

    创建 skills/sql-change-review/references/review-rules.md:

    # SQL review rules

    ## Block by default

    – DELETE 或 UPDATE 缺少有效 WHERE 条件。
    – TRUNCATE、DROP TABLE 或破坏性结构变更没有恢复方案。
    – 执行环境不明确时操作生产数据库。
    – 使用不可信输入拼接动态 SQL。
    – 数据库迁移把“逐行成功/失败”改成“整批失败”却没有经过确认。

    ## Require evidence

    – 预计和实际影响行数。
    – 大批量 DML 的索引支持。
    – 长时间操作的锁等待检查。
    – 不可逆修改的执行前快照。
    – 使用业务主键和金额核对,而不只是比较总行数。

    ## Oracle to PostgreSQL checks

    – 空字符串与 NULL。
    – NVL、DECODE、异常处理、自治事务、序列、日期计算和隐式转换。
    – 过程返回协议与事务归属。
    – 游标和批处理的逐行处理语义。
    – 按业务含义核对字段映射,而不是只看字段名。

    这样做比把所有内容塞进 SKILL.md 更合理:Skill 主文件保持短小,只有遇到数据库审查任务时,Agent 才按需读取详细规则。

    第三步:实现确定性 MCP 检查器

    下面的 Server 不依赖第三方 npm 包,只需要 Node.js。它实现了 MCP 初始化、工具发现和 review_sql 调用,并检查:

    • 无有效 WHERE 的 DELETE;
    • 无有效 WHERE 的 UPDATE;
    • WHERE 1=1;
    • TRUNCATE;
    • DROP TABLE / DROP COLUMN;
    • 动态 SQL;
    • 写操作缺少验证和回滚证据。

    核心扫描逻辑如下:

    function reviewSql(sql, dialect = "generic") {
    const normalized = String(sql ?? "")
    .replace(/–.*$/gm, " ")
    .replace(/\\/\\*[\\s\\S]*?\\*\\//g, " ");

    const findings = [];

    for (const match of normalized.matchAll(
    /\\bDELETE\\s+FROM\\s+[\\w."`]+[\\s\\S]*?(?=;|$)/gi
    )) {
    const statement = match[0];
    if (!/\\bWHERE\\b/i.test(statement) ||
    /\\bWHERE\\s+1\\s*=\\s*1\\b/i.test(statement)) {
    findings.push({
    severity: "critical",
    code: "DELETE_WITHOUT_FILTER",
    message: "DELETE 缺少有效 WHERE 条件,可能删除整表数据。",
    evidence: statement.trim()
    });
    }
    }

    for (const match of normalized.matchAll(
    /\\bUPDATE\\s+[\\w."`]+[\\s\\S]*?(?=;|$)/gi
    )) {
    const statement = match[0];
    if (!/\\bWHERE\\b/i.test(statement) ||
    /\\bWHERE\\s+1\\s*=\\s*1\\b/i.test(statement)) {
    findings.push({
    severity: "critical",
    code: "UPDATE_WITHOUT_FILTER",
    message: "UPDATE 缺少有效 WHERE 条件,可能更新整表数据。",
    evidence: statement.trim()
    });
    }
    }

    if (/\\bTRUNCATE\\b/i.test(normalized)) {
    findings.push({
    severity: "critical",
    code: "TRUNCATE",
    message: "检测到 TRUNCATE,必须确认环境和恢复方案。"
    });
    }

    if (/\\bDROP\\s+TABLE\\b/i.test(normalized)) {
    findings.push({
    severity: "critical",
    code: "DROP_TABLE",
    message: "检测到 DROP TABLE,默认阻断。"
    });
    }

    const blocked = findings.some(item => item.severity === "critical");

    return {
    dialect,
    decision: blocked
    ? "blocked"
    : findings.length
    ? "review_required"
    : "no_static_finding",
    findings,
    disclaimer: "静态检查不替代执行计划、锁分析和业务语义核对。"
    };
    }

    完整 MCP Server、测试脚本和示例 SQL 已放在本文配套包中。之所以不直接让 Skill 用自然语言判断全部风险,是因为:

    • 正则扫描是确定性的;
    • 同样的 SQL 每次得到相同结果;
    • MCP Tool 可以独立测试;
    • Agent 把精力用于事务、锁、字段映射和业务语义;
    • 后续可以把简单规则替换为真正的 SQL Parser,而不改 Skill 的工作流。

    这就是 Skill 与 MCP 正确的分工:

    层适合负责
    Skill 步骤、判断点、输出格式、人工确认条件
    MCP Tool 数据读取、外部操作、确定性计算和扫描
    Agent 理解上下文、解释风险、补全验证方案
    Hook / CI 强制阻断、最终门禁和审计

    四、先测试插件,不要直接丢给 Agent

    1. 测试 MCP 协议

    配套包中的测试会完成四项检查:

  • initialize 握手成功;
  • tools/list 能发现 review_sql;
  • DELETE FROM orders; 返回 blocked;
  • 带限定条件的 DELETE 不会被错误判为整表删除。
  • 运行:

    cd portable-sql-review
    node tests/test-server.mjs

    预期输出:

    PASS: initialize, tools/list, risky SQL, scoped SQL

    如果这一步失败,不要先怀疑 Agent。问题仍然处在插件、Node.js 或 MCP 协议层。

    2. 验证 JSON

    python -m json.tool plugin.json > /dev/null
    python -m json.tool mcp.json > /dev/null

    这只能检查 JSON 语法。真正发布前还要按照 Agent Plugins Schema 验证字段、路径和类型。

    3. 准备功能测试 SQL

    samples/risky.sql:

    — 预期:blocked
    DELETE FROM demo_orders;

    — 预期:blocked
    UPDATE demo_order_items
    SET quantity = 0
    WHERE 1 = 1;

    安装插件后,对三种客户端使用同一条验收指令:

    请使用 sql-change-review 检查 samples/risky.sql,
    给出 60 秒结论、风险表、修改建议和验证 SQL。

    不要只检查 Agent 有没有“说危险”,还要检查:

    • 是否确实调用了 MCP Tool;
    • 是否识别两个危险语句;
    • 是否给出 blocked;
    • 是否没有擅自执行 SQL;
    • 是否输出执行前和执行后验证方案;
    • 是否说明静态扫描的能力边界。

    五、同一份插件如何安装到 Cursor

    Cursor 官方文档明确说明:符合 Agent Plugins 规范的插件可以不修改直接加载。开发阶段可以把插件放进本地插件目录。Cursor Plugins 文档

    Windows

    将插件复制到:

    %USERPROFILE%\\.cursor\\plugins\\local\\portable-sql-review

    macOS / Linux

    mkdir -p ~/.cursor/plugins/local
    cp -R ./portable-sql-review ~/.cursor/plugins/local/

    然后:

  • 重启 Cursor,或者执行 Developer: Reload Window;
  • 打开 Customize;
  • 确认能看到 sql-change-review Skill;
  • 确认 portable-sql-review MCP Server 已启用;
  • 在新对话中执行前面的统一验收指令。
  • 如果 Skill 出现但 MCP 没出现,优先检查:

    • Node.js 是否在 Cursor 进程可见的 PATH 中;
    • mcp.json 是否在插件根目录;
    • 文件名是否误写成 .mcp.json;
    • command 是否写成了一整段 Shell 命令;
    • 企业管理员是否关闭了本地插件导入。

    六、同一份插件如何安装到 GitHub Copilot

    Copilot CLI 支持直接从本地目录安装:

    copilot plugin install ./portable-sql-review

    查看是否安装成功:

    copilot plugin list

    进入交互会话后检查 Skill:

    /skills list

    然后使用统一验收指令检查 samples/risky.sql。

    开发阶段修改了插件后,需要重新安装或开始新会话,让缓存中的组件刷新:

    copilot plugin install ./portable-sql-review

    GitHub 官方文档还支持从 Marketplace、GitHub 仓库、Git URL、子目录和本地绝对路径安装。GitHub Copilot CLI 插件文档

    如果要加入 Copilot 特有的 Agent、Hook、Command 或 Rule,不要塞进 Agent Plugins 1.0 根清单。GitHub 的推荐做法是把 Copilot 特有文件放到它识别的客户端命名空间或兼容目录中,其他客户端忽略这些内容。


    七、同一份插件如何安装到 Codex

    Codex 支持通过 Marketplace 安装插件。本地开发时,可以建立一个最小 Marketplace:

    portable-demo-marketplace/
    ├── .agents/
    │ └── plugins/
    │ └── marketplace.json
    └── plugins/
    └── portable-sql-review/
    ├── plugin.json
    ├── skills/
    └── mcp.json

    .agents/plugins/marketplace.json:

    {
    "name": "portable-demo",
    "interface": {
    "displayName": "Portable Demo"
    },
    "plugins": [
    {
    "name": "portable-sql-review",
    "source": {
    "source": "local",
    "path": "./plugins/portable-sql-review"
    },
    "policy": {
    "installation": "AVAILABLE",
    "authentication": "ON_INSTALL"
    },
    "category": "Productivity"
    }
    ]
    }

    添加 Marketplace:

    codex plugin marketplace add /absolute/path/to/portable-demo-marketplace

    安装插件:

    codex plugin add portable-sql-review@portable-demo

    查看状态:

    codex plugin list –json

    也可以进入 Codex CLI 后执行:

    /plugins

    选择对应 Marketplace,检查并启用插件。完成安装后开启一个新会话,再执行统一验收指令。

    Codex 的 Marketplace 可以引用原生 .codex-plugin/plugin.json、Claude 兼容插件、Agent Plugins 1.0 包或独立 Skill 包。OpenAI Codex 插件管理文档

    需要注意:OpenAI 自己的公共插件目录还存在 .codex-plugin/plugin.json 原生打包格式。它与 Agent Plugins 1.0 根目录 plugin.json 不是同一个文件。团队内部跨客户端复用时,可以以 Agent Plugins 1.0 为核心;需要投递特定厂商的公共目录时,再增加该平台要求的发布元数据和适配文件。


    八、“一次编写”真正应该怎样组织仓库

    推荐使用单一仓库、一个可移植核心、多个薄适配层:

    agent-plugin-repo/
    ├── plugins/
    │ └── portable-sql-review/
    │ ├── plugin.json
    │ ├── skills/
    │ ├── mcp.json
    │ ├── server/
    │ └── tests/
    ├── .agents/plugins/marketplace.json
    ├── .github/plugin/marketplace.json
    └── adapters/
    ├── codex/
    ├── cursor/
    └── copilot/

    其中:

    • plugins/portable-sql-review/ 是唯一业务能力来源;
    • 两份 Marketplace 文件只是不同客户端的分发入口;
    • adapters/ 只放无法标准化的 Hooks、Rules、Commands 或发布元数据;
    • 不允许在适配层复制 SKILL.md;
    • CI 必须验证所有适配层仍然指向同一个核心版本。

    一个重要原则:不要为了“统一”而制造最低质量的 Skill

    跨客户端通用的 Skill 应该避免依赖:

    • 某个客户端独有的工具名称;
    • 某种专属 Slash Command;
    • 某个厂商的隐藏目录;
    • 未标准化的 Hook 返回格式;
    • 某个模型特有的提示词技巧。

    但这不代表 Skill 只能写成空泛流程。正确做法是:

    • 在 Skill 中引用逻辑工具名和目标能力;
    • 在 MCP 中提供确定性工具;
    • 把厂商特有增强放入适配层;
    • 使用相同验收用例验证不同客户端的行为。

    九、Hooks 为什么不能一起带走

    这是 Agent Plugins 1.0 最容易被误解的地方。

    当前 1.0 规范只定义:

  • Agent Skills;
  • MCP Servers。
  • Hooks、Custom Agents、Commands、Rules、LSP、UI 都不是可移植核心。原因是各客户端的:

    • 生命周期事件不同;
    • 输入和输出 JSON 不同;
    • 阻断语义不同;
    • 权限模型不同;
    • 可执行脚本环境不同。

    如果 SQL 审查插件还想在命令执行前强制拦截危险 SQL,应当:

    公共 Skill:说明何时审查、怎么审查、输出什么
    公共 MCP:执行确定性 SQL 风险扫描
    Codex Hook:按 Codex 协议阻断危险命令
    Cursor Hook:按 Cursor 协议阻断危险命令
    Copilot Hook:按 Copilot 协议阻断危险命令
    CI:作为最终、与客户端无关的合并门禁

    这仍然比维护三份完整插件好,因为最复杂的工作流、规则和扫描器只有一份,客户端层只保留薄薄的事件适配。

    Skill 负责指导,MCP 负责能力,Hook 负责节点控制,CI 负责最终强制。


    十、最常见的 10 个失败原因

    1. 把厂商原生清单当成 Agent Plugins 1.0

    .codex-plugin/plugin.json、.cursor-plugin/plugin.json 与根目录 plugin.json 不是同一个格式。想要可移植,必须提供带 1.0 Schema 的根清单。

    2. 在根清单中配置组件路径

    1.0 使用固定发现位置。不要添加:

    {
    "skills": "./skills/",
    "mcpServers": "./mcp.json"
    }

    3. 把 mcp.json 写成 .mcp.json

    厂商旧格式可能使用 .mcp.json,但 Agent Plugins 1.0 的可移植核心固定使用根目录 mcp.json。

    4. Skill 藏得太深

    只扫描:

    skills/<skill-name>/SKILL.md

    不会继续递归寻找更深层 Skill。

    5. command 写成 Shell 命令

    错误:

    {
    "command": "node ./server/server.mjs –mode check"
    }

    正确:

    {
    "command": "node",
    "args": ["${PLUGIN_ROOT}/server/server.mjs", "–mode", "check"]
    }

    6. 插件依赖当前工作目录

    安装后路径会变化。访问插件内文件使用 ${PLUGIN_ROOT},写缓存和安装依赖使用 ${PLUGIN_DATA}。

    7. 把密钥提交进 env 或 headers

    这些都是插件包的可见数据。认证必须交给客户端或外部安全凭据机制。

    8. 认为 MCP 启动成功就代表 Skill 有效

    至少分别验证:

    • 插件清单;
    • Skill 发现与触发;
    • MCP 握手;
    • 工具发现;
    • 工具调用;
    • Agent 是否遵循输出要求。

    9. 认为一个客户端通过就代表三个都通过

    标准允许客户端逐步实现组件。每个目标客户端都要运行相同验收用例,并记录版本。

    10. 用 Skill 代替安全门禁

    Skill 是提供给模型的工作流,不是不可绕过的权限系统。删除数据、发布生产、发送消息等高风险动作,仍然需要 Hook、审批、沙箱或 CI。


    十一、发布前检查清单

    插件结构

    • 根目录存在 plugin.json。
    • $schema 精确指向 1.0.0/plugin.schema.json。
    • 插件名只使用允许的小写字母、数字、连字符或点号。
    • 根清单没有 skills、mcpServers、hooks 等非法顶层字段。
    • 每个 Skill 都位于 skills/<name>/SKILL.md。
    • MCP 配置位于根目录 mcp.json。
    • plugin.json 与 mcp.json 的 Schema 版本一致。

    MCP

    • command 是单个可执行文件名。
    • 参数全部放在 args。
    • 插件文件路径使用 ${PLUGIN_ROOT}。
    • 持久化数据使用 ${PLUGIN_DATA}。
    • 没有把密钥写进 env 或 headers。
    • stdio Server 能完成 initialize、tools/list 和 tools/call。
    • Server 错误不会导致整个插件其他 Skill 无法加载。

    Skill

    • name 与目录名称清晰且稳定。
    • description 同时说明“做什么”和“什么时候触发”。
    • 明确工具调用顺序。
    • 明确缺少信息时如何处理。
    • 明确危险动作的人工确认条件。
    • 明确最终输出格式。
    • 没有写死某一客户端独有命令。

    跨客户端验收

    • Cursor 能发现 Skill 和 MCP Tool。
    • Copilot 能发现 Skill 和 MCP Tool。
    • Codex 能发现 Skill 和 MCP Tool。
    • 三端使用同一测试输入。
    • 三端都识别高风险 SQL。
    • 三端都没有擅自执行危险操作。
    • 差异只存在于安装、权限或客户端适配层。

    十二、最终结论

    Agent Plugins 1.0 让“一份 Skill 同时给 Codex、Cursor、Copilot 使用”从手工复制变成了正式的标准能力,但它不是魔法。

    真正可以一次编写的是:

    • Skill 工作流;
    • Skill 引用的脚本、规则和资源;
    • MCP Server;
    • MCP 的标准启动与连接配置。

    仍然需要分别处理的是:

    • Marketplace 和安装入口;
    • Hooks、Rules、Commands、Custom Agents;
    • 权限、认证和密钥;
    • UI、企业策略和发布审核。

    所以,最稳妥的落地方式不是追求“三端零差异”,而是:

    用 Agent Plugins 1.0 保存唯一的可移植核心,用很薄的客户端适配层处理剩余差异,再用一套相同的验收用例防止行为漂移。

    对于团队来说,它真正减少的不是一个 SKILL.md 的复制动作,而是长期维护中最麻烦的版本分叉、规则漂移和工具配置重复。


    赞(0)
    未经允许不得转载:171主机测评 » 写一次 Skill,能否同时给 Codex、Cursor、Copilot 使用?Agent Plugins 1.0 来了
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址