Skip to main content

比较 GitHub Copilot CLI 自定义功能

了解可以自定义 Copilot的各种方法:它们执行的操作,以及何时使用它们。

谁可以使用此功能?

GitHub Copilot 命令行界面 (CLI) 适用于所有 Copilot 计划。 如果从组织收到 Copilot,必须在组织的设置中启用 Copilot 命令行界面(CLI) 策略。

介绍

Copilot 命令行界面(CLI) 是基于终端的 AI 代理,可以代表你回答问题、计划工作和完成任务。 它设计为高度可扩展,可通过多种方式自定义其行为并扩展其功能。

本文介绍以下两者之间的差异:

  • 自定义指令

    这些指示Copilot一般的行为准则。 例如,为了确保编写的任何代码 Copilot 都符合编码标准。 了解详细信息

  • 技能

    这些说明 Copilot如何处理特定类型的任务。 例如,在处理特定类型的任务时使用特定工具。 了解详细信息

  • 工具

    这些 提供能力。 例如,用于查找和修改文件,或者用于与部分 GitHub文件进行交互。 了解详细信息

  • MCP 服务器

    这些添加了工具集,允许 Copilot 与外部服务交互。 了解详细信息

  • 挂钩

    通过这些方法,可以在 特定的生命周期时刻运行自己的逻辑。 例如,每次 CLI 会话启动或结束时,都可以运行特定的脚本。 了解详细信息

  • 子代理

    这些是 委托代理进程,绑定到主代理,用于独立于主代理进程执行特定任务。 它们有自己的上下文窗口,无需影响主代理的上下文即可填充这些窗口。 了解详细信息

  • 自定义代理

    这些是 专用功能的定义,旨在执行特定任务。 主 CLI 代理可以使用自定义代理配置文件将任务委托给子代理,以将专家知识和特定方法应用于任务。 例如,自定义代理可以执行 React 审阅者、文档编写者、安全审核员或测试生成器的角色。 了解详细信息

  • 插件

    这些 可以提供预配置的自定义,例如技能、挂钩、自定义代理和 MCP 服务器。 了解详细信息

自定义指令

什么是自定义说明?

自定义指令是 Copilot 命令行界面(CLI) 在会话开始时从指令文件加载的持久化指导。

Copilot 将从存储库中的多个默认位置(如 AGENTS.md.github/copilot-instructions.md),或者从主目录中的 $HOME/.copilot/copilot-instructions.md 查找并加载指令文件。

可以使用标志 --no-custom-instructions 来避免加载这些说明。

自定义指令可以解决哪些问题?

自定义说明可帮助你:

  • 让 Copilot 符合你的编码规范和偏好。
  • 一致地应用团队或组织标准。
  • 避免在每个提示中都包含对 Copilot 的重复提醒。

何时应使用自定义说明?

使用自定义说明以实现以下目的:

  • 样式和质量规则

    示例:“首选小型 PR、编写测试,并避免在不讨论的情况下更改公共 API。

  • 存储库约定

    示例:“使用 pnpm,在 CHANGELOG.md 中保留更改日志条目,提交之前运行 pnpm test。”

  • 通信首选项

    示例:“简要说明权衡,然后提供建议的选择。

何时不应使用自定义说明?

当应避免或尽量减少时:

  • 你只需要一个工作流中的行为(改用 技能 )。
  • 说明内容太详尽或具体,以至于让你无法集中于眼前的任务(建议使用Copilot或自定义代理)。

详细了解自定义说明

请参阅“为 GitHub Copilot 命令行界面 (CLI) 添加自定义说明”。

技能

什么是技能?

技能至少是一个 Markdown 文件,其中包含可以用来在特定上下文中执行任务的说明Copilot。 名称和技能说明允许 Copilot 确定它是否应将技能用于给定的任务。 如果决定使用技能,它将加载说明并按照说明完成任务。

技能可以选择引用存储在技能目录中的其他文件。 这些可包含 Copilot 使用该技能时可运行的脚本。

技能可以解决什么问题?

技能可帮助你:

  • 标准化 Copilot 在特定上下文中执行任务的方式(例如,执行代码审查时)。
  • 提供“实时”指令,而无需永久更改 Copilot'行为。
  • 避免将与当前任务无关的说明重载到Copilot的上下文窗口。

如何访问技能?

可以使用斜杠命令手动调用技能。 例如,/Markdown-Checker check README.md。 用于 /skills list 列出可用的技能。

Copilot 命令行界面(CLI) 当检测到与当前任务相关的技能时,会自动调用技能。

何时应使用技能?

如果需要,请使用技能:

  • 一组可用于某个类型的任务的可重复指令或功能。

    示例:一种文档技能,用于检查前端代码更改时是否更新了面向用户的文档。

  • 一致的输出格式。

    示例:一个“发行说明草稿”技能,确保 Copilot 使用模板创建发行说明。

  • 一个有时需要但并非总是需要的工作流。

    示例:仅在迁移期间启用的“深度重构”技能。

何时不应使用技能?

