Skip to main content
Skip to content

自定义发现位置

GitHub Copilot可以直接从包安装、子模块和供应商目录发现版本控制技能、代理、说明和文件挂钩。 无需将它们复制到传统目录中。

存储库设置

在 : 中 .github/copilot/settings.json声明签出相对目录:

{
  "skillDirectories": ["node_modules/@example/team/skills"],
  "agentDirectories": ["vendor/team/agents"],
  "instructionDirectories": ["vendor/team/instructions"],
  "hookDirectories": ["vendor/team/hooks"]
}

每个列表都会为其自己的自定义类型添加发现位置。 传统位置继续工作。 中的 .github/copilot/settings.local.json 密钥仅替换该存储库列表;空列表删除其存储库贡献。 省略的密钥继承已签入列表。 存储库列表不会替换 SDK 输入或现有用户技能目录。

存储库路径必须是声明签出中的无空文本目录。 拒绝签出外的绝对路径、家庭或环境变量扩展、glob 和转义。 仅当已解析的根和发现的后代保留在结帐内时,才允许链接和交汇点。 报告缺少的目录,可以在安装和显式自定义重载后发现。 Copilot不安装包或监视这些目录。

存储库定义的发现位置中的文件内容通过经过验证的打开的文件句柄进行读取。 在发现和调用之间重新定位签出外部的链接不会授权读取其新目标。

存储库位置需要信任覆盖声明签出根目录,并且仍受每个自定义类型的现有发现开关、禁用的条目和托管策略的约束。 仅子目录的持久信任不会授权其父签出的设置。 列出位置不会启用禁用的自定义类型或授予文件系统访问权限。

在 CLI 中,记住的文件夹信任刷新当前会话中的存储库自定义项,即使模型目录初始化失败。 /skills reload 还重新检查持久信任和存储库发现设置。

SDK 输入

会话创建、恢复和选项更新接受相同的四个列表。 TypeScript 和Java使用skillDirectories、agentDirectories和instructionDirectories``hookDirectories。 Python和 Rust 用例;Go 和 .NET 使用 Pascal 案例。

SDK 目录可以超出签出范围。 将剪裁前导空格和尾随空格,并忽略空白条目。 提供时,相对 SDK 路径针对请求的有效工作目录解析一次。 更改工作目录不会移动保留的 SDK 根。 提供新的相对列表使用新的有效工作目录。 空列表仅清除显式 SDK 贡献;遗漏或在 null 更新期间保持不变。

如果采用 hookDirectories 替换失败或在新挂钩服务拥有所有权之前取消,则以前的目录选项和实时挂钩服务将保持不变。 重叠失败的更新会还原保留的值,而不是另一个失败更新的目录。 失败的更新不会回滚较新的接受更新。

显式代理和文件挂钩目录不需要环境配置发现。 enableFileHooks 控制存储库源挂钩,包括常规 .github/hooks但不是显式 SDK 挂钩目录或回调 hooks。 托管限制和挂钩禁用仍适用。

目录输入是发现配置,而不是常规文件系统授予。 他们不会扩大 additionalDirectories。 现有的文件挂钩沙盒规则仍然有效。

加载活动本地技能会在运行时的技能资源策略下为其贡献的 SDK 技能目录添加只读授权。 空、忽略和禁用的技能源不会添加这些授予。 存储库定义的技能目录不会添加它们。

文件格式和优先级

类型发现的内容
技能直接 SKILL.md 捆绑包或递归发现的最顶层捆绑包
Agents现有 Markdown 代理定义
存储库说明递归 *.instructions.md 文件,具有现有的 frontmatter 和 applyTo 匹配
钩子现有挂钩 JSON 配置

存储库指令目录不导入包 AGENTS.md 层次结构或 .claude/rules。 现有 SDK 指令目录格式仍受支持。 每个子系统保留其现有源优先级。 重复数据删除重叠挂钩文件引用;不同的创作操作不会折叠,因为它们的命令恰好匹配。

文件支持的命令挂钩接收 COPILOT_HOOK_DIR,其中包含其配置文件的目录。 使用它来查找相邻的脚本和资源。 挂钩工作目录语义不会更改:它们仍锚定到使用工作区。 COPILOT_HOOK_DIR 是执行环境变量,而不是 JSON 模板扩展; COPILOT_PLUGIN_ROOT 保留其单独的插件根行为。 内联挂钩和 SDK 回调不会获得捏造的配置目录。