Claude Code Plugins

Community-maintained marketplace

Feedback

Generate Marketplace

@epieczko/betty
0
0

Generate marketplace catalog files from Betty Framework registries

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name Generate Marketplace
description Generate marketplace catalog files from Betty Framework registries

generate.marketplace

Overview

generate.marketplace generates the RiskExec Claude Marketplace catalogs by filtering certified skills, agents, commands, and hooks from the Betty Framework registries. It transforms registry entries into marketplace-ready JSON files optimized for discovery and distribution.

Purpose

Automates the generation of marketplace catalogs to maintain consistency between:

  • Skill Registry (registry/skills.json) - All registered skills
  • Agent Registry (registry/agents.json) - All registered agents
  • Command Registry (registry/commands.json) - All registered commands
  • Hook Registry (registry/hooks.json) - All registered hooks
  • Skills Marketplace (marketplace/skills.json) - Certified skills for distribution
  • Agents Marketplace (marketplace/agents.json) - Certified agents for distribution
  • Commands Marketplace (marketplace/commands.json) - Certified commands for distribution
  • Hooks Marketplace (marketplace/hooks.json) - Certified hooks for distribution

This eliminates manual curation of marketplace catalogs and ensures only production-ready, certified components are published.

What It Does

  1. Reads Registries: Loads registry/skills.json, registry/agents.json, registry/commands.json, and registry/hooks.json
  2. Filters Active Items: Processes only entries with status: active
  3. Filters Certified Items: Includes only entries with certified: true (if field exists)
  4. Transforms Format: Converts registry entries to marketplace format
  5. Enriches Metadata: Adds maintainer, usage examples, documentation URLs, and last_updated timestamps
  6. Generates Catalogs: Outputs marketplace/skills.json, marketplace/agents.json, marketplace/commands.json, and marketplace/hooks.json
  7. Reports Statistics: Shows certification counts and totals

Usage

Basic Usage

python skills/generate.marketplace/generate_marketplace.py

No arguments required - reads from standard registry locations.

Via Betty CLI

/marketplace/generate

Expected Directory Structure

betty/
├── registry/
│   ├── skills.json      # Source: All registered skills
│   ├── agents.json      # Source: All registered agents
│   ├── commands.json    # Source: All registered commands
│   └── hooks.json       # Source: All registered hooks
└── marketplace/
    ├── skills.json      # Output: Certified skills only
    ├── agents.json      # Output: Certified agents only
    ├── commands.json    # Output: Certified commands only
    └── hooks.json       # Output: Certified hooks only

Filtering Logic

Certification Criteria

A skill, agent, command, or hook is included in the marketplace if:

  1. Status is Active: status: "active"
  2. Certified Flag (if present): certified: true

If the certified field is not present, active items are considered certified by default.

Status Values

Status Included in Marketplace Purpose
active Yes Production-ready, certified items
draft No Work in progress, not ready for distribution
deprecated No Outdated, should not be used
experimental No Testing phase, unstable

Output Format

Skills Marketplace Structure

{
  "marketplace_version": "1.0.0",
  "generated_at": "2025-10-23T17:51:58.579847+00:00",
  "last_updated": "2025-10-23T17:51:58.579847+00:00",
  "description": "Betty Framework Certified Skills Marketplace",
  "total_skills": 20,
  "certified_count": 16,
  "draft_count": 4,
  "catalog": [
    {
      "name": "api.validate",
      "version": "0.1.0",
      "description": "Validate OpenAPI and AsyncAPI specifications",
      "status": "certified",
      "tags": ["api", "validation", "openapi"],
      "maintainer": "Betty Core Team",
      "usage_examples": [
        "Validate OpenAPI spec: /skill/api/validate --spec_path api.yaml"
      ],
      "documentation_url": "https://betty-framework.dev/docs/skills/api.validate",
      "dependencies": ["context.schema"],
      "entrypoints": [...],
      "inputs": [...],
      "outputs": [...]
    }
  ]
}

Agents Marketplace Structure

