- skill-publish.yml: Publish skills via tag push or workflow dispatch
- package-publish.yml: Publish plugins with PR dry-run validation
- clawhub-ci.yml: CI validation for skills and plugins
- README.md: Workflow documentation and usage guide
Workflows support:
- Tag-based publishing (skills/{path}/v{version}, plugins/{path}/v{version})
- Manual workflow dispatch with inputs
- PR dry-run validation for plugins
- Security scanning for hardcoded secrets
- Validation of SKILL.md frontmatter and plugin manifests
Requires CLAWHUB_TOKEN secret in repository settings.
ClawHub GitHub Actions Workflows
This directory contains GitHub Actions workflows for publishing skills and plugins to ClawHub.
Setup
Required Secrets
Add the following secret to your repository settings:
CLAWHUB_TOKEN- Your ClawHub API token (starts withclh_...)
To get your token:
clawhub login
# Token is stored in ~/.clawhub/config.json
Or generate a new token:
clawhub login --token clh_your_token_here
Workflows
1. ClawHub CI (clawhub-ci.yml)
Purpose: Validates skills and plugins on every push/PR
Triggers:
- Push to
main(skills/plugins paths) - Pull requests (skills/plugins paths)
- Manual workflow dispatch
Jobs:
validate-skills- Checks SKILL.md frontmatter and formatvalidate-plugins- Validates package.json and openclaw.plugin.jsonsecurity-scan- Scans for hardcoded secretsreport- Generates validation summary
2. Skill Publish (skill-publish.yml)
Purpose: Publishes skills to ClawHub registry
Triggers:
- Tag push:
skills/{skill-path}/v{version}(e.g.,skills/todoist/v1.2.3) - Manual workflow dispatch
Tag Format:
skills/{skill-path}/v{semver}
Examples:
skills/matrix-triad/v1.0.0skills/github-tools/v2.1.3
Manual Dispatch Inputs:
skill_path- Path to skill directory (required)version- Semver version (required)dry_run- Preview without uploading (optional)
Example Usage:
# Tag-based publish
git tag skills/matrix-triad/v1.0.0
git push origin skills/matrix-triad/v1.0.0
# Or use workflow dispatch from GitHub UI
3. Package Publish (package-publish.yml)
Purpose: Publishes OpenClaw plugins to ClawHub registry
Triggers:
- Pull requests (dry-run only)
- Tag push:
plugins/{plugin-path}/v{version} - Manual workflow dispatch
Tag Format:
plugins/{plugin-path}/v{semver}
Examples:
plugins/openclaw-consciousness-plugin/v1.0.0plugins/openclaw-hybrid-search-plugin/v1.1.0
Manual Dispatch Inputs:
plugin_path- Path to plugin directory (required)dry_run- Preview without uploading (optional)owner- Publisher handle for admin publishing (optional)
PR Dry-Run: When a PR is opened, the workflow automatically runs in dry-run mode to validate the plugin before merging.
Example Usage:
# Tag-based publish
git tag plugins/openclaw-consciousness-plugin/v1.0.0
git push origin plugins/openclaw-consciousness-plugin/v1.0.0
# Or use workflow dispatch from GitHub UI
Publishing Checklist
For Skills
-
Ensure
SKILL.mdhas valid YAML frontmatter:--- name: my-skill description: What this skill does version: 1.0.0 metadata: openclaw: requires: env: - API_KEY bins: - curl --- -
Test locally:
clawhub skill publish skills/my-skill --version 1.0.0 --dry-run -
Create tag and push:
git tag skills/my-skill/v1.0.0 git push origin skills/my-skill/v1.0.0
For Plugins
-
Ensure
package.jsonhasopenclaw.extensions:{ "name": "@heretek-ai/my-plugin", "openclaw": { "extensions": ["./src/index.js"] } } -
Ensure
openclaw.plugin.jsonexists with valid schema:{ "id": "my-plugin", "name": "My Plugin", "configSchema": { "type": "object", "additionalProperties": false } } -
Test locally:
clawhub package publish plugins/my-plugin --dry-run -
Create tag and push:
git tag plugins/my-plugin/v1.0.0 git push origin plugins/my-plugin/v1.0.0
Troubleshooting
Common Issues
"Missing CLAWHUB_TOKEN"
- Ensure the secret is set in repository settings
- Token must start with
clh_
"Invalid skill format"
- Check SKILL.md frontmatter has required fields
- Ensure folder name matches skill name
"Plugin validation failed"
- Verify openclaw.plugin.json has valid JSON
- Check for required
idandconfigSchemafields
"Rate limit exceeded"
- Wait and retry (rate limits: 180/min read, 45/min write)
- Use
--dry-runfor testing
Manual Publishing
If workflows fail, you can publish manually:
# Install CLI
bun install -g clawhub
# Login
clawhub login
# Publish skill
clawhub skill publish skills/my-skill --version 1.0.0 --yes
# Publish plugin
clawhub package publish plugins/my-plugin --yes
Reusable Workflow
The package-publish.yml workflow can be reused from other repositories:
jobs:
publish:
uses: heretek/heretek-openclaw-plugins/.github/workflows/package-publish.yml@main
with:
plugin_path: plugins/my-plugin
dry_run: false
secrets:
CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}