Skip to content
FunCoding

Search

Search docs, Skills and MCP

Skill 发现与名称冲突

核对扩展注册名、启用和禁用设置、覆盖优先级与参数文件碰撞。

This page has not been translated into English yet. The original Chinese version is shown below.

同一份 Skill 在磁盘上的作者名称和运行时注册名可能不同。设置、斜杠调用和模型调用都需要考虑这个区别。

扩展注册名

扩展清单 qwen-extension.json 中的 name 会成为前缀。例如 rust 扩展提供名为 pdf 的 Skill,运行时注册为 rust:pdf,调用方式是:

/rust:pdf

裸名 /pdf 不是别名。文件内仍保留作者写的 name,加载时才加前缀;不要通过拆冒号猜原始名称,因为作者自己也可以使用冒号。不同扩展提供同名 pdf 时会保留各自的注册名。

面板和补全标签会显示扩展所有者,优先采用 displayName,否则采用 name。已安装且启用的扩展会自动发现 Skills;可在扩展清单中检查 skills 字段。

设置如何匹配

设置对扩展 Skill 的匹配方式
skills.disabled作者裸名或完整注册名都可限制
skills.defaultDisabled作者裸名或完整注册名都可限制
slashCommands.disabled作者裸名或完整注册名都可限制斜杠入口
skills.enabled授权匹配完整注册名

例如显式选择该扩展能力:

{
  "skills": {
    "enabled": ["rust:pdf"]
  }
}

旧 disabled: ["pdf"] 仍会限制它,不能只在面板打开 rust:pdf 就消除旧限制。面板切换只写注册名;遇到阻挡它的旧条目会锁定行并显示设置范围,工作区自身的旧条目也一样,需要修改对应文件中的列表。

旧版存在一个兼容例外:defaultDisabled: ["pdf"] 与 enabled: ["pdf"] 可以按条目本身互相抵消。抵消后取工作区保存的启用状态或扩展默认值,并不保证默认关闭的 Skill 被启用;新配置直接写完整注册名更清楚。

覆盖和命令碰撞

跨层优先级仍按完整注册名比较:项目高于个人,个人高于扩展,扩展高于内置。自己编写名为 rust:pdf 的项目 Skill 会覆盖该扩展注册项;裸名不会自动得到这种覆盖关系。

Skill 与自定义命令同名时,斜杠入口按最后加载者选择。自定义命令晚于 Skills 加载,所以 /pdf 可以运行命令,而同名 Skill 仍可供模型调用。排查时同时检查命令目录。

参数文件的名称折叠

Skill 参数文件会把名称中不属于 [A-Za-z0-9._-] 的每个字符替换成 _。rust:pdf 与 rust_pdf 都会对应 qwen-skill-args-rust_pdf.txt;café 与 caf_ 也会碰撞。

不要仅靠前缀判断参数文件一定隔离。给团队能力起名时避免这些折叠后相同的组合,尤其是冒号与下划线互换的名称。

看见列表不等于同一调用能力

向模型询问可用 Skills,只能看到模型当前发现的项目;尚未触发 paths 的 Skill 不在其中。交互式 /skills 显示可由用户调用的项目,可以包含尚未按路径激活的 Skill。ACP 与其他非交互模式中,裸 /skills 打印只读列表。

若 user-invocable: false,磁盘仍有文件,模型也可能可用,但用户选择器不显示。具体调用控制见编写 Skills。