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。”

  • 通信首选项

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

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

当应避免或尽量减少时:

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

详细了解自定义说明

请参阅“为 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 服务器 和工具)。
  • 维护可能影响每个会话的配置可能会给你造成问题。

了解有关挂钩的详细信息

请参阅“将挂钩与 GitHub Copilot CLI 一起使用”。

子代理

什么是子代理?

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

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

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

子代理帮助 Copilot:

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

何时使用子代理?

          Copilot 可能将子代理用于以下事项:
  • 代码库浏览

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

  • 复杂任务的命令执行

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

  • 查看更改

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

  • 复杂的多步骤工作

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

  • 来使用自定义智能体

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

自定义代理

什么是自定义代理?

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

          Copilot CLI 具有多个内置自定义代理。 例如, `explore`、 `task`、 `research`、 `code-review`和 `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 上添加一个功能包,而不需要我手动配置。 | ** **插件 |

延伸阅读

  •         [AUTOTITLE](/copilot/how-tos/copilot-cli)