技能
Skills
Skills 是 Markdown 指令文件,用于教智能体如何以及何时使用
工具。每个 Skill 都位于一个目录中,该目录包含带有 YAML
frontmatter 和 Markdown 正文的 SKILL.md 文件。OpenClaw 会加载内置 Skills 和所有本地
覆盖项,并在加载时根据环境、配置和
二进制文件是否存在进行筛选。
从头构建并测试自定义 Skill。
审查并批准智能体起草的 Skill 提案。
完整的 skills.* 配置架构和智能体允许列表。
浏览并安装社区 Skills。
加载顺序
OpenClaw 按以下来源加载,优先级从高到低。当多个位置出现同名 Skill 时,优先级最高的来源生效。
| 优先级 | 来源 | 路径 |
|---|---|---|
| 1 — 最高 | 工作区 Skills | <workspace>/skills |
| 2 | 项目智能体 Skills | <workspace>/.agents/skills |
| 3 | 个人智能体 Skills | ~/.agents/skills |
| 4 | 托管/本地 Skills | ~/.openclaw/skills |
| 5 | 内置 Skills | 随安装包提供 |
| 6 — 最低 | 额外目录 | skills.load.extraDirs + 插件 Skills |
Skill 根目录支持分组布局。只要配置的根目录下任意位置出现
SKILL.md(最深 6 层),OpenClaw 就会发现该 Skill:
<workspace>/skills/research/SKILL.md ✓ 发现为“research”<workspace>/skills/personal/research/SKILL.md ✓ 也发现为“research”文件夹路径仅用于组织。Skill 的名称和斜杠命令
来自 name frontmatter 字段(缺少 name 时则使用目录名称)。
智能体允许列表(见下文)也按此 name 进行匹配。
节点托管的 Skills
已连接的无头节点可以发布其当前 OpenClaw
Skills 目录中安装的 Skills(默认为 ~/.openclaw/skills;配置文件环境覆盖项
适用)。节点连接时,这些 Skills 会出现在常规智能体 Skill 列表中;
节点断开连接时则会消失。发生名称冲突时,本地或 Gateway 网关 Skill 保留其名称;
节点 Skill 会获得一个确定性的、带节点前缀的名称。
节点托管 v1 要求目录名称与 Skill 的 name
frontmatter 字段匹配。
Skill 条目包含节点定位信息。其文件、相对引用和
二进制文件均位于节点上,因此请使用
exec host=node node=<node-id> 加载并执行它。更改 Skill
文件后,请重启节点主机。有关配对和关闭开关,请参阅节点。
每智能体 Skills 与共享 Skills
在多智能体设置中,每个智能体都有自己的工作区。请使用与你所需 可见范围匹配的路径:
| 范围 | 路径 | 可见对象 |
|---|---|---|
| 每智能体 | <workspace>/skills |
仅该智能体 |
| 项目智能体 | <workspace>/.agents/skills |
仅该工作区的智能体 |
| 个人智能体 | ~/.agents/skills |
此计算机上的所有智能体 |
| 共享托管 | ~/.openclaw/skills |
此计算机上的所有智能体 |
| 额外目录 | skills.load.extraDirs |
此计算机上的所有智能体 |
智能体允许列表
Skill 位置(优先级)和 Skill 可见性(哪个智能体可以使用 它)是独立的控制项。无论 Skills 从何处加载,都可以使用允许列表限制智能体可见的 Skills。
{ agents: { defaults: { skills: ["github", "weather"], // 共享基线 }, list: [ { id: "writer" }, // 继承 github、weather { id: "docs", skills: ["docs-search"] }, // 完全替换默认值 { id: "locked-down", skills: [] }, // 无 Skills ], },}允许列表规则
- 省略
agents.defaults.skills,默认不限制任何 Skills。 - 省略
agents.entries.*.skills,以继承agents.defaults.skills。 - 将
agents.entries.*.skills: []设为不向该智能体公开任何 Skills。 - 非空的
agents.entries.*.skills列表是最终集合,不会 与默认值合并。 - 生效的允许列表适用于提示词构建、斜杠命令 发现、沙箱同步和 Skill 快照。
- 这并非主机 shell 授权边界。如果同一智能体能够
使用
exec,请另外通过沙箱隔离、操作系统用户 隔离、Exec 拒绝/允许列表和按资源配置的凭据来限制该 shell。
插件和 Skills
插件可以通过在 openclaw.plugin.json 中列出 skills 目录
(相对于插件根目录的路径)来随附自己的 Skills。启用插件时会加载
插件 Skills——例如,浏览器插件随附一个用于多步骤浏览器控制的
browser-automation Skill。
插件 Skill 目录与 skills.load.extraDirs 处于相同的低优先级层级,
因此同名的内置、托管、智能体或工作区
Skill 会覆盖它们。与其他 Skill 一样,可以通过其 frontmatter 中的
metadata.openclaw.requires 控制插件 Skill 自身是否符合条件。
Skill Workshop
Skill Workshop 是智能体与你当前 Skill 文件之间的提案队列。
当智能体发现可复用的工作时,它会起草提案,而不是直接写入
SKILL.md。任何内容更改前都需要你审查并批准。
openclaw skills workshop listopenclaw skills workshop inspect <proposal-id>openclaw skills workshop apply <proposal-id>有关完整生命周期、CLI 参考和配置,请参阅 Skill Workshop。
从 ClawHub 安装
ClawHub 是公共 Skills 注册表。使用
openclaw skills 命令进行安装和更新,或使用 clawhub CLI
进行发布和同步。
| 操作 | 命令 |
|---|---|
| 将 Skill 安装到工作区 | openclaw skills install @owner/<slug> |
| 从 Git 仓库安装 | openclaw skills install git:owner/repo@ref |
| 安装本地 Skill 目录 | openclaw skills install ./path/to/skill --as my-tool |
| 为所有本地智能体安装 | openclaw skills install @owner/<slug> --global |
| 更新所有工作区 Skills | openclaw skills update --all |
| 更新共享托管 Skill | openclaw skills update @owner/<slug> --global |
| 更新所有共享托管 Skills | openclaw skills update --all --global |
| 验证 Skill 的信任边界 | openclaw skills verify @owner/<slug> |
| 输出生成的 Skill Card | openclaw skills verify @owner/<slug> --card |
| 通过 ClawHub CLI 发布/同步 | clawhub sync --all |
安装详情
默认情况下,openclaw skills install 会安装到当前工作区的 skills/
目录中。添加 --global 可安装到共享的
~/.openclaw/skills 目录中;除非智能体允许列表缩小范围,否则所有本地智能体
都可见。
Git 和本地安装要求源根目录中存在 SKILL.md。如果
SKILL.md frontmatter 的 name 有效,则使用它作为 slug,否则回退到
目录或仓库名称。使用 --as <slug> 可覆盖此值。
openclaw skills update 仅跟踪 ClawHub 安装——要刷新 Git 或
本地来源,请重新安装。
验证和安全扫描
openclaw skills verify @owner/<slug> 会向 ClawHub 请求 Skill 的
clawhub.skill.verify.v1 信任边界。已安装的 ClawHub Skills 会根据
.clawhub/origin.json 中记录的版本和注册表进行验证。
对于现有已安装或名称明确的 Skills,仍接受不带所有者的 slug,但
带所有者限定的引用可以避免发布者歧义。
ClawHub Skill 页面会在安装前显示最新的安全扫描状态,
并提供 VirusTotal、ClawScan 和静态分析的详情页面。当 ClawHub
将验证标记为失败时,命令会以非零状态退出。发布者可通过 ClawHub 控制面板或
clawhub skill rescan @owner/<slug> 处理误报。
私有归档安装
需要非 ClawHub 交付方式的 Gateway 网关客户端,可以使用
skills.upload.begin、skills.upload.chunk 和 skills.upload.commit
暂存 zip 格式的 Skill 归档,然后使用 skills.install({ source: "upload", ... }) 安装。此路径
默认关闭,并要求在 openclaw.json 中配置
skills.install.allowUploadedArchives: true。常规 ClawHub 安装绝不需要该设置。
安全
路径限制
工作区、项目智能体和额外目录的 Skill 发现仅接受解析后的 realpath
仍位于已配置根目录内的 Skill 根目录,除非
skills.load.allowSymlinkTargets 明确信任目标根目录。
仅当启用 skills.workshop.allowSymlinkTargetWrites 时,Skill Workshop 才能通过这些受信任的目标
写入。
托管的 ~/.openclaw/skills 和个人的 ~/.agents/skills 可以包含
符号链接 Skill 文件夹,但每个 SKILL.md 的 realpath 仍必须位于
其解析后的 Skill 目录内。
操作员安装策略
配置 security.installPolicy,以便在继续安装 Skill 前运行受信任的本地策略命令。
该策略会接收元数据和暂存的源路径,适用于 ClawHub、上传、Git、本地、更新和
依赖项安装器路径;命令无法返回有效决策时会采用失败关闭策略。
密钥注入范围
skills.entries.*.env 和 skills.entries.*.apiKey 仅在该智能体轮次内将密钥注入
主机进程,而不是沙箱。不要在提示词和日志中包含密钥。
有关更广泛的威胁模型和安全检查清单,请参阅 安全。
SKILL.md 格式
每个 Skill 的 frontmatter 中至少需要 name 和 description:
---name: image-labdescription: 通过提供商支持的图像工作流生成或编辑图像--- 当用户要求生成图像时,使用 `image_generate` 工具……可选 frontmatter 键
homepagestring在 macOS Skills UI 中显示为 "Website" 的 URL。也可通过
metadata.openclaw.homepage 支持。
user-invocablebooleandefault: true当 true 时,该技能会作为用户可调用的斜杠命令公开。
disable-model-invocationbooleandefault: false当 true 时,OpenClaw 不会将该技能的指令加入智能体的常规
提示词。当 user-invocable 同时为 true 时,
该技能仍可作为斜杠命令使用。
command-dispatch"tool"设置为 tool 时,斜杠命令会绕过模型并直接分派给
已注册的工具。
command-toolstring设置 command-dispatch: tool 时要调用的工具名称。
command-arg-mode"raw"default: raw对于工具分派,将原始参数字符串直接转发给工具,不进行任何
核心解析。工具会收到
{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }。
门控
OpenClaw 在加载时使用 metadata.openclaw 筛选技能(嵌入 frontmatter 的 JSON5 对象,
请参阅上面的解析说明)。没有
metadata.openclaw 块的技能始终符合条件,除非被明确禁用。
---name: image-labdescription: 通过由提供商支持的图像工作流生成或编辑图像metadata: { "openclaw": { "requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"], "config": ["browser.enabled"] }, "primaryEnv": "GEMINI_API_KEY", }, }---alwaysboolean当 true 时,始终包含该技能并跳过所有其他门控。
emojistringmacOS Skills UI 中显示的可选表情符号。
homepagestringmacOS Skills UI 中以 “Website” 显示的可选 URL。
os("darwin" | "linux" | "win32")[]平台筛选器。设置后,该技能仅在列出的操作系统上符合条件。
requires.binsstring[]每个二进制文件都必须存在于 PATH 中。
requires.anyBinsstring[]至少一个二进制文件必须存在于 PATH 中。
requires.envstring[]每个环境变量都必须存在于进程中,或通过配置提供。
requires.configstring[]每个 openclaw.json 路径都必须为真值。
primaryEnvstring与 skills.entries.<name>.apiKey 关联的环境变量名称。
installobject[]macOS Skills UI 使用的可选安装程序规范(brew / node / go / uv / download)。
安装程序规范
安装程序规范用于告知 macOS Skills UI 如何安装依赖项:
---name: geminidescription: 使用 Gemini CLI 提供编码辅助和 Google 搜索查询。metadata: { "openclaw": { "emoji": "♊️", "requires": { "bins": ["gemini"] }, "install": [ { "id": "brew", "kind": "brew", "formula": "gemini-cli", "bins": ["gemini"], "label": "安装 Gemini CLI(brew)", }, ], }, }---安装程序选择规则
- 列出多个安装程序时,Gateway 网关会选择一个首选 选项(有 brew 时选择 brew,否则选择 node)。
- 如果所有安装程序都是
download,OpenClaw 会列出每个条目,以便你 查看所有可用工件。 - 规范可以包含
os: ["darwin"|"linux"|"win32"],以按平台筛选。 - Node 安装遵循
openclaw.json中的skills.install.nodeManager(默认值:npm;选项:npm / pnpm / yarn / bun)。这仅影响技能 安装;Gateway 网关运行时仍应使用 Node。 - Gateway 网关安装程序优先级:Homebrew → uv → 已配置的 node 管理器 → go → download。
各安装程序详情
- **Homebrew:**OpenClaw 不会自动安装 Homebrew,也不会将 brew
公式转换为系统软件包命令。在缺少
brew的 Linux 容器中,仅支持 brew 的安装程序会被隐藏;请使用自定义镜像或手动安装 依赖项。 - **Go:**OpenClaw 要求 Go 1.21 或更高版本才能自动安装技能。
如果缺少
go且 Homebrew 可用,OpenClaw 会先通过 Homebrew 安装 Go;在没有 Homebrew 的 Linux 上,如果刷新的golang-go候选版本满足最低版本要求,则可以改为以 root 身份或通过无需密码的sudo使用apt-get。 依赖项实际使用的go install始终指向 OpenClaw 管理的专用 bin 目录 (全新安装时为 Homebrew 的bin,否则为~/.local/bin),而不是 你配置的GOBIN—— 系统会读取你自己的GOBIN、GOPATH和GOTOOLCHAIN环境变量,但绝不会覆盖它们。 - 下载:
url(必需)、archive(tar.gz|tar.bz2|zip)、extract(默认值:检测到归档时为 auto)、stripComponents、targetDir(默认值:~/.openclaw/tools/<skillKey>)。
沙箱隔离注意事项
加载技能时会在宿主机上检查 requires.bins。如果智能体
在沙箱中运行,该二进制文件也必须存在于容器内部。
请通过 agents.defaults.sandbox.docker.setupCommand 或自定义
镜像安装。setupCommand 在容器创建后运行一次,并要求
沙箱具备网络出口、可写的根文件系统以及 root 用户。
配置覆盖
在 ~/.openclaw/openclaw.json 的 skills.entries 下切换和配置内置或托管技能:
{ skills: { entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, config: { endpoint: "https://example.invalid", model: "nano-pro", }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}enabledbooleanfalse 会禁用该技能,即使它是内置或已安装的技能。coding-agent
内置技能需要选择启用——请设置 skills.entries.coding-agent.enabled: true,
并确保已安装且已完成身份验证的 CLI 包括 claude、codex、opencode 或其他受支持的 CLI
之一。
apiKeystring | { source, provider, id }为声明 metadata.openclaw.primaryEnv 的技能提供的便捷字段。
支持明文字符串或 SecretRef 对象。
env"Record<string,configobject用于自定义各技能配置字段的可选属性集合。
allowBundledstring[]仅适用于内置技能的可选允许列表。设置后,只有列表中的内置技能 符合条件。托管技能和工作区技能不受影响。
环境注入
当智能体运行开始时,OpenClaw 会:
读取技能元数据
OpenClaw 解析该智能体的有效技能列表,并应用门控 规则、允许列表和配置覆盖。
注入环境变量和 API 密钥
在运行期间,skills.entries.<key>.env 和 skills.entries.<key>.apiKey 会应用到
process.env。
构建系统提示词
符合条件的技能会编译成紧凑的 XML 块并注入 系统提示词。
恢复环境
运行结束后,会恢复原始环境。
对于内置的 claude-cli 后端,OpenClaw 还会将同一个
符合条件的技能快照生成为临时 Claude Code 插件,并通过
--plugin-dir 传递。其他 CLI 后端仅使用提示词目录。
快照和刷新
OpenClaw 会在会话启动时为符合条件的技能创建快照,并在该会话 后续的所有轮次中重复使用该列表。对技能或配置的更改会在下一个新会话中 生效。
在以下两种情况下,Skills 会在会话中途刷新:
- Skills 监视器检测到
SKILL.md更改。 - 新的符合条件的远程节点连接。
刷新的列表会在下一个智能体轮次中使用。如果有效的智能体 允许列表发生变化,OpenClaw 会刷新快照,使可见技能 保持一致。
Skills 监视器
默认情况下,OpenClaw 会监视技能文件夹,并在
SKILL.md 文件发生更改时更新快照。请在 skills.load 下配置:
{ skills: { load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, // 默认值 }, },}监视器事件使用内置的 250 ms 防抖。对于技能
根符号链接指向已配置根目录之外的有意符号链接布局,请使用 allowSymlinkTargets,
例如 <workspace>/skills/manager -> ~/Projects/manager/skills。
仅当 Skill Workshop 也应通过这些受信任的符号链接路径
应用提案时,才启用 skills.workshop.allowSymlinkTargetWrites。
远程 macOS 节点(Linux Gateway 网关)
如果 Gateway 网关在 Linux 上运行,但已连接一个允许
system.run 的 macOS 节点,且该节点上存在所需的二进制文件,
OpenClaw 可以将仅限 macOS 的技能视为符合条件。智能体应通过
exec 工具并使用 host=node 来运行这些
技能。
离线节点不会使仅限远程的技能可见。如果节点停止 响应二进制文件探测,OpenClaw 会清除其缓存的二进制文件匹配项。
Token 影响
当有符合条件的技能时,OpenClaw 会将紧凑的 XML 块注入系统 提示词。其成本是确定性的,并随技能数量线性增长:
- 基础开销(仅当有 1 个或更多符合条件的技能时):固定的介绍性
文本块以及
<available_skills>包装器。 - **每个技能:**约 97 个字符,加上
name、description和location字段的长度。 - XML 转义会将
& < > " '展开为实体,每次出现时会增加几个字符。 - 按约 4 个字符/token 计算,在不计字段长度前,97 个字符 ≈ 每个技能 24 个 token。
如果渲染后的块会超出配置的提示词预算
(skills.limits.maxSkillsPromptChars),OpenClaw 会先使用不含描述的紧凑格式,保留预算可容纳的尽可能多的技能
标识信息(名称、位置和版本)。然后,它会将所有剩余预算用于缩短后的描述。如果没有
剩余的描述预算,则省略描述。只要需要使用紧凑格式或截断列表,提示词中就会包含一条
指向 openclaw skills check 的说明。
保持描述简短且表意清晰,以最大限度减少提示词开销。