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:

  1. Package structure: A standardized layout, manifest, and documentation streamline review
  2. Five-step workflow: Account → Validate → Build → Submit → Post-publish verification
  3. Review standards: Technical compliance, content quality, legal compliance, ecosystem norms
  4. SEO optimization: Keyword strategy + high-quality README + community activity drive search ranking
  5. Automated publishing: GitHub Actions enables zero-manual-effort releases on tag push
  6. Feedback loop: Systematic user feedback handling continuously improves Skill quality

Review Questions

  1. 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?
  2. 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?
  3. 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?
  4. What monetization models exist for paid Skills (one-time purchase / subscription / pay-per-use), and how should Hermes support these at the technical level?
Rate this chapter
4.6  / 5  (3 ratings)

💬 Comments