Chapter 36
Publishing to ClawHub and the Skill Marketplace
Chapter 36: Publishing to ClawHub / Plugin Marketplace
ClawHub is the official Skill marketplace for the Hermes Agent ecosystemโanalogous to PyPI for Python or npm for Node.js, but purpose-built for AI Agent Skills. A high-quality Skill that only lives on your local machine is like a brilliant invention locked in a drawer. This chapter walks through the complete publishing journey from account creation to marketplace listing, with in-depth coverage of SEO optimization to help users discover your Skill.
36.1 ClawHub Ecosystem Overview
ClawHub's Role
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ClawHub Ecosystem โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ For Skill Developers โ For Hermes Users โ
โโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข Publish and distributeโ โข Search and install โ
โ โข Version management โ โข Browse docs and examples โ
โ โข Collect user feedbackโ โข Rate and review โ
โ โข Analyze download dataโ โข Report bugs โ
โ โข Monetize paid Skills โ โข Request features โ
โโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ClawHub and the OpenClaw Ecosystem
OpenClaw Ecosystem
โโโ ClawHub (official marketplace) โ publish, review, distribute
โโโ OpenClaw SDK (toolchain) โ develop, test, package
โโโ ClawHub CLI (command line) โ automated publishing
โโโ ClawHub API (REST) โ programmatic management
36.2 Pre-publish: Package Structure
Standard Skill Package Layout
my-awesome-skill/
โโโ skill.yaml # Required: Skill manifest
โโโ README.md # Required: Documentation (Markdown)
โโโ LICENSE # Required: License file
โโโ CHANGELOG.md # Recommended: Change history
โ
โโโ src/
โ โโโ my_awesome_skill/
โ โโโ __init__.py
โ โโโ skill.py # Main Skill implementation
โ โโโ tools.py # Tool implementations
โ โโโ schemas.py # Input/output schemas
โ
โโโ tests/
โ โโโ test_skill.py
โ โโโ fixtures/
โ
โโโ examples/
โ โโโ basic_usage.py
โ โโโ advanced_usage.py
โ
โโโ .clawhubignore
Complete skill.yaml Manifest
name: smart-summarizer-skill
version: "1.2.0"
description: |
Generates high-quality bilingual (English/Chinese) summaries using a
multi-model fusion strategy. Supports documents up to 100k words in
PDF, Word, Markdown, and HTML formats. Automatically detects document
type (academic / news / technical / business) and applies type-specific
summarization strategies.
author:
name: "Zhang Wei"
email: "[email protected]"
license: "Apache-2.0"
repository: "https://github.com/zhangwei/smart-summarizer-skill"
categories:
- "text-processing"
- "summarization"
- "nlp"
keywords:
- "summarize"
- "abstract"
- "text summary"
- "document processing"
- "NLP"
hermes_runtime: ">=1.5.0"
python: ">=3.10"
dependencies:
core-nlp-skill: "^2.0.0"
pdf-reader-skill: "^1.3.0"
mcp_tools:
- name: "summarize_text"
description: "Generate a summary of the provided text"
- name: "summarize_document"
description: "Generate a summary of a document at the given path"
- name: "extract_keywords"
description: "Extract a keyword list from text"
36.3 Publishing Workflow: Account to Listing
Step 1: Create Account and Initialize
# Install ClawHub CLI
pip install clawhub-cli
# Login (browser OAuth)
clawhub login
# Verify login
clawhub whoami
# Output: Logged in as zhangwei ([email protected])
# Create API token for CI/CD
clawhub token create --name "github-actions" --scope "publish"
# Output: Token: chub_tok_xxxxxxxxxxxx
Step 2: Validate the Package
cd smart-summarizer-skill/
clawhub validate
ClawHub Skill Validation Report
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ skill.yaml format is valid
โ All required fields are present
โ Version follows SemVer
โ README.md exists and is not empty (2847 words)
โ LICENSE file present (Apache-2.0)
โ All tests pass (23/23)
โ Dependencies resolve successfully
โ Package size within limit (4.2 MB / 50 MB)
โ No known security vulnerabilities
โ Warnings:
- CHANGELOG.md not found (recommended)
- Test coverage 72% (recommended >80%)
โ Errors (must fix before publishing):
None
Validation passed. Ready to publish.
Step 3: Build the Package
clawhub build
clawhub build --list
# smart-summarizer-skill-1.2.0.skill
# skill.yaml 2.1 KB
# README.md 8.3 KB
# src/ 42.1 KB
# Total: 52.5 KB
Step 4: Publish
# Publish to ClawHub
clawhub publish
# Publish a pre-release (hidden from default search)
clawhub publish --tag beta
# With release notes
clawhub publish --release-notes "Fix memory overflow on large PDFs"
Step 5: Post-publish Verification
clawhub info smart-summarizer-skill
# Version 1.2.0 published โ under review...
clawhub status [email protected]
# Status: Under review (estimated 24-48 hours)
hermes skill install [email protected]
36.4 Review Standards and Common Rejection Reasons
ClawHub runs automated review (immediate) and human review (1โ3 business days) on every submission.
Review Dimensions
| Dimension | Checks |
|---|---|
| Technical compliance | Skill installs and runs correctly; all declared tools work; no malicious code; no high-severity CVEs |
| Content quality | README clearly explains function and usage; at least one runnable example; features match description |
| Legal compliance | Clear open-source or commercial license; no IP infringement; data collection disclosed |
| Ecosystem norms | Name not confusing with existing Skills; no keyword stuffing; no bundled unrelated software |
Common Rejection Reasons
| Reason | Frequency | Fix |
|---|---|---|
| README too brief (<500 words) | 35% | Add feature overview, quick-start, API reference |
| No code examples | 28% | Add examples to README and examples/ |
| Dependency has high-severity CVE | 15% | Run clawhub audit --fix |
| Skill fails to run after install | 12% | Test with hermes skill test locally |
| Description mismatches functionality | 6% | Be accurate; remove exaggerations |
| Name too similar to existing Skill | 4% | Choose a more distinctive name |
36.5 SEO Optimization: Getting Discovered
ClawHub's search algorithm weights the following signals:
Search Ranking Weights (approximate)
โโโ Text relevance (35%)
โ โโโ Skill name match
โ โโโ description keywords
โ โโโ keywords field
โโโ Quality signals (25%)
โ โโโ Download count
โ โโโ User rating (1โ5 stars)
โ โโโ Active maintenance (last updated)
โโโ Documentation quality (20%)
โ โโโ README length and structure
โ โโโ Code examples present
โ โโโ Screenshots present
โโโ Community signals (20%)
โโโ GitHub star count
โโโ Issue response time
โโโ Community discussion activity
High-Quality README Template
# Smart Summarizer Skill
> Multi-model fusion summarization for PDFs, Word docs, and web pages
Generate high-quality bilingual summaries in seconds. Automatically
detects document type and applies specialized strategiesโdelivering
40% better ROUGE scores than single-model approaches.
## Quick Start
\```python
import asyncio
from hermes import Agent
async def main():
agent = Agent()
result = await agent.run_skill(
"smart-summarizer-skill",
action="summarize_text",
text="Your long document text here...",
max_length=200,
language="en"
)
print(result.summary)
asyncio.run(main())
\```
## Features
- **Multi-format**: PDF, Word, Markdown, HTML, plain text
- **Bilingual**: English and Chinese output simultaneously
- **Length control**: 50โ500 words, adjustable
- **Type detection**: Academic / news / technical / business
## Installation
\```bash
hermes skill install smart-summarizer-skill
\```
## API Reference
### `summarize_text`
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| text | string | Yes | Text to summarize |
| max_length | integer | No | Max summary length (default: 200) |
| language | string | No | Output language: en / zh / auto |
**Returns:**
\```json
{
"summary": "Summary text",
"keywords": ["keyword1", "keyword2"],
"document_type": "academic",
"confidence": 0.92
}
\```
## Benchmarks
| Document Size | Processing Time | ROUGE-L Score |
|--------------|----------------|---------------|
| 1,000 words | ~2s | 0.68 |
| 10,000 words | ~8s | 0.72 |
| 50,000 words | ~25s | 0.71 |
## License
Apache 2.0 โ see [LICENSE](LICENSE)
Keyword Strategy
keywords:
# Functional (most-searched)
- "text summarization"
- "document summary"
- "abstract generation"
- "tldr"
# Technical
- "NLP"
- "natural language processing"
- "extractive summarization"
- "abstractive summarization"
# Chinese keywords
- "ๆๆฌๆ่ฆ"
- "่ชๅจๆ่ฆ"
- "ๆๆกฃๆป็ป"
# Scenario-based
- "research paper"
- "PDF processing"
- "content creation"
- "knowledge management"
36.6 Version Update Workflow
# 1. Update version in skill.yaml
# Bug fix: 1.2.0 โ 1.2.1
# New feature: 1.2.0 โ 1.3.0
# Breaking: 1.2.0 โ 2.0.0
# 2. Update CHANGELOG.md
cat >> CHANGELOG.md << 'EOF'
## [1.2.1] - 2024-11-20
### Fixed
- Memory overflow on PDFs >100MB (#42)
- Incorrect summary for RTL text (#38)
### Improved
- Large document processing 20% faster
EOF
# 3. Validate and publish
clawhub validate && clawhub publish --release-notes "Fix memory overflow and RTL text issues"
Automated Publishing with GitHub Actions
# .github/workflows/publish.yml
name: Publish to ClawHub
on:
push:
tags: ['v*']
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install clawhub-cli
- name: Run tests
run: |
pip install -e ".[dev]"
pytest tests/ --tb=short
- name: Validate & Publish
env:
CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
run: |
clawhub login --token $CLAWHUB_TOKEN
clawhub validate
clawhub build
clawhub publish --release-notes "$(git log -1 --pretty=%B)"
36.7 Handling User Feedback
# scripts/process_feedback.py
from clawhub_sdk import ClawHubClient
import asyncio
async def process_feedback():
client = ClawHubClient(token="your_token")
feedback_list = await client.get_feedback(
skill="smart-summarizer-skill",
status="open",
since_days=7
)
for feedback in feedback_list:
if feedback.type == "bug" and feedback.severity == "critical":
await create_github_issue(feedback)
await client.reply_feedback(
feedback.id,
"Thank you for the report! This is a critical bug. "
"A fix will be released within 24 hours."
)
elif feedback.type == "feature_request":
await add_to_roadmap(feedback)
RESPONSE_TEMPLATES = {
"bug_ack": (
"Thank you for reporting this! I've reproduced the issue. "
"A fix is planned for {next_version} (ETA: {eta}). "
"As a workaround: {workaround}"
),
"cannot_reproduce": (
"Thank you for the report. I'm unable to reproduce this. "
"Could you share: (1) Hermes version, (2) Python version, "
"(3) Full error traceback, (4) Minimal reproducing input?"
),
}
Chapter Summary
Publishing to ClawHub is not merely "uploading code"โit's a complete productization process:
- Package structure: A standardized layout, manifest, and documentation streamline review
- Five-step workflow: Account โ Validate โ Build โ Submit โ Post-publish verification
- Review standards: Technical compliance, content quality, legal compliance, ecosystem norms
- SEO optimization: Keyword strategy + high-quality README + community activity drive search ranking
- Automated publishing: GitHub Actions enables zero-manual-effort releases on tag push
- Feedback loop: Systematic user feedback handling continuously improves Skill quality
Review Questions
- If your Skill requires third-party API keys, how should users configure them at install time? How do you communicate this clearly on the ClawHub page?
- After publishing, you discover a critical security vulnerability and need to immediately delist the Skill. Should ClawHub offer an "emergency takedown" feature? How should already-installed versions be handled?
- How would you design a "Skill recommendation algorithm" that gives newly published high-quality Skills meaningful exposure rather than always being dominated by established ones?
- What monetization models exist for paid Skills (one-time purchase / subscription / pay-per-use), and how should Hermes support these at the technical level?