OpenClaw Docs CN

扩展生态 / 加载逻辑

Skills 加载机制与优先级

如果你装过 Skill 以后发现“和别人效果不一样”“改了文件却没立刻生效”“同名 Skill 好像被另一个版本覆盖了”,问题大概率不在模型,而在这套加载机制。位置、优先级、门槛、会话快照和 watcher,一起决定某个 Skill 现在能不能被用到。

先记住最核心的一行

<workspace>/skills → ~/.openclaw/skills → bundled skills,而 skills.load.extraDirs 加的目录优先级最低。也就是说,workspace 里的本地技能优先级最高。

三类主要来源

  • Bundled skills:随 OpenClaw 安装一起带上的默认技能。
  • Managed/local skills:通常位于 ~/.openclaw/skills
  • Workspace skills:位于 <workspace>/skills,也是最容易覆盖其他版本的来源。

插件也能带 Skills

插件可以在 openclaw.plugin.json 里声明 skills 目录。插件启用后,这些 plugin skills 会参与正常的优先级规则。

不是所有 Skill 都会被加载:还有门槛过滤

常见门槛包括:

  • requires.bins
  • requires.anyBins
  • requires.env
  • requires.config
  • os

所以很多“装好了但看不到”的情况,本质上是没过这些门槛,不是没装进去。

配置覆盖也会影响资格和行为

~/.openclaw/openclaw.json 里,官方支持通过 skills.entries 对技能做覆盖,例如:

  • enabled: false:直接禁用某个 Skill。
  • env:给它注入环境变量。
  • apiKey:给声明了 primaryEnv 的技能传密钥。
  • config:给自定义字段传配置。

最容易被忽略的一点:会话快照

OpenClaw 会在 session 启动时快照当前 eligible skills 列表,并在同一会话里复用。 这意味着你改了 Skill、装了新 Skill、改了配置,不一定会立刻在当前会话里反映出来。

最稳的做法仍然是:变更后开一个新会话。

Watcher 会帮你热刷新,但不要过度依赖

默认情况下,OpenClaw 会监听 skill folders,在 SKILL.md 变化时 bump skills snapshot。对应配置在 skills.load.watchwatchDebounceMs

另外两个常被忽略的前置项

  • user-invocable:允许作为用户 slash command 暴露。
  • disable-model-invocation:不进入模型提示,但仍可以用户调用。

最常见的排障顺序

  1. 先确认 Skill 在哪个目录里。
  2. 再确认有没有同名冲突。
  3. 再看 requires.bins / env / config / os 有没有没满足。
  4. 再确认 skills.entries 有没有把它关掉或改掉。
  5. 最后再新开会话测试。

官方参考