Skills
OpenClaw 使用与 AgentSkills 兼容的技能文件夹来教代理如何使用工具。每个技能是一个目录,其中包含一个 SKILL.md,其中包含 YAML frontmatter 和说明。OpenClaw 加载捆绑技能以及可选的本地覆盖项,并在加载时根据环境、配置和二进制文件的存在对其进行过滤。
位置和优先级
Section titled “位置和优先级”OpenClaw 从这些来源加载技能,优先级从高到低:
| # | 来源 | 路径 |
|---|---|---|
| 1 | 工作区技能 | <workspace>/skills |
| 2 | 项目代理技能 | <workspace>/.agents/skills |
| 3 | 个人代理技能 | ~/.agents/skills |
| 4 | 托管/本地技能 | ~/.openclaw/skills |
| 5 | 捆绑技能 | 随安装附带的 |
| 6 | 额外技能文件夹 | skills.load.extraDirs(配置) |
如果技能名称冲突,则优先级最高的来源获胜。
Codex CLI 的原生 $CODEX_HOME/skills 目录不是这些 OpenClaw 技能根目录之一。在 Codex 模式下,本地应用服务器启动使用隔离的每个代理 Codex 主目录,因此操作员个人 ~/.codex/skills 中的技能不会被隐式加载。Codex 原生 .agents 发现单独使用继承的 HOME;OpenClaw 自己的上述技能根目录已经包含 ~/.agents/skills。使用 openclaw migrate codex --dry-run 从 Codex 主目录清单技能,然后 openclaw migrate codex 使用交互式复选框提示选择技能目录,再将它们复制到当前的 OpenClaw 代理工作区。对于非交互式运行,请对要复制的确切技能重复 --skill <name>。
每代理与共享技能
Section titled “每代理与共享技能”在多代理设置中,每个代理都有自己的工作区:
| 范围 | 路径 | 可见对象 |
|---|---|---|
| 每代理 | <workspace>/skills | 仅该代理 |
| 项目代理 | <workspace>/.agents/skills | 仅该工作区的代理 |
| 个人代理 | ~/.agents/skills | 该机器上的所有代理 |
| 共享托管/本地 | ~/.openclaw/skills | 该机器上的所有代理 |
| 共享额外目录 | skills.load.extraDirs (最低优先级) | 该机器上的所有代理 |
在多个位置存在同名 → 最高源获胜。工作区胜过项目代理,胜过个人代理,胜过托管/本地,胜过捆绑,胜过额外目录。
代理技能允许列表
Section titled “代理技能允许列表”技能位置和技能可见性是单独的控制项。位置/优先级决定同名技能的哪个副本获胜;代理允许列表决定代理实际可以使用哪些技能。
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults { id: "locked-down", skills: [] }, // no skills ], },}Allowlist rules
- 默认情况下省略
agents.defaults.skills表示无限制的技能。 - 省略agents.list[].skills以继承agents.defaults.skills。 - 设置agents.list[].skills: []表示没有任何技能。 - 非空的agents.list[].skills列表是该代理的 最终 集合 - 它不会与默认值合并。 - 生成的允许列表适用于提示构建、技能斜杠命令发现、沙盒同步和技能快照。
插件可以通过在 openclaw.plugin.json 中列出 skills 目录(相对于插件根目录的路径)来提供其自身的技能。当插件启用时,插件技能即会被加载。这是放置特定于工具的操作指南的理想位置,这些指南对于工具描述来说太长,但应在插件安装后随时可用——例如,浏览器插件附带了一个 browser-automation 技能,用于多步浏览器控制。
插件技能目录被合并到与 skills.load.extraDirs 相同的低优先级路径中,因此同名的内置、托管、代理或工作区技能会覆盖它们。您可以通过插件配置条目上的 metadata.openclaw.requires.config 来限制它们。
请参阅 Plugins 了解发现/配置,并参阅 Tools 了解这些技能所教授的工具表面。
可选的实验性 Skill Workshop 插件可以根据代理在操作中观察到的可重用过程,创建或更新工作区技能。默认情况下它是禁用的,必须通过 plugins.entries.skill-workshop 显式启用。
Skill Workshop 仅写入 <workspace>/skills,扫描生成的内容,支持待批准或自动安全写入,隔离不安全的建议,并在成功写入后刷新技能快照,以便新技能无需重启 Gateway(网关) 即可使用。
将其用于更正,例如 “下次,验证 GIF 归属”,或来之不易的工作流程,例如媒体 QA 检查清单。从待批准开始;仅在审查其提案后在受信任的工作空间中使用自动写入。完整指南:Skill Workshop plugin。
ClawHub(安装和同步)
Section titled “ClawHub(安装和同步)”ClawHub 是 OpenClaw 的公共技能注册表。
使用原生 openclaw skills 命令进行发现/安装/更新,或使用
独立的 clawhub CLI 进行发布/同步工作流。完整指南:
ClawHub。
| 操作 | 命令 |
|---|---|
| 将技能安装到工作空间 | openclaw skills install <skill-slug> |
| 为所有本地代理安装技能 | openclaw skills install <skill-slug> --global |
| 更新所有工作区安装的技能 | openclaw skills update --all |
| 更新单个共享托管技能 | openclaw skills update <skill-slug> --global |
| 更新所有共享托管/本地技能 | openclaw skills update --all --global |
| 同步(扫描 + 发布更新) | clawhub sync --all |
Native openclaw skills install 默认安装到活动工作区的 skills/ 目录。添加 --global 以安装到共享托管/本地目录(默认为 ~/.openclaw/skills),除非代理技能允许列表限制了可见性,否则所有本地代理都可见。单独的 clawhubCLI CLI 也会安装到当前工作目录下的 ./skillsOpenClawOpenClaw(或者回退到配置的 OpenClaw 工作区)。OpenClaw 会在下一次会话中将其作为 <workspace>/skills 拾取。配置的技能根目录还支持一级分组,例如 skills/<group>/<skill>/SKILL.md,这样相关的第三方技能可以保存在共享文件夹下,而无需进行广泛的递归扫描。
需要私有、非 ClawHub 分发的 Gateway(网关) 客户端可以使用 Gateway(网关)ClawHubskills.upload.begin、skills.upload.chunk 和 skills.upload.commit 暂存 zip 技能归档,然后使用 skills.install({ source: "upload", uploadId, slug, force?, sha256? }) 安装已提交的上传内容。这是针对受信任客户端的显式管理员上传路径,而非正常的 openclaw skills install <slug>ClawHub 或 ClawHub 安装流程。默认情况下此功能处于关闭状态,并且仅在 openclaw.json 中设置了 skills.install.allowUploadedArchives: true 时才有效。上传模式仍然会安装到默认代理工作区 skills/<slug> 目录;归档的内部文件夹名称对于最终安装目标将被忽略。
ClawHub 技能页面在安装前会显示最新的安全扫描状态,并提供 VirusTotal、ClawScan 和静态分析的扫描详情页面。openclaw skills install <slug> 仍然只是安装路径;发布者可以通过 ClawHub 仪表板或 clawhub skill rescan <slug> 解决误报问题。
- 工作区、项目代理和额外目录的技能发现仅接受解析后的真实路径保持在配置根目录内的技能根目录,除非
skills.load.allowSymlinkTargets显式信任目标根目录。捆绑的技能始终保持在内部。托管的~/.openclaw/skills和个人的~/.agents/skills根目录可能包含由 ClawHub 或其他本地技能管理器安装的符号链接技能文件夹,但每个SKILL.md的真实路径必须仍保持在其解析后的技能目录内。 - Gateway(网关) 私有归档安装默认是关闭的。当显式启用时,它们需要一个包含 Gateway(网关)
SKILL.mdClawHub 的已提交 zip 上传,并复用与 ClawHub skill 安装相同的归档提取、路径遍历、符号链接、强制和回滚保护措施。它们受skills.install.allowUploadedArchivesClawHub 限制;正常的 ClawHub 安装不需要该设置。 - Gateway(网关) 支持的技能依赖安装(Gateway(网关)
skills.install、新手引导和 Skills 设置 UI)在执行安装程序元数据之前运行内置的恶意代码扫描器。critical发现默认会阻止,除非调用者显式设置了危险覆盖;可疑发现仍然仅发出警告。 openclaw skills install <slug>不同——它将 ClawHub 技能文件夹下载到工作区,或通过--global下载到共享的托管/本地技能中,并且不使用上述的安装程序元数据路径。skills.entries.*.env和skills.entries.*.apiKey将机密信息注入该代理轮次的 主机 进程(而非沙箱)。请确保机密信息不会出现在提示和日志中。
有关更广泛的威胁模型和检查清单,请参阅 安全性。
SKILL.md 格式
Section titled “SKILL.md 格式”SKILL.md 必须至少包含:
---name: image-labdescription: Generate or edit images via a provider-backed image workflow---OpenClaw 遵循 AgentSkills 规范进行布局/意图设计。嵌入式代理使用的解析器仅支持单行 frontmatter 键;OpenClawmetadata 应该是一个单行 JSON 对象。在指令中使用 {baseDir} 来引用技能文件夹路径。
可选的 frontmatter 键
Section titled “可选的 frontmatter 键”筛选(加载时过滤器)
Section titled “筛选(加载时过滤器)”OpenClaw 在加载时使用 OpenClawmetadata(单行 JSON)筛选技能:
---name: image-labdescription: Generate or edit images via a provider-backed image workflowmetadata: { "openclaw": { "requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"], "config": ["browser.enabled"] }, "primaryEnv": "GEMINI_API_KEY" } }---metadata.openclaw 下的字段:
如果不存在 metadata.openclaw,则该技能始终符合资格(除非在配置中被禁用或对于捆绑技能被 skills.allowBundled 阻止)。
沙箱隔离说明
Section titled “沙箱隔离说明”requires.bins是在技能加载时在 宿主机 上检查的。- 如果代理处于沙箱隔离状态,则二进制文件也必须存在于 容器内部。通过
agents.defaults.sandbox.docker.setupCommand(或自定义映像)安装它。setupCommand在创建容器后运行一次。软件包安装还需要网络出口、可写的根 FS 以及沙箱中的 root 用户。 - 例如:
summarize技能 (skills/summarize/SKILL.md) 需要在沙箱容器中安装summarizeCLI 才能在其中运行。
安装程序规范
Section titled “安装程序规范”---name: geminidescription: Use Gemini CLI for coding assistance and Google search lookups.metadata: { "openclaw": { "emoji": "♊️", "requires": { "bins": ["gemini"] }, "install": [{ "id": "brew", "kind": "brew", "formula": "gemini-cli", "bins": ["gemini"], "label": "Install Gemini CLI (brew)" }] } }---Installer selection rules
- 如果列出了多个安装程序,网关会选择一个首选选项(如果有 brew 则选择 brew,否则选择 node)。
- 如果所有安装程序都是
downloadOpenClaw,OpenClaw 将列出每个条目,以便您查看可用的构件。 - 安装程序规范可以包含
os: ["darwin"|"linux"|"win32"]以按平台过滤选项。 - Node 安装遵循
openclaw.jsonnpmnpmGateway(网关)BunWhatsAppTelegramGateway(网关)OpenClaw 中的skills.install.nodeManager(默认:npm;选项:npm/pnpm/yarn/bun)。这仅影响技能安装;Gateway(网关) 运行时仍应为 Node - 不建议将 Bun 用于 WhatsApp/Telegram。 - 由 Gateway(网关) 支持的安装程序选择是首选项驱动的:当安装规范混合了多种类型时,如果
skills.install.preferBrew已启用且brew存在,OpenClaw 优先选择 Homebrew,然后是uv,接着是配置的 node 管理器,最后是go或download等其他后备选项。 - 如果每个安装规范都是
downloadOpenClaw,OpenClaw 将显示所有下载选项,而不是折叠为一个首选安装程序。
Per-installer details
- Homebrew 安装: OpenClaw 不会自动安装 Homebrew,也不会将 brew 公式转换为系统包管理器命令。在没有
brew的 Linux 容器中,新手引导会隐藏仅限 brew 的依赖项安装程序;请使用自定义镜像或在启用该技能之前手动安装依赖项。 - Go 安装: 如果缺少
go且存在brew,网关会首先通过 Homebrew 安装 Go,并在可能时将GOBIN设置为 Homebrew 的bin。 - 下载安装:
url(必需),archive(tar.gz|tar.bz2|zip),extract(默认:检测到归档时为 auto),stripComponents,targetDir(默认 `~/.openclaw/tools/
`)。
可以在 skills.entries 中的 ~/.openclaw/openclaw.json 下切换和提供捆绑及托管技能的环境变量值:
{ skills: { entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE", }, config: { endpoint: "https://example.invalid", model: "nano-pro", }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}如果技能名称包含连字符,请给键加上引号(JSON5 允许带引号的键)。默认情况下,配置键与技能名称匹配——如果技能定义了 metadata.openclaw.skillKey,请在 skills.entries 下使用该键。
环境变量注入
Section titled “环境变量注入”当代理运行开始时,OpenClaw:
- 读取技能元数据。
- 将
skills.entries.<key>.env和skills.entries.<key>.apiKey应用于process.env。 - 使用符合条件的技能构建系统提示词。
- 运行结束后恢复原始环境。
环境注入的作用域限定为代理运行,而非全局 Shell 环境。
对于内置的 claude-cli 后端,OpenClaw 还会将相同的合格快照实例化为临时的 Claude Code 插件,并通过 --plugin-dir 传递。Claude Code 可以随后使用其原生技能解析器,而 OpenClaw 仍拥有优先级、每代理允许列表、门控以及 skills.entries.* env/API 密钥注入的控制权。其他 CLI 后端仅使用提示目录。
OpenClaw 会在会话开始时对合格的 Skills 进行快照,并在同一会话的后续轮次中重复使用该列表。对 Skills 或配置的更改将在下一个新会话中生效。
Skills 可以在会话期间刷新,有两种情况:
- Skills 监视器已启用。
- 出现了一个新的合格远程节点。
将此视为一种热重载:刷新后的列表将在下一次代理轮次中被获取。如果该会话的有效代理技能允许列表发生变化,OpenClaw 会刷新快照,以便可见的技能与当前代理保持一致。
Skills 监视器
Section titled “Skills 监视器”默认情况下,OpenClaw 会监视技能文件夹,并在 SKILL.md 文件发生变化时更新技能快照。可以在 skills.load 下进行配置:
{ skills: { load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, watchDebounceMs: 250, }, },}对于有意的 workspace、project-agent 或 extra-dir 布局,如果技能根目录包含符号链接(例如 <workspace>/skills/manager -> ~/Projects/manager/skills),请使用 allowSymlinkTargets。默认情况下,受管理的 ~/.openclaw/skills 和个人的 ~/.agents/skills 可以遵循来自本地技能管理器的技能目录符号链接,但目标列表仍在 realpath 解析后进行匹配,因此在配置时应保持狭窄。
远程 macOS 节点(Linux 网关)
Section titled “远程 macOS 节点(Linux 网关)”如果 Gateway(网关) 在 Linux 上运行,但连接了一个 macOS 节点 且允许 Gateway(网关)LinuxmacOSsystem.run(未将 Exec 批准安全性设置为 denyOpenClawmacOS),OpenClaw 可以将仅限 macOS 的技能视为符合条件,前提是该节点上存在所需的二进制文件。代理应通过 exec 工具并使用 host=node 执行这些技能。
这依赖于节点报告其命令支持以及通过 system.which 或 system.runOpenClaw 进行的 bin 探测。离线节点不会使仅限远程的技能可见。如果已连接的节点停止响应 bin 探测,OpenClaw 将清除其缓存的 bin 匹配项,以便代理不再看到当前无法在那里运行的技能。
Token 影响
Section titled “Token 影响”当技能符合条件时,OpenClaw 会将一个包含可用技能的精简 XML 列表注入到系统提示词中(通过 pi-coding-agent 中的 OpenClawformatSkillsForPrompt)。成本是确定的:
- 基础开销(仅当 ≥1 个技能时):195 个字符。
- **每个技能:**97 个字符 + XML 转义后的
<name>、<description>和<location>值的长度。
公式(字符):
total = 195 + Σ (97 + len(name_escaped) + len(description_escaped) + len(location_escaped))XML 转义会将 & < > " ' 扩展为实体(&、<OpenAI 等),从而增加长度。Token 计数因模型分词器而异。粗略的 OpenAI 风格估算约为每 Token 4 个字符,因此除实际字段长度外,每个技能约为 97 字符 ≈ 24 tokens。
托管技能生命周期
Section titled “托管技能生命周期”OpenClaw 附带了一组作为 bundled skills 的基准技能,包含在安装(npm 包或 OpenClaw.app)中。~/.openclaw/skills 用于本地覆盖——例如,在无需更改内置副本的情况下固定或修补技能。Workspace 技能归用户所有,在名称冲突时会覆盖前两者。
想要更多技能?
Section titled “想要更多技能?”浏览 https://clawhub.ai。完整配置架构:Skills config。
- ClawHub - 公共技能注册表
- Creating skills - 构建自定义技能
- Plugins - 插件系统概述
- Skill Workshop plugin - 从代理工作中生成技能
- Skills config - 技能配置参考
- Slash commands - 所有可用的斜杠命令