Automate the full skill publishing pipeline: duplicate check → Bear dev-log sync → GitHub push → ClawHub publish.
clawhub CLI installed and authenticated ( clawhub whoami)git CLI available with push access to target repogrizzly CLI for Bear notes sync on macOSRun the main orchestrator script:
bash
bash SKILL_DIR/scripts/publish.sh <skill-path> [options]
FlagDescriptionDefault--repo <owner/repo>GitHub repo to push to(required or set SKILL_GH_REPO)--branch <name>Target branchmain``--skip-bearSkip Bear notes syncfalse``--skip-githubSkip GitHub pushfalse``--dry-runPreview all steps without executingfalse``--changelog <msg>Changelog message for ClawHub publish"Automated publish"``--version <semver>Version for ClawHub publishAuto from SKILL.md or 0.1.0
SKILL_GH_REPO — Default GitHub repo (e.g., user/skills)SKILL_BEAR_TAG — Bear note tag for dev logs (default: skill-dev)GRIZZLY_TOKEN_FILE — Path to Bear API token (default: ~/.config/grizzly/token)Validates skill name uniqueness against:
~/.openclaw/skills/)clawhub search)Exits with error if a conflicting skill exists, unless --force is passed.
Creates or appends a dev-log note in Bear:
[Skill Dev] <skill-name>SKILL_BEAR_TAGOn non-macOS or when grizzly is unavailable, prints a structured log line to stdout instead (so the pipeline continues).
Commits and pushes the skill directory to the configured GitHub repo:
skills/<skill-name>/feat(skill): publish <skill-name> v<version>Runs clawhub publish with the skill path, slug, name, version, and changelog.
✅ on success, ❌ on failure--continue-on-error is setbash
# Full publish
bash scripts/publish.sh ./my-skill --repo user/skills --version 1.0.0
# Dry run
bash scripts/publish.sh ./my-skill --repo user/skills --dry-run
# Skip Bear and GitHub, only ClawHub
bash scripts/publish.sh ./my-skill --repo user/skills --skip-bear --skip-github
# Using env var for repo
SKILL_GH_REPO=user/skills bash scripts/publish.sh ./my-skill