Install
openclaw skills install @mc0571/skill-releaseopenclaw skills install @mc0571/skill-release帮助用户把一个或一组本地 Skill 安全地发布到腾讯 SkillHub 或 ClawHub,并在需要时配置可审计的 CI/CD 流程。
SKILL.md。skills/<skill> 与 skills/<collection>/<skill>,不做任意深度递归。配置或执行前确认一种模式:
选择变更自动发布时,一次性确认目标平台、Skill 根目录、监听分支、发布者、统一版本来源、审批策略和失败策略。配置成功表示用户对该范围内未来运行作出持久授权。模板示例默认设置 GitHub Environment 审批;已有仓库的实际 workflow 应按其明确授权合同说明,不能假定 Environment 存在。具体模板与非技术用户配置步骤见 GitHub Actions 发布指南。
本地读取、格式检查和 dry-run 可以直接执行。以下动作需要用户明确授权;如果当前请求已经明确要求执行该动作,仍要在执行前报告目标平台和写入范围:
必须遵守:
SKILLHUB_KEY 读取;ClawHub Token 只从 CLAWHUB_TOKEN 读取。两者不能混用。echo、set -x 或调试输出泄露 Token;报告中只写“已配置”或“未配置”。确认 SKILL.md 位于目标目录根部,并按 YAML 解析 frontmatter。两平台共同检查:
.git、缓存或临时文件当成发布内容。独立手动发布到 Tencent SkillHub 时,目标至少要有:
slug:kebab-case,长度 2–128,且在 SkillHub 上全局唯一。version:合法 SemVer,例如 1.0.0。displayName:对外显示名称。ClawHub Skill 至少要有 SKILL.md;推荐 name 与父目录一致、使用小写字母/数字/连字符,description 作为目录摘要,并声明实际需要的环境变量、命令和权限。发布时必须显式确认 slug,不能把目录名或内部 name 自动当成远端条目身份。
CI/CD 使用统一显式 SemVer:本仓库 metadata.version 是版本源,两个平台收到同一版本;分发文件变化而版本未递增时停止。ClawHub-only 的手动发布可使用平台自动 patch,但不能把这种行为带入已选择统一版本的自动流程。
本仓库 CI 在临时发布 bundle 中由目录名生成 SkillHub slug、由 metadata.version 生成顶层 version、由 SKILL.md 首个 H1 生成 displayName;不要把这些派生字段复制到源 Skill。
不要把本仓库 Codex Skill 的 name/description 元数据误当成 Tencent SkillHub 的 slug/displayName;ClawHub 则应保留合法的 name/description,再用 CLI 参数覆盖展示名或 slug。发现必填项、版本、slug、许可或安全问题时停止,不调用正式发布接口。
检查 CLI:
command -v skillhub && skillhub --version
CLI 缺失时,展示官方安装命令并征得执行许可:
curl -fsSL https://skillhub.cn/install/install.sh | bash -s -- --cli-only
SKILLHUB_KEY 未配置时,读取 SkillHub 发布事实 的“身份、认证与 Token”。先问用户是在本机终端发布还是配置 GitHub Actions,再一次只给一个操作:引导完成网页注册、实名认证、API Token 创建,以及隐藏输入或 GitHub Secret 配置。团队发布改用已完成团队认证的团队密钥。不要只说“自行配置”,也不要让用户把 Token 粘贴到对话或命令参数文本中。
登录并校验身份:
: "${SKILLHUB_KEY:?请先设置 SKILLHUB_KEY}"
SKILLHUB_HOST="${SKILLHUB_HOST:-https://api.skillhub.cn}"
skillhub login --key "$SKILLHUB_KEY" --host "$SKILLHUB_HOST"
skillhub auth whoami
whoami 失败时停止发布。遇到 403 时保留原始错误,根据个人实名认证、团队认证或团队成员权限逐项排查,不要一律猜成实名认证失败。
只有当前 CLI 明确不支持 skillhub login --key 时,才兼容旧命令 skillhub auth login --token "$SKILLHUB_KEY" --host "$SKILLHUB_HOST"。
检查 CLI:
command -v clawhub && clawhub --help
clawhub --cli-version
CLI 缺失时,展示安装命令并征得执行许可:
npm i -g clawhub
# 或:pnpm add -g clawhub
交互环境使用 GitHub OAuth:
clawhub login
clawhub whoami
无头环境使用 ClawHub 网页端生成的 Token:
: "${CLAWHUB_TOKEN:?请先设置 CLAWHUB_TOKEN}"
clawhub login --token "$CLAWHUB_TOKEN"
clawhub whoami
GitHub 登录只用于网页身份认证;CLAWHUB_TOKEN 必须是 ClawHub 签发的 Token,不能使用 GitHub Token。非技术用户在本机优先使用 clawhub login,让浏览器自动完成登录,不要求手工管理 Token;只有无头环境或 CI 才按 ClawHub 发布事实 逐步配置 Token。个人名下发布时省略 --owner;发布到组织 publisher 前,确认当前账号已接受该组织的 Publisher、Admin 或 Owner 邀请。缺少权限时停止并引导组织 owner/admin 授权。
clawhub whoami 失败或返回账号与用户预期不符时立即停止,不执行正式发布。保留 401 / 403 原始错误,分别按 Token 状态和组织邀请排查,不要用 dry-run 成功代替身份或权限检查。
skillhub publish "$SKILL_PATH" --host "$SKILLHUB_HOST" --dry-run
Tencent 的 dry-run 只做本地 metadata 与打包检查,不证明 slug 全局可用,也不证明安全或人工审核会通过。
现代 CLI 使用:
clawhub skill publish "$SKILL_PATH" --dry-run --json
如果当前 CLI 只有旧别名,才兼容 clawhub publish "$SKILL_PATH" --dry-run。ClawHub dry-run 不上传内容;它会解析本地 bundle,并在 JSON 可用时输出机器可读结果。需要发布多个目录且用户明确授权批量同步时,才考虑:
先按预期 publisher 作用域检查 clawhub inspect "@$CLAWHUB_PUBLISHER/$CLAWHUB_SLUG" --json。更新时远端条目必须属于预期 publisher;其他 publisher 下的同名 slug 是独立命名空间,不构成本目标的冲突。inspect 返回 404 本身不能证明目标不存在;只有经验证的 publisher 才能依赖服务端正式发布时按 publisher+slug 原子检查创建或更新。归属校验通过后,更新版本须高于该 publisher 条目的公开最新版本。
clawhub sync --root "$SKILLS_ROOT" --all --dry-run --json
在用户授权后执行:
skillhub publish "$SKILL_PATH" \
--host "$SKILLHUB_HOST" \
--changelog "$CHANGELOG"
保持 slug 不变并递增 version;收到 pending_review 时,只能报告“已提交,等待审核”。平台未返回 URL 时,提示用户从个人中心查看,不要自行拼接详情 URL。
先确定 CLAWHUB_SLUG、CLAWHUB_NAME 和 VERSION,再执行:
clawhub skill publish "$SKILL_PATH" \
--slug "$CLAWHUB_SLUG" \
--name "$CLAWHUB_NAME" \
--version "$VERSION" \
--changelog "$CHANGELOG"
只有用户要求组织发布且已确认权限时,才加入 --owner "$CLAWHUB_OWNER";只有用户明确要求标签时才加入 --tags。ClawHub 新 Skill 默认从 1.0.0 开始,内容变更通常自动递增 patch;CI 为可复现发布时优先显式传入版本。
只有用户要求自动化或持续交付时才修改 CI 配置。读取 GitHub Actions 发布指南,区分本仓库由 artifact ledger 与 scripts/ 驱动的 workflow 和可复用的通用资产模板;模板需要针对目标仓库配置,不与本仓库实现等同。遵守:
assets/github-actions/ 下通用检测器、ClawHub 目标辅助脚本、SkillHub 结果投影 filter 和 workflow 模板,并配置新建/更新目标。CLAWHUB_PUBLISHER;组织发布时 CLAWHUB_OWNER 与其相同,个人发布留空。通用资产模板另需为每条路径配置 new/update;本仓库 workflow 以目录名生成裸 slug,并在 publisher 命名空间内 inspect/校验。Tencent SkillHub 按本仓库目录名先解析和发布,仅在平台明确拒绝该 slug 已被占用时才尝试 <目录名>-mc;身份校验和回退条件见 GitHub Actions 发布指南。PyYAML==6.0.3 安装;双市场共享检测只校验共同版本规则,Tencent 专属顶层 version 交给 Tencent dry-run 阻断。max-parallel: 1 并在首个失败后停止;Tencent 与 ClawHub job 相互独立。@main,不自动创建 Tag、Release、Environment、Secret 或保护规则。main push 中只发布新增或版本递增的 Skill,不回填历史资产。workflow_dispatch 仅接受当前 main HEAD;可用 scope=changed 选择变更,或用 scope=all 和 skill_name 重试当前 Skill。全量快照、Tencent 首发前提与 404 核实、版本跳过规则见 GitHub Actions 发布指南。Tencent 发布前会跳过已被 origin/main 较高版本取代或已删除的目标;取消 workflow 会停止发布,最终报告仍会运行。command not found: skillhub:重新加载 PATH,或检查 ~/.local/bin/skillhub。401 invalid api key:重新创建 SkillHub Token 并更新 SKILLHUB_KEY。403:保留原始错误;个人账号检查实名认证,团队账号检查团队认证和成员权限,按网页提示完成对应步骤后重试。409 / slug 冲突:换用全局唯一 slug。429:等待限频窗口结束,不循环重放。command not found: clawhub:安装或升级 npm/pnpm CLI。CLAWHUB_TOKEN 执行 clawhub login --token。--owner;新组织可创建 publisher,已有组织由 owner/admin 在 Settings 邀请当前账号为 Publisher、Admin 或 Owner;不要使用未经授权的 --owner。name、description、版本和 metadata.openclaw 声明。对每个平台分别报告:
始终明确区分“本地预检通过”“已提交审核”和“审核后公开”。