Skip to main content

为 GitHub Copilot 命令行界面 (CLI) 添加自定义说明

提供 Copilot 有关如何理解你的项目以及如何构建、测试和验证其更改的额外背景信息。

GitHub Copilot 如果提供了足够的上下文,它可以根据个人偏好、团队的工作方式、你使用的工具或项目的具体信息来定制响应。 可以创建自定义说明,自动为你添加此信息,而不是重复将此上下文详细信息添加到提示中。 附加信息不会显示,但可供 Copilot 用于生成更高质量的响应。

自定义说明的类型

GitHub Copilot 命令行界面 (CLI) 支持来自以下位置的指令。

除非下表中另有说明,否则 Copilot 命令行界面(CLI)会在标准位置中查找存储库指令文件和代理指令文件:存储库根目录、当前工作目录、它们之间的各级中间目录,以及其正在处理的文件所在路径中的任何嵌套目录。 模块化指令文件(即与 *.instructions.md 匹配的那些文件)是路径特定的——带有 applyTo 值的文件仅适用于与之匹配的文件。

位置范围和行为
$HOME/.copilot/copilot-instructions.md适用于所有存储库的用户级说明。
$HOME/.copilot/instructions/**/*.instructions.md模块化的面向用户说明。
.github/copilot-instructions.md在标准位置中发现的整个代码库指令。
.github/instructions/**/*.instructions.md在标准位置而非中间目录中发现的模块化存储库说明。
AGENTS.md在标准位置中发现的代理指令。 有关详细信息,请参阅 agentsmd/agents.md 存储库
CLAUDE.md在标准位置找到的代理说明。
Copilot 命令行界面(CLI) 也使用 .claude/CLAUDE.md
GEMINI.md在标准位置中发现的代理指令。
COPILOT_CUSTOM_INSTRUCTIONS_DIRS 中列出的目录附加的 AGENTS.md*.instructions.md 文件。 用逗号分隔多个目录。

如果设置了 COPILOT_HOME 环境变量,Copilot 命令行界面(CLI) 将使用该目录而不是 $HOME/.copilot 作为两个用户级指令位置。

使用 /instructions 命令可查看为当前会话发现的说明文件,并启用或禁用各个文件。

多个指令文件如何交互

当存在多个适用的用户级和仓库级指令文件时,Copilot 命令行界面(CLI) 会合并这些指令。 它删除相同的用户级别 copilot-instructions.md、存储库范围和代理指令的副本,但不定义这些文件之间的一般优先顺序。 避免矛盾的指令。

仅当特定于路径的说明的 applyTo 值与 Copilot 命令行界面(CLI) 正在处理的文件匹配时,才会包含这些说明。 使用 /instructions 禁用的说明文件不包括在内。

创建全仓库内的自定义指令

  1. 在存储库的根目录中,创建名为 .github/copilot-instructions.md 的文件。

    创建 .github 目录(如果尚不存在)。

  2. 以 Markdown 格式在该文件中添加自然语言说明。

    系统会忽略说明信息间的空格,因此可将信息编写为一个段落,每个段落位于一行上,或用空白行分隔,以保持其可读性。

    有关编写有效自定义说明的帮助,请参阅 关于自定义GitHub Copilot 响应

引用其他文件

.github/copilot-instructions.mdAGENTS.mdCLAUDE.md中,使用@后跟相对路径,以包含另一个文件。 Copilot 命令行界面(CLI) 会立即读取被引用的文件,并支持被引用文件中的引用。

引用的文件必须保留在存储库中,或在本地说明的自定义说明目录中。 绝对路径以及以 ~/ 开头的路径不会被加载。 文件引用不会在 GEMINI.md*.instructions.md 文件中展开。

创建路径特定的自定义指令

  1. 如果尚无 .github/instructions 目录,则创建该目录。

  2. (可选)创建用于组织指令文件的子目录 .github/instructions

  3. 创建一个或多个 NAME.instructions.md 文件,其中 NAME 指示指令的用途。 文件名必须以 .instructions.md 结尾。

  4. 在文件开头,创建包含 applyTo 关键字的前辅文块。 使用 glob 语法指定指令应用于的文件或目录。

    例如:

    ---
    applyTo: "app/models/**/*.rb"
    ---
    

    可以通过用逗号分隔多个模式来指定这些模式。 例如,若要将指令应用于仓库中的所有 TypeScript 文件,可以使用以下前辅文块:

    ---
    applyTo: "**/*.ts,**/*.tsx"
    ---
    

    Glob 示例:

    • * - 会匹配当前目录中的所有文件。
    • ****/* - 均会匹配所有目录中的所有文件。
    • *.py - 将匹配当前目录中的所有 .py 文件。
    • **/*.py - 将以递归方式匹配所有目录中的所有 .py 文件。
    • src/*.py - 将匹配 .py 目录中所有 src 文件。 例如,src/foo.pysrc/bar.py但_不_src/foo/bar.py
    • src/**/*.py - 将以递归方式匹配目录中的所有 .py 文件 src 。 例如 、 src/foo.py``src/foo/bar.pysrc/foo/bar/baz.py
    •           `**/subdir/**/*.py` - 将递归匹配任意深度下任意 `subdir` 目录中的所有 `.py` 文件。 例如,`subdir/foo.py`、`subdir/nested/bar.py`、`parent/subdir/baz.py` 和 `deep/parent/subdir/nested/qux.py`,但不匹配_不_`foo.py`包含 `subdir` 目录的路径。
      
  5. 或者,为了防止文件被 Copilot云代理 或 Copilot 代码评审 使用,将 excludeAgent 关键字添加到 frontmatter 区块中。 使用 "code-review""cloud-agent"

    例如,以下文件将仅由 Copilot云代理 读取。

    ---
    applyTo: "**"
    excludeAgent: "code-review"
    ---
    

    如果在 front matterblock 中不包括关键字 excludeAgent,则 Copilot 代码评审 和 Copilot云代理 都将使用您的说明。

  6. 使用 Markdown 格式以自然语言添加自定义指令。 系统会忽略说明信息间的空格,因此可将信息编写为一个段落,每个段落位于一行上,或用空白行分隔,以保持其可读性。

正在使用的自定义说明

对自定义说明文件所做的更改不会立即可用于活动 CLI 会话。 若要应用更改,请退出当前会话,然后恢复它(例如运行 copilot --continue),或启动新会话(例如, /new 从交互式会话中使用)。

延伸阅读