[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74489":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},74489,"skillhub","iflytek\u002Fskillhub","iflytek","Self-hosted, open-source agent skill registry for enterprises. Publish & version skill packages, govern with RBAC and audit logs, deploy   on-premise with Docker or Kubernetes.","https:\u002F\u002Fskill.xfyun.cn",null,"Java",3424,481,17,11,0,91,172,208,273,30.05,"Apache License 2.0",false,"main",true,[27,28,29,30,31,32,33],"iflytek-astron","openclaw","openclaw-skills","skill","skill-hub","skill-manager","skills","2026-06-12 02:03:26","\u003Cdiv align=\"center\">\n  \u003Cimg src=\".\u002Fskillhub-logo.svg\" alt=\"SkillHub Logo\" width=\"120\" height=\"120\" \u002F>\n  \u003Ch1>SkillHub\u003C\u002Fh1>\n  \u003Cp>An enterprise-grade, open-source agent skill registry — publish, discover, and manage reusable skill packages across your organization. \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n\n[![DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fiflytek\u002Fskillhub)\n[![Docs](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-zread.ai-4A90E2?logo=gitbook&logoColor=white)](https:\u002F\u002Fzread.ai\u002Fiflytek\u002Fskillhub)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdiscord-join-5865F2?logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FqHYvtDNPHS)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%202.0-blue.svg)](.\u002FLICENSE)\n[![Build](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fskillhub\u002Factions\u002Fworkflows\u002Fpublish-images.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fskillhub\u002Factions\u002Fworkflows\u002Fpublish-images.yml)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocker-ghcr.io-2496ED?logo=docker&logoColor=white)](https:\u002F\u002Fghcr.io\u002Fiflytek\u002Fskillhub)\n[![Java](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fjava-21-ED8B00?logo=openjdk&logoColor=white)](https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F21\u002F)\n[![React](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Freact-19-61DAFB?logo=react&logoColor=black)](https:\u002F\u002Freact.dev)\n\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n\n[English](.\u002FREADME.md) | [中文](.\u002FREADME_zh.md)\n\n\u003C\u002Fdiv>\n\n---\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fxfyun-doc.xfyun.cn\u002Flc-sp-skillhub-demo-1775551643410.gif\" alt=\"SkillHub Demo\" width=\"800\" \u002F>\n\u003C\u002Fdiv>\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## Documentation\n\n- 📖 **[User Guide](https:\u002F\u002Fiflytek.github.io\u002Fskillhub\u002F)** — Skill publishing, search, CLI usage and other user guides\n- 🛠️ **[Developer Docs](https:\u002F\u002Fzread.ai\u002Fiflytek\u002Fskillhub)** — Architecture, API reference, local development, deployment and operations\n\n## Highlights\n\n- **Self-Hosted & 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 & 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 \u002F Admin \u002F\n  Member), and publishing policies.\n- **Review & 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 \u002F\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:\n\n```bash\nrm -rf \u002Ftmp\u002Fskillhub-runtime\ncurl -fsSL https:\u002F\u002Fimageless.oss-cn-beijing.aliyuncs.com\u002Fruntime.sh | sh -s -- up\n```\n\nThe default command pulls the `latest` stable release images. Use `--version edge` if you want the newest build from `main`.\n\n**Configure public URL (recommended for production):**\n\n```bash\ncurl -fsSL https:\u002F\u002Fimageless.oss-cn-beijing.aliyuncs.com\u002Fruntime.sh | sh -s -- up --public-url https:\u002F\u002Fskillhub.your-company.com\n```\n\nThe `--public-url` parameter sets the public access URL for your SkillHub instance. This ensures:\n- CLI install commands show the correct registry URL\n- Agent setup instructions display the correct skill.md URL\n- OAuth callbacks and device auth links work properly\n\n**For users in China (Aliyun mirror):**\n\n```bash\ncurl -fsSL https:\u002F\u002Fimageless.oss-cn-beijing.aliyuncs.com\u002Fruntime.sh | sh -s -- up --aliyun --public-url https:\u002F\u002Fskillhub.your-company.com --version latest\n```\n\nIf deployment runs into problems, clear the existing runtime home and retry.\n\n## SkillHub CLI\n\nInstall and manage Agent skills from the command line:\n\n```bash\n# Install CLI\nnpm install -g @astron-team\u002Fskillhub\n\n# Or run directly\nnpx @astron-team\u002Fskillhub@latest version\n\n# Login\nskillhub login --token sk_xxx --registry https:\u002F\u002Fskill.xfyun.cn\n\n# Search and install skills\nskillhub search pdf\nskillhub install pdf-parser --agent codex\n\n# List installed skills\nskillhub list\n```\n\n📖 Full guide: [docs\u002Fskillhub\u002Fen\u002Fguide\u002Fcli.md](docs\u002Fskillhub\u002Fen\u002Fguide\u002Fcli.md)\n\n### Prerequisites\n\n- Docker & Docker Compose\n\n### Local Development\n\n```bash\nmake dev-all\n```\n\n> **For developers in China**: If Maven dependency download times out, configure Aliyun mirror. See [Local Development Guide](https:\u002F\u002Fiflytek.github.io\u002Fskillhub\u002Fquickstart.html#本地开发) for details.\n\nThen open:\n\n- Web UI: `http:\u002F\u002Flocalhost:3000`\n- Backend API: `http:\u002F\u002Flocalhost:8080`\n\nBy default, `make dev-all` starts the backend with the `local` profile.\nIn that mode, local development keeps the mock-auth users below and also\ncreates a password-based bootstrap admin account by default:\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 local bootstrap admin is enabled by default in `application-local.yml`:\n\n- username: `admin`\n- password: `ChangeMe!2026`\n- To disable it, set `BOOTSTRAP_ADMIN_ENABLED=false` before starting the backend.\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\nUseful backend commands:\n\n```bash\nmake test\nmake test-backend-app\nmake build-backend-app\n```\n\nDo not run `.\u002Fmvnw -pl skillhub-app clean test` directly under `server\u002F`.\n`skillhub-app` depends on sibling modules in the same repo, and a standalone clean build\ncan fall back to stale artifacts from the local Maven repository, which surfaces misleading\n`cannot find symbol` and signature-mismatch errors. Use `-am`, or the `make test-backend-app`\nand `make build-backend-app` targets above.\n\nFor the full development workflow (local dev → staging → PR), see [docs\u002Fdev-workflow.md](docs\u002Fdev-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.\u002Fscripts\u002Fcheck-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\u002Famd64` and `linux\u002Farm64`.\n\n**Quick deployment with curl:**\n\n```bash\n# Default (GHCR images)\ncurl -fsSL https:\u002F\u002Fimageless.oss-cn-beijing.aliyuncs.com\u002Fruntime.sh | sh -s -- up --public-url https:\u002F\u002Fskillhub.your-company.com\n\n# Aliyun mirror (recommended for users in China)\ncurl -fsSL https:\u002F\u002Fimageless.oss-cn-beijing.aliyuncs.com\u002Fruntime.sh | sh -s -- up --aliyun --public-url https:\u002F\u002Fskillhub.your-company.com --version latest\n```\n\n**Deployment parameters:**\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| `--public-url \u003Curl>` | Public access URL (recommended) | `--public-url https:\u002F\u002Fskill.example.com` |\n| `--version \u003Ctag>` | Specific image tag | `--version v0.2.0` |\n| `--aliyun` | Use Aliyun mirror (China) | `--aliyun` |\n| `--home \u003Cdir>` | Runtime directory | `--home \u002Fopt\u002Fskillhub` |\n| `--no-scanner` | Disable security scanner | `--no-scanner` |\n\n> **Important**: Configure `--public-url` for production deployments to ensure CLI install commands and Agent setup instructions display the correct URLs.\n\n**Manual deployment:**\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=latest` for the latest stable release (default)\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:\u002F\u002Flocalhost: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. The release template (`.env.release.example`)\nenables the bootstrap admin by default, so zero-config quickstart via\n`runtime.sh` works out of the box:\n\n- username: `admin`\n- password: `ChangeMe!2026`\n\nRecommended production baseline:\n\n- set `SKILLHUB_PUBLIC_BASE_URL` to the final HTTPS entrypoint\n- keep PostgreSQL \u002F Redis bound to `127.0.0.1`\n- use external S3 \u002F OSS via `SKILLHUB_STORAGE_S3_*`\n- change `BOOTSTRAP_ADMIN_PASSWORD` to a strong password (`validate-release-config.sh` rejects the default `ChangeMe!2026`)\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### Upload Allowlist Override\n\nSkill package upload validation uses the default extension allowlist from\n[`SkillPackagePolicy.java`](.\u002Fserver\u002Fskillhub-domain\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fiflytek\u002Fskillhub\u002Fdomain\u002Fskill\u002Fvalidation\u002FSkillPackagePolicy.java).\n`SkillPublishProperties` uses that same list by default for\n`skillhub.publish.allowed-file-extensions`.\n\nIf you need to replace the default allowlist at runtime, set:\n\n```bash\nSKILLHUB_PUBLISH_ALLOWED_FILE_EXTENSIONS=.md,.json,.xsd,.xsl,.dtd,.docx,.xlsx,.pptx\n```\n\nSpring Boot binds this environment variable to\n`skillhub.publish.allowed-file-extensions`. When set, it replaces the default\nallowlist instead of appending to it.\n\n### Monitoring\n\nA Prometheus + Grafana monitoring stack lives under [`monitoring\u002F`](.\u002Fmonitoring).\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:\u002F\u002Flocalhost:9090`\n- Grafana: `http:\u002F\u002Flocalhost:3001` (`admin` \u002F `admin`)\n\nBy default Prometheus scrapes `http:\u002F\u002Fhost.docker.internal:8080\u002Factuator\u002Fprometheus`,\nso start the backend locally on port `8080` first.\n\n## Kubernetes\n\nBasic Kubernetes manifests are available under [`deploy\u002Fk8s\u002F`](.\u002Fdeploy\u002Fk8s):\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\u002Fk8s\u002Fconfigmap.yaml\nkubectl apply -f deploy\u002Fk8s\u002Fsecret.yaml\nkubectl apply -f deploy\u002Fk8s\u002Fbackend-deployment.yaml\nkubectl apply -f deploy\u002Fk8s\u002Ffrontend-deployment.yaml\nkubectl apply -f deploy\u002Fk8s\u002Fservices.yaml\nkubectl apply -f deploy\u002Fk8s\u002Fingress.yaml\n```\n\n## Smoke Test\n\nA lightweight smoke test script is available at [`scripts\u002Fsmoke-test.sh`](.\u002Fscripts\u002Fsmoke-test.sh).\n\nRun it against a local backend:\n\n```bash\n.\u002Fscripts\u002Fsmoke-test.sh http:\u002F\u002Flocalhost: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\u002FMinIO│\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\u002FMinIO 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:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw)\n\n[OpenClaw](https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw) is an open-source agent skill CLI. Configure it to use your SkillHub endpoint as the registry:\n\n```bash\n# Configure registry URL\nexport CLAWHUB_REGISTRY=https:\u002F\u002Fskillhub.your-company.com\n\n# Authenticate once if needed\nclawhub login --token YOUR_API_TOKEN\n\n# Search and install skills\nnpx clawhub search email\nnpx clawhub install my-skill\nnpx clawhub install my-namespace--my-skill\n\n# Publish to global namespace\nnpx clawhub publish .\u002Fmy-skill --slug my-skill --version 1.0.0\n\n# Publish to a team namespace such as my-space\nnpx clawhub publish .\u002Fmy-skill --slug my-space--my-skill --version 1.0.0\n```\n\n`my-space--my-skill` is the canonical compat slug. SkillHub parses it as\nnamespace `my-space` plus skill slug `my-skill`.\n\n> 💡 **Tip**: The above commands are not only applicable to OpenClaw, but also to other CLI Coding Agents or Agent assistants by specifying the installation directory (`--dir`). For example: `npx clawhub --dir ~\u002F.claude\u002Fskills install my-skill`\n\n📖 **[Complete OpenClaw Integration Guide →](.\u002Fdocs\u002Fopenclaw-integration.md)**\n\n### [AstronClaw](https:\u002F\u002Fagent.xfyun.cn\u002Fastron-claw)\n\n[AstronClaw](https:\u002F\u002Fagent.xfyun.cn\u002Fastron-claw) is a cloud AI assistant built on OpenClaw's core capabilities, providing 24\u002F7 online service through enterprise platforms like WeChat Work, DingTalk, and Feishu. It features a built-in skill system with over 130 official skills. You can connect it to a self-hosted SkillHub registry to enable one-click skill installation, search repository, dialogue-based automatic installation, and even custom skills management within your organization.\n\n### [Loomy](https:\u002F\u002Floomy.xunfei.cn\u002F)\n\n[Loomy](https:\u002F\u002Floomy.xunfei.cn\u002F) is a desktop AI work partner focusing on real office scenarios. It integrates deeply with local files and system tools to build efficient automated workflows for individuals and small teams. By connecting Loomy to your SkillHub registry, you can easily discover and install organization-specific skills to enhance your local desktop automation and productivity.\n\n### [astron-agent](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fastron-agent)\n\n[astron-agent](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fastron-agent) is the iFlytek Astron agent framework. Skills stored in SkillHub can be referenced and loaded by astron-agent, enabling a governed, versioned skill lifecycle from development to production.\n\n---\n\n> 🌟 **Show & Tell** — Have you built something with SkillHub? We'd love to hear about it!\n> Share your use case, integration, or deployment story in the\n> [**Discussions → Show and Tell**](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fskillhub\u002Fdiscussions\u002Fcategories\u002Fshow-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`](.\u002FCONTRIBUTING.md)\n- Code of conduct: [`CODE_OF_CONDUCT.md`](.\u002FCODE_OF_CONDUCT.md)\n\n## 📞 Support\n\n- 💬 **Community Discussion**: [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fskillhub\u002Fdiscussions)\n- 🐛 **Bug Reports**: [Issues](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fskillhub\u002Fissues)\n- 👾 **Discord**: [Join our Server](https:\u002F\u002Fdiscord.gg\u002FqHYvtDNPHS)\n- 👥 **WeChat Work Group**:\n\n  ![WeChat Work Group](https:\u002F\u002Fgithub.com\u002Fiflytek\u002Fastron-agent\u002Fraw\u002Fmain\u002Fdocs\u002Fimgs\u002FWeCom_Group.png)\n\n## License\n\nApache License 2.0\n","SkillHub 是一个面向企业的自托管开源代理技能注册中心，用于发布、发现和管理组织内的可重用技能包。其核心功能包括支持语义化版本控制的技能包发布与版本管理、基于角色的访问控制（RBAC）及审计日志等治理手段。此外，还具备团队命名空间、权限审查流程以及社交特性如评分和收藏等功能。该平台采用Java开发，并可通过Docker或Kubernetes在本地部署，适用于需要在防火墙后安全地管理和共享专有技能的企业场景。",2,"2026-06-11 03:50:08","high_star"]