Skills is an open-source, self-hostable Agent Skill Registry built on top of the ClawHub codebase and extended for custom deployment scenarios. It supports publishing, searching, installing, and versioning text-based agent skill bundles such as SKILL.md, while also providing Feishu authentication, account binding, and management capabilities for operating a real internal or community registry.
It is designed to be deployable in your own environment with a Web UI, backend API, PostgreSQL database, and CLI workflow.
- Web frontend for browsing, searching, publishing, and account settings
- Go backend for authentication, skill APIs, comments, and management endpoints
- PostgreSQL for metadata, accounts, identities, and tokens
- CLI package for installation, sync, and registry authentication
Skills is intended for self-hosted deployment. You can run it on your own infrastructure, connect it to your own PostgreSQL and object storage, and control how authentication, moderation, and publishing work in your environment.
The current system includes Feishu-based login and account binding, making it suitable for teams that already use Feishu as their identity entry point.
It also includes management workflows for operating the registry, including user review, skill moderation, and other platform-level administration capabilities.
GitLab integration can also work with self-hosted or private GitLab deployments. In the current implementation, you only need to configure a GitLab access token and the related GitLab connection settings to enable import and synchronization against private GitLab instances.
Use Feishu as the primary sign-in entry for private deployments and internal team access.
Bring existing repositories into the registry workflow instead of rebuilding everything manually.
For private GitLab deployments, you can point the system to your own GitLab instance and use an access token for authenticated import flows.
Publish new skills through the web flow with versioned metadata and backend-managed storage.
Each skill can expose a direct install command so users can move from discovery to usage quickly.
Operate the registry with management views for reviewing users, moderating content, and handling platform-level actions.
- Add a dedicated page for curated collections / favorites
- Allow administrators to manage and recommend featured collections
- Support one-command batch installation for a full collection
- Continue improving self-hosted deployment and platform operations
- Frontend: TanStack Start + React + Vite + Bun
- Backend: Go + Gin + GORM
- Database: PostgreSQL
- Object storage: S3-compatible storage
- CLI: TypeScript
src/ frontend application
server/ SSR and middleware
backend/ Go backend
packages/clawhub/ CLI
packages/schema/ shared contracts and types
public/ static assets
convex/ legacy / compatibility code
docs/ screenshots and documentation assets
Prerequisites:
- Bun
- Go 1.22+
- Docker / Docker Compose
Install dependencies:
bun installCreate a local environment file:
cp .env.local.example .env.localStart the frontend:
bun run devStart the backend:
cd backend
GO_ENV=local go run cmd/server/main.goDefault local ports:
- Frontend:
http://localhost:10091 - Backend:
http://localhost:10081
Start the full stack:
docker compose up --buildDefault services:
postgresonlocalhost:5432backendonhttp://localhost:10081frontendonhttp://localhost:10091
Sequential deployment with Docker port-conflict checks:
bun run deploy:dockerIf frontend dependency downloads are unstable, you can switch the npm registry manually:
NPM_REGISTRY=https://registry.npmmirror.com bun run deploy:dockerOptional image overrides:
POSTGRES_IMAGE=postgres:16-alpine
GO_IMAGE=golang:1.25-alpine
ALPINE_IMAGE=alpine:3.22
BUN_IMAGE=oven/bun:1.3.6Use these files as your starting point:
.env.local.example.env.docker.examplebackend/config/default.yaml
Do not commit real secrets, private domains, database dumps, or internal-only documents.
bun run dev
bun run build
bun run lint
bun run test
bun run deploy:docker- Keep all example configuration values as placeholders
- Store private local settings in
.env.localor other untracked files - Before publishing, scan the repository again:
rg -n "token|secret|password|private|internal|@your-company" .