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.
- 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 ./data
go 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 lint
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
--- 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.