以下情况下避免使用技能:

  • 本指南应适用于你所做的 一切 (改用 自定义说明 )。
  • 需要新功能(可能需要 MCP 服务器 来添加工具或用于专用的 自定义代理 )。

详细了解代理技能

请参阅“关于代理技能”。

工具

什么是工具?

工具可用于Copilot完成某些操作,例如搜索文件、查看文件内容、编辑、运行任务或调用技能。 某些工具内置,其他工具可通过 MCP 服务器添加。

工具可以解决什么问题?

工具允许 CLI:

  • 收集准确的上下文(使用读取/搜索工具)。
  • 安全地进行更改(使用编辑工具)。
  • 执行命令并验证结果(可能使用子代理)。

何时应使用工具?

通常不会直接调用工具,Copilot 决定根据需要使用工具。 可以允许或拒绝对特定任务、当前会话或所有 Copilot 命令行界面(CLI) 会话使用工具。

在以下情况下,你将看到 Copilot 使用工具:

  • 要求 Copilot 搜索存储库中的内容、更新文件或运行测试。
  • 调用某个技能以触发skill工具。
  • 要求 Copilot 执行要求其使用 MCP 服务器提供的工具的任务。
  • 指派 Copilot 完成复杂任务,它会决定委托给子智能体 — 这会触发 task 工具。

详细了解如何允许或拒绝工具

请参阅“关于 GitHub Copilot CLI”。

MCP 服务器

什么是 MCP 服务器?

MCP 服务器是一项允许 AI 应用程序(例如Copilot 命令行界面(CLI))连接到外部数据源和工具的服务。

通过添加 MCP 服务器来 Copilot 命令行界面(CLI) 提供其他功能,允许你使用该 MCP 服务器提供的工具。 例如,可以添加 MCP 服务器,该服务器提供用于与联机日历应用程序交互的工具,或支持票证系统。

MCP 服务器可以解决什么问题?

当内置工具不够时,MCP 服务器会有所帮助。 他们可以:

  • 将 Copilot 命令行界面(CLI) 连接到外部系统。
  • 添加专用工具(例如,用于处理 API、数据库或映像生成)。
  • 标准化非存储库资源的安全访问模式。

何时应使用 MCP 服务器?

如果需要,请使用 MCP 服务器:

  • 与外部数据或系统集成。

    示例: How many support tickets have been opened this month for Product X?

  • 希望 CLI 代表你执行的特定于域的操作。

    示例: Message the bug-watch channel: Only 2 support tickets raised this month for Product X.

何时不应使用 MCP 服务器?

避免在以下情况下添加MCP服务器:

  • 内置工具已满足你的需求。

了解有关 MCP 服务器的详细信息

请参阅“关于模型上下文协议 (MCP)”。

挂钩

什么是挂钩?

挂钩 允许你指定,在会话生命周期的给定点, Copilot 命令行界面(CLI) 将执行你定义的 shell 命令。

挂钩运行时
preToolUse / postToolUse工具运行之前/之后。
userPromptSubmitted当用户提交提示时。
sessionStart / sessionEnd在会话的开始/结束时。
errorOccurred发生错误时。
agentStop当主代理停止而不出错时。
subagentStop在子代理完成时。

挂钩可以解决什么问题?

在需要可编程控制或行为可观测性Copilot 命令行界面(CLI)的情况下,挂钩可以提供帮助,例如:

  • 强制实施防护措施 - 在运行某些工具之前阻止或发出警告。
  • 添加日志记录/遥测
  • 自定义可恢复错误的重试/中止行为
  • 添加“策略”检查,例如,阻止对受保护路径的编辑。
  • 截获子代理完成任务的时刻—在结果返回给父代理之前。

当你需要比技能或自定义指令提供的更多控制时,挂钩非常有用。 虽然技能和说明通过提示指导 Copilot其行为,但挂钩可确保在特定时刻执行定义的操作,例如,阻止工具运行,或在会话结束时记录活动。

何时应使用钩子?

如果需要,请使用挂钩:

  • 工具防护措施

    • 示例:在运行之前 bash ,要求特定命令与允许列表匹配。
    • 示例:在 edit 运行之前,除非存在票证 ID,否则阻止 infra/ 下面的更改。
  • 会话生命周期自动化

    • 示例:代理停止时,将会话的脚本存档到存储位置。
  • 错误处理策略

    • 示例:在遇到速率限制错误时,自动选择“重试”,并设定重试次数的上限。
  • 子代理工作流控件

    • 示例:子代理完成后,在将结果传递回主代理之前验证其输出。

何时不应使用挂钩?

以下情况下避免使用挂钩:

  • 只需一致的提示或工作流说明(使用 技能)。
  • 需要持久性首选项和标准(使用 自定义说明)。
  • 你需要新的外部功能(使用 MCP 服务器 和工具)。
  • 维护可能影响每个会话的配置可能会给你造成问题。

了解有关挂钩的详细信息

See:

子代理

什么是子代理?

子代理是会话中主代理执行的一项操作,其中主代理启动一个单独的 AI 代理以完成特定任务。

