2026年OpenClaw Skills 系统深度解析:从源码到自定义技能

OpenClaw Skills 系统深度解析:从源码到自定义技能svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 
  
    
     
      
     
  
    
    

OpenClaw 作为一款强大的 AI Agent 框架,其核心魅力不仅在于内置的工具集,更在于极度灵活的可扩展性。而这一切的基石,正是 Skills 系统——一个基于 AgentSkills 规范的插件化架构。

如果你只是使用 OpenClaw 的默认功能,那可能只用了其 30% 的能力。当你需要:

  • 集成内部工具(公司数据库、私有 API)
  • 为特定场景定制智能行为(如股票分析、代码审查)
  • 贡献社区技能,建立个人影响力
  • 理解框架源码,进行深度定制

这时,Skills 系统就是你必须掌握的桥梁。本文将从源码级别剖析 Skills 的加载、配置、分发机制,并提供手把手的实战教程,让你从使用者变为扩展者。


技能在哪里?——三层加载优先级

OpenClaw 的技能来源分为三个层次,形成一个清晰的优先级链:

1. Bundled Skills(内置技能)

随 OpenClaw npm 包或应用一起安装的技能,位于:

/Users/xgn/.npm-global/lib/node_modules/openclaw/skills/ 

示例:coding-agentpeekaboogeminigithub 等。

2. Managed/Local Skills(管理技能)

用户级覆盖目录:

~/.openclaw/skills/ 

用于局部修改内置技能(比如 patch 一个 bug 或调整提示词),而无需改动 bundled 版本。

3. Workspace Skills(工作区技能)

当前 OpenClaw 会话的工作区目录:

 
   
    
     
       /skills/ 
     

你可以为不同项目配置不同的技能集,实现完全隔离。

Precedence 规则(优先级)
 
   
    
     
       /skills (最高) → ~/.openclaw/skills → bundled skills (最低) 
     

同名技能,workspace 版本始终胜出。这意味着你可以安全地覆盖任何内置技能,而不会影响全局。
在这里插入图片描述

实战:覆盖内置技能

假设你想修改 coding-agent 的提示词:

# 1. 在工作区创建同名技能目录 mkdir -p ~/.openclaw/workspace/skills/coding-agent

# 2. 复制原技能文件(从 bundled 复制过来) cp /Users/xgn/.npm-global/lib/node_modules/openclaw/skills/coding-agent/SKILL.md ~/.openclaw/workspace/skills/coding-agent/

# 3. 编辑 SKILL.md,修改指令部分 # 4. 启动新会话,workspace 版本自动覆盖 bundled

Skills 与 Plugins 的关系

OpenClaw 的插件(Plugins)可以打包自己的技能,在 openclaw.plugin.json 中声明:

