Skills (OpenClaw)
OpenClaw 使用 AgentSkills 兼容的 skill 文件夹来教导 Agent 如何使用工具。每个 skill 是一个包含SKILL.md 文件的目录,该文件包含 YAML frontmatter 和指令。OpenClaw 在加载时会根据环境、配置和二进制文件的存在情况,过滤并加载捆绑的 skills以及可选的本地覆盖。
位置与优先级
Skills 从三个位置加载:- 捆绑的 skills:随安装包一起提供(npm 包或 OpenClaw.app)
- 托管/本地 skills:
~/.openclaw/skills - 工作空间 skills:
<workspace>/skills
<workspace>/skills(最高)→ ~/.openclaw/skills → 捆绑的 skills(最低)
此外,你可以通过 ~/.openclaw/openclaw.json 中的 skills.load.extraDirs 配置额外的 skill 文件夹(最低优先级)。
每个 Agent 独立的 skills 与共享 skills
在多 Agent 设置中,每个 Agent 都有自己的工作空间。这意味着:- 每个 Agent 独立的 skills 位于该 Agent 专属的
<workspace>/skills中。 - 共享 skills 位于
~/.openclaw/skills(托管/本地),对同一台机器上的所有 Agent 可见。 - 还可以通过
skills.load.extraDirs添加共享文件夹(最低优先级),如果你想让多个 Agent 使用共同的 skill 包。
Plugins + skills
Plugins 可以通过在openclaw.plugin.json 中列出 skills 目录(路径相对于 plugin 根目录)来提供自己的 skills。Plugin skills 在 plugin 启用时加载,并参与正常的 skill 优先级规则。你可以通过 plugin 配置项上的 metadata.openclaw.requires.config 对它们进行门控。有关发现/配置的详细信息,请参阅 Plugins;有关这些 skills 所教授的工具接口,请参阅 Tools。
ClawHub(安装 + 同步)
ClawHub 是 OpenClaw 的公共 skill 注册中心。访问 https://clawhub.com 浏览。使用它来发现、安装、更新和备份 skills。完整指南:ClawHub。 常用流程:- 将 skill 安装到工作空间:
clawhub install <skill-slug>
- 更新所有已安装的 skills:
clawhub update --all
- 同步(扫描 + 发布更新):
clawhub sync --all
clawhub 安装到当前工作目录下的 ./skills(或回退到配置的 OpenClaw 工作空间)。OpenClaw 在下次会话时将其识别为 <workspace>/skills。
安全注意事项
- 将第三方 skills 视为受信任的代码。启用前请阅读它们。
- 对于不受信任的输入和风险工具,优先使用沙盒运行。请参阅 Sandboxing。
skills.entries.*.env和skills.entries.*.apiKey将 secrets 注入该 Agent 回合的主机进程中(而非沙盒)。将 secrets 排除在 prompts 和日志之外。- 有关更广泛的威胁模型和检查清单,请参阅 Security。
格式(AgentSkills + Pi 兼容)
SKILL.md 必须至少包含:
- 我们遵循 AgentSkills 规范进行布局/意图定义。
- 嵌入式 Agent 使用的解析器仅支持单行 frontmatter 键。
metadata应该是单行 JSON 对象。- 在指令中使用
{baseDir}引用 skill 文件夹路径。 - 可选的 frontmatter 键:
-
homepage— 在 macOS Skills UI 中显示为”Website”的 URL(也可通过metadata.openclaw.homepage支持)。 -
user-invocable—true|false(默认:true)。为true时,skill 作为用户斜杠命令暴露。 -
disable-model-invocation—true|false(默认:false)。为true时,skill 从模型 prompt 中排除(仍可通过用户调用使用)。 -
command-dispatch—tool(可选)。设置为tool时,斜杠命令绕过模型直接分派到工具。 -
command-tool— 当设置command-dispatch: tool时要调用的工具名称。 -
command-arg-mode—raw(默认)。用于工具分派,将原始参数字符串转发给工具(不进行核心解析)。 工具调用参数为:{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }。
-
门控(加载时过滤)
OpenClaw 在加载时使用metadata(单行 JSON)过滤 skills:
metadata.openclaw 下的字段:
always: true— 始终包含该 skill(跳过其他门控)。emoji— macOS Skills UI 使用的可选 emoji。homepage— macOS Skills UI 中显示为”Website”的可选 URL。os— 可选的平台列表(darwin、linux、win32)。如果设置,skill 仅在这些操作系统上可用。requires.bins— 列表;每个都必须在PATH上存在。requires.anyBins— 列表;至少有一个必须在PATH上存在。requires.env— 列表;环境变量必须存在或在配置中提供。requires.config— 必须为 truthy 的openclaw.json路径列表。primaryEnv— 与skills.entries.<name>.apiKey关联的环境变量名称。install— macOS Skills UI 使用的可选安装程序规格数组(brew/node/go/uv/download)。
requires.bins在 skill 加载时在主机上检查。- 如果 Agent 被沙盒化,二进制文件也必须在容器内存在。通过
agents.defaults.sandbox.docker.setupCommand(或自定义镜像)在沙盒容器中安装它。setupCommand在容器创建后运行一次。软件包安装还需要沙盒中的网络出口、可写的根文件系统和 root 用户。示例:summarizeskill(skills/summarize/SKILL.md)需要summarizeCLI 在沙盒容器中运行。
- 如果列出多个安装程序,Gateway 会选择单个首选选项(如果可用则选择 brew,否则选择 node)。
- 如果所有安装程序都是
download,OpenClaw 会列出每个条目,以便你查看可用的 artifacts。 - 安装程序规格可以包含
os: ["darwin"|"linux"|"win32"]以按平台过滤选项。 - Node 安装遵循
openclaw.json中的skills.install.nodeManager(默认:npm;选项:npm/pnpm/yarn/bun)。这仅影响skill 安装;Gateway 运行时仍应为 Node(Bun 不推荐用于 WhatsApp/Telegram)。 - Go 安装:如果缺少
go但可用brew,Gateway 会先通过 Homebrew 安装 Go,并在可能时将GOBIN设置为 Homebrew 的bin。 - Download 安装:
url(必需)、archive(tar.gz|tar.bz2|zip)、extract(默认:检测到 archive 时自动)、stripComponents、targetDir(默认:~/.openclaw/tools/<skillKey>)。
metadata.openclaw,skill 始终可用(除非在配置中禁用或被 skills.allowBundled 阻止用于捆绑 skills)。
配置覆盖(~/.openclaw/openclaw.json)
可以切换捆绑/托管的 skills 并为其提供环境值:
metadata.openclaw.skillKey,请在 skills.entries 下使用该键。
规则:
enabled: false禁用 skill,即使它是捆绑/已安装的。env:仅当变量尚未在进程中设置时才注入。apiKey:声明了metadata.openclaw.primaryEnv的 skills 的便捷选项。config:自定义每个 skill 字段的可选包;自定义键必须放在这里。allowBundled:捆绑 skills 的可选允许列表。如果设置,只有列表中的捆绑 skills 可用(托管/工作空间 skills 不受影响)。
环境注入(每个 Agent 运行)
当 Agent 运行开始时,OpenClaw:- 读取 skill metadata。
- 将任何
skills.entries.<key>.env或skills.entries.<key>.apiKey应用到process.env。 - 使用可用的 skills 构建系统 prompt。
- 运行结束后恢复原始环境。
会话快照(性能)
OpenClaw 在会话开始时对可用 skills 进行快照,并在同一会话的后续回合中重用该列表。skills 或配置的更改在下次新会话时生效。 当启用 skills 监视器或新的可用远程节点出现时,skills 也可以在中途刷新(见下文)。可以将其视为热重载:刷新的列表在下次 Agent 回合时被采用。远程 macOS 节点(Linux Gateway)
如果 Gateway 在 Linux 上运行,但连接了** macOS 节点且允许system.run**(Exec 审批安全未设置为 deny),当该节点上存在所需的二进制文件时,OpenClaw 可以将仅限 macOS 的 skills 视为可用。Agent 应通过 nodes 工具执行这些 skills(通常是 nodes.run)。
这依赖于节点报告其命令支持以及通过 system.run 进行的二进制探测。如果 macOS 节点稍后离线,skills 仍然可见;在节点重新连接之前,调用可能会失败。
Skills 监视器(自动刷新)
默认情况下,OpenClaw 监视 skill 文件夹,并在SKILL.md 文件更改时更新 skills 快照。在 skills.load 下配置:
Token 影响(skills 列表)
当 skills 可用时,OpenClaw 将可用的 skills 紧凑 XML 列表注入系统 prompt(通过pi-coding-agent 中的 formatSkillsForPrompt)。成本是确定的:
- 基础开销(仅当 ≥1 个 skill 时): 195 个字符。
- 每个 skill: 97 个字符 + XML 转义的
<name>、<description>和<location>值的长度。
- XML 转义将
& < > " '扩展为实体(&、<等),增加长度。 - Token 计数因模型 tokenizer 而异。粗略的 OpenAI 风格估计是每 token 约 4 个字符,因此 97 个字符 ≈ 24 个 token,加上实际字段长度。
托管 skills 生命周期
OpenClaw 将一组基础 skills 作为捆绑 skills随安装包一起提供(npm 包或 OpenClaw.app)。~/.openclaw/skills 用于本地覆盖(例如,固定/修补 skill 而不更改捆绑副本)。工作空间 skills 为用户所有,在名称冲突时覆盖前两者。