跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

SDK 插件目录

按进程、会话或宿主信任范围加载插件,并检查实际插件集合。

插件将 Skills、Hooks、MCP、自定义代理或 LSP 配置作为一组能力分发。只有单项扩展时可直接用 mcpServers、hooks 或 customAgents;需要一起版本化和部署多项扩展时再组织插件目录。

目录布局

my-plugin/
├── plugin.json
├── SKILL.md
├── hooks.json
├── .mcp.json
├── agents/
│   └── code-reviewer.md
└── skills/
    └── lint-fix/
        └── SKILL.md

目录需有插件 manifest 或顶层 SKILL.md。manifest 还可位于 .github/plugin.json 或 .github/plugin/plugin.json;其他子系统均可选,按插件实际提供的能力添加。LSP 配置使用 .lsp.json。完整 manifest 字段应查当前 runtime 的 /plugin 文档,不从目录示例推导未列出的 Schema。

选择加载范围

入口作用范围与传递方式路径要求
--plugin-dirCLI 启动参数,固定该 runtime 进程的插件集合路径由启动环境解析
会话 pluginDirectories随 session.create / session.resume 经 JSON-RPC 传递相对 workingDirectory,未设时相对 runtime 工作目录;建议绝对路径
客户端 builtinPluginDirectories连接并验证协议后、start 返回和会话创建前注册宿主自带可信插件必须是绝对路径

三种入口不能混为一个开关。builtinPluginDirectories 专供应用控制并信任的内置插件;普通用户提供的目录不应仅为方便就归入该信任范围。该选项省略或为空时不发对应 RPC。

随客户端启动 runtime

import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";

const client = new CopilotClient({
  connection: RuntimeConnection.forStdio({
    args: [
      "--plugin-dir", "./plugins/code-reviewer",
      "--plugin-dir", "./plugins/lint-fix",
    ],
  }),
});
await client.start();

--plugin-dir 可以重复。通过 forUri 连接已有 runtime 时,SDK 不会替服务追加启动参数;应在启动服务器时传入参数,或选择会话级配置。

会话级显式目录

const session = await client.createSession({
  pluginDirectories: ["/opt/my-app/plugins/code-reviewer"],
});

会话选项通过 RPC 到达外部 runtime,目录也必须在那里可访问。无效路径会被记录并跳过,不会因此让会话创建失败,所以创建成功后仍要检查插件是否真的加载。

这是显式加载:即使 enableConfigDiscovery 为 false,目录中的代理和规则仍会加载。它们在会话来源优先级中位于项目来源之后、个人或 home 来源之前。不要把这里的会话范围误读为给共享 runtime 的每个会话都加同一插件。

控制环境中已有的插件

通过 CLI /plugin 或 installedPlugins 用户设置安装的插件属于环境中持久存在的配置。启动参数 --plugin-dir 是显式且临时的,优先于环境自动发现;和 marketplace 条目指向相同 cache path 时会去重。

官方给出的确定性启动方式是为 runtime 设置 COPILOT_PLUGIN_DIR_ONLY=true,再用 --plugin-dir 列出目录,抑制自动发现。此规则针对该启动模式,本页不推断它与所有会话或宿主内置加载入口组合后的优先级。

检查插件是否生效

const result = await session.rpc.plugins.list();
for (const plugin of result.plugins) {
  console.log(plugin.name, plugin.enabled);
}

启动参数加载的插件以所给目录作为 cache path;marketplace 插件带有来源信息。相同插件复制到两个不同目录可能加载两次,造成 Hooks 重复触发,不能依赖名称自动去重。

出现没有 manifest 或 SKILL.md 的错误时先修目录结构;插件存在但技能或代理不可见时,核对 manifest 声明或 agents/*.md、skills/*/SKILL.md 隐式布局。官方还提供 session.rpc.skills.reload() 用于重新读取技能变化,不必为每次技能编辑都重启。

插件代理可作为 task(agent_type=...) 的工作者交给 Fleet 调度。Fleet 专题仍以启动参数介绍插件注册,而插件目录专题已列出会话与宿主入口;使用新入口时应以匹配版本的 SDK/runtime 和专门参考为准。