Install
$ agentstack add skill-iflytek-skillhub-api-and-namespace-design ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
API and Namespace Design Skill
Trigger
Use this skill when:
- Adding or modifying REST API endpoints
- Changing namespace, skill, or user coordinate logic
- Working on ClawHub CLI compatibility layer
- Modifying OpenAPI specifications or generated types
- Adding new admin or governance endpoints
Namespace Coordinate System
SkillHub uses a two-axis coordinate model:
@{namespace_slug}/{skill_slug}
@global/my-skill— Global namespace skill@my-team/my-skill— Team namespace skill (namespace slug is any valid slug)@department-ops/my-skill— Department namespace skill
Namespace Model
Namespaces (domain/namespace/):
- Slug: unique identifier, validated by
SlugValidator - Status:
ACTIVE,FROZEN,ARCHIVED - Roles:
OWNER,ADMIN,MEMBER - Frozen or archived namespaces cannot publish skills
RBAC Roles
Namespace-level (domain/namespace/NamespaceRole):
OWNER— Full control over namespace and all skillsADMIN— Can manage members, archive skills, publishMEMBER— Can publish skills to the namespace
Platform-level:
SUPER_ADMIN— Bypasses all permission checks, can publish directly without review
ClawHub Compatibility Layer
ClawHub CLI uses a single-slug model (no / allowed in slugs). Mapping:
| SkillHub Coordinate | Canonical Slug | Notes | |---------------------|----------------|-------| | @global/my-skill | my-skill | Global namespace omits prefix | | @team-name/my-skill | team-name--my-skill | Double-dash separator |
Conflict resolution: -- split takes priority. @global/team-name--my-skill would conflict with @team-name/my-skill, resolved to the team namespace skill. Global skill slugs must NOT contain --.
API Design
Controllers
- Controllers in
skillhub-app(com.iflytek.skillhub.controller/) are transport only - Responsibilities: extract auth context, bind request params, wrap responses
- Complex business logic belongs in domain services (
skillhub-domain) or app services - Use Springdoc OpenAPI annotations (
@Operation,@ApiResponse) for API documentation - User identity is always String in API inputs and outputs
Request/Response Patterns
- DTOs in
com.iflytek.skillhub.dto/ ReviewTaskRequest/ReviewTaskResponsefor review workflow- Response wrapping handled at controller layer
- Validation errors use
DomainBadRequestExceptionwith i18n message keys
Session and CSRF
- Session-based auth with cookie storage
- CSRF protection via
XSRF-TOKENcookie andX-XSRF-TOKENheader - Smoke tests validate the full register → login → CSRF → action → logout flow
- Mock auth uses
X-Mock-User-Idheader in local dev
Well-known Discovery
/.well-known/clawhub.json returns { "apiBase": "/api/v1" } for ClawHub CLI auto-discovery.
OpenAPI Contract Sync
When backend API contracts change:
make generate-api
This runs openapi-typescript http://localhost:8080/v3/api-docs -o src/api/generated/schema.d.ts.
Commit the updated web/src/api/generated/schema.d.ts with the PR.
To verify no drift:
./scripts/check-openapi-generated.sh
This starts local dependencies, boots the backend, regenerates the schema, and fails if the checked-in SDK is stale.
Versioning and Tags
- Semantic versioning for skill versions (
major.minor.patch) latesttag is system-reserved, read-only, auto-followsSkill.latestVersionId- Custom tags (
stable,beta) are manually maintained latestcannot be moved manually- Auto-generated versions use
yyyyMMdd.HHmmssformat when no version is specified in SKILL.md
Key API Endpoints
| Method | Path | Purpose | |--------|------|---------| | GET | /api/v1/auth/me | Current user info (401 if unauthenticated) | | POST | /api/v1/auth/local/login | Local account login | | POST | /api/v1/auth/local/register | Local account registration | | POST | /api/v1/auth/logout | Logout (302/200/204) | | POST | /api/v1/auth/local/change-password | Password change | | GET | /api/v1/namespaces | List namespaces | | GET | /api/v1/labels | List visible labels (public) | | POST | /api/v1/admin/labels | Create label definition (admin) | | DELETE | /api/v1/admin/labels/{slug} | Delete label definition (admin) | | GET | /actuator/health | Health check | | GET | /actuator/prometheus | Prometheus metrics |
Common Pitfalls
- Forgetting CSRF token on POST/PUT/DELETE requests (needs
X-XSRF-TOKENheader) - Using numeric user IDs in API — all user identities are String
- Not regenerating OpenAPI types after adding/changing endpoints
- Putting business logic in controllers instead of domain/app services
- Assuming namespace slugs follow a specific prefix pattern — they are arbitrary valid slugs
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: iflytek
- Source: iflytek/skillhub
- License: Apache-2.0
- Homepage: https://skill.xfyun.cn
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.