一句话介绍

OpenClaw Skill 是 AI 编程助手的能力扩展包,像给 AI 装插件一样,让它在特定领域(处理 PDF、操作数据库等)变成专家级助手。


一、什么是 OpenClaw Skill?

OpenClaw Skill 是一种模块化能力扩展机制,每个 Skill 本质上是一个包含以下内容的目录:

  • SKILL.md:技能说明文件,告诉 AI 这个 Skill 能做什么、怎么做
  • scripts/:可直接执行的脚本(Python / Node.js / Bash)
  • references/:参考文档,AI 需要时按需加载
  • assets/:模板文件、图片等静态资源
与普通 prompt 的区别 :Skill 是可复用、可版本管理、可分发的完整知识包,团队内部一次开发,所有人一键复用。

二、Skill 安装标准流程

第一步:下载 / 导入 Skill

方式一:从 zip 包导入(推荐)

# 将 skill 包放置到项目 skills 目录
cp ~/Downloads/my-skill.zip /path/to/project/.openclaw/skills/

# 解压
cd .openclaw/skills/
unzip my-skill.zip

# 验证目录结构
ls my-skill/
# 预期输出:SKILL.md  scripts/  references/  assets/

方式二:从源码克隆

cd .openclaw/skills/
git clone https://github.com/your-org/my-skill.git

# 安装 Skill 依赖(如有 package.json)
cd my-skill
npm install

# 安装 Python 依赖(如有 requirements.txt)
pip3 install -r requirements.txt

方式三:手动创建(开发者)

# 使用官方初始化脚本(需先加载 skill-creator skill)
python3 /path/to/skill-creator/scripts/init_skill.py my-"hljs-keyword">new-skill \
  --path .openclaw/skills/

第三步:启用 Skill

Skill 放置到 .openclaw/skills/ 目录后,Openclaw 会自动扫描并加载,无需手动注册。

# 确认 Skill 目录结构正确
tree .openclaw/skills/my-skill/
# 输出示例:
# .openclaw/skills/my-skill/
# ├── SKILL.md        ← 必须存在
# ├── scripts/
# │   └── run.py
# └── references/
#     └── api-docs.md

关键原则SKILL.md 必须存在,且包含有效的 YAML frontmatter,否则 Skill 加载失败。

第四步:验证安装

在 Openclaw 对话框中输入以下内容验证:

请列出当前已加载的所有 Skill

或直接触发 Skill:

# 以 list-skill skill 为例
请用 list-skill skill 列出你所掌握的所有技能

AI 若能正确识别并执行,则安装成功。


三、Skill 一键升级与批量更新最佳实践

单个 Skill 升级

# 方式一:替换目录(zip 包方式)
cd .openclaw/skills/
rm -rf my-skill/                    # 备份后再删除
unzip ~/Downloads/my-skill-v2.zip

# 方式二:git pull(源码方式)
cd .openclaw/skills/my-skill/
git pull origin main

# 更新依赖
npm install          # Node.js 项目
pip3 install -r requirements.txt --upgrade   # Python 项目

批量更新所有 git 管理的 Skill

#!/bin/bash
# 保存为 update-all-skills.sh,赋权后执行

SKILLS_DIR=".openclaw/skills"

echo "🔄 开始批量更新所有 Skill..."

