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(全局)

典型内容

- 提交代码前必须运行测试
- 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 子代理停止时

典型用途

# 每次文件修改后自动运行代码格式化
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)。

典型用途

---
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/ 目录,具体安装命令和结构取决于插件的发布方式。