Appearance
Copilot CLI 提供了 8 种定制化机制,从始终生效的全局指令,到特定任务的 Skills,再到与外部服务交互的 MCP Servers,以及打包分发的 Plugins。选错工具会让配置复杂化;本页帮你快速定位每种机制的适用场景。
GitHub Copilot CLI 定制化功能对比:指令、技能、工具、MCP、Hooks 全解析
8 种定制化机制总览
| 机制 | 适用场景 | 加载时机 |
|---|---|---|
| 自定义指令 | 始终生效的团队规范、编码风格 | 会话启动时自动加载 |
| Skills | 特定任务的可复用指南 | 按需触发(手动或自动匹配) |
| Tools | 核心操作能力(文件、Shell、GitHub) | Copilot 自动调用 |
| MCP Servers | 接入外部数据源和工具 | 配置后按需调用 |
| Hooks | 会话生命周期自动化和守卫 | 特定事件触发 |
| Subagents | 隔离执行的复杂子任务 | 主代理按需启动 |
| Custom Agents | 特定领域的专项角色配置 | 任务委托时调用 |
| Plugins | 打包发布的功能集合 | 安装后生效 |
各机制详解
自定义指令(Custom Instructions)
是什么:启动会话时自动加载的持久规则文件,让 Copilot 始终遵循你的团队约定。
文件位置(按优先级):
AGENTS.md(当前目录).github/copilot-instructions.md(仓库级)$HOME/.copilot/copilot-instructions.md(全局)
典型内容:
markdown
- 提交代码前必须运行测试
- PR 描述要包含"测试方法"一节
- 不要修改公共 API,除非明确要求
- 使用 TypeScript,避免 `any` 类型适合场景:所有任务都需要遵守的基础约束,不适合放太多内容(影响上下文效率)。
Skills(技能)
是什么:包含特定任务指南的 Markdown 文件,可以按任务类型触发。
结构:
my-skill/
├── SKILL.md # 核心指令(含 YAML frontmatter)
└── scripts/ # 可选:可执行脚本
└── references/ # 可选:参考文档触发方式:手动用 @skill-name 调用,或 Copilot 根据任务描述自动匹配。
适合场景:有固定流程的重复性任务(如部署文档、代码审查检查清单),不希望这些指南"始终占用上下文"时使用 Skill 而非 Custom Instructions。
Tools(工具)
是什么:Copilot 内置的操作能力,包括:
- 文件搜索和读取
- 文件内容编辑
- Shell 命令执行
- GitHub API 交互
使用方式:通常 Copilot 自动决定调用哪个工具,也可以通过 --allow-tool/--deny-tool 明确控制。
适合场景:基础的开发操作,无需额外配置,直接使用即可。
MCP Servers
是什么:通过 Model Context Protocol 接入外部数据源和工具的服务。
可以连接的服务示例:
- 数据库(查询表结构、执行 SQL)
- 内部 API(读取业务数据)
- 项目管理工具(Jira、Linear)
- 日历和通讯工具
配置方式:在 Copilot CLI 配置文件中添加 MCP Server 地址和认证信息。
适合场景:需要访问 Copilot 内置工具无法覆盖的外部系统时,添加对应的 MCP Server。
Hooks
是什么:在会话生命周期的特定时刻,自动执行你定义的 shell 命令。
支持的事件:
| 事件 | 触发时机 |
|---|---|
preToolUse | 工具调用前 |
postToolUse | 工具调用后 |
userPromptSubmitted | 用户提交提示词时 |
sessionStart | 会话开始时 |
sessionEnd | 会话结束时 |
errorOccurred | 发生错误时 |
agentStop | 主代理停止时 |
subagentStop | 子代理停止时 |
典型用途:
bash
# 每次文件修改后自动运行代码格式化
postToolUse(write): prettier --write "**/*.ts"
# 阻止 git push(加入保护逻辑)
preToolUse(shell(git push)): ./scripts/check-before-push.sh
# 会话结束时记录统计信息
sessionEnd: ./scripts/log-session-stats.sh适合场景:自动化守卫(防止危险操作)、日志记录、策略强制执行。
Subagents(子代理)
是什么:主代理启动的独立代理实例,拥有独立的上下文窗口。
适合场景:
- 需要隔离上下文的复杂子任务(如深度代码分析不污染主会话)
- 委托给特定 Custom Agent 处理的专项任务
/fleet命令的底层实现
Custom Agents(自定义代理)
是什么:有专项领域知识、特定权限和工具配置的代理配置文件(Markdown + YAML frontmatter)。
典型用途:
yaml
---
name: test-writer
description: 专注于为函数编写单元测试,只使用 write 工具,不执行 shell 命令
allowed-tools: [write, search]
---
你是一个测试专家,只为现有代码添加测试用例,不修改被测代码本身...适合场景:特定角色(安全审查员、文档撰写者、测试工程师),或需要严格限制权限的受限代理。
Plugins(插件)
是什么:把 Skills、自定义代理、Hooks、MCP Servers 打包在一起的安装包,方便团队统一分发。
适合场景:
- 团队/组织想统一分发 Copilot 配置
- 需要将配置作为可版本化的包管理
选择指南
| 问题 | 推荐方案 |
|---|---|
| 所有任务都要遵守的规范 | Custom Instructions |
| 特定任务的重复流程 | Skills |
| 接入外部服务/数据库 | MCP Server |
| 防止 AI 做危险操作 | Hooks |
| 特定领域的专项代理 | Custom Agent |
| 团队统一分发配置 | Plugin |
常见问题
Q: Custom Instructions 和 Skills 该怎么选?
A: Custom Instructions 适合"每次都要遵守"的基础规范(文件始终加载,占用上下文);Skills 适合"某类任务才需要"的详细流程(按需触发,不占用平时的上下文)。重复使用的内容太长,放 Custom Instructions 会让每次请求都变慢,这时应该改用 Skill。
Q: Hooks 能阻止 AI 执行某个操作吗?
A: 可以。preToolUse 中如果脚本返回非 0 退出码,可以阻止该工具调用。这是实现"禁止 AI 执行 git push"等保护规则的方式。
Q: 插件装在哪里?
A: 插件通常安装在 ~/.copilot/plugins/ 目录,具体安装命令和结构取决于插件的发布方式。