A CLI tool and backend registry for discovering, installing, and publishing Claude Code skills.
brew tap nebari-dev/tap
brew install skillsctl
curl -sSL https://raw.githubusercontent.com/nebari-dev/skillsctl/main/install.sh | bash
go install github.com/nebari-dev/skillsctl/cli@latest
git clone https://github.com/nebari-dev/skillsctl.git
cd skillsctl && make build-cli
Start the backend locally (no external dependencies):
go run ./backend/cmd/server
# Server starts on :8080, auth disabled (dev mode)
# Health check: curl localhost:8080/healthz
Use the CLI:
skillsctl config init # first-time setup
skillsctl explore # browse skills
skillsctl explore show <name> # skill details
skillsctl install <name> # install latest version
skillsctl install <name>@1.0.0 # install specific version
skillsctl publish --name my-skill \
--version 1.0.0 \
--description "My skill" \
--file ./skill.md # publish a skill
skillsctl auth login # authenticate (production servers)
| Component | Technology |
|---|---|
| API | ConnectRPC (gRPC-compatible, serves JSON/HTTP) |
| Database | SQLite (modernc.org/sqlite, pure Go, WAL mode) |
| Skill storage | Content stored as BLOB in SQLite |
| Auth | Generic OIDC token validation (works with Keycloak, Okta, Dex) |
| CLI auth | RFC 8628 device flow, zero-config (discovers settings from server) |
.
├── proto/ # Protobuf service definitions
├── gen/ # Generated code (committed, never hand-edited)
├── backend/ # ConnectRPC server
│ ├── cmd/server/ # Entrypoint
│ └── internal/ # Server internals (auth, registry, store)
├── cli/ # Cobra CLI
│ ├── cmd/ # CLI commands
│ └── internal/ # CLI internals (api client, auth, config)
├── skills/ # Dogfood skills shipped with the project
└── docs/ # Documentation
- Go 1.25+
- buf (protobuf tooling)
- golangci-lint
make test # all tests with race detector
make test-backend # backend tests only
make test-cli # CLI tests only
make lint # golangci-lint
make proto # buf lint + generate
make build-cli # builds ./skillsctl
make build-backend # builds ./skillsctl-server
- Edit
.protofiles inproto/skillsctl/v1/ - Run
make prototo lint and regenerate - Verify with
git diff --exit-code gen/(CI checks for drift)
Migrations use goose and live in backend/internal/store/sqlite/migrations/. The server runs migrations automatically on startup.
See LICENSE.