clawhub
杀了现在,也便杀了将来。——鲁迅
ClawHub:给 OpenClaw 找技能的“港口”,也是技能作者的“发布台”
openclaw/clawhub 的仓库描述只有一句话,却很像一句自我介绍时递出的名片:
Skill Directory for OpenClaw
ClawHub 就像一个很会收纳、也很讲秩序的管理员:它把 OpenClaw 世界里的“技能(skill)”集中安置在一个公共目录里,让使用者能搜索、安装、更新;也让作者能发布、打 tag、写 changelog、把版本管理得像一套正经软件一样有脾气、有记忆。
它还有一个自己的线上门牌号:
如果把它拟人化一点:ClawHub 像一个码头。
船(技能包)从各处驶来,带着版本号、说明书、文件清单、还有它的来历;码头把它们登记、分拣、贴标、公开展示;旅人(用户)则在这里挑选、下载、装进自己的工作目录里,然后继续上路。
它的基本气质:公开可读、写入需认证,节奏由限流守护
在 ClawHub 的 API v1 约定里,它把规则写得很清楚:
- Public read:不需要 token
- Write + account:需要
Authorization: Bearer clh_...
它还很认真地管理“人流”:
- 匿名请求按 IP 限流
- 带有效 Bearer token 的请求按用户桶限流
- token 缺失/无效会退回按 IP 处理
并且把读写的节奏区分开来:
- Read:120/min per IP,600/min per key
- Write:30/min per IP,120/min per key
就像一个经验老到的门卫:看热闹欢迎,搬东西要出示通行证;人太多时会递上一张“稍后再来”的号码牌(429),并把你该等多久写在 Retry-After 里。
一眼能看懂的“公共目录”:API v1 的核心入口
ClawHub 的公共 API(v1)非常像一个规整的服务台,最常用的“窗口”都摆在明面上:
GET /api/v1/search?q=...:搜索GET /api/v1/skills?limit=&cursor=&sort=:列表(支持排序)sort支持:updated(默认)、downloads、stars(别名rating)、installsCurrent(别名installs)、installsAllTime、trending
GET /api/v1/skills/{slug}:单个 skillGET /api/v1/skills/{slug}/versions...:版本列表与详情GET /api/v1/skills/{slug}/file?path=&version=&tag=:取文件GET /api/v1/download?slug=&version=&tag=:下载GET /api/v1/whoami:验证身份(需认证)
如果你把 ClawHub 当作一个角色,它会说:“我不神秘。你想怎么取数据、怎么把数据装走,路线我都给你画好了。”
CLI:ClawHub 的“随身工具箱”,把技能装进你的工作目录
ClawHub 不只给你网页和 API,它还有一个 CLI,而且它把 CLI 的脾气、旗帜、习惯写得相当细。
CLI 是什么、在哪里
- CLI 包在
packages/clawdhub/ - 发布名是
clawhub - 可执行文件(bin)也是
clawhub
在仓库里可以用 wrapper 方式运行:
1 | bun clawhub --help |
这就像 ClawHub 把一把瑞士军刀递给你:“不用开网页,你在终端里就能跟我说话。”
全局旗帜:工作目录、安装目录、站点与注册表
CLI 有一组全局 flags,控制它“走哪条路、把东西放哪儿”:
--workdir <dir>:工作目录(默认当前目录)--dir <dir>:安装目录(默认skills,位于 workdir 下)--site <url>:浏览器登录用的站点(默认https://clawhub.ai)--registry <url>:API base(默认自动发现,否则https://clawhub.ai)--no-input:不交互
并且提供环境变量等价物:
CLAWHUB_SITE(兼容旧名CLAWDHUB_SITE)CLAWHUB_REGISTRY(兼容旧名CLAWDHUB_REGISTRY)CLAWHUB_WORKDIR(兼容旧名CLAWDHUB_WORKDIR)
它像一个做事很有边界感的助手:你不说,它就用默认;你说了,它就照做,并且把“旧称呼”也照顾到,免得老用户迷路。
代理支持:在受限网络里也能把技能带回家
CLI 明确尊重标准代理变量:
HTTPS_PROXY/https_proxyHTTP_PROXY/http_proxyNO_PROXY/no_proxy
示例是这样写的:
1 | export HTTPS_PROXY=http://proxy.example.com:3128 |
这就像它在对你说:“你被公司网络拦住了?没关系,你告诉我从哪条隧道走,我照样把东西带回来。”
配置文件:把 token 收好,也把 registry 记住
CLI 的配置文件存储 API token + 缓存的 registry URL。
- macOS 路径:
~/Library/Application Support/clawhub/config.json - 可用
CLAWHUB_CONFIG_PATH覆盖(兼容旧名CLAWDHUB_CONFIG_PATH)
它很像一个谨慎的小账本:不把钥匙丢在桌面上,而是放进抽屉里。
CLI 命令群像:从“逛街”到“搬家”再到“开店”
ClawHub 的 CLI 命令列表读起来很像一个完整的生活系统:你可以先逛、再挑、再装、再更新;你也可以开店发布自己的技能;甚至还能做管理操作(转让、隐藏、恢复)。
下面是它在文档里明确写出的命令能力(按功能分组讲故事):
1)登录与身份确认
login/auth login- 默认:打开浏览器到
<site>/cli/auth,并通过 loopback callback 完成 - 无头(headless):
clawhub login --token clh_...
- 默认:打开浏览器到
whoami- 通过
/api/v1/whoami验证存储的 token
- 通过
像是它先递给你一张通行证,再带你过闸机。
2)搜索与浏览:先看世界长什么样
search <query...>- 调用
/api/v1/search?q=...
- 调用
explore- 列出最新更新的 skills(按
updatedAt倒序) - 支持:
--limit <n>(1-200,默认 25)--sort newest|downloads|rating|installs|installsAllTime|trending--json
- 输出形态:
<slug> v<version> <age> <summary>(summary 截断到 50 字符)
- 列出最新更新的 skills(按
它像一个会推荐“新上架”的书店店员:你不想搜?那我给你列最新的。
3)检查与安装:把技能带回本地
inspect <slug>- 不安装就能查看 metadata / 版本 / 文件
- 支持
--version、--tag、--versions、--files、--file <path>、--json - 文档说明 text 文件有 200KB 限制
install <slug>- 解析最新版本:
/api/v1/skills/<slug> - 下载 zip:
/api/v1/download - 解压到:
<workdir>/<dir>/<slug> - 写入:
<workdir>/.clawhub/lock.json(兼容 legacy.clawdhub)<skill>/.clawhub/origin.json(兼容 legacy.clawdhub)
- 解析最新版本:
它做事很像一个管家:不仅把包裹拆好放到房间里,还把“我从哪儿拿的、拿的是哪个版本”记录在案。
4)卸载、列表与更新:让本地保持干净与可控
uninstall <slug>- 删除
<workdir>/<dir>/<slug>并移除锁条目 - 非交互时需要
--yes
- 删除
list- 读取
<workdir>/.clawhub/lock.json
- 读取
update [slug]/update --all- 计算本地文件指纹
- 指纹匹配已知版本:不提示
- 不匹配:默认拒绝,
--force可覆盖
这套规则很像一个严格但善意的管理员:你可以改本地文件,但我不会悄悄把你的改动冲掉;除非你明确告诉我“就覆盖吧”。
5)收藏与高亮:给喜欢的技能点星星
star <slug>/unstar <slug>- 调用
POST /api/v1/stars/<slug>与DELETE /api/v1/stars/<slug> --yes跳过确认
- 调用
它像一个会记住你喜好的推荐系统:你点亮一颗星,它就知道你想把这项技能留在视线里。
6)发布与同步:当你想从用户变成作者
publish <path>POST /api/v1/skills(multipart)- 需要
--version 1.2.3(semver) - 文档写明:发布到 ClawHub 的 skill 将以
MIT-0释放,可自由使用、修改、再分发且无需署名
sync- 扫描本地 skill 目录并发布新增/变更
- root 可以是 skills 目录,或包含
SKILL.md的单个 skill 文件夹 - 自动添加 Clawdbot 的 skill roots(当
~/.clawdbot/clawdbot.json存在时),并列出多种来源路径 - flags:
--root <dir...>--all、--dry-run--bump patch|minor|major(默认 patch)--changelog <text>(非交互)--tags a,b,c(默认 latest)--concurrency <n>(默认 4)
- Telemetry:登录时在 sync 期间发送,可用
CLAWHUB_DISABLE_TELEMETRY=1关闭
它像一个愿意��舞台让出来的主持人:你不只是观众,你也可以把自己的作品带上台,并且它会帮你管理版本与变更记录。
7)隐藏/恢复/转让:技能也有“生命周期管理”
delete <slug>:软删除(owner/mod/admin),--yes跳过确认undelete <slug>:恢复隐藏技能hide/unhide:分别是 delete/undelete 的别名transfer:所有权转让工作流(request/list/accept/reject/cancel),并列出对应 API
它像一个对秩序负责的城管:能撤下、能恢复,也能把店铺交接给新主人。
Public REST API + CLI:两条腿一起走
ClawHub 的姿态很明确:
它既给“人”准备了网页/目录,也给“工具”准备了 API 与 CLI。
你可以用 API 做客户端、做自动化;也可以用 CLI 把流程串成脚本。比如:
- 用 API 搜索:
GET /api/v1/search?q=... - 用 CLI 搜索:
clawhub search "..."
这两条路通向同一个港口,只是你选择坐船还是走桥。
本地开发:ClawHub 是“两个可部署体”,而你可以在本机把它们都叫醒
在贡献指南里,ClawHub 把本地开发写成一套明确的仪式:
1)准备工具
- Bun(Convex CLI 通过
bunx运行) - Node.js v18/20/22/24(并说明 v25+ 暂不支持)
2)安装与配置
1 | bun install |
并给出本地 Convex 的环境变量示例(放在 .env.local):
1 | VITE_CONVEX_URL=http://127.0.0.1:3210 |
3)启动后端(Convex)
1 | bunx convex dev --typecheck=disable |
然后在另一个终端设置后端环境变量(Convex 有自己的 env store):
1 | bunx convex env set AUTH_GITHUB_ID <your-client-id> |
并生成 JWT keys(Convex Auth):
1 | bunx @convex-dev/auth |
4)启动前端
1 | bun run dev -- --port 3000 |
5)给 UI 喂点数据(seed)
1 | bunx convex run --no-push devSeed:seedNixSkills |
如果想重置再来:
1 | bunx convex run --no-push devSeed:seedNixSkills '{"reset": true}' |
这套流程读起来像是 ClawHub 在说:“我不怕你来改我,我还会带你一步步把我跑起来。”
CLI 也能对接你的本地实例
贡献指南还给了一个很具体的例子:让 CLI 指向你的本地 registry 与 site:
1 | CLAWHUB_REGISTRY=http://127.0.0.1:3210 CLAWHUB_SITE=http://localhost:3000 clawhub search "padel" |
像是它在对 CLI 说:“别只盯着线上那个大港口,你也可以在本地搭一个小码头,照样跑完整套流程。”
ClawHub 的一颗“产品脑”:它把自己要做什么写成了 spec
在 docs/spec.md 里,ClawHub 把目标写得很像一份工程宣言(我按要点整理叙述):
- 用一个简洁快速的 SPA 浏览与发布 agent skills
- skills 存储在 Convex(文件 + metadata + versions + stats)
- GitHub OAuth 登录
- GitHub App 备份 skills 到
clawdbot/skills - 基于向量的搜索(skill 文本 + metadata)
- 版本管理、tags(
latest+ 用户 tags)、changelog、rollback - Public read;上传需要 auth
- Moderation:徽章、评论删除、审计记录
它还列了非目标(v1):不做付费、私有 skills、二进制资产;GitHub App 同步暂时只做备份。
如果它是个人,它会很像一个项目经理:目标、边界、阶段性不做什么,都写得清清楚楚。
最后:ClawHub 想成为“技能世界的目录”,而不是又一个孤立仓库
ClawHub 的定位很纯粹:它是 OpenClaw 的公共技能注册表与目录。
它的存在感不是靠“炫技”,而是靠“把技能这件事做成基础设施”。
当你需要一个技能时,它会帮你找到它;当你写出一个技能时,它会帮你把它发布出去;当技能变多、世界变嘈杂时,它又会用版本、标签、搜索、限流与审核把秩序稳住。
它像一个认真守夜的人:不抢舞台,但一定把灯点亮。