{
  "marketplace_version": "1.0.0",
  "generated_at": "2025-10-23T17:03:16.154165+00:00",
  "last_updated": "2025-10-23T17:03:16.154165+00:00",
  "description": "Betty Framework Certified Agents Marketplace",
  "total_agents": 5,
  "certified_count": 3,
  "draft_count": 2,
  "catalog": [
    {
      "name": "api.designer",
      "version": "0.1.0",
      "description": "Design RESTful APIs following enterprise guidelines",
      "status": "certified",
      "reasoning_mode": "iterative",
      "skills_available": ["api.define", "api.validate"],
      "capabilities": [
        "Design RESTful APIs from natural language requirements"
      ],
      "tags": ["api", "design", "openapi"],
      "maintainer": "Betty Core Team",
      "documentation_url": "https://betty-framework.dev/docs/agents/api.designer",
      "dependencies": ["context.schema"]
    }
  ]
}

Commands Marketplace Structure

{
  "marketplace_version": "1.0.0",
  "generated_at": "2025-10-23T17:51:58.579847+00:00",
  "last_updated": "2025-10-23T17:51:58.579847+00:00",
  "description": "Betty Framework Certified Commands Marketplace",
  "total_commands": 4,
  "certified_count": 1,
  "draft_count": 3,
  "catalog": [
    {
      "name": "/test-workflow-command",
      "version": "1.0.0",
      "description": "Test complete workflow",
      "status": "certified",
      "tags": ["test", "workflow"],
      "execution": {
        "type": "skill",
        "target": "api.validate"
      },
      "parameters": [
        {
          "name": "input",
          "type": "string",
          "required": true,
          "description": "Input parameter"
        }
      ],
      "maintainer": "Betty Core Team"
    }
  ]
}

Hooks Marketplace Structure

{
  "marketplace_version": "1.0.0",
  "generated_at": "2025-10-23T17:51:58.579847+00:00",
  "last_updated": "2025-10-23T17:51:58.579847+00:00",
  "description": "Betty Framework Certified Hooks Marketplace",
  "total_hooks": 4,
  "certified_count": 1,
  "draft_count": 3,
  "catalog": [
    {
      "name": "test-workflow-hook",
      "version": "1.0.0",
      "description": "Test complete workflow",
      "status": "certified",
      "tags": ["test", "workflow", "openapi"],
      "event": "on_file_edit",
      "command": "python validate.py {file_path}",
      "blocking": true,
      "when": {
        "pattern": "*.openapi.yaml"
      },
      "timeout": 30000,
      "on_failure": "show_errors",
      "maintainer": "Betty Core Team"
    }
  ]
}

Marketplace Transformations

From Registry to Marketplace

The skill transforms registry entries to marketplace format:

Skills and Agents

Registry Field Marketplace Field Transformation
status: "active" status: "certified" Renamed for marketplace context
name name Preserved
version version Preserved
description description Preserved
tags tags Preserved (default: [])
dependencies dependencies Preserved (default: [])
entrypoints entrypoints Preserved (skills only)
inputs inputs Preserved (skills only)
outputs outputs Preserved (skills only)
skills_available skills_available Preserved (agents only)
capabilities capabilities Preserved (agents only)
reasoning_mode reasoning_mode Preserved (agents only)
N/A maintainer Added (default: "Betty Core Team")
N/A usage_examples Generated from entrypoints or provided
N/A documentation_url Generated: https://betty-framework.dev/docs/{type}/{name}
N/A last_updated Added: ISO timestamp

Commands

Registry Field Marketplace Field Transformation
status: "active" status: "certified" Renamed for marketplace context
name name Preserved
version version Preserved
description description Preserved
tags tags Preserved (default: [])
execution execution Preserved
parameters parameters Preserved (default: [])
N/A maintainer Added (default: "Betty Core Team")
N/A last_updated Added: ISO timestamp

Hooks

