跳转至

3.4 Skill System

本节摘要

从State Management角度看,OpenClaw Skill 系统回答的核心问题是:Skill 元数据何时注入、提供哪些、怎么控制预算? 本节按「是什么 → 从哪来 → LLM 看到什么 → 何时激活 → 怎么执行」展开。


一、Skill 是什么

每个 Skill 是一个 SKILL.md 文件(Markdown + YAML frontmatter),格式与 Claude Code 的 AgentSkills 兼容:

信息 LLM 可见? 说明
name + description ✅ 注入 prompt LLM 据此判断是否需要该 Skill
fullPath ✅ 注入 prompt LLM 通过 Read 工具加载全文
正文内容 ❌ 按需加载 LLM Read 后才可见
invocation / exposure / command-dispatch ❌ 框架内部 控制触发方式和暴露级别

延迟加载:LLM 只看到「菜单」(name + description + path),需要时才 Read 全文。


二、Skill 从哪来

5 个来源,高优先级同名覆盖低优先级:

优先级 来源 谁来写
1(最高) workspace 根目录 skills/ 团队共享
2 agents-skills .agents/skills/ Agent 专用
3 managed 插件管理 插件自动
4 extra 配置 + 插件声明 管理员配置
5(最低) bundled 内置 安装包自带

此外 ClawHubclawhub.ai)提供远程 Skill 注册中心(类似 npm),但运行时列表仍来自本地扫描——ClawHub 只是分发/安装渠道,不参与运行时。


三、LLM 看到什么:Prompt 注入与预算

注入格式

所有入选 Skill 以 <available_skills> XML 注入系统提示的 Skills 段:

<available_skills description="Skills the agent can use.
  Use the Read tool with the provided absolute path to fetch full contents.">
  <agent_skill fullPath="/workspace/skills/github/SKILL.md">
    GitHub operations: create PR, review code, manage issues.
  </agent_skill>
</available_skills>

预算控制

参数 默认值 说明
maxSkillsInPrompt 50 最大 Skill 数量
maxSkillsPromptChars 8,000 最大字符数
formatSkillsCompact 自动 超预算时每个 Skill 压缩为一行

与 Claude Code 的预算对比

Claude Code 用窗口的 1% 做预算(自适应不同窗口大小);OpenClaw 用绝对数量 + 字符数(管理员明确知道展示多少)。

三层过滤

层级 机制
1 配置白名单:agents.list[].skills(非空时替换默认列表)
2 资格检查:shouldIncludeSkill 判断 exposure / invocation
3 LLM 自选择:通过 Read 主动加载

四、Skill 何时激活

方式 说明
LLM 主动选择 根据 prompt 中的列表判断,通过 Read 加载
用户手动 /skill-name 命令

与 Claude Code 的差异

OpenClaw 没有路径触发(Claude Code 的 paths glob 自动激活)和向上遍历动态发现。Skill 在启动时加载,通过 cron 刷新快照。


五、Skill-Tool 桥接

当 frontmatter 声明 command-dispatch: tool 时,Skill 被桥接为可调用工具——LLM 可以像调用工具一样触发 Skill,无需先 Read 全文。这模糊了 Skill 和 Tool 的边界。

OpenClaw 的 Skill 只有 inline 执行(无 Claude Code 的 Fork 隔离模式),因此 Skill 的所有输出都留在主对话 Context中。


关键文件索引

文件 职责
src/agents/skills/loader.ts loadSkillEntries 多目录扫描
src/agents/skills/types.ts SkillEntry 类型
src/agents/skills/clawhub.ts ClawHub 远程注册表