"hljs-keyword">for skill_dir "hljs-keyword">in"$SKILLS_DIR"/*/; do
"hljs-keyword">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/"hljs-keyword">null
    echo "✅ $skill_name 更新完成"
  fi
done

echo "🎉 所有 Skill 更新完毕!"
chmod +x update-all-skills.sh
./update-all-skills.sh

版本管理建议

# 升级前打标签备份
cd .openclaw/skills/my-skill/
git tag v1.0.0-backup
git push origin v1.0.0-backup

# 回滚到指定版本
git checkout v1.0.0-backup

四、配置文件修改要点

4.1 SKILL.md 核心配置

SKILL.md 的 YAML frontmatter 是 Skill 的"身份证":

---
name: my-skill              # 唯一标识,只用小写字母和连字符
description: "一句话描述 Skill 的用途和触发场景,越具体越好"
metadata:
  version: "1.0.0"
  author: "your-name"
  requires:
    node: ">=18.0.0"# 运行环境要求
    python: ">=3.9"
---

避坑name 字段必须与目录名完全一致,否则 Skill 识别异常。

4.2 环境变量与密钥安全

禁止 将密钥硬编码在 SKILL.md 或脚本中:

# ❌ 错误做法
APP_SECRET="hardcoded_secret_123"

# ✅ 正确做法:使用环境变量
"hljs-keyword">export MY_SKILL_API_KEY="your_key_here"

# 或写入 .env 文件(确保加入 .gitignore)
echo "MY_SKILL_API_KEY=your_key_here" >> .env
echo ".env" >> .gitignore

在脚本中读取:

// Node.js
"hljs-keyword">const apiKey = process.env.MY_SKILL_API_KEY;
"hljs-keyword">if (!apiKey) {
  console.error("❌ 请设置环境变量 MY_SKILL_API_KEY");
  process.exit(1);
}
# Python
"hljs-keyword">import os
api_key = os.environ.get("MY_SKILL_API_KEY")
"hljs-keyword">if"hljs-keyword">not api_key:
    raise EnvironmentError("请设置环境变量 MY_SKILL_API_KEY")

4.3 脚本权限配置

# 为脚本添加可执行权限
chmod +x .openclaw/skills/my-skill/scripts/.sh
chmod +x .openclaw/skills/my-skill/scripts/.py

# 验证权限
ls -la .openclaw/skills/my-skill/scripts/
# 预期:-rwxr-xr-x  1 user  staff  ...

4.4 自启动与持久化配置

对于需要后台服务的 Skill(如本地 API 服务),推荐使用系统服务管理:

# macOS:使用 launchd
cat > ~/Library/LaunchAgents/com.myskill.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""...">
<plist version="1.0">
<dict>
  <key>Label</key>
  <"hljs-keyword">string>com.myskill</"hljs-keyword">string>
  <key>ProgramArguments</key>
  <array>
    <"hljs-keyword">string>/usr/local/bin/node</"hljs-keyword">string>
    <"hljs-keyword">string>/path/to/.openclaw/skills/my-skill/scripts/server.js</"hljs-keyword">string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.myskill.plist

五、常见失败原因与快速排错

问题一:Skill 未被识别(加载失败)

现象:让 AI 使用某 Skill,AI 说"没有找到该 Skill"

排查步骤

# 1. 检查目录位置是否正确
ls .openclaw/skills/
# Skill 目录必须在此处

# 2. 检查 SKILL.md 是否存在
ls .openclaw/skills/my-skill/SKILL.md
# 若输出"No such file",则是目录结构问题

# 3. 检查 YAML frontmatter 语法
head -20 .openclaw/skills/my-skill/SKILL.md
# 确认格式:--- 开头,包含 name 和 description 字段

常见原因:目录多套一层(如 skills/my-skill/my-skill/SKILL.md

问题二:脚本执行报错(依赖缺失)

现象Error: Cannot find module 'axios' 或 ModuleNotFoundError: No module named 'requests'

# Node.js 依赖修复
cd .openclaw/skills/my-skill/
npm install

# Python 依赖修复
pip3 install -r requirements.txt

# 全局安装缺失模块(临时方案)
npm install -g axios
pip3 install requests

问题三:权限拒绝(Permission Denied)

现象zsh: permission denied: ./scripts/run.sh

# 一键修复脚本权限
chmod +x .openclaw/skills/my-skill/scripts/*

# 若是 macOS 安全拦截,先移除隔离属性
xattr -d com.apple.quarantine .openclaw/skills/my-skill/scripts/run.sh

问题四:环境变量未生效

现象:脚本提示"请设置环境变量 XXX",但已经 export 过

# 确认变量在当前 shell 中生效
echo $MY_SKILL_API_KEY

# 若为空,重新 source 配置文件
source ~/.zshrc      # zsh 用户
source ~/.bashrc     # bash 用户

# 永久写入 shell 配置
echo 'export MY_SKILL_API_KEY="your_key"' >> ~/.zshrc
source ~/.zshrc

问题五:Skill 间冲突

现象:加载多个 Skill 后,AI 混淆触发逻辑

解决方案

# 检查是否有同名 Skill
ls .openclaw/skills/ | sort | uniq -d

# 重命名冲突 Skill
mv .openclaw/skills/publisher/ .openclaw/skills/wechat-publisher/
# 同步修改 SKILL.md 中的 name 字段
sed -i 's/^name: publisher/name: wechat-publisher/' \
  .openclaw/skills/wechat-publisher/SKILL.md

问题六:Node.js / Python 版本不兼容

# 检查当前版本
node -v &amp;&amp; python3 --version

# 使用 nvm 切换 Node.js 版本
nvm install 20
nvm use 20

# 使用 pyenv 切换 Python 版本
pyenv install 3.11
pyenv local 3.11

六、生产环境稳定运行建议

6.1 目录结构规范

.openclaw/
└── skills/
    ├── wechat-publisher/      # 生产 Skill
    │   ├── SKILL.md
    │   ├── scripts/
    │   ├── references/
    │   └── _meta.json         # 版本元信息
    └── _disabled/             # 暂时禁用的 Skill(前缀 _ 不会被加载)
        └── old-skill/

6.2 错误处理与日志

生产级脚本必须包含完整错误处理:

// Node.js 最佳实践
"hljs-keyword">async"hljs-keyword">function main() {
"hljs-keyword">try {
"hljs-keyword">const result = "hljs-keyword">await doSomething();
    console.log("✅ 执行成功:", result);
  } catch (err) {
    console.error("❌ 执行失败:", err.message);
    // 写入日志文件
    fs.appendFileSync("skill-error.log",
[${"hljs-keyword">new Date().toISOString()}] ${err.stack}\n
    );
    process.exit(1);
  }
}

6.3 定期健康检查脚本

#!/bin/bash
# health-check.sh - 每天运行一次

SKILLS_DIR=".openclaw/skills"
FAIL_COUNT=0

"hljs-keyword">for skill_dir "hljs-keyword">in"$SKILLS_DIR"/*/; do
  skill_name=$(basename "$skill_dir")

