skill-publisher

Generic publishing tool for Claude Code skills. Validates, packages, and publishes to ClawHub, Hermes Agent, and anthropics/skills with bilingual README support.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "skill-publisher" with this command: npx skills add zhangyanbo2007/skill-publisher-universal

Skill Publisher

A generic publishing workflow for any Claude Code skill. Package, validate, and publish to ClawHub (OpenClaw), Hermes Agent, and anthropics/skills (Claude Code).

When to Use

  • User wants to publish a skill they've built to one or more marketplaces
  • User needs a bilingual (EN/ZH) README for their skill
  • User wants to validate SKILL.md format before publishing
  • User needs help with clawhub publish or GitHub PR submission

Prerequisites

Before using this skill, check for the following in the environment (or ask the user):

Authentication

These tokens are pre-configured in ~/.env and shell environment. Read them automatically — do not ask the user:

TokenEnv VarSource
GitHub PATGITHUB_TOKEN~/.env or env
GitHub userGITHUB_USER~/.env or env
ClawHub tokenCLAWHUB_TOKEN~/.env or env

If a variable is missing, read ~/.env first, then ask the user.

Network Connectivity

Before any GitHub API call, test connectivity first:

curl -s -m 5 https://api.github.com/repos/NousResearch/hermes-agent > /dev/null 2>&1 && echo "direct OK" || echo "direct FAIL"

If direct access fails (common in restricted networks), load proxy from ~/.env:

source ~/.env
# ~/.env may contain (possibly commented-out):
# https_proxy=http://192.168.28.92:7897
# http_proxy=http://192.168.28.92:7897
# Export the proxy ONLY if direct access failed:
export https_proxy=http://192.168.28.92:7897
export http_proxy=http://192.168.28.92:7897
# Re-test with proxy:
https_proxy=$https_proxy curl -s -m 10 https://api.github.com/ > /dev/null 2>&1 && echo "proxy OK" || echo "proxy FAIL"

Fallback strategy (ordered by priority):

  1. Direct HTTPS access — works in unrestricted networks
  2. Proxy from ~/.env — read https_proxy/http_proxy values; if commented out, uncomment and export them for this session only
  3. SSH on port 22 — git@github.com:... works without proxy in most environments; use for git clone/push, but NOT for GitHub REST API (curl/gh api)

When proxy is also down: skip GitHub API PR creation. Push branch via SSH and instruct user to create PR manually via browser.

Workflow

Step 1: Validate Source Skill

python3 ~/.skills/skill-publisher/scripts/validate_skill.py <skill-path>

Checks: SKILL.md exists, valid YAML frontmatter, required fields (name, description), name format (lowercase, hyphens), description <= 1024 chars, no hardcoded secrets, file size <= 100,000 chars.

Step 2: Generate Publish Package

python3 ~/.skills/skill-publisher/scripts/generate_package.py \
  --source ~/.skills/<skill-name> \
  --output /tmp/publish-<skill-name> \
  --platforms clawhub hermes anthropics

Produces:

/tmp/publish-<skill-name>/
├── SKILL.md            # Copied from source
├── README.md           # Bilingual (EN/ZH) README with examples
├── examples/           # Copied from source skill
└── .clawhub.json       # ClawHub manifest

Step 3: Platform-Specific Publishing

ClawHub (OpenClaw)

CRITICAL: Always pass --slug <skill-name> to prevent ClawHub from using the directory name as the slug. Without --slug, a publish from /tmp/publish-my-skill/ would create a duplicate entry named publish-my-skill instead of my-skill.

clawhub publish /tmp/publish-<skill-name> --version <version> --slug <skill-name>

If CLI unavailable: install npm i -g clawhub or upload via clawhub.ai.

Hermes Agent (GitHub PR)

Target: NousResearch/hermes-agentskills/creative/<skill-name>/SKILL.md

  1. Fork repo on GitHub
  2. Clone fork, copy SKILL.md to skills/creative/<skill-name>/
  3. Commit, push, create PR

anthropics/skills (GitHub PR)

Target: anthropics/skillsskills/<skill-name>/SKILL.md

Same process as Hermes, different repo.

Step 4: Verify

# ClawHub
curl -s "https://clawhub.ai/api/v1/skills?slug=<skill-name>"
# Hermes / anthropics — check raw GitHub URLs

Helper Scripts

ScriptPurpose
scripts/validate_skill.pyValidate SKILL.md format
scripts/generate_package.pyGenerate publish package with bilingual README
scripts/gen_clawhub_manifest.pyGenerate .clawhub.json
scripts/create_pr.pyCreate GitHub PR via API

Common Pitfalls

  1. SKILL.md first bytes must be --- — no BOM, no blank line
  2. ClawHub rejects hardcoded secrets — scan scripts/ before publishing
  3. Hermes requires metadatametadata.hermes.tags and related_skills
  4. Network issues — always test connectivity first. If direct HTTPS fails, load proxy from ~/.env and re-test. If proxy also fails, use SSH (git@github.com:...) for git operations and tell user to create PR manually via browser
  5. ClawHub slug mismatch — always pass --slug <skill-name> when publishing; otherwise the directory name becomes the slug, creating a wrong/duplicate entry (e.g. publish-my-skill instead of my-skill)

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

96push

User-approved 96Push desktop client publishing helper — query platforms/accounts, create content, inspect platform rules, and publish only after explicit con...

Registry SourceRecently Updated
Coding

google-search-web

调用 Google 网页搜索接口,获取实时网页搜索结果。使用此技能当用户需要:Google 搜索/网页搜索/搜索引擎查询、调用 /google/search/web 接口、用 Python 脚本执行 Google 搜索、获取搜索结果列表(标题/链接/摘要)。Use this skill for Google we...

Registry SourceRecently Updated
Coding

DeepMiner Skills

通过 dm-cli 命令行工具与 DeepMiner (DM) 系统交互。**凡是涉及 DM/DeepMiner 系统的任务,必须先读此 Skill。** 触发条件:用户提到 "使用 DM"、"发给 DM"、"用 DM 问一下"、"DM 帮我..."、"DeepMiner 执行..." 等任何涉及 DM 系统的任...

Registry SourceRecently Updated
Coding

CordysCRM

Cordys CRM CLI 指令映射技能,支持将自然语言高效转换为标准 `cordys crm` 命令,具备意图识别、模块匹配、参数补全及分页与全量查询处理能力,输出简洁稳定、无歧义。

Registry SourceRecently Updated
2670Profile unavailable