Copilot 命令行界面(CLI) 当主代理决定将工作块委派给单独的代理时,使用子代理是完成用户请求的最佳方式。

子代理可以解决什么问题?

子代理帮助 Copilot:

  • 通过将一大堆工作卸载到单独的智能体,使 CLI 会话中主智能体的上下文窗口被聚焦。
  • 根据需要,通过在后台运行某些任务来并行化工作。
  • 让自定义代理独立于主代理运行,并采用与主代理不同的方法来执行专门的任务。

何时使用子代理?

Copilot 可能将子代理用于以下事项:

  • 代码库浏览

    例如,列出 API 中的所有终结点。

  • 复杂任务的命令执行

    例如,运行测试套件或生成大型项目并分析结果。

  • 查看更改

    例如,查看暂存的更改并确定潜在的安全问题。

  • 复杂的多步骤工作

    例如,通过多个更改实现功能。

  • 来使用自定义智能体

    如果您已定义一个自定义代理,并且它符合推理资格(infer 未设置为 false),那么 Copilot 可能会选择通过启动一个配置为该自定义代理的子代理来委派任务。

自定义代理

什么是自定义代理?

自定义代理 提供有关 Copilot 特定主题的专家知识,并定义在该区域工作时应使用的特定方法 Copilot 。 可以将自定义代理视为在处理某些任务时可以采用的“角色”。Copilot

Copilot 命令行界面(CLI) 具有多个内置自定义代理。 例如,exploretaskresearchcode-reviewrubber-duck``general-purpose代理。 还可以定义自己的自定义代理,以满足你的特定需求。

使用 YAML frontmatter 在 Markdown 文件中定义自定义代理。 该文件包含:

  • 代理的角色和专业知识的说明
  • 允许的工具列表(或所有工具)
  • 可选 MCP 服务器连接
  • 可选 infer 设置 - 启用后,当检测到与代理的特殊性匹配的任务时, Copilot 将自动委托给此代理。

自定义代理可以解决哪些问题?

定制代理可在需要时提供帮助:

  • 在特定上下文中一致地应用专家知识。
  • 为不同工作定义的工具的权限分配,均在自定义代理配置中规定。
  • 为了使主代理的上下文窗口能够专注于主任务,自定义代理的上下文窗口用于其执行的专业工作。

何时应使用自定义代理?

如果需要,请使用自定义代理:

  • 专业审阅者或助手

    示例:创建一个“react-reviewer”自定义代理,该代理侧重于涉及 React 模式的工作。

  • 更安全的权限

    示例:一个只能 view/grep/glob(只读)以进行审核的自定义智能体。

  • 可选自动委派

    示例:在自定义代理配置中设置 infer: true , Copilot 以便在适当时自动使用此自定义代理。

何时不应使用自定义代理?

避免在以下情况下使用自定义代理:

  • 你只需要指导性文本(技能 可以是更轻量的解决方案)。
  • 不需要专用化,默认代理执行任务良好。

详细了解自定义代理

请参阅“自定义代理配置”。

插件

什么是插件?

插件是一个可安装包,可将功能捆绑到 Copilot。 插件可以包含其他自定义功能的任意组合。 例如,技能、自定义代理、挂钩和 MCP 服务器配置。

Copilot包括插件管理命令(安装、更新、列出、卸载),并支持从市场或直接从GitHub存储库进行安装。

插件可以解决什么问题?

插件可帮助你:

  • 轻松将一系列功能添加到Copilot,而无需手动配置每个组件。
  • 打包和分发自定义配置(可能是技能、自定义代理、挂钩和 MCP 服务器的组合)到团队或公众。
  • 更改可用功能,而无需手动将文件复制到目录中。

何时应使用插件?

在以下情况下使用插件:

  • 你想要团队范围的捆绑包

    示例:公司范围的工程插件,其中包括:

    • 事件响应技能。
    • 代码评审的自定义代理。
    • 内部服务的 MCP 服务器。
  • 你想要轻松安装和更新

    示例:最初安装插件,然后使用 /plugin update PLUGIN-NAME 定期更新。

何时不应使用插件?

避免使用插件在以下情况:

  • 你在本地进行试验,不需要分发(使用本地技能、自定义说明或自定义代理)。
  • 你只需一个小型的一次性工作流。 单个技能文件可能更简单。

综合考虑:选择合适的方案

Requirement最佳选项
我希望Copilot始终遵循我们的存储库约定。
自定义指令
我需要一个可重复的工作流,我可以按需调用。
技能
我希望 Copilot 在我的存储库中解答问题并执行工作。
Copilot请求使用相应工具的权限
我希望围绕工具使用和会话事件进行防护、策略或自动化。
挂钩
Copilot我需要能够使用外部服务提供的工具。
MCP 服务器
处理特定任务时,我想 Copilot 以具有受限工具集的专家身份运行。
自定义代理
我想Copilot代表我执行一个复杂的任务。
Copilot 在适当情况下自动使用 子代理
我想在 Copilot 命令行界面(CLI) 上添加一个功能包,而不需要我手动配置。
**
**插件

延伸阅读