Registry Field Marketplace Field Transformation
status: "active" status: "certified" Renamed for marketplace context
name name Preserved
version version Preserved
description description Preserved
tags tags Preserved (default: [])
event event Preserved
command command Preserved
blocking blocking Preserved (default: false)
when when Preserved (default: {})
timeout timeout Preserved
on_failure on_failure Preserved
N/A maintainer Added (default: "Betty Core Team")
N/A last_updated Added: ISO timestamp

Metadata Enrichment

The skill adds marketplace-specific metadata:

  1. Maintainer: Defaults to "Betty Core Team" if not specified
  2. Usage Examples: Auto-generated from entrypoint commands if missing (skills only)
  3. Documentation URL: Generated following the pattern https://betty-framework.dev/docs/{skills|agents}/{name} (skills and agents only)
  4. Last Updated: ISO timestamp added to all marketplace files
  5. Statistics: Adds total counts, certified counts, and draft counts

Behavior

1. Registry Loading

Reads JSON files from:

  • registry/skills.json
  • registry/agents.json
  • registry/commands.json
  • registry/hooks.json

If a registry file is missing, the skill fails with an error.

2. Filtering

For each skill/agent/command/hook in the registry:

  • Checks status field - must be "active"
  • Checks certified field (if present) - must be true
  • Skips items that don't meet criteria
  • Logs which items are included/excluded

3. Transformation

Converts each certified entry:

  • Copies core fields (name, version, description, tags)
  • Transforms status: "active"status: "certified"
  • Adds marketplace metadata (maintainer, last_updated timestamp)
  • For skills: Adds docs URL and generates usage examples if not provided
  • For agents: Adds docs URL
  • Preserves all technical details (entrypoints, inputs, outputs, execution, parameters, event, command, etc.)

4. Statistics Calculation

Tracks:

  • Total items: All items in registry
  • Certified count: Items included in marketplace
  • Draft count: Items excluded (total - certified)

5. File Writing

Writes marketplace catalogs:

  • Creates marketplace/ directory if needed
  • Formats JSON with 2-space indentation
  • Preserves Unicode characters (no ASCII escaping)
  • Adds generation timestamp

Outputs

Success Response

{
  "ok": true,
  "status": "success",
  "skills_output": "/home/user/betty/marketplace/skills.json",
  "agents_output": "/home/user/betty/marketplace/agents.json",
  "commands_output": "/home/user/betty/marketplace/commands.json",
  "hooks_output": "/home/user/betty/marketplace/hooks.json",
  "skills_certified": 16,
  "skills_total": 20,
  "agents_certified": 3,
  "agents_total": 5,
  "commands_certified": 1,
  "commands_total": 4,
  "hooks_certified": 1,
  "hooks_total": 4
}

Failure Response

{
  "ok": false,
  "status": "failed",
  "error": "Registry file not found: /home/user/betty/registry/skills.json"
}

Examples

Example 1: Basic Marketplace Generation

Scenario: Generate marketplace catalogs after adding new certified skills

# Register new skills
/skill/define skills/data.transform/skill.yaml
/skill/define skills/api.monitor/skill.yaml

# Update registry
/registry/update

# Generate marketplace
/marketplace/generate

Output:

INFO: Starting marketplace catalog generation from registries...
INFO: Loading registry files...
INFO: Generating marketplace catalogs...
INFO: Added certified skill: api.validate
INFO: Added certified skill: api.define
INFO: Skipped non-certified skill: test.hello (status: draft)
INFO: Added certified agent: api.designer
INFO: Added certified command: /test-workflow-command
INFO: Skipped non-certified command: /test-command (status: draft)
INFO: Added certified hook: test-workflow-hook
INFO: Skipped non-certified hook: test-validation-hook (status: draft)
INFO: Writing marketplace files...
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/skills.json
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/agents.json
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/commands.json
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/hooks.json
INFO: ✅ Generated marketplace catalogs:
INFO:    Skills: 16/20 certified
INFO:    Agents: 3/5 certified
INFO:    Commands: 1/4 certified
INFO:    Hooks: 1/4 certified

Example 2: After Promoting Skills to Active

Scenario: Skills were marked as active and should now appear in marketplace

