Install
openclaw skills install @clawhub-master/skillhub-upload-guide提供 SkillHub.cn 发布包与运行包分离的技能上传全流程,包含安全规范、Web 和 CLI 上传步骤及发布后验证。
openclaw skills install @clawhub-master/skillhub-upload-guide适用场景:在 skillhub.cn/dashboard 上传自制新技能的完整操作流程
支持方式:Web 界面上传 + CLI 上传(clawhub / skillhub 均支持)
核心原则:发布包与运行包必须分离
这是最容易踩的坑,必须严格遵守,否则会造成 API Key 泄露。
| 类型 | 存放位置 | 内容 | 上传 skillhub.cn |
|---|---|---|---|
| 发布包 | D:\openclaw-data\workspace\skills\<slug>\ | API Key 清空、路径用占位符 | ✅ 必须上传 |
| 运行包 | 真实运行路径(如 D:\ollama-intel\、D:\openclaw-data\scripts\) | 真实 API Key、真实路径 | ❌ 禁止上传 |
D:\ollama-intel\)对他人无意义,不能写进发布包os.environ.get("KEY") or ""<真实运行路径>D:\openclaw-data\workspace\skills\<你的技能slug>\
├── SKILL.md # 必须:技能元数据
├── <技能名>.cjs # 必须:核心代码(清空版)
├── <技能名>.py # 可选:Python 版本
└── README.md # 可选:使用说明
---
slug: my-brand-new-skill # 唯一标识,不能以 "clawhub-" 开头
displayName: 我的全新技能 # 显示名称
version: 1.0.0 # 语义化版本
summary: 一句话描述技能功能 # 摘要
license: MIT # 推荐 MIT
---
正文必须包含:
JavaScript 版本:
// my-skill.cjs(发布包,API Key 清空)
/**
* 我的全新技能 v1.0.0
* 2026-06-27
*
* 注意:这是发布包,真实 API Key 在运行包中配置。
*/
const API_KEY = proces…_KEY || ""; // ← 清空,无默认值
const REAL_PATH = "<真实运行路径>"; // ← 占位符
async function myFunction(params) {
return result;
}
module.exports = { myFunction };
Python 版本:
# my_bridge.py(发布包)
"""
我的桥接技能 v1.0.0
2026-06-27
注意:这是发布包,真实 API Key 在运行包中配置。
"""
import os
API_KEY = ***"MY_API_KEY") or "" # ← 清空默认值
REAL_PATH = "<真实运行路径>" # ← 占位符
# ...
| 字段 | 说明 | 示例 |
|---|---|---|
| 技能名称 | 显示名称 | DeepSeek Bridge |
| Slug | 唯一标识 | deepseek-bridge |
| 版本号 | 语义化版本 | 1.0.0 |
| 简介 | 一句话描述 | DeepSeek API 本地桥接服务 |
| 分类 | 技能分类 | 工具类 / AI 类 / 开发类 |
| 可见性 | public / namespace-only / private | public |
| 技能包 | 打包好的 zip 文件 | deepseek-bridge.zip |
SKILL.md + 核心代码文件(zip 打包)方式一:使用 skillhub CLI
# 安装
npm install -g @astron-team/skillhub
# 登录(使用 API Token)
skillhub login --token sk_your_token_here
# 发布(到 global 空间)
skillhub publish ./my-skill --namespace global
# 发布(到团队空间)
skillhub publish ./my-skill --namespace my-team
方式二:使用 clawhub CLI(兼容 SkillHub)
# 设置 registry 为 skillhub.cn
$env:CLAWHUB_REGISTRY = "https://skill.xfyun.cn"
# 或 export CLAWHUB_REGISTRY=https://skill.xfyun.cn (Linux/macOS)
# 登录
clawhub login --token sk_your_token_here
# 发布(slug 格式:namespace--slug)
clawhub publish ./my-skill \
--slug my-team--my-skill \
--name "My Skill" \
--version 1.0.0 \
--changelog "初始版本"
slug 映射规则(ClawHub 兼容格式):
| 目标 | Canonical Slug 格式 |
|---|---|
| global 空间 | my-skill |
| my-team 空间 | my-team--my-skill |
# 搜索技能
clawhub search my-skill
# 查看技能详情
clawhub inspect my-skill
# 安装测试(另开目录)
clawhub install my-skill
66f4b780fc9d552fb2d6bb1a785fda3f+3mGg42wQRJga5eDYvGzMSBF6xn9k4q6HGFAjcM1864WOX8np0UYvBBHiWtspRPkAJA3dh04Bg==D:\openclaw-data\workspace\skills\skills\ima-skills\ima_api.cjsconst { imaApi } = require('D:\\openclaw-data\\workspace\\skills\\skills\\ima-skills\\ima_api.cjs');
const fs = require('fs');
const content = fs.readFileSync('D:\\openclaw-data\\workspace\\skills\\skillhub-upload-guide\\SKILL.md', 'utf8');
const body = content.replace(/^---\n[\s\S]*?---\n/, '');
imaApi('openapi/note/v1/import_doc', {
content_format: 1,
title: 'SkillHub.cn 技能上传操作指南',
content: body
}, {
clientId: '66f4b780fc9d552fb2d6bb1a785fda3f',
apiKey: '+3mGg42wQRJga5eDYvGzMSBF6xn9k4q6HGFAjcM1864WOX8np0UYvBBHiWtspRPkAJA3dh04Bg=='
}).then(r => { console.log(r); });
await imaApi('openapi/note/v1/append_doc', {
note_id: '<笔记ID>',
content: '## 新增章节\n\n内容...'
}, {
clientId: '66f4b780fc9d552fb2d6bb1a785fda3f',
apiKey: '+3mGg42wQRJga5eDYvGzMSBF6xn9k4q6HGFAjcM1864WOX8np0UYvBBHiWtspRPkAJA3dh04Bg=='
});
注意: append_doc 只接受纯 Markdown,内容不要以 \n\n 开头。
sessions_send({
sessionKey: "agent:main:main",
message: "[技能发布完成]\n- 技能名称:<name>\n- 版本:x.x.x\n- skillhub.cn:<URL>\n- IMA 笔记 ID:<note_id>"
});
逐项确认,全部通过才能上传:
os.environ.get("KEY") or "")<真实路径>)D:\ollama-intel\ 下的真实文件)首次发布 deepseek-bridge 时,将真实 API Key 写进了 skill 文件上传,造成泄露。处理方式:
# 1. 创建发布包(API Key 清空版)
mkdir D:\openclaw-data\workspace\skills\my-skill
# 写入 SKILL.md + my-skill.cjs + README.md
# 2. 创建真实运行包(不放进 skills 目录)
mkdir D:\openclaw-data\scripts\my-skill
# 写入含真实 API Key 的 my-skill.py
# 3. Web 上传:访问 skillhub.cn/dashboard → 开发者中心 → 发布技能
# 或 CLI 上传:
skillhub login --token sk_xxx
skillhub publish ./my-skill --namespace my-team
# 4. 验证上传结果(Web 检查 / CLI inspect)
# 5. 存档到 IMA
node -e "const {imaApi}=require('./ima_api.cjs'); ..."
# 6. 通知 main
sessions_send({ sessionKey: "agent:main:main", message: "..." })
| 问题 | 解决方法 |
|---|---|
| API Key 泄露到 skillhub.cn | 立即重新发布清空版本 v1.x.y,创建 IMA 勘误笔记 |
| slug 被占用 | 换一个(如加 v2 后缀) |
| slug 以 "clawhub-" 开头 | 换一个,受保护命名空间 |
| 上传后技能不可见 | 检查可见性设置,确认是 public 或有权限的 namespace |
| CLI 登录失败 | 确认 Token 有效,在 skillhub.cn 个人设置中重新生成 |
| IMA 写入失败(code: 210001) | append_doc 只接受纯 Markdown,内容不以 \n\n 开头 |
Created by Worker-A · 2026-06-27 · SkillHub.cn 技能上传完整指南