ClawHub 同步工具
将本地开发的 Skills 批量同步到 ClawHub 平台。支持读取 .gitignore 智能忽略敏感文件和临时文件。
⚠️ ClawHub 许可证说明
ClawHub 平台强制使用 MIT-0 许可证(无需署名,允许商业使用)。
- - MIT 许可证的 skill 可以同步
- CC-BY-NC-SA-4.0 等限制性许可证与 MIT-0 冲突,不应同步
详见 ClawHub Skill Format
前置条件
SKILL.md frontmatter 需包含必要字段:
CODEBLOCK0
使用方式
1. 登录 ClawHub(首次使用)
CODEBLOCK1
2. 验证发布内容
执行 dry-run 检查配置是否正确,不实际发布:
CODEBLOCK2
3. 同步技能
同步单个技能:
CODEBLOCK3
同步所有技能:
CODEBLOCK4
注意:--all 会受 skills/clawhub-sync/config/sync-allowlist.yaml 约束。如果存在白名单文件,只同步其中列出的 skill。
交互式选择同步:
用户可以指定要同步的技能列表,我会逐个执行同步命令。
单个 Skill 同步工作流
当需要同步指定的 skill(而非全部)时,使用此工作流。
前置检查
- 1. 检查登录状态
CODEBLOCK5
- 2. 检查白名单
- 读取
skills/clawhub-sync/config/sync-allowlist.yaml
- 确认目标 skill 在白名单中(未被
# 注释)
- 3. 检查许可证
- 读取目标 skill 的 SKILL.md frontmatter 中的
license 字段
- 只有 MIT 许可证的 skill 才能同步
- CC-BY-NC-SA-4.0 等限制性许可证不应同步
版本检测
比较两个版本号:
| 来源 | 位置 | 格式 |
|---|
| 新版本 | INLINECODE6 frontmatter 的 INLINECODE7 | INLINECODE8 |
| 已记录版本 |
skills/clawhub-sync/config/sync-records.yaml 中的
version |
"1.1.0" |
版本比较逻辑(语义化版本):
CODEBLOCK6
执行同步
步骤 1:准备发布目录
CODEBLOCK7
步骤 2:执行发布(使用 publish 命令)
CODEBLOCK8
为什么用 publish 而不是 sync?
- -
clawhub sync 会扫描所有目录的 skills,可能遇到 slug 冲突 - INLINECODE15 只发布指定路径的单个 skill,更精确
步骤 3:更新同步记录
更新 skills/clawhub-sync/config/sync-records.yaml:
CODEBLOCK9
示例:同步 git-batch-commit
CODEBLOCK10
失败处理
- - 同步失败时记录 INLINECODE17
- 不重试,让用户决定后续操作
- 记录失败原因到 INLINECODE18
同步策略
版本号处理
- - 从技能的
CHANGELOG.md 第一行提取版本号 - 格式要求: INLINECODE20
- 自动处理
v 前缀(v1.0.0 → 1.0.0)
自动字段
| 字段 | 处理方式 |
|---|
| INLINECODE24 | 自动设置为 GitHub 仓库地址 |
| INLINECODE25 |
从 CHANGELOG.md 提取(如 SKILL.md 中未指定) |
同步范围控制(白名单机制)
配置文件: skills/clawhub-sync/config/sync-allowlist.yaml(skill 自包含)
优先级:白名单 > 默认忽略规则
- - 如果
skills/clawhub-sync/config/sync-allowlist.yaml 存在:只同步文件中列出的 skill - 如果
skills/clawhub-sync/config/sync-allowlist.yaml 不存在:使用默认忽略规则(忽略 test/、private-skills/、node_modules/)
配置格式:
CODEBLOCK11
配置文件: skills/clawhub-sync/sync-allowlist.yaml(skill 自包含)
文件过滤规则
发布时会自动应用 .gitignore 过滤规则,确保敏感文件和临时文件不会被上传。
双重过滤机制:
- 1. 项目根目录 .gitignore - 自动检测 Git 仓库根目录的 INLINECODE30
- 技能内部 .gitignore - 如果技能目录有自己的
.gitignore,会额外应用
默认排除(始终生效):
- -
.git/ - Git 目录 - INLINECODE33 - Node.js 依赖
- INLINECODE34 - Python 缓存
- INLINECODE35 - macOS 系统文件
同步流程
每次同步前,会自动:
- 1. 创建临时目录 - 在
/tmp/clawhub-publish-<skill-name> 创建临时目录 - 复制过滤后的文件 - 使用 rsync 遵循 .gitignore 规则复制文件
- 发布到 ClawHub - 从临时目录执行发布命令
- 清理临时目录 - 发布完成后自动清理
手动准备发布目录
如需手动检查将要发布的文件:
CODEBLOCK12
安全最佳实践
发布前检查清单
- - [ ] 确认
.gitignore 包含所有敏感文件模式 - [ ] 使用
prepare-publish.sh 检查将要发布的文件 - [ ] 不要在技能中包含 API keys、密码等
- [ ] 使用
.env.example 代替 .env 文件
常见敏感文件
- -
.env - 环境变量(使用 .env.example 作为模板) - INLINECODE43 - 配置文件(使用
config.example.yaml 作为模板) - INLINECODE45 ,
*.sqlite - 数据库文件 - INLINECODE47 - 日志目录
- INLINECODE48 ,
output/ - 输出目录
修复已发布的技能
如果发现已发布的技能包含敏感信息:
- 1. 立即更新 - 从技能目录中删除敏感文件
- 更新 .gitignore - 确保未来不会再次包含
- 重新发布 - 使用
clawnet publish 更新 ClawHub 上的技能 - 联系 ClawHub 支持 - 如果需要删除旧版本
重要提醒:
- - ClawHub 是公开平台:发布的技能任何人都可以访问
- 不要包含客户信息:案例文件、沟通记录等应排除
- 不要包含凭证:API keys、tokens 等应使用环境变量
常见问题
版本号未更新?
检查 CHANGELOG.md 格式:
CODEBLOCK13
同步失败?
- 1. 运行
clawhub sync --dry-run 检查配置 - 确认 SKILL.md frontmatter 格式正确
- 检查登录状态: INLINECODE52
输入/输出
输入
- - 必需:本地开发的 skill 目录
- 可选:指定技能名称列表、白名单配置
输出
- - 同步结果报告(成功/失败列表)
- 错误信息(如有)
同步记录
每次同步后,会更新 config/sync-records.yaml 记录文件,便于溯源和增量同步。
记录字段
| 字段 | 说明 |
|---|
| INLINECODE54 | 同步时的版本号 |
| INLINECODE55 |
最后同步时间 (ISO 8601) |
|
git_hash | 同步时的 commit hash |
|
status |
synced /
pending /
failed |
|
changelog_summary | 变更摘要 |
|
url | ClawHub 发布地址 |
|
publish_id | ClawHub 内部 ID |
记录示例
CODEBLOCK14
用途
- 1. 增量同步:只同步
status: pending 或版本更新的 skill - 溯源:通过
git_hash 追溯发布时的代码状态 - 快速访问:通过
url 直接访问 ClawHub 上的 skill 页面
ClawHub 同步工具
将本地开发的 Skills 批量同步到 ClawHub 平台。支持读取 .gitignore 智能忽略敏感文件和临时文件。
⚠️ ClawHub 许可证说明
ClawHub 平台强制使用 MIT-0 许可证(无需署名,允许商业使用)。
- - MIT 许可证的 skill 可以同步
- CC-BY-NC-SA-4.0 等限制性许可证与 MIT-0 冲突,不应同步
详见 ClawHub Skill Format
前置条件
SKILL.md frontmatter 需包含必要字段:
yaml
name: skill-name
description: 技能描述
version: 1.0.0 # 推荐但不强制
homepage: https://github.com/cat-xierluo/legal-skills # 自动设置
使用方式
1. 登录 ClawHub(首次使用)
bash
clawhub login
2. 验证发布内容
执行 dry-run 检查配置是否正确,不实际发布:
bash
clawhub sync --dry-run
3. 同步技能
同步单个技能:
bash
clawhub sync skills/
同步所有技能:
bash
clawhub sync --all
注意:--all 会受 skills/clawhub-sync/config/sync-allowlist.yaml 约束。如果存在白名单文件,只同步其中列出的 skill。
交互式选择同步:
用户可以指定要同步的技能列表,我会逐个执行同步命令。
单个 Skill 同步工作流
当需要同步指定的 skill(而非全部)时,使用此工作流。
前置检查
- 1. 检查登录状态
bash
clawhub whoami
- 2. 检查白名单
- 读取 skills/clawhub-sync/config/sync-allowlist.yaml
- 确认目标 skill 在白名单中(未被 # 注释)
- 3. 检查许可证
- 读取目标 skill 的 SKILL.md frontmatter 中的 license 字段
- 只有 MIT 许可证的 skill 才能同步
- CC-BY-NC-SA-4.0 等限制性许可证不应同步
版本检测
比较两个版本号:
| 来源 | 位置 | 格式 |
|---|
| 新版本 | skills/<skill-name>/SKILL.md frontmatter 的 version | 1.2.0 |
| 已记录版本 |
skills/clawhub-sync/config/sync-records.yaml 中的 version | 1.1.0 |
版本比较逻辑(语义化版本):
newversion > recordedversion → 需要同步
newversion == recordedversion → 跳过(无变化)
newversion < recordedversion → 警告(版本回退?)
recorded_version 为 null → 需要同步(首次发布)
执行同步
步骤 1:准备发布目录
bash
bash skills/clawhub-sync/scripts/prepare-publish.sh skills/
步骤 2:执行发布(使用 publish 命令)
bash
clawhub publish /tmp/clawhub-publish- \
--version <新版本号> \
--changelog <变更说明>
为什么用 publish 而不是 sync?
- - clawhub sync 会扫描所有目录的 skills,可能遇到 slug 冲突
- clawhub publish 只发布指定路径的单个 skill,更精确
步骤 3:更新同步记录
更新 skills/clawhub-sync/config/sync-records.yaml:
yaml
:
version: <新版本号>
last_sync:
git_hash: <当前 commit hash>
status: synced
changelog_summary: <变更说明>
url: https://clawhub.ai/skills/
publish_id: <从命令输出获取>
示例:同步 git-batch-commit
bash
1. 检查白名单
grep git-batch-commit: skills/clawhub-sync/config/sync-allowlist.yaml
输出:git-batch-commit: # MIT
2. 比较版本
SKILL.md: version: 1.2.0
sync-records.yaml: version: 1.1.0
结论:1.2.0 > 1.1.0,需要同步
3. 准备发布
bash skills/clawhub-sync/scripts/prepare-publish.sh skills/git-batch-commit
4. 执行发布(使用 publish 命令)
clawhub publish /tmp/clawhub-publish-git-batch-commit \
--version 1.2.0 \
--changelog 添加 ClawHub 同步工作流
5. 更新记录
编辑 sync-records.yaml,更新 git-batch-commit 条目
失败处理
- - 同步失败时记录 status: failed
- 不重试,让用户决定后续操作
- 记录失败原因到 changelog_summary
同步策略
版本号处理
- - 从技能的 CHANGELOG.md 第一行提取版本号
- 格式要求:## [x.y.z] - YYYY-MM-DD
- 自动处理 v 前缀(v1.0.0 → 1.0.0)
自动字段
| 字段 | 处理方式 |
|---|
| homepage | 自动设置为 GitHub 仓库地址 |
| version |
从 CHANGELOG.md 提取(如 SKILL.md 中未指定) |
同步范围控制(白名单机制)
配置文件: skills/clawhub-sync/config/sync-allowlist.yaml(skill 自包含)
优先级:白名单 > 默认忽略规则
- - 如果 skills/clawhub-sync/config/sync-allowlist.yaml 存在:只同步文件中列出的 skill
- 如果 skills/clawhub-sync/config/sync-allowlist.yaml 不存在:使用默认忽略规则(忽略 test/、private-skills/、node_modules/)
配置格式:
yaml
legal-qa-extractor: # 带 # 表示不发布
legal-qa-extractor: # 无 # 表示发布
litigation-analysis:
配置文件: skills/clawhub-sync/sync-allowlist.yaml(skill 自包含)
文件过滤规则
发布时会自动应用 .gitignore 过滤规则,确保敏感文件和临时文件不会被上传。
双重过滤机制:
- 1. 项目根目录 .gitignore - 自动检测 Git 仓库根目录的 .gitignore
- 技能内部 .gitignore - 如果技能目录有自己的 .gitignore,会额外应用
默认排除(始终生效):
- - .git/ - Git 目录
- nodemodules/ - Node.js 依赖
- pycache/ - Python 缓存
- .DSStore - macOS 系统文件
同步流程
每次同步前,会自动:
- 1. 创建临时目录 - 在 /tmp/clawhub-publish- 创建临时目录
- 复制过滤后的文件 - 使用 rsync 遵循 .gitignore 规则复制文件
- 发布到 ClawHub - 从临时目录执行发布命令
- 清理临时目录 - 发布完成后自动清理
手动准备发布目录
如需手动检查将要发布的文件:
bash
准备发布目录(不实际发布)
bash skills/clawhub-sync/scripts/prepare-publish.sh skills/trademark-assistant
检查临时目录内容
ls -la /tmp/clawhub-publish-trademark-assistant/
安全最佳实践
发布前检查清单
- - [ ] 确认 .gitignore 包含所有敏感文件模式
- [ ] 使用 prepare-publish.sh 检查将要发布的文件
- [ ] 不要在技能中包含 API keys、密码等
- [ ] 使用 .env.example 代替 .env 文件
常见敏感文件
- - .env - 环境变量(使用 .env.example 作为模板)
- config.yaml - 配置文件(使用 config.example.yaml 作为模板)
- .db, .sqlite - 数据库文件
- logs/ - 日志目录