English | 简体中文
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.
- 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
| 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 |
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"]
}'curl "http://localhost:8080/api/search?q=automation&page=1&per_page=20"curl -O -J http://localhost:8080/api/skills/{id}/download- Go 1.21 or later
- Docker (optional, for containerized deployment)
# 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# 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 ./datago run main.go -port 8080 -data ./data| Flag | Default | Description |
|---|---|---|
-port |
8080 |
HTTP server port |
-host |
0.0.0.0 |
HTTP server host |
-data |
./data |
Data directory for persistence |
| 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.
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
# Run all tests
make test
# Or use go test directly
go test -v ./...
# Run tests with coverage
go test -v -race -coverprofile=coverage.txt ./...# Build binary
make build
# Or use go build directly
go build -o skill-registry .# Format code
make fmt
# Lint code (requires golangci-lint)
make lintA 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
---
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...MIT License - feel free to use this for your own projects!
Contributions welcome! Please feel free to submit issues or pull requests.