Skip to content

tangredtea/skill-registry

Repository files navigation

Skill Registry

English | 简体中文

CI Go Report Card License: MIT

A standalone skill registry server for OpenClaw-style skills. This is a complete Go application with embedded frontend that provides a web interface and REST API for managing skills.

Features

  • Web UI: Modern, responsive interface for browsing and searching skills
  • REST API: Full CRUD operations for skills
  • File Upload: Support for uploading skill packages (.zip, .tar.gz)
  • Download: Download skills as compressed archives
  • Search: Full-text search across skill names, descriptions, and tags
  • Pagination: Efficient handling of large skill collections

API Endpoints

Method Endpoint Description
GET /health Health check endpoint
GET /ready Readiness check endpoint
GET /api/search?q={query} Search skills
GET /api/skills List all skills (paginated)
POST /api/skills Create a new skill
GET /api/skills/{id} Get skill by ID
PUT /api/skills/{id} Update skill
DELETE /api/skills/{id} Delete skill
GET /api/skills/{id}/download Download skill package
GET /api/skills/slug/{slug} Get skill by slug

Creating a Skill

Multipart Form (with file):

curl -X POST http://localhost:8080/api/skills \
  -F "data={\"slug\":\"my-skill\",\"name\":\"My Skill\",\"version\":\"1.0.0\",\"description\":\"A great skill\",\"author\":\"John Doe\",\"tags\":[\"automation\"]}" \
  -F "file=@my-skill.zip"

JSON only:

curl -X POST http://localhost:8080/api/skills \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "my-skill",
    "name": "My Skill",
    "version": "1.0.0",
    "description": "A great skill",
    "author": "John Doe",
    "tags": ["automation"]
  }'

Searching Skills

curl "http://localhost:8080/api/search?q=automation&page=1&per_page=20"

Downloading a Skill

curl -O -J http://localhost:8080/api/skills/{id}/download

Installation

Prerequisites

  • Go 1.21 or later
  • Docker (optional, for containerized deployment)

Quick Start with Docker

# Using Docker Compose
docker-compose up -d

# Or build and run manually
docker build -t skill-registry .
docker run -p 8080:8080 -v $(pwd)/data:/data skill-registry

Build from Source

# Clone or create the project
cd skill-registry

# Download dependencies
go mod tidy

# Build the binary
go build -o skill-registry

# Run the server
./skill-registry -port 8080 -data ./data

Run with Go

go run main.go -port 8080 -data ./data

Configuration

Command-line flags:

Flag Default Description
-port 8080 HTTP server port
-host 0.0.0.0 HTTP server host
-data ./data Data directory for persistence

Environment variables:

Variable Default Description
PORT 8080 HTTP server port
HOST 0.0.0.0 HTTP server host
DATA_DIR ./data Data directory for persistence

Environment variables take precedence over default values but are overridden by command-line flags.

Project Structure

skill-registry/
├── main.go                      # Entry point and HTTP handlers
├── go.mod                       # Go module definition
├── Dockerfile                   # Docker image definition
├── docker-compose.yml           # Docker Compose configuration
├── Makefile                     # Build automation
├── README.md                    # This file
├── CONTRIBUTING.md              # Contribution guidelines
├── LICENSE                      # MIT License
├── CHANGELOG.md                 # Version history
├── .github/
│   └── workflows/
│       └── ci.yml              # GitHub Actions CI/CD
├── internal/
│   ├── config/
│   │   ├── config.go           # Configuration management
│   │   └── config_test.go      # Configuration tests
│   ├── models/
│   │   └── skill.go            # Data models
│   ├── storage/
│   │   ├── storage.go          # Storage interface
│   │   ├── memory.go           # In-memory storage implementation
│   │   └── memory_test.go      # Storage tests
│   └── handlers/
│       └── skill.go            # Archive utilities
├── static/
│   └── index.html              # Embedded web frontend
└── examples/
    └── sample-skill/           # Example skill package
        ├── SKILL.md
        └── README.md

Development

Running Tests

# Run all tests
make test

# Or use go test directly
go test -v ./...

# Run tests with coverage
go test -v -race -coverprofile=coverage.txt ./...

Building

# Build binary
make build

# Or use go build directly
go build -o skill-registry .

Code Quality

# Format code
make fmt

# Lint code (requires golangci-lint)
make lint

Skill Package Format

A skill package is a compressed archive containing:

my-skill/
├── SKILL.md          # Skill metadata and documentation (required)
├── README.md         # Additional documentation
├── config.json       # Configuration schema
└── ...               # Other supporting files

SKILL.md Format

---
name: My Skill
description: Does something useful
metadata:
  openclaw:
    requires:
      bins: ["curl", "jq"]
    install:
      - id: "brew"
        kind: "brew"
        formula: "my-formula"
---

# My Skill

Documentation here...

License

MIT License - feel free to use this for your own projects!

Contributing

Contributions welcome! Please feel free to submit issues or pull requests.

About

Self-hosted skill registry server with REST API, web UI, and Docker support. Manage, search, and distribute OpenClaw skills with built-in package management.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors