在 Skills 独立总图 中,本节对应 C 发起调用。追踪用户和模型两种入口,随后交给同一正文准备阶段。

本节的手动专用配置变体、文件位置与实验步骤见 S07.10 完整示例附录。

我想弄清楚的问题

Skill 已经被发现,为什么有时自动调用,有时要我输入 /review-diff?需要分清三个阶段:被系统发现、可供某一方调用、真正进入调用流程。

两条调用路径

C · 两种调用入口,进入同一准备阶段用户直接点名与模型自行选择分别判断;调用被允许后才装载正文。C · 两种调用入口,进入同一准备阶段用户直接点名与模型自行选择分别判断;调用被允许后才装载正文。用户点名/review-diff模型选择依据可见目录与任务调用边界当前是否可用?调用是否获准?准备正文读取并处理不是执行每句指令目标会话接收指令继续模型决策默认配置支持两个入口;调用开关与失败处理看本节正文,权限细节见权限参考。
颜色与线型
  • 蓝色:已有且保留
  • 橙色:修改/职责迁移(本图未用)
  • 紫色:本节核心机制
  • 红色虚线:真实移除(本图未用)
  • 灰色实线框:存储/辅助节点(本图未用)
  • 灰色虚线框:细节合并,功能保留(本图未用)
  • 灰字:来源/补充说明
  • 灰色虚线:关联,不是执行回环(本图未用)
  • 实线箭头:流程/数据方向
局部图 C:两种入口汇合在调用与装载边界。这里只展开谁发起、是否允许以及交给哪个会话;不会把整个 Agent Loop 再画一次。左右滑动查看全图。

用户可以明确点名:

/review-diff

也可以提出任务:

帮我检查这次未提交改动,重点找可能改变行为的缺陷。

第二条路径中,Claude 根据任务与 Skill 描述判断是否相关,再发起技能调用。描述帮助选择,但自然语言匹配会受措辞和当前上下文影响,不能保证所有相关请求都触发。

手动调用已经指定了 Skill,因此只能验证它能否运行;要判断自动选择是否可靠,必须另外使用自然语言任务测试。

描述要提供哪些信息

描述应该能回答“做什么、什么时候用”。例如:

description: 检查当前 Git 仓库的未提交改动。用户要求审查 diff、排查改动风险或检查这次修改时使用。

这比“帮助写出高质量代码”更容易判断任务是否匹配。我的写作原则是把真正的使用场景放在前面,避免把所有相关关键词都堆进去;否则一个审查 Skill 可能连普通概念解释也抢着接管。

两个开关分别控制什么

下面每行都是一种独立配置:

配置用户能用 /name模型能主动调用描述默认进入模型目录
默认能能会
disable-model-invocation: true能不能不会
user-invocable: false不能能会

官网调用控制说明了这些差异。一个字段控制模型发起,另一个控制用户命令入口;它们不是互相替代的同义词。

若把本例改为只由我启动,可以加:

disable-model-invocation: true

这时期待它从“帮我检查改动”中自动触发,就与配置矛盾。

调用还要经过应用侧检查

模型认为相关并不等于应用一定允许启动。Skill 工具本身的权限规则、组织策略或技能可见性配置,都可能让请求被拒绝。失败发生在调用入口时,正文可能尚未被加载,不能据此判断正文写得不好。

因此排查顺序是:当前会话是否发现该 Skill → 当前调用者是否能调用 → 请求是否被允许 → 正文是否成功装载。

我的理解

目录描述让模型知道有哪些可选方法;自动匹配由模型判断,调用边界由应用配置处理。想要特定方法时,我可以直接点名;想检验它能否自己找对方法,就必须测试自动调用路径。

上一节 · 下一节:正文什么时候进入上下文