| summary | Local setup + CLI smoke: login, search, install, publish, sync. | ||
|---|---|---|---|
| read_when |
|
- Bun
- Convex CLI (
bunx convex ...) - GitHub OAuth App (for login)
- OpenAI key (for embeddings/search)
bun install
cp .env.local.example .env.local
# terminal A
bun run dev
# terminal B
bunx convex devFill in .env.local:
AUTH_GITHUB_IDAUTH_GITHUB_SECRETVITE_CONVEX_URLVITE_CONVEX_SITE_URLCONVEX_SITE_URL(same asVITE_CONVEX_SITE_URL)OPENAI_API_KEY
Generate Convex Auth keys for your deployment:
bunx auth --deployment-name <deployment> --web-server-url http://localhost:3000Then paste the printed JWT_PRIVATE_KEY + JWKS into .env.local (and ensure the deployment got them too).
From this repo:
bun clawhub --help
bun clawhub login
bun clawhub whoami
bun clawhub search gif --limit 5Install a skill into ./skills/<slug> (if Clawdbot is configured, installs into that workspace instead):
bun clawhub install <slug>
bun clawhub list
bun clawhub uninstall <slug> --yesYou can also install into any folder:
bun clawhub install <slug> --workdir /tmp/clawhub-demo --dir skillsUpdate:
bun clawhub update --allCreate a folder containing SKILL.md (required) plus any supporting text files:
mkdir -p /tmp/clawhub-skill-demo && cd /tmp/clawhub-skill-demo
cat > SKILL.md <<'EOF'
---
name: Demo Skill
description: Demo skill for local testing
---
# Demo Skill
Hello.
EOFPublish:
bun clawhub skill publish . \
--slug clawhub-demo-$(date +%s) \
--name "Demo $(date +%s)" \
--version 1.0.0 \
--tags latest \
--changelog "Initial release"Create a plugin folder with a package.json that includes the required OpenClaw
publish metadata:
mkdir -p /tmp/clawhub-plugin-demo && cd /tmp/clawhub-plugin-demo
cat > package.json <<'EOF'
{
"name": "@demo/openclaw-plugin-demo",
"version": "0.1.0",
"type": "module",
"openclaw": {
"extensions": ["./index.ts"],
"hostTargets": ["darwin-arm64"],
"environment": {},
"compat": {
"pluginApi": ">=2026.3.24-beta.2"
},
"build": {
"openclawVersion": "2026.3.24-beta.2"
}
}
}
EOFPreview the resolved publish payload first:
bun clawhub package publish . --family code-plugin --dry-runThen publish:
bun clawhub package publish . --family code-pluginNotes:
openclaw.compat.pluginApiandopenclaw.build.openclawVersionare required forcode-pluginpublishes.package.json.versiondoes not replace either required OpenClaw field.openclaw.hostTargetsandopenclaw.environmentare optional compatibility metadata. Include them only when they add useful install context.- Add
openclaw.compat.minGatewayVersionandopenclaw.build.pluginSdkVersionwhen you want to expose fuller compatibility/build metadata, but they are not required for a successful publish.
sync scans for local skill folders and publishes the ones that aren’t “synced” yet.
bun clawhub syncDry run + non-interactive:
bun clawhub sync --all --dry-run --no-input