Appearance
Copilot CLI Plugin 是你打包自定义代理、Skills 和 MCP 配置的标准方式:写一个 plugin.json 清单,把各组件组织进目录,一条命令安装,同事和团队成员也能一键复用你的工作流配置。
GitHub Copilot CLI 插件开发:创建和打包自定义 Plugin
插件的价值
手动配置 Copilot CLI 的代理和技能后,分享给团队的成本很高——每人都要手动复制文件。Plugin 解决这个问题:把所有配置打包成一个可安装的单元,copilot plugin install 一行搞定。
插件目录结构
my-plugin/
├── plugin.json # 必须,清单文件
├── agents/ # 可选,自定义代理
│ └── react-expert.agent.md
├── skills/ # 可选,自定义技能
│ └── deploy/
│ └── SKILL.md
├── hooks.json # 可选,Hooks 配置
└── .mcp.json # 可选,MCP 服务器配置plugin.json 清单文件
json
{
"name": "my-dev-tools",
"description": "React development utilities for our team",
"version": "1.0.0",
"agents": "agents/",
"skills": ["skills/"],
"hooks": "hooks.json",
"mcpServers": ".mcp.json"
}字段说明:
| 字段 | 必须 | 说明 |
|---|---|---|
name | 是 | 插件唯一标识,卸载时用这个名字 |
description | 是 | 插件描述 |
version | 否 | 版本号(推荐填写) |
agents | 否 | 代理文件目录路径 |
skills | 否 | Skills 目录路径(数组,可多个) |
hooks | 否 | Hooks 配置文件路径 |
mcpServers | 否 | MCP 服务器配置文件路径 |
添加自定义代理
在 agents/ 目录中创建 NAME.agent.md:
markdown
---
name: react-expert
description: React 专家代理,擅长组件设计和性能优化
tools: ["bash", "edit", "view"]
---
你是一位 React 专家,专注于:
- 函数式组件和 Hooks 最佳实践
- 性能优化(memo、useMemo、useCallback)
- 组件设计模式
处理任务时先分析现有代码结构,再提出改进方案。添加自定义技能(Skill)
在 skills/deploy/SKILL.md 中:
markdown
---
name: deploy
description: 部署当前项目到测试环境
---
# 部署流程
1. 运行 `npm run build` 构建项目
2. 检查 build 目录是否生成成功
3. 运行 `./scripts/deploy-staging.sh` 推送到测试环境
4. 输出部署成功的 URL本地安装和测试
bash
# 安装本地插件
copilot plugin install ./my-plugin
# 验证安装
copilot plugin list
# 在交互式会话中验证组件
/agent # 查看是否有新代理
/skills list # 查看是否有新技能
/mcp show # 查看是否有新 MCP 服务器更新开发中的插件:每次修改后重新安装(会覆盖旧版本):
bash
copilot plugin install ./my-plugin卸载插件
bash
copilot plugin uninstall my-dev-tools注意:用的是 plugin.json 中的 name 字段,不是目录路径。
发布到插件市场
- 把插件目录推送到 GitHub 仓库(
plugin.json必须在仓库根目录,或.plugin/、.github/plugin/、.claude-plugin/下) - 提交到 copilot-plugins 官方市场 或 awesome-copilot 社区市场
用户安装时:
bash
copilot plugin install OWNER/REPO常见问题
Q: 插件里的代理和直接在仓库 .github/agents/ 放的代理有什么区别?
A: .github/agents/ 只对当前仓库生效;Plugin 是可安装/卸载的单元,安装后对所有项目生效,更容易在团队间分发。
Q: 插件可以包含私有的 API Keys 吗?
A: 不建议。插件是可分发的,不要把敏感信息写进去。敏感配置应通过环境变量或用户级配置文件传递。
Q: 如何让非标准路径的 plugin.json 被识别?
A: 安装时指定路径:
bash
copilot plugin install OWNER/REPO:custom/path/to/plugin