# Edit registry to mark skills as active
# (Normally done via skill.define)

# Regenerate marketplace
/marketplace/generate

Before (registry):

{
  "name": "my.skill",
  "status": "draft"
}

After (registry updated):

{
  "name": "my.skill",
  "status": "active"
}

Marketplace (now includes):

{
  "name": "my.skill",
  "status": "certified"
}

Example 3: Publishing to GitHub Pages

Scenario: Deploy marketplace catalogs to public API endpoint

# Generate marketplace
/marketplace/generate

# Copy to GitHub Pages directory
cp marketplace/*.json docs/api/v1/

# Commit and push
git add marketplace/ docs/api/v1/
git commit -m "Update marketplace catalog"
git push

Now accessible at:

  • https://riskexec.github.io/betty/api/v1/skills.json
  • https://riskexec.github.io/betty/api/v1/agents.json
  • https://riskexec.github.io/betty/api/v1/commands.json
  • https://riskexec.github.io/betty/api/v1/hooks.json

Example 4: CI/CD Integration

Scenario: Auto-generate marketplace on every registry change

# .github/workflows/marketplace.yml
name: Update Marketplace
on:
  push:
    paths:
      - 'registry/*.json'

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate Marketplace
        run: python skills/generate.marketplace/generate_marketplace.py
      - name: Commit Changes
        run: |
          git config user.name "Betty Bot"
          git config user.email "bot@riskexec.com"
          git add marketplace/
          git commit -m "chore: update marketplace catalog"
          git push

Integration

With skill.define Workflow

After registering skills, regenerate marketplace:

/skill/define skills/new.skill/skill.yaml
/registry/update
/marketplace/generate

With Workflows

Include marketplace generation as a workflow step:

# workflows/skill_lifecycle.yaml
steps:
  - skill: skill.create
    args: ["new.skill", "Description"]

  - skill: skill.define
    args: ["skills/new.skill/skill.yaml"]

  - skill: registry.update
    args: ["skills/new.skill/skill.yaml"]

  - skill: generate.marketplace
    args: []

With Hooks

Auto-regenerate marketplace when registries change:

# .claude/hooks.yaml
- event: on_file_save
  pattern: "registry/*.json"
  command: python skills/generate.marketplace/generate_marketplace.py
  blocking: false
  description: Auto-regenerate marketplace when registry changes

What Gets Included

Included in Marketplace

  • Skills/agents/commands/hooks with status: "active"
  • Skills/agents/commands/hooks with certified: true (if field exists)
  • All technical metadata (entrypoints, inputs, outputs, execution, parameters, event, command, etc.)
  • All semantic metadata (tags, dependencies)
  • Last updated timestamp for all entries

Not Included

  • Skills/agents/commands/hooks with status: "draft"
  • Skills/agents/commands/hooks with status: "deprecated"
  • Skills/agents/commands/hooks with certified: false
  • Internal-only items
  • Test/experimental items (unless marked active)

Common Errors

Error Cause Solution
"Registry file not found" Missing registry file Ensure registry/skills.json and registry/agents.json exist
"Failed to parse JSON" Invalid JSON syntax Fix JSON syntax in registry files
"Permission denied" Cannot write marketplace files Check write permissions on marketplace/ directory
Empty marketplace No active skills Mark skills as status: "active" in registry

Files Read

  • registry/skills.json - Skill registry (source)
  • registry/agents.json - Agent registry (source)
  • registry/commands.json - Command registry (source)
  • registry/hooks.json - Hook registry (source)

Files Modified

  • marketplace/skills.json - Skills marketplace catalog (output)
  • marketplace/agents.json - Agents marketplace catalog (output)
  • marketplace/commands.json - Commands marketplace catalog (output)
  • marketplace/hooks.json - Hooks marketplace catalog (output)

Exit Codes

  • 0: Success (marketplace catalogs generated successfully)
  • 1: Failure (error during generation)

Logging

Logs generation progress:

INFO: Starting marketplace catalog generation from registries...
INFO: Loading registry files...
INFO: Generating marketplace catalogs...
INFO: Added certified skill: api.validate
INFO: Added certified skill: hook.define
DEBUG: Skipped non-certified skill: test.hello (status: draft)
INFO: Added certified agent: api.designer
INFO: Added certified command: /test-workflow-command
DEBUG: Skipped non-certified command: /test-command (status: draft)
INFO: Added certified hook: test-workflow-hook
DEBUG: Skipped non-certified hook: test-validation-hook (status: draft)
INFO: Writing marketplace files...
INFO: ✅ Written marketplace file to marketplace/skills.json
INFO: ✅ Written marketplace file to marketplace/agents.json
INFO: ✅ Written marketplace file to marketplace/commands.json
INFO: ✅ Written marketplace file to marketplace/hooks.json
INFO: ✅ Generated marketplace catalogs:
INFO:    Skills: 16/20 certified
INFO:    Agents: 3/5 certified
INFO:    Commands: 1/4 certified
INFO:    Hooks: 1/4 certified

Best Practices

  1. Run After Registry Updates: Regenerate marketplace after adding/updating skills
  2. Automate with CI/CD: Set up automated marketplace generation in pipelines
  3. Review Before Publishing: Check generated catalogs before deploying
  4. Version Control: Commit marketplace files with registry changes
  5. Keep Registries Clean: Remove deprecated skills to keep marketplace focused
  6. Document Thoroughly: Ensure skills have good descriptions and examples

Troubleshooting

Marketplace Files Not Updating

Problem: Changes to registry don't appear in marketplace

Solutions:

  • Ensure skill status is "active" in registry
  • Check that certified field is true (if present)
  • Run /registry/update before /marketplace/generate
  • Verify registry JSON syntax is valid

Skills Missing from Marketplace

Problem: Active skills not appearing in marketplace

Solutions:

  • Check skill status in registry/skills.json
  • Verify no certified: false field
  • Ensure skill.yaml has been validated with /skill/define
  • Check logs for filtering messages

Empty Marketplace Catalogs

Problem: Marketplace has 0 certified items

Solutions:

  • Mark skills as status: "active" in registry
  • Remove certified: false from skill entries
  • Ensure registry files are not empty
  • Run /skill/define to register skills first

Version Diff (Optional)

To add version diff vs. last release:

# Future enhancement
def get_version_diff(old_marketplace, new_marketplace):
    """Compare two marketplace versions and return diff."""
    added = [s for s in new if s not in old]
    removed = [s for s in old if s not in new]
    updated = [s for s in new if s in old and version_changed(s)]
    return {"added": added, "removed": removed, "updated": updated}

Upload to API (Optional)

To upload generated catalogs to an API:

# Future enhancement
import requests

def upload_to_api(marketplace_data, api_endpoint, api_key):
    """Upload marketplace catalog to internal API."""
    response = requests.post(
        api_endpoint,
        json=marketplace_data,
        headers={"Authorization": f"Bearer {api_key}"}
    )
    return response.status_code == 200

Architecture

Skill Categories

Infrastructure - generate.marketplace maintains the marketplace layer by transforming registry state into certified catalogs.

Design Principles

  • Single Source of Truth: Registry files are the source
  • Idempotent: Can be run multiple times safely
  • Certification Filter: Only production-ready items included
  • Metadata Enrichment: Adds marketplace-specific fields
  • Clear Statistics: Reports certification rates

See Also

  • plugin.sync - Generate plugin.yaml from registries (SKILL.md)
  • registry.update - Update skill registry (SKILL.md)
  • skill.define - Validate and register skills (SKILL.md)
  • Betty Architecture - Framework overview (betty-architecture.md)

Dependencies

  • registry.update: Registry management
  • betty.config: Configuration constants and paths
  • betty.logging_utils: Logging infrastructure

Status

Active - Production-ready infrastructure skill

Version History

  • 0.2.0 (Oct 2025) - Added support for commands and hooks, added last_updated timestamps
  • 0.1.0 (Oct 2025) - Initial implementation with filtering and marketplace generation for skills and agents