12 KiB
SkillHub CLI
SkillHub CLI is the official command-line tool for SkillHub, designed for searching, installing, managing, and publishing Agent skill packages.
📦 Installation
# Install globally via npm
npm install -g @astron-team/skillhub
# Or run directly with npx
npx @astron-team/skillhub@latest version
# Or install globally via Bun
bun add -g @astron-team/skillhub
🚀 Quick Start
# Login
skillhub login --token sk_xxx
# Search skills
skillhub search pdf
# Install skill to Agent directory
skillhub install pdf-parser --agent codex
# List installed skills
skillhub list
# Publish skill
skillhub publish ./my-skill --namespace myspace
🌐 Registry Configuration
The active registry is resolved in the following priority order:
--registry <url>command-line argumentSKILLHUB_REGISTRYenvironment variableregistryin~/.skillhub/config.json- Default value
https://skill.xfyun.cn
# Temporarily use another registry
skillhub search pdf --registry https://skillhub.example.com
# Set via environment variable (Linux/macOS)
export SKILLHUB_REGISTRY=https://skillhub.example.com
Windows PowerShell:
$env:SKILLHUB_REGISTRY="https://skillhub.example.com"
Windows CMD:
set SKILLHUB_REGISTRY=https://skillhub.example.com
🔐 Authentication
Token resolution priority:
--token <token>command-line argumentSKILLHUB_TOKENenvironment variable- Token stored in
~/.skillhub/credentials.json(per registry)
Login
# Login with API token
skillhub login --token sk_xxx
# Login to specific registry
skillhub login --token sk_xxx --registry https://skillhub.example.com
login validates the token, stores it in ~/.skillhub/credentials.json, and writes the registry to ~/.skillhub/config.json.
Check Current Identity
skillhub whoami
# Check specific registry
skillhub whoami --registry https://skillhub.example.com
# Temporarily use different token
skillhub whoami --token sk_other
Logout
skillhub logout
# Logout from specific registry
skillhub logout --registry https://skillhub.example.com
Logout only removes the token for the specified registry, preserving registry configuration and installation records.
🔍 Search
# Keyword search
skillhub search pdf
# Search with a one-off token
skillhub search pdf --token sk_xxx
# List all skills (empty query)
skillhub search "" --limit 50
# JSON output
skillhub search pdf --json
Output format: namespace/slug version summary
📥 Install Skills
# Install to auto-detected Agent directory
skillhub install pdf-parser
# Choose install scope explicitly
skillhub install pdf-parser --scope user
skillhub install pdf-parser --scope project --agent codex
# Specify namespace (default: global)
skillhub install pdf-parser --namespace myspace
# Specify version
skillhub install pdf-parser --version 1.2.0
# Install to specific Agent
skillhub install pdf-parser --agent codex
# Install to multiple Agents
skillhub install pdf-parser --agent codex --agent claude-code
# Install to custom directory
skillhub install pdf-parser --dir ~/.claude/skills
# Force overwrite existing installation
skillhub install pdf-parser --force
Install Target Resolution
The CLI determines the installation location using the following logic:
- If
--diris specified: Install to that directory, agent marked ascustom.--diris mutually exclusive with--scopeand--agent. - If
--scope user|projectis specified: Limit detection to the chosen scope.- With
--agent <profile>: Install to that profile's user or project skills directory directly. - Without
--agent: Detect existing skills directories within the chosen scope only. - No detected directory in the chosen scope → Fallback to
<home>/.agents/skills/for--scope useror<cwd>/.agents/skills/for--scope project.
- With
- If
--agentis specified (no--scope): Install to the corresponding Agent's skills directory (existing behaviour, unchanged). - If none of the above is specified:
- Interactive mode (stdin and stdout are both TTY, no
--json): Prompt foruserorprojectscope first, then continue per the--scoperule above. - Non-interactive mode: Auto-scan current directory to detect existing Agent config directories. 1 Agent detected → install directly; multiple → error; none detected → fallback to
<cwd>/.agents/skills/.
- Interactive mode (stdin and stdout are both TTY, no
--dircannot be combined with--scopeor--agent.
Install Paths
Each Agent has both project-level and user-level skills directories. Use --scope user|project to control which one is used.
| Agent | Project-level Path | User-level Path |
|---|---|---|
claude-code |
<project>/.claude/skills/ |
~/.claude/skills/ |
codex |
<project>/.codex/skills/ |
~/.codex/skills/ |
cursor |
<project>/.cursor/skills/ |
~/.cursor/skills/ |
github-copilot |
<project>/.github-copilot/skills/ |
~/.github-copilot/skills/ |
gemini-cli |
<project>/.gemini/skills/ |
~/.gemini/skills/ |
windsurf |
<project>/.windsurf/skills/ |
~/.windsurf/skills/ |
kiro-cli |
<project>/.kiro/skills/ |
~/.kiro/skills/ |
roo |
<project>/.roo/skills/ |
~/.roo/skills/ |
trae |
<project>/.trae/skills/ |
~/.trae/skills/ |
trae-cn |
<project>/.trae-cn/skills/ |
~/.trae-cn/skills/ |
openhands |
<project>/.openhands/skills/ |
~/.openhands/skills/ |
openclaw |
<project>/.openclaw/skills/ |
~/.openclaw/skills/ |
opencode |
<project>/.opencode/skills/ |
~/.opencode/skills/ |
kilo |
<project>/.kilo/skills/ |
~/.kilo/skills/ |
| fallback | <project>/.agents/skills/ |
~/.agents/skills/ |
For Agents not in the list, use --dir to specify the installation path. When --scope user|project finds no matching agent directory, the CLI falls back to the _fallback_ row above.
File Structure After Installation
.codex/skills/pdf-parser/
├── ... # Extracted skill package files
└── .skillhub/
└── metadata.json # Installation metadata
metadata.json example:
{
"registry": "https://skill.xfyun.cn",
"namespace": "global",
"slug": "pdf-parser",
"version": "1.0.0",
"agent": "codex",
"installedAt": "2026-04-28T06:00:00.000Z"
}
📋 Local Management
List Installed Skills
# List all installed skills
skillhub list
# Filter by Agent
skillhub list --agent codex
# Filter by multiple Agents
skillhub list --agent codex --agent claude-code
# Filter by directory
skillhub list --dir ~/.codex/skills
# JSON output
skillhub list --json
Remove Skills
# Remove all local installation targets
skillhub remove pdf-parser
# Remove only specific Agent's installation
skillhub remove pdf-parser --agent codex
# Remove all targets (skip interactive confirmation)
skillhub remove pdf-parser --all
# Remove remote skill (requires authentication, prompts for confirmation)
skillhub remove pdf-parser --remote --namespace myspace
# Skip remote deletion confirmation
skillhub remove pdf-parser --remote --hard --namespace myspace
Parameter exclusivity rules:
--allcannot be used with--agent--remotecannot be used with--agentor--all- Remote deletion in non-interactive environments requires
--hard
Rebuild Local Inventory
skillhub doctor
doctor performs the following operations:
- Scans
<cwd>/.<agent>/skills/<slug>/.skillhub/metadata.json - Groups by
registry + namespace + slug - Backs up old
inventory.json(if exists) - Writes new
inventory.json
If the same skill has version conflicts across different targets, that skill will be skipped and reported.
🚢 Publishing
# Publish directory (auto-packaged as zip)
skillhub publish ./my-skill --namespace myspace
# Publish existing zip file
skillhub publish ./my-skill.zip --namespace myspace
# Specify visibility
skillhub publish ./my-skill --namespace myspace --visibility private
Visibility options:
public(default) — Visible to everyonenamespace-only— Visible to namespace members onlyprivate— Visible to yourself only
After successful publication, the skill detail page URL will be displayed.
⬆️ Self-Update
# Check for new version
skillhub update --check
# Execute update
skillhub update
Update mechanism:
- Installed via npm globally: Auto-executes
npm install -g @astron-team/skillhub@latest - Installed via Bun globally: Auto-executes
bun add -g @astron-team/skillhub@latest - Run via npx: Prompts manual update command
- Unknown installation method: Prompts manual update
🔧 Environment Variables
| Variable | Description | Priority |
|---|---|---|
SKILLHUB_REGISTRY |
Default registry URL | Lower than --registry parameter |
SKILLHUB_TOKEN |
API token | Lower than --token parameter, higher than stored token |
📂 Local File Structure
~/.skillhub/
├── config.json # User configuration (registry, defaultAgent, etc.)
├── credentials.json # API tokens (stored per registry, permissions 0600)
└── inventory.json # Installed skills inventory
📖 Command Reference
| Command | Description |
|---|---|
skillhub help [command] |
Display help information |
skillhub version [--json] |
Display CLI version |
skillhub login --token <token> [--registry <url>] [--json] |
Save token and registry configuration |
skillhub logout [--registry <url>] [--json] |
Remove token for specified registry |
skillhub whoami [--registry <url>] [--token <token>] [--json] |
Validate current token and display user information |
skillhub search <query> [--registry <url>] [--token <token>] [--limit <n>] [--json] |
Search published skills |
skillhub install <slug> [--scope <user|project>] [--namespace <slug>] [--version <v>] [--agent <profile>] [--dir <path>] [--force] [--registry <url>] [--token <token>] [--json] |
Install a skill |
skillhub list [--agent <profile>] [--dir <path>] [--registry <url>] [--json] |
List installed skills |
skillhub remove <slug> [--agent <profile>] [--all] [--remote] [--hard] [--namespace <slug>] [--registry <url>] [--token <token>] [--json] |
Remove a skill |
skillhub doctor [--json] |
Scan project directory and rebuild local inventory |
skillhub publish <path> [--namespace <slug>] [--visibility <v>] [--registry <url>] [--token <token>] [--json] |
Publish a skill |
skillhub update [--check] [--json] |
Check or execute CLI self-update |
🔒 Security Notes
- Tokens are stored only in user directory
~/.skillhub/credentials.json - On Linux/macOS, credential file permissions are automatically set to
0600 - Tokens are never written to any project-local files
- Remote delete operations require explicit confirmation or
--hardparameter removecommand validates path safety to prevent deletion of non-skill directories
🐛 Troubleshooting
Authentication Failure
# Verify token validity
skillhub whoami
# Re-login
skillhub login --token sk_xxx
Network Error
# Check if registry is accessible
curl https://skill.xfyun.cn/api/cli/v1/skills/search?q=test&limit=1
# Use alternative registry
skillhub search test --registry https://skillhub.example.com
Installation Directory Conflict
# Use --force to overwrite
skillhub install pdf-parser --force
# Or remove first then install
skillhub remove pdf-parser
skillhub install pdf-parser
Corrupted Inventory
# Rebuild inventory
skillhub doctor
📚 Documentation
📄 License
Apache-2.0
Copyright 2026 iFlytek Co., Ltd.