# 检查 SKILL.md 存在
"hljs-keyword">if [ ! -f "$skill_dir/SKILL.md" ]; then
    echo "⚠️  $skill_name: 缺少 SKILL.md"
    FAIL_COUNT=$((FAIL_COUNT + 1))
  fi

# 检查依赖完整性
"hljs-keyword">if [ -f "$skill_dir/package.json" ]; then
"hljs-keyword">if [ ! -d "$skill_dir/node_modules" ]; then
      echo "⚠️  $skill_name: node_modules 缺失,请运行 npm install"
      FAIL_COUNT=$((FAIL_COUNT + 1))
    fi
  fi
done

"hljs-keyword">if [ $FAIL_COUNT -eq 0 ]; then
  echo "✅ 所有 Skill 健康检查通过"
"hljs-keyword">else
  echo "❌ 发现 $FAIL_COUNT 个问题,请及时修复"
fi

七、官方推荐规范与避坑指南

✅ 最佳实践清单

✅ SKILL.md 描述精准、具体,触发关键词明确
✅ 脚本支持 --help 参数,方便快速了解用法
✅ 所有密钥通过环境变量传入,不硬编码
✅ 提供 README.md,记录安装步骤和使用示例
✅ 脚本有完整的错误处理和退出码
✅ 使用语义化版本号(v1.2.3)管理 Skill 版本
✅ 大型依赖文件加入 .gitignore(node_modules、__pycache__)
✅ 定期运行健康检查脚本,提前发现问题

❌ 常见坑点(一定要避开)

❌ SKILL.md 描述太泛,导致 AI 频繁误触发
❌ 脚本路径写死(用绝对路径),换机器就失效
❌ 忘记 chmod +x,脚本无法执行
❌ 多个 Skill 的 name 字段重复,互相覆盖
❌ 依赖版本不固定(package.json 用 ^),升级后行为改变
❌ 临时测试文件未清理,污染 Skill 目录
❌ 忘记处理 API 限流(rate limit),脚本崩溃没有重试逻辑

目录命名规范

# ✅ 正确命名(kebab-"hljs-keyword">case)
wechat-publisher
pdf-processor
data-query-tool

# ❌ 错误命名
WechatPublisher   # 驼峰
wechat_publisher  # 下划线
wechat publisher  # 含空格

八、快速参考卡片

# 安装新 Skill
cp -r my-skill/ .openclaw/skills/

# 验证结构
ls .openclaw/skills/my-skill/SKILL.md

# 更新 Skill(git 方式)
cd .openclaw/skills/my-skill &amp;&amp; git pull

# 修复权限
chmod +x .openclaw/skills/my-skill/scripts/*

# 修复 Node.js 依赖
cd .openclaw/skills/my-skill &amp;&amp; npm install

# 修复 Python 依赖
pip3 install -r .openclaw/skills/my-skill/requirements.txt

# 临时禁用 Skill(重命名前缀)
mv .openclaw/skills/my-skill .openclaw/skills/_my-skill

# 健康检查
bash .openclaw/skills/health-check.sh

 做一个有深度的技术人

历史精彩文章推荐:

从被动到主动:主观能动性的力量

复利(滚雪球)的魅力

基于“第一性原理”的思路工作

聊聊“晋升”到底该怎么做

万能方法之如何使用"MECE"分析法高效解决问题

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