{"id":47164963,"url":"https://github.com/iflytek/skillhub","last_synced_at":"2026-03-27T02:48:56.051Z","repository":{"id":343706666,"uuid":"1178833585","full_name":"iflytek/skillhub","owner":"iflytek","description":"Self-hosted, open-source agent skill registry for enterprises. Publish \u0026 version skill packages, govern with RBAC and audit logs, deploy   on-premise with Docker or Kubernetes.","archived":false,"fork":false,"pushed_at":"2026-03-16T13:39:51.000Z","size":2137,"stargazers_count":227,"open_issues_count":2,"forks_count":112,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-16T16:46:06.095Z","etag":null,"topics":["openclaw","openclaw-skills","skill"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iflytek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T12:17:05.000Z","updated_at":"2026-03-16T16:44:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iflytek/skillhub","commit_stats":null,"previous_names":["iflytek/skillhub"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/iflytek/skillhub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Fskillhub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Fskillhub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Fskillhub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Fskillhub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iflytek","download_url":"https://codeload.github.com/iflytek/skillhub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Fskillhub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30618038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T04:46:40.957Z","status":"ssl_error","status_checked_at":"2026-03-17T04:46:32.538Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["openclaw","openclaw-skills","skill"],"created_at":"2026-03-13T04:02:53.459Z","updated_at":"2026-03-17T08:01:05.778Z","avatar_url":"https://github.com/iflytek.png","language":"Java","funding_links":[],"categories":["人工智能"],"sub_categories":["Spring Cloud框架"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./skillhub-logo.svg\" alt=\"SkillHub Logo\" width=\"120\" height=\"120\" /\u003e\n  \u003ch1\u003eSkillHub\u003c/h1\u003e\n  \u003cp\u003eAn enterprise-grade, open-source agent skill registry — publish, discover, and manage reusable skill packages across your organization.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Docs](https://img.shields.io/badge/docs-zread.ai-4A90E2?logo=gitbook\u0026logoColor=white)](https://zread.ai/iflytek/skillhub)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](./LICENSE)\n[![Build](https://github.com/iflytek/skillhub/actions/workflows/publish-images.yml/badge.svg)](https://github.com/iflytek/skillhub/actions/workflows/publish-images.yml)\n[![Docker](https://img.shields.io/badge/docker-ghcr.io-2496ED?logo=docker\u0026logoColor=white)](https://ghcr.io/iflytek/skillhub)\n[![Java](https://img.shields.io/badge/java-21-ED8B00?logo=openjdk\u0026logoColor=white)](https://openjdk.org/projects/jdk/21/)\n[![React](https://img.shields.io/badge/react-19-61DAFB?logo=react\u0026logoColor=black)](https://react.dev)\n\n\u003c/div\u003e\n\n---\n\nSkillHub is a self-hosted platform that gives teams a private,\ngoverned place to share agent skills. Publish a skill package, push\nit to a namespace, and let others find it through search or\ninstall it via CLI. Built for on-premise deployment behind your\nfirewall, with the same polish you'd expect from a public registry.\n\n📖 **[Full Documentation →](https://zread.ai/iflytek/skillhub)**\n\n## Highlights\n\n- **Self-Hosted \u0026 Private** — Deploy on your own infrastructure.\n  Keep proprietary skills behind your firewall with full data\n  sovereignty. One `make dev-all` command to get running locally.\n- **Publish \u0026 Version** — Upload agent skill packages with semantic\n  versioning, custom tags (`beta`, `stable`), and automatic\n  `latest` tracking.\n- **Discover** — Full-text search with filters by namespace,\n  downloads, ratings, and recency. Visibility rules ensure\n  users only see what they're authorized to.\n- **Team Namespaces** — Organize skills under team or global scopes.\n  Each namespace has its own members, roles (Owner / Admin /\n  Member), and publishing policies.\n- **Review \u0026 Governance** — Team admins review within their namespace;\n  platform admins gate promotions to the global scope. Governance\n  actions are audit-logged for compliance.\n- **Social Features** — Star skills, rate them, and track downloads.\n  Build a community around your organization's best practices.\n- **Account Merging** — Consolidate multiple OAuth identities and\n  API tokens under a single user account.\n- **API Token Management** — Generate scoped tokens for CLI and\n  programmatic access with prefix-based secure hashing.\n- **CLI-First** — Native REST API plus a compatibility layer for\n  existing ClawHub-style registry clients. Native CLI APIs are the\n  primary supported path while protocol compatibility continues to\n  expand.\n- **Pluggable Storage** — Local filesystem for development, S3 /\n  MinIO for production. Swap via config.\n- **Internationalization** — Multi-language support with i18next.\n\n## Quick Start\n\nStart the full local stack with one of the following commands:\n\nOfficial images:\n```bash\nrm -rf /tmp/skillhub-runtime\ncurl -fsSL https://raw.githubusercontent.com/iflytek/skillhub/main/scripts/runtime.sh | sh -s -- up\n```\n\nAliyun mirror shortcut:\n```bash\nrm -rf /tmp/skillhub-aliyun\ncurl -fsSL https://imageless.oss-cn-beijing.aliyuncs.com/runtime.sh | sh -s -- up --home /tmp/skillhub-aliyun --aliyun --version edge\n```\n\nIf deployment runs into problems, clear the existing runtime home and retry.\n\n### Prerequisites\n\n- Docker \u0026 Docker Compose\n\n### Local Development\n\n```bash\nmake dev-all\n```\n\nThen open:\n\n- Web UI: `http://localhost:3000`\n- Backend API: `http://localhost:8080`\n\nLocal profile seeds two mock-auth users automatically:\n\n- `local-user` for normal publishing and namespace operations\n- `local-admin` with `SUPER_ADMIN` for review and admin flows\n\nUse them with the `X-Mock-User-Id` header in local development.\n\nThe backend can bootstrap a local-login super admin for first-time access\nwhen you explicitly set `BOOTSTRAP_ADMIN_ENABLED=true`:\n\n- username: `BOOTSTRAP_ADMIN_USERNAME` (`admin` by default)\n- password: `BOOTSTRAP_ADMIN_PASSWORD` (`ChangeMe!2026` by default)\n\nStop everything with:\n\n```bash\nmake dev-all-down\n```\n\nReset local dependencies and start from a clean slate with:\n\n```bash\nmake dev-all-reset\n```\n\nRun `make help` to see all available commands.\n\nFor the full development workflow (local dev → staging → PR), see [docs/dev-workflow.md](docs/dev-workflow.md).\n\n### API Contract Sync\n\nOpenAPI types for the web client are checked into the repository.\nWhen backend API contracts change, regenerate the SDK and commit the\nupdated generated file:\n\n```bash\nmake generate-api\n```\n\nFor a stricter end-to-end drift check, run:\n\n```bash\n./scripts/check-openapi-generated.sh\n```\n\nThis starts local dependencies, boots the backend, regenerates the\nfrontend schema, and fails if the checked-in SDK is stale.\n\n### Container Runtime\n\nPublished runtime images are built by GitHub Actions and pushed to GHCR.\nThis is the supported path for anyone who wants a ready-to-use local\nenvironment without building the backend or frontend on their machine.\nPublished images target both `linux/amd64` and `linux/arm64`.\n\n1. Copy the runtime environment template.\n2. Pick an image tag.\n3. Start the stack with Docker Compose.\n\n```bash\ncp .env.release.example .env.release\n```\n\nRecommended image tags:\n\n- `SKILLHUB_VERSION=edge` for the latest `main` build\n- `SKILLHUB_VERSION=vX.Y.Z` for a fixed release\n\nStart the runtime:\n\n```bash\nmake validate-release-config\ndocker compose --env-file .env.release -f compose.release.yml up -d\n```\n\nThen open:\n\n- Web UI: `SKILLHUB_PUBLIC_BASE_URL` 对应的地址\n- Backend API: `http://localhost:8080`\n\nStop it with:\n\n```bash\ndocker compose --env-file .env.release -f compose.release.yml down\n```\n\nThe runtime stack uses its own Compose project name, so it does not\ncollide with containers from `make dev-all`.\n\nThe production Compose stack now defaults to the `docker` profile only.\nIt does not enable local mock auth. Bootstrap admin is disabled by default;\nif you turn it on explicitly, the backend seeds a local admin account from\nenvironment variables for the first login:\n\n- username: `BOOTSTRAP_ADMIN_USERNAME`\n- password: `BOOTSTRAP_ADMIN_PASSWORD`\n\nRecommended production baseline:\n\n- set `SKILLHUB_PUBLIC_BASE_URL` to the final HTTPS entrypoint\n- keep PostgreSQL / Redis bound to `127.0.0.1`\n- use external S3 / OSS via `SKILLHUB_STORAGE_S3_*`\n- keep `BOOTSTRAP_ADMIN_ENABLED=false` unless you intentionally need bootstrap login\n- rotate or disable the bootstrap admin after initial setup\n- run `make validate-release-config` before `docker compose up -d`\n\nIf the GHCR package remains private, run `docker login ghcr.io` before\n`docker compose up -d`.\n\n### Monitoring\n\nA Prometheus + Grafana monitoring stack lives under [`monitoring/`](./monitoring).\nIt scrapes the backend's Actuator Prometheus endpoint.\n\nStart it with:\n\n```bash\ncd monitoring\ndocker compose -f docker-compose.monitoring.yml up -d\n```\n\nThen open:\n\n- Prometheus: `http://localhost:9090`\n- Grafana: `http://localhost:3001` (`admin` / `admin`)\n\nBy default Prometheus scrapes `http://host.docker.internal:8080/actuator/prometheus`,\nso start the backend locally on port `8080` first.\n\n## Kubernetes\n\nBasic Kubernetes manifests are available under [`deploy/k8s/`](./deploy/k8s):\n\n- `configmap.yaml`\n- `secret.yaml.example`\n- `backend-deployment.yaml`\n- `frontend-deployment.yaml`\n- `services.yaml`\n- `ingress.yaml`\n\nApply them after creating your own secret:\n\n```bash\nkubectl apply -f deploy/k8s/configmap.yaml\nkubectl apply -f deploy/k8s/secret.yaml\nkubectl apply -f deploy/k8s/backend-deployment.yaml\nkubectl apply -f deploy/k8s/frontend-deployment.yaml\nkubectl apply -f deploy/k8s/services.yaml\nkubectl apply -f deploy/k8s/ingress.yaml\n```\n\n## Smoke Test\n\nA lightweight smoke test script is available at [`scripts/smoke-test.sh`](./scripts/smoke-test.sh).\n\nRun it against a local backend:\n\n```bash\n./scripts/smoke-test.sh http://localhost:8080\n```\n\n## Architecture\n\n```\n┌─────────────┐     ┌─────────────┐     ┌──────────────┐\n│   Web UI    │     │  CLI Tools  │     │  REST API    │\n│  (React 19) │     │             │     │              │\n└──────┬──────┘     └──────┬──────┘     └──────┬───────┘\n       │                   │                   │\n       └───────────────────┼───────────────────┘\n                           │\n                    ┌──────▼──────┐\n                    │   Nginx     │\n                    └──────┬──────┘\n                           │\n                    ┌──────▼──────┐\n                    │ Spring Boot │  Auth · RBAC · Core Services\n                    │   (Java 21) │  OAuth2 · API Tokens · Audit\n                    └──────┬──────┘\n                           │\n              ┌────────────┼────────────┐\n              │            │            │\n       ┌──────▼───┐  ┌─────▼────┐  ┌────▼────┐\n       │PostgreSQL│  │  Redis   │  │ Storage │\n       │    16    │  │    7     │  │ S3/MinIO│\n       └──────────┘  └──────────┘  └─────────┘\n```\n\n**Backend (Spring Boot 3.2.3, Java 21):**\n- Multi-module Maven project with clean architecture\n- Modules: app, domain, auth, search, storage, infra\n- PostgreSQL 16 with Flyway migrations\n- Redis for session management\n- S3/MinIO for skill package storage\n\n**Frontend (React 19, TypeScript, Vite):**\n- TanStack Router for routing\n- TanStack Query for data fetching\n- Tailwind CSS + Radix UI for styling\n- OpenAPI TypeScript for type-safe API client\n- i18next for internationalization\n\n## Usage with Agent Platforms\n\nSkillHub works as a skill registry backend for several agent platforms. Point any of the clients below at your SkillHub instance to publish, discover, and install skills.\n\n### [openclaw](https://github.com/openclaw/openclaw)\n\n[openclaw](https://github.com/openclaw/openclaw) is an open-source agent skill CLI. Configure it to use your SkillHub endpoint as the registry:\n\n```bash\n# Log in to your SkillHub instance\nopenclaw login --registry https://\u003cyour-skillhub-host\u003e\n\n# Publish a skill\nopenclaw push \u003cskill-package\u003e\n\n# Search and install skills\nopenclaw search \u003ckeyword\u003e\nopenclaw install \u003cnamespace\u003e/\u003cskill\u003e\n```\n\n### [AstronClaw](https://agent.xfyun.cn/astron-claw)\n\n[AstronClaw](https://agent.xfyun.cn/astron-claw) is the skill marketplace provided by iFlytek's Astron platform. You can connect it to a self-hosted SkillHub registry to manage and distribute private skills within your organization, or browse publicly shared skills on the Astron platform.\n\n### [astron-agent](https://github.com/iflytek/astron-agent)\n\n[astron-agent](https://github.com/iflytek/astron-agent) is the iFlytek Astron agent framework. Skills stored in SkillHub can be referenced and loaded directly by astron-agent, enabling a governed, versioned skill lifecycle from development to production.\n\n---\n\n\u003e 🌟 **Show \u0026 Tell** — Have you built something with SkillHub? We'd love to hear about it!\n\u003e Share your use case, integration, or deployment story in the\n\u003e [**Discussions → Show and Tell**](https://github.com/iflytek/skillhub/discussions/categories/show-and-tell) category.\n\n## Contributing\n\nContributions are welcome. Please open an issue first to discuss\nwhat you'd like to change.\n\n- Contribution guide: [`CONTRIBUTING.md`](./CONTRIBUTING.md)\n- Code of conduct: [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md)\n\n## 📞 Support\n\n- 💬 **Community Discussion**: [GitHub Discussions](https://github.com/iflytek/skillhub/discussions)\n- 🐛 **Bug Reports**: [Issues](https://github.com/iflytek/skillhub/issues)\n- 👥 **WeChat Work Group**:\n\n  ![WeChat Work Group](https://github.com/iflytek/astron-agent/raw/main/docs/imgs/WeCom_Group.png)\n\n## License\n\nApache License 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiflytek%2Fskillhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiflytek%2Fskillhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiflytek%2Fskillhub/lists"}