OpenClaw Skill 本质上是一种模块化的 AI 能力扩展机制,它通过标准化的目录结构和配置文件,将特定领域的专业知识封装成可复用的功能包。每个 Skill 都包含以下核心组件:
SKILL.md:这是每个 Skill 的"身份证"和"说明书",采用 Markdown 格式编写,必须包含 YAML frontmatter 元数据。这个文件不仅定义了 Skill 的基本信息(名称、版本、作者等),还详细说明了该 Skill 的功能范围、使用场景和触发方式。
scripts/:存放可直接执行的脚本文件,支持 Python、Node.js 和 Bash 等多种语言。这些脚本是 Skill 的核心实现部分,负责具体的功能逻辑。例如,一个 PDF 处理 Skill 可能包含 PDF 文本提取、页面分割等脚本。
references/:存放参考文档和技术资料。与普通 prompt 不同,Skill 的参考资料是按需加载的,只有当 AI 需要查阅特定信息时才会调用,避免了不必要的内存占用。
assets/:存放静态资源文件,如模板、图片、配置文件等。这些资源文件可以被 scripts 中的脚本调用使用。
很多初学者容易混淆 Skill 和普通 prompt 的区别,实际上它们在设计理念和使用方式上有着根本性的不同:
复用性:普通 prompt 是一次性的文本指令,而 Skill 是可复用的功能模块。开发一个 Skill 后,团队所有成员都可以直接调用,无需重复编写相似的 prompt。
版本管理:Skill 支持标准的版本控制(如 git),可以方便地进行升级、回滚和分支管理。这对于需要持续迭代的业务场景特别重要。
完整封装:一个完整的 Skill 不仅包含执行逻辑(scripts),还包含完整的文档(references)和资源(assets),形成了一个自包含的知识单元。
标准化接口:所有 Skill 都遵循相同的目录结构和配置规范,这使得不同开发者创建的 Skill 可以无缝集成到同一个 OpenClaw 环境中。
在开始安装 Skill 之前,需要确保你的开发环境满足以下基本要求:
OpenClaw 版本:运行 openclaw --version 确认版本号 ≥ 1.2.0。旧版本可能不支持某些 Skill 特性。
项目目录结构:检查你的项目是否包含 .openclaw/skills/ 目录。如果没有,需要手动创建:
bash复制mkdir -p .openclaw/skills/
解压工具:确保系统已安装 unzip 工具。在 macOS/Linux 上可以通过 which unzip 命令检查,如果未安装,使用以下命令安装:
bash复制# macOS
brew install unzip
# Ubuntu/Debian
sudo apt-get install unzip
这是最常见的 Skill 安装方式,适用于从官方渠道或第三方获取的 Skill 压缩包。以下是详细步骤:
下载 Skill 包:将获取的 ZIP 文件保存到临时目录,例如 ~/Downloads/。
复制到技能目录:
bash复制cp ~/Downloads/my-skill.zip /path/to/project/.openclaw/skills/
注意:这里的 /path/to/project/ 需要替换为你实际的工程路径。
解压 Skill 包:
bash复制cd .openclaw/skills/
unzip my-skill.zip
如果 ZIP 包有密码保护,需要添加 -P 参数:
bash复制unzip -P your_password my-skill.zip
验证目录结构:
bash复制ls my-skill/
预期应该看到以下结构:
code复制SKILL.md
scripts/
references/
assets/
如果缺少任何核心目录或文件,说明 Skill 包可能损坏或不完整。
清理 ZIP 文件(可选):
bash复制rm my-skill.zip
对于开源或团队内部开发的 Skill,直接从 git 仓库克隆是更便捷的方式:
进入技能目录:
bash复制cd .openclaw/skills/
克隆仓库:
bash复制git clone https://github.com/your-org/my-skill.git
如果需要指定分支或标签:
bash复制git clone -b v1.2.0 https://github.com/your-org/my-skill.git
安装依赖:
bash复制cd my-skill
npm install
bash复制pip3 install -r requirements.txt
验证安装:
bash复制git status
确保没有未提交的修改或冲突。
如果你需要从头开发一个新 Skill,可以使用官方初始化工具:
确保已安装 skill-creator:
bash复制ls .openclaw/skills/skill-creator/
如果没有,需要先安装这个基础 Skill。
运行初始化脚本:
bash复制python3 /path/to/skill-creator/scripts/init_skill.py my-new-skill \
--path .openclaw/skills/
这将创建一个符合标准结构的 Skill 骨架。
编辑 SKILL.md:
使用文本编辑器填写必要的元数据:
yaml复制---
name: my-new-skill
description: "我的全新技能描述"
metadata:
version: "1.0.0"
author: "你的名字"
---
OpenClaw 会自动扫描 .openclaw/skills/ 目录下的所有子目录(以下划线 _ 开头的目录除外),并尝试加载其中的 Skill。加载过程包括:
可以通过以下方式验证 Skill 是否成功加载:
列出所有已加载 Skill:
在 OpenClaw 对话框中输入:
code复制请列出当前已加载的所有 Skill
你应该能在返回列表中看到新安装的 Skill。
直接调用 Skill:
根据 Skill 的说明文档,尝试触发其功能。例如:
code复制请用 pdf-processor skill 将这份文档转换为Markdown
检查系统日志:
OpenClaw 会在日志中记录 Skill 加载过程:
bash复制tail -n 50 ~/.openclaw/logs/system.log
查找类似这样的记录:
code复制[INFO] Loaded skill: pdf-processor (v1.0.0)
如果 Skill 没有正确加载,可以按照以下步骤排查:
检查目录权限:
bash复制ls -la .openclaw/skills/
确保当前用户有读取权限。
验证 SKILL.md 格式:
bash复制head -20 .openclaw/skills/my-skill/SKILL.md
确认 YAML frontmatter 格式正确,特别是 name 字段必须与目录名一致。
检查依赖是否满足:
查看 SKILL.md 中的 requirements 部分,确认系统环境符合要求:
bash复制node -v
python3 --version
当 Skill 发布新版本时,可以通过以下方式升级:
ZIP 包方式升级:
bash复制cd .openclaw/skills/
rm -rf my-skill/ # 建议先备份
unzip ~/Downloads/my-skill-v2.zip
Git 方式升级:
bash复制cd .openclaw/skills/my-skill/
git fetch
git checkout v2.0.0
npm install # 更新依赖
版本回滚:
bash复制git checkout v1.0.0
对于使用 git 管理的多个 Skill,可以创建自动化脚本:
bash复制#!/bin/bash
SKILLS_DIR=".openclaw/skills"
echo "开始批量更新所有 Skill..."
for skill_dir in "$SKILLS_DIR"/*/; do
if [ -d "$skill_dir/.git" ]; then
skill_name=$(basename "$skill_dir")
echo "更新: $skill_name"
cd "$skill_dir"
git pull origin main 2>&1
[ -f "package.json" ] && npm install --silent
[ -f "requirements.txt" ] && pip3 install -r requirements.txt -q
cd - > /dev/null
echo "$skill_name 更新完成"
fi
done
echo "所有 Skill 更新完毕!"
版本控制策略:
bash复制git tag v1.0.0-backup
git push origin v1.0.0-backup
健康检查脚本:
定期运行以下脚本检查所有 Skill 状态:
bash复制#!/bin/bash
SKILLS_DIR=".openclaw/skills"
FAIL_COUNT=0
for skill_dir in "$SKILLS_DIR"/*/; do
skill_name=$(basename "$skill_dir")
if [ ! -f "$skill_dir/SKILL.md" ]; then
echo "⚠️ $skill_name: 缺少 SKILL.md"
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
if [ -f "$skill_dir/package.json" ]; then
if [ ! -d "$skill_dir/node_modules" ]; then
echo "⚠️ $skill_name: node_modules 缺失"
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
fi
done
if [ $FAIL_COUNT -eq 0 ]; then
echo "✅ 所有 Skill 健康检查通过"
else
echo "❌ 发现 $FAIL_COUNT 个问题"
fi
绝对避免将敏感信息硬编码在脚本中:
使用环境变量:
bash复制export MY_SKILL_API_KEY="your_key_here"
.env 文件方式:
bash复制echo "MY_SKILL_API_KEY=your_key_here" >> .env
echo ".env" >> .gitignore
脚本中安全读取:
python复制import os
api_key = os.environ.get("MY_SKILL_API_KEY")
if not api_key:
raise EnvironmentError("请设置环境变量 MY_SKILL_API_KEY")
脚本可执行权限:
bash复制chmod +x .openclaw/skills/my-skill/scripts/*.sh
chmod +x .openclaw/skills/my-skill/scripts/*.py
目录权限:
bash复制chmod -R 750 .openclaw/skills/my-skill/
对于需要持续运行的 Skill 服务:
使用 systemd (Linux):
ini复制[Unit]
Description=My Skill Service
[Service]
ExecStart=/usr/bin/node /path/to/skill/scripts/server.js
Restart=always
[Install]
WantedBy=multi-user.target
使用 launchd (macOS):
xml复制<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.myskill</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/path/to/skill/scripts/server.js</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
检查基础目录结构:
bash复制tree -L 3 .openclaw/skills/my-skill/
验证 SKILL.md 格式:
bash复制yamllint .openclaw/skills/my-skill/SKILL.md
检查 OpenClaw 日志:
bash复制grep -A 10 "my-skill" ~/.openclaw/logs/system.log
Node.js 版本管理:
bash复制nvm install 18
nvm use 18
Python 虚拟环境:
bash复制python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
延迟加载参考资料:
在 SKILL.md 中标记大型参考资料为 lazy-load:
yaml复制references:
- name: api-docs.md
load: lazy
脚本预编译:
对于 Python 脚本,可以预先编译为 .pyc:
bash复制python3 -m compileall .openclaw/skills/my-skill/scripts/
通过多个 Skill 协同工作实现复杂功能:
串联调用:
code复制请先用 pdf-processor 提取这份PDF中的表格,然后用 data-analyzer 分析结果
结果传递:
在脚本中通过临时文件传递数据:
python复制# 第一个脚本
with open("/tmp/result.json", "w") as f:
json.dump(data, f)
# 第二个脚本
with open("/tmp/result.json") as f:
data = json.load(f)
调试模式:
在 SKILL.md 中启用调试:
yaml复制debug: true
单元测试:
为脚本添加测试用例:
bash复制.
├── scripts/
│ ├── main.py
│ └── test_main.py
性能分析:
对于 Python 脚本:
bash复制python3 -m cProfile .openclaw/skills/my-skill/scripts/main.py
私有 Skill 仓库:
搭建内部 git 服务器托管 Skill:
bash复制git clone ssh://git@internal-server:port/path/to/skill.git
CI/CD 集成:
在 .gitlab-ci.yml 中添加:
yaml复制deploy_skill:
script:
- rsync -avz ./ user@server:/path/to/.openclaw/skills/my-skill/
权限控制:
使用 POSIX ACL 精细控制:
bash复制setfacl -R -m u:openclaw:r-x .openclaw/skills/my-skill/
通过遵循本指南中的各项建议和实践,你将能够高效地管理 OpenClaw Skill 的整个生命周期,从安装部署到生产运维。记住,每个 Skill 都是你 AI 助手的能力扩展,合理的组织和维护将使你的工作效率成倍提升。