{ “skills”: [“./skills”] // 相对路径 } 

插件技能在插件启用时加载,参与同样的优先级规则。这使得:

  • 功能模块化(例如 feishu 插件打包 4 个技能:doc/drive/perm/wiki)
  • 第三方开发者可以分发完整的技能+工具包
单 Agent vs 多 Agent 场景

多 Agent 架构中,每个 Agent 有独立的 workspace。因此:

  • Per-agent skills:放在 /skills ,仅该 Agent 可见
  • Shared skills:放在 ~/.openclaw/skills,所有同机 Agent 共享
  • Extra dirs:通过 skills.load.extraDirs 配置,最低优先级,适合共享技能包
{ skills: {

load: { extraDirs: ["~/Projects/oss/skill-pack/skills"] } 

} }


Frontmatter 元数据规范

一个技能的核心是 SKILL.md,采用 YAML frontmatter + Markdown body

 name: coding-agent description: ‘Delegate coding tasks to Codex, Claude Code, or Pi agents…’ metadata: {

"openclaw": { "emoji": "🧩", "requires": { "anyBins": ["claude", "codex", "opencode", "pi"] } }, 

}

在这里插入图片描述

必需字段
  • name:技能唯一标识(小写字母、连字符)
  • description:简短描述(用于提示 LLM)
常用可选字段
  • homepage:网站链接(macOS UI 显示)
  • emoji:图标(macOS Skills UI)
  • user-invocable:是否暴露为用户 slash 命令(默认 true)
  • disable-model-invocation:是否从模型 prompt 中排除(仅用户手动触发)
metadata.openclaw 完整字段

这是 OpenClaw 特有的单行 JSON,用于加载时 gating(过滤)

字段 类型 说明 always boolean 强制启用,跳过其他 gates os string[] 限制平台: darwinlinuxwin32 requires.bins string[] 所有二进制必须在 PATHrequires.anyBins string[] 至少一个二进制存在 requires.env string[] 指定环境变量必须存在 requires.config string[] 配置路径必须为真(如 browser.enabledprimaryEnv string 关联 skills.entries. .apiKey 的 env 名 install Installer[] 自动安装说明(支持 brew/node/go/download)
Gating 执行时机

Agent 会话启动时,OpenClaw 会扫描所有技能,检查 requires.* 条件,仅加载符合条件的技能。条件不满足则技能不可见。

Installer 示例(gemini 技能)
metadata: {

"openclaw": { "emoji": "♊️", "requires": { "bins": ["gemini"] }, "install": [ { "id": "brew", "kind": "brew", "formula": "gemini-cli", "bins": ["gemini"], "label": "Install Gemini CLI (brew)", }, ], }, 

}

macOS 上如果 gemini 不存在,Skills UI 会显示一个“Install Gemini CLI (brew)”按钮。

指令编写技巧

body 部分是给 LLM 的操作指南,关键原则:

  • 告诉模型“做什么”,不是“如何思考”
  • 明确工具选择(是用 read 还是 exec?)
  • 使用 {baseDir} 引用技能目录的绝对路径
# Coding Agent Skill

When the user asks for code generation or review:

  1. Use `bash` with `pty:true` to spawn the coding agent.
  2. Prefer `codex exec` for one-shot tasks, `–full-auto` for auto-approval.
  3. For PR reviews, always use a separate temp directory: `mktemp -d && git init`.

配置位置:~/.openclaw/openclaw.json

所有技能相关配置集中在 skills 键下:

{ skills: {

allowBundled: ["gemini", "peekaboo"], // 仅允许这些 bundled 技能 load: { extraDirs: ["~/Projects/agent-scripts/skills"], watch: true, watchDebounceMs: 250, }, install: { preferBrew: true, nodeManager: "npm", }, entries: { "nano-banana-pro": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, config: { endpoint: "https://api.example.com", model: "v1" }, }, "sag": { enabled: false }, // 禁用 sag 技能 }, 

}, }

关键配置项
  • allowBundled白名单,仅列出内置技能可启用(防误启)
  • load.extraDirs:额外技能目录(最低优先级)
  • load.watch:监听技能文件夹变化,热重载(默认 true)
  • entries. 每个技能的独立配置
    • enabled:显式禁用技能
    • env:注入环境变量(仅在变量不存在时)
    • apiKey:便捷方式,关联 primaryEnv
    • config:自定义参数,供技能指令引用
安全注意事项
  • 第三方技能视为不可信代码:务必阅读 SKILL.md 和脚本文件
  • Sandbox 隔离:高风险技能应配置 sandbox.docker 环境
  • 密钥管理:避免在 env 中硬编码;使用 SecretRef:
    apiKey: { source: “env”, provider: “default”, id: “MY_API_KEY” } 
  • 环境变量注入范围:仅当前 Agent 会话,非全局

什么是 ClawHub?

ClawHub 是 OpenClaw 的公共技能注册表https://clawhub.ai),相当于 npm for Skills:

  • 公开、版本化、可搜索
  • 任何人都可以发布技能
  • 社区驱动的评分与评论
  • 自动审核(报告机制)
CLI 工作流

安装 CLI:

npm install -g clawhub 
搜索技能
clawhub search “stock” # 返回:my-stock-quote, stock-watcher, trading-signals 

在这里插入图片描述

安装技能
# 默认安装到当前工作区的 ./skills clawhub install my-stock-quote

# 指定版本 clawhub install my-stock-quote –version 1.2.0

# 强制覆盖 clawhub install my-stock-quote –force

更新技能
# 单个更新 clawhub update my-stock-quote

# 全部更新 clawhub update –all

发布技能
# 扫描目录并发布新版本 clawhub publish ./my-skill  –slug my-stock-quote  –name “My Stock Quote Skill”  –version 1.0.0  –tags “stock,finance”

# 批量同步(扫描 + 发布未同步的) clawhub sync –all

ClawHub 会记录已安装技能的 lock 文件:.clawhub/lock.json

发布规则与安全
  • GitHub 账户需满一周(防止即时滥用)
  • 报告机制:超过 3 个独特报告自动隐藏
  • Moderator:可删除、取消删除、封禁用户
  • TelemetryCLAWHUB_DISABLE_TELEMETRY=1 可禁用统计

让我们从头创建一个A 股股价查询技能,命名为 china-stock-quote

Step 1:创建目录结构
# 进入工作区技能目录 cd ~/.openclaw/workspace/skills

# 新建技能文件夹 mkdir -p china-stock-quote cd china-stock-quote

结构:

china-stock-quote/ ├── SKILL.md # 必需 ├── requirements.txt # Python 依赖(可选) └── quote.py # 实现脚本(可选) 
Step 2:编写 SKILL.md

这是一个完整的 SKILL.md 示例:

— name: china-stock-quote description: 查询 A 股股票实时价格(支持上证、深证) metadata: {

"openclaw": { "requires": { "bins": ["python3"], "env": ["STOCK_API_KEY"] }, "primaryEnv": "STOCK_API_KEY", "emoji": "📈", }, 

}

中国股票报价技能

用于查询 A 股(上证、深证)实时行情的技能。

何时使用

  • 用户询问某只股票的价格(如“ 现在多少钱”)
  • 需要对比多只股票的表现
  • 获取市场快照

如何调用

  1. 确认参数:`symbol`(6位股票代码,如 ``)、`market`(可选,`sh`/`sz`)
  2. 使用 `exec` 运行 `quote.py` 脚本
  3. 解析 JSON 输出并返回给用户

示例

实现说明

  • 脚本 `quote.py` 使用 `yfinance` 库或公开 API(如 akshare)
  • 如 API Key 需要,使用 `{baseDir}/.env` 或 `STOCK_API_KEY` 环境变量
  • 若查询失败,返回错误信息并建议重试 创建 quote.py(建议放在技能目录):
    Step 3:实现逻辑(quote.py)
    #!/usr/bin/env python3 import sys import json import argparse

def query_stock(symbol: str) -> dict:

# TODO: 接入真实 API(如 akshare、yfinance、tushare) # 这里返回 mock 数据用于演示 return  

if name == main:

parser = argparse.ArgumentParser() parser.add_argument("--symbol", required=True, help="6位股票代码") args = parser.parse_args() result = query_stock(args.symbol) print(json.dumps(result, ensure_ascii=False)) 

创建 requirements.txt(如果需要依赖):

yfinance>=0.2.0

或 akshare

Step 4:测试与调试
方法 A:新会话自动发现
# 打开新终端,启动 OpenClaw openclaw agent –message “用 china-stock-quote 查询 的股价” 
方法 B:实时刷新(无需重启)

在当前 OpenClaw 会话中:

/skills refresh 

然后直接对话。

查看技能是否加载
# 查看日志 openclaw logs | grep “china-stock-quote” 
调试技巧
  1. 如果技能未出现:检查 SKILL.md frontmatter 格式(YAML 缩进、JSON 单行)
  2. 如果 requires 不满足:确认 python3 在 PATH、STOCK_API_KEY 已设置
  3. 如果 agent 不会调用:简化指令,明确 exec python3 quote.py –symbol
Step 5:发布到 ClawHub(可选)

完成并验证后,可以分享给社区:

# 从技能目录执行 cd ~/.openclaw/workspace/skills/china-stock-quote

# 发布 clawhub publish . –slug china-stock-quote –name “China Stock Quote” –version 1.0.0 –tags “stock,finance,china”

# 同步 lock clawhub sync –all

之后其他用户只需 clawhub install china-stock-quote 即可使用。


coding-agent:执行外部编码代理

核心能力:调用 Codex、Claude Code、Pi 等编码助手。

SKILL.md 要点

metadata: {

"openclaw": { "emoji": "🧩", "requires": { "anyBins": ["claude", "codex", "opencode", "pi"] } }, 

}

  • anyBins:只要有一个编码代理 CLI 存在即可用
  • 指令中强调 pty:true(对 Codex/Pi 必须)
  • 提供了详细的 Background + process 模式示例

为什么 pty 必要?因为这些 CLI 是交互式终端程序,没有 PTY 会导致输出错乱或 hang。

典型调用

bash pty:true workdir:~/project background:true  command:“codex –full-auto ‘Add error handling to API’” 
peekaboo:macOS UI 自动化

核心能力:控制鼠标、键盘、截图、应用管理(macOS only)。

SKILL.md 亮点

metadata: {

"openclaw": { "emoji": "👀", "os": ["darwin"], # 仅 macOS "requires": { "bins": ["peekaboo"] }, "install": [{ "id": "brew", "kind": "brew", "formula": "steipete/tap/peekaboo" }], }, 

}

  • os: [“darwin”]:其他平台自动屏蔽
  • install 提供一键安装按钮(macOS Skills UI)
  • 指令极详细,列举了所有子命令和参数

典型调用场景

peekaboo see –app Safari –window-title “Login” –annotate peekaboo click –on B3 –app Safari peekaboo type “” –app Safari 
gemini:Google Gemini CLI 集成

核心能力:调用 Gemini 模型进行生成。

SKILL.md 特色

metadata: {

"openclaw": { "emoji": "♊️", "requires": { "bins": ["gemini"] }, "install": [{ "id": "brew", "kind": "brew", "formula": "gemini-cli" }], }, 

}

  • 没有 primaryEnv(Gemini CLI 本地认证)
  • install 让非技术用户也能一键安装

Token 影响:技能列表的开销

OpenClaw 在系统 prompt 中注入所有eligible技能的 XML 列表,开销公式:

195 (基础) + Σ [97 + len(name) + len(description) + len(location)] 

其中 97 是每个技能的固定 XML 标签开销。XML 转义(&<>)还会额外增加字符数。

优化建议

  • 精简 description(10-20 字足够)
  • 使用 allowBundled 白名单,限制加载数量
  • 对于不需要模型自动调用的技能,设 disable-model-invocation: true
技能热重载

默认 skills.load.watch: true,当 SKILL.md 改变时:

  1. 文件系统 watcher 检测到变化
  2. 刷新技能快照(新的 eligible 列表)
  3. 下一条 agent turn 自动使用新技能

无需重启 OpenClaw。可以在开发中实时调试。

在这里插入图片描述

远程节点的技能分发

如果 Gateway 在 Linux 但连接了 macOS node,且 node 允许 system.run,那么:

  • 仅限 node 上存在的 darwin-only 技能会被标记为 eligible
  • 执行时自动路由到 node(通过 nodes.run

这实现了一个跨平台技能池


核心要点回顾
  1. Skills 是 OpenClaw 的可插拔能力单元,通过 SKILL.md 定义,分层加载
  2. 三层优先级:workspace > managed > bundled,同名覆盖无压力
  3. Gating 机制(`requires.*)确保技能仅在条件满足时加载,提升稳定性
  4. ClawHub 生态让技能发现、安装、发布变得像 npm 一样简单
  5. 创建自定义技能只需一个 SKILL.md(配合脚本),即可无限扩展
下一步行动
  • 动手写一个技能:从简单的 echo 开始,逐步增加外部工具集成
  • 探索 ClawHub:搜索你常用工具的现有技能,学习他人实现
  • 贡献回社区:将通用技能发布到 ClawHub,建立技术影响力
  • 安全第一:永远不要在生产环境运行未审计的第三方技能

  • OpenClaw 官方文档:Skills、ClawHub、Creating Skills
  • ClawHub 网站:https://clawhub.ai
  • AgentSkills 规范(上游):https://agentskills.io

Q:技能不加载怎么办?
A:检查日志 openclaw logs,查看 requires gating 失败原因;确认 SKILL.md 格式正确(YAML + 单行 JSON)

Q:如何调试技能内的脚本?
A:在 exec 中直接运行脚本,加 –log-level debug;或使用 process action:log 查看背景输出

Q:技能可以访问网络吗?
A:默认 sandbox 禁止网络;需配置 tools.exec.sandbox.docker.network 或使用 host=gateway

Q:多技能冲突怎么办?
A:优先级规则已解决;同名 workspace 技能总是胜出,或重命名


小讯
上一篇 2026-04-24 22:36
下一篇 2026-04-24 22:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/274560.html