Open-source extension manager for AI coding agents. Search, install, and manage skills, agents, and commands from a central catalog.
| Agent | Status | Directories |
|---|---|---|
| Claude Code | Full support | ~/.claude/ / .claude/ |
| Cursor | Full support | ~/.cursor/ / .cursor/ |
| Copilot (VS Code) | Full support | ~/.config/Code/User/ / .github/ |
| Codex (OpenAI) | Full support | ~/.codex/ / .codex/ |
Skill-Hub automatically detects the active agent via env vars (CODEX_SANDBOX → codex, GITHUB_COPILOT → copilot, CURSOR_TRACE → cursor) and directory presence (.codex/, .cursor/). You can also set it explicitly:
skill-hub config set agent cursor| OS | Status | Notes |
|---|---|---|
| macOS | Full support | — |
| Linux | Full support | — |
| Windows | Full support | cmd.exe, PowerShell, Windows Terminal |
npm install -g @emaxe/skill-hubWindows-specific behavior:
| Component | Behavior |
|---|---|
Agent launcher -A |
Generates .bat script (CRLF) instead of .sh; self-deletes via del "%~f0" |
| Copilot adapter | Looks for VS Code config in %APPDATA%\Code\User\ |
agents-conventions enable |
Creates symlinks: dir → fallback junction → fallback directory copy |
| Path comparison | Case-insensitive (relevant for Claude Code adapter) |
Note: Git Bash and WSL are not target platforms. Native Windows is recommended.
Skill-Hub manages three types of extensions:
| Type | Description | Example installation (Claude Code) |
|---|---|---|
Skill (SKILL.md) |
AI instructions activated by context | ~/.claude/skills/{name}/SKILL.md |
Agent (AGENT.md) |
Specialized AI assistants | ~/.claude/agents/{name}.md |
Command (COMMAND.md) |
Custom slash commands | .claude/commands/{name}.md |
Each agent stores extensions in its own directory structure. Extensions can declare platform support via the platforms field — incompatible combinations are filtered automatically.
Skills can contain additional files besides the main SKILL.md — scripts, templates, configurations, data. The entire skill directory is installed and uploaded as a whole.
skills/clean-runner/
├── SKILL.md # Main file (required)
├── runner.sh # Shell script
├── config.json # Configuration
├── .skillignore # Files to exclude (not copied)
└── filters/
├── common.grep # Filter patterns
└── npm.grep
Installation behavior:
| Adapter | Main file | Additional files |
|---|---|---|
| Claude Code / conventions | Full directory copied | In the same directory |
| Cursor | Transformed (Cursor frontmatter) | Copied as-is |
| Copilot | Marker-injection into config | .github/skills/{name}/ |
| Codex | Marker-injection into config | .codex/skills/{name}/ |
.skillignore — files excluded from copying (the .skillignore file itself is also not copied). Symlinks are ignored. Maximum directory size is 1 MB; binary files are prohibited when uploading to the catalog.
npm install -g @emaxe/skill-hub
# Configure for your agent (claude-code | cursor | copilot | codex)
skill-hub setup-mcp --agent claude-codeAfter restarting the agent, MCP tools will be available automatically.
# For Claude Code:
mkdir -p ~/.claude/skills/skill-hub
cp "$(npm root -g)/@emaxe/skill-hub/base-skills/claude-code/SKILL.md" ~/.claude/skills/skill-hub/SKILL.md
# For Cursor:
mkdir -p ~/.cursor/skills/skill-hub
cp "$(npm root -g)/@emaxe/skill-hub/base-skills/cursor/SKILL.md" ~/.cursor/skills/skill-hub/SKILL.md
# For Codex:
mkdir -p ~/.codex
cp "$(npm root -g)/@emaxe/skill-hub/base-skills/codex/SKILL.md" ~/.codex/AGENTS.mdSkill-Hub supports direct installation of skills from skills.sh — a public AI skills registry by Vercel Labs. Works both via CLI and TUI.
skill-hub search --source skillssh react --limit 5# By full ID (recommended)
skill-hub install skillssh:vercel-labs/agent-skills@vercel-react-best-practices --agent claude-code --project
# By slug (skills.sh searches by ID)
skill-hub install skillssh:vercel-react-best-practices --agent claude-code --project
# By owner/repo — lists skills if multiple exist in the repo
skill-hub install skillssh:vercel-labs/agent-skills --agent claude-code --project- CLI calls
https://skills.sh/api/searchordownloadAPI - Downloads all skill files to a temporary directory
- Installs via the standard adapter (like a regular catalog skill)
- Saves
source: "skillssh:owner/repo@slug"in the registry for updates
# Update all skills (including skills.sh)
skill-hub update --agent claude-code
# Update a specific skills.sh skill
skill-hub update vercel-react-best-practices --agent claude-codeFor skills.sh skills, the update compares the hash from the API — if changed, it re-downloads and reinstalls.
In the Catalog tab, type a query in the search field — results from the local catalog appear first, followed by live results from skills.sh (marked with [skills.sh] source). Press Enter on a skills.sh result to open its card, then i to install.
Installed skills.sh skills behave like catalog extensions: appear in the Installed tab with version = API hash, support d (remove), m (move), u (update), and startup sync (if recorded in .skill-hub.json).
Note: The
c(view content) hotkey is hidden for uninstalled skills.sh items because the skill files are not cached locally until installation.
Run skill-hub without arguments for a fullscreen interface:
skill-hubMinimum terminal size: 60×12. TUI adapts to window size: at width < 80 cols secondary table columns are hidden and labels are shortened; at height < 16 rows the stats panel is hidden.
| Key | Action |
|---|---|
Tab / Shift+Tab |
Switch tabs |
1 / 2 / 3 |
Direct jump: Catalog / Installed / Settings |
Esc |
Back (on nested screens) |
Ctrl+Q |
Exit |
Search and install extensions from the catalog.
| Key | Action |
|---|---|
/ |
Focus search field |
↑ ↓ |
Navigate list |
Enter |
Open extension card |
i |
Install selected extension |
The search field supports type filters: agent:reviewer, skill:git.
Manage installed extensions.
| Key | Action |
|---|---|
↑ ↓ |
Navigate list |
Enter |
Open extension card |
d |
Delete extension (with confirmation) |
m |
Move (global ↔ project) |
u |
Update selected extension |
U |
Update all extensions |
p |
Upload to catalog (if you have access) |
/ |
Focus search field |
s |
Toggle scope (global / project / all) |
Pressing Enter opens the extension card with detailed info and available actions:
From the card you can view the extension file content (c):
Two sub-tabs: General and AI Agents.
| Field | Key | Description |
|---|---|---|
| Agent | ← → |
Switch between claude-code, cursor, copilot, codex, agents-conventions |
| Scope | ← → |
Default scope: global or project |
| Project | — | Current project name |
| Registry URL | Enter |
Edit catalog repository URL |
| Update cache | Enter |
Download latest catalog version |
| AI agent dirs in .gitignore | ← → |
Add agent directories to .gitignore (project config only) |
| Install MCP | Enter |
Register MCP server for current agent |
| Install base skill | Enter |
Install bootstrap skill |
| Update CLI | Enter |
Update skill-hub itself to the latest version |
| Save as global | Enter |
Copy project config to global |
| Reset to global | Enter |
Restore project config from global |
| Sync | Enter |
Check missing/untracked extensions |
Configure AI agent launch through skill-hub:
| Field | Key | Description |
|---|---|---|
| claude-code / cursor / copilot / codex | ← → |
Enable/disable agent |
| Proxy URL | Enter |
Common proxy for all agents |
| Use proxy (per-agent) | ← → |
Toggle proxy for a specific agent |
Upload your own extensions to the catalog repository.
| Key | Action |
|---|---|
↑ ↓ |
Navigate extension list |
Space |
Select/deselect extension |
a |
Select all |
s |
Toggle scope (global / project) |
c |
View selected extension content |
b |
Edit branch name |
e |
Edit PR title |
Enter |
Start upload |
Esc |
Back |
After upload:
| o | Open link to create a merge request in the browser |
When starting TUI, extensions are automatically checked against the project config (.skill-hub.json). If discrepancies are found, a dialog appears:
- Missing — extensions from config not present on disk
- Untracked — extensions on disk not in config
| Key | Action |
|---|---|
Enter |
Sync (install + add to config) |
p |
Upload to catalog (for extensions not in the catalog) |
Esc |
Skip |
If gitignoreAgentDirs is enabled in the project config, TUI checks whether all AI agent folders (.claude/, .cursor/, .github/, .codex/, .agents/, .cursorrules) are added to .gitignore. If any are missing, a dialog appears:
| Key | Action |
|---|---|
Enter |
Add to .gitignore |
Esc |
Skip |
Note: all hotkeys work in Russian keyboard layout (й→q, ц→w, у→e, etc.)
The MCP server provides 7 tools for managing extensions from within an AI agent:
# Automatic setup
skill-hub setup-mcp --agent claude-codeAfter setup, the agent gets access to:
search_extensions— catalog searchinstall_extension— installation with automatic dependency resolutionremove_extension— removalmove_extension— move between scopeslist_extensions— list installedsuggest_extensions— project-based recommendationsget_extension_info— full extension info
If AI agents work through a proxy (e.g., for API access):
Via TUI:
- Open Settings → AI Agents sub-tab
- Go to Proxy URL → press
Enter - Enter the proxy URL
- Enable "Use proxy" for the desired agents
Via CLI:
skill-hub config set aiAgents.proxy "http://proxy.example.com:8080"Skill-Hub can launch AI agents directly, applying proxy and other settings:
# Launch via exec
skill-hub -a claude-code "write a test for auth.ts"
# Launch via temporary script
skill-hub -A cursor "review this code"By default skill-hub uses the catalog at https://github.com/emaxe/skill-hub-catalog.git. You can switch to your own fork or corporate catalog.
- Open Settings → Registry URL →
Enter - Enter the new repository URL (HTTPS or SSH)
- Confirm — old cache will be removed
- Catalog will auto-download from the new repository
When switching repositories, the extension list in the project config
.skill-hub.jsonwill be cleared since they are tied to a specific catalog. Extension files on disk will remain.
skill-hub config set registryUrl "https://gitlab.example.com/team/my-catalog.git"Your catalog must contain:
catalog.json— extension index (auto-generated byskill-hub-catalogscripts)- Directories
skills/,agents/,commands/with extensions
A history of used URLs is kept (up to 6 entries) and available when editing via TUI.
You can upload your own extensions to the catalog repository directly from skill-hub.
- You have write access to the catalog repository (git push)
- The extension has a filled frontmatter (name, description, version, author)
Note: built-in base CLI skills (
skill-hub,agents-conventions,init-agents,exit-agents) are automatically excluded from the upload candidate list.
-
Open the upload screen via one of:
- In the Installed tab press
p - In an installed extension card select "Upload to catalog"
- In the sync dialog press
p(for extensions not in the catalog)
- In the Installed tab press
-
Select extensions to upload:
Space— select/deselecta— select alls— toggle scopec— preview content before upload
-
Configure options:
- Branch name (auto:
upload/{username}-{timestamp}) - PR title (auto-generated from selected extensions)
- Branch name (auto:
-
Press
Enterto upload — extensions will be:- Validated (frontmatter, kebab-case names)
- Copied into the catalog structure
- Committed and pushed to a separate branch
-
Create a merge request — press
oto open the MR/PR form in the browser
---
name: my-extension
description: "Extension description"
version: 1.0.0
author: "Author Name"
tags: tag1, tag2, tag3
platforms: claude-code, cursor
---Mode for multi-agent projects — a shared .agents/ directory with extensions available to all agents via symlinks.
skill-hub agents-conventions enableOr via TUI: Settings → Agent → agents-conventions → Init Conventions.
What happens:
.agents/is created withskills/,agents/,commands/subdirectoriesAGENTS.mdis created (common project rules)- Symlinks are created:
.claude/→.agents/,.cursor/→.agents/,.codex/→.agents/ - For Copilot a thin pointer is created at
.github/copilot-instructions.md - Bootstrap skill
agents-conventionsis installed globally in all AI agents - Skills
init-agents/exit-agentsare installed to~/.skill-hub/bootstrap/
skill-hub agents-conventions disableExtensions migrate back to individual agent directories, symlinks are removed.
Search extensions by name, tags, keywords.
skill-hub search git
skill-hub search agent:reviewer
skill-hub search "testing typescript"Install an extension. Without prefix — skill, with prefix — by type.
skill-hub install git-commit-and-push
skill-hub install agent:code-reviewer
skill-hub install command:deploy-check
skill-hub install git-helper --scope=global
skill-hub install git-helper -y # no confirmationRemove an installed extension.
skill-hub remove git-commit-and-push
skill-hub remove agent:code-reviewerList installed extensions with versions and scope.
skill-hub list
skill-hub list --type=agentMove an extension between scopes.
skill-hub move git-helper project
skill-hub move agent:code-reviewer globalDetailed info about a catalog extension.
skill-hub info git-commit-and-push
skill-hub info agent:code-reviewerUpdate extensions to the latest versions.
skill-hub update # update all
skill-hub update agent:code-reviewer # update specific
skill-hub -u code-reviewer # shorthand
skill-hub -U # update all (shorthand)Manage configuration.
skill-hub config set agent cursor
skill-hub config set registryUrl "https://gitlab.example.com/catalog.git"
skill-hub config set defaultScope global
skill-hub config get agent
skill-hub config resetRegister MCP server for an AI agent.
skill-hub setup-mcp --agent claude-code
skill-hub setup-mcp --agent cursor
skill-hub setup-mcp --agent copilot
skill-hub setup-mcp --agent codexManage multi-agent mode.
skill-hub agents-conventions enable
skill-hub agents-conventions disableFull help on commands, flags, and options.
skill-hub help
skill-hub -h
skill-hub --helpskill-hub -a claude-code "task" # launch agent via exec
skill-hub -A cursor "task" # launch via temp script
skill-hub --then # chain two commandsThe .skill-hub.json file in the project root allows you to:
- Pin the set of extensions for the project (team sync)
- Override global settings for a specific project
- Auto-sync extensions when opening the project in TUI
- Control adding AI agent folders to
.gitignore
{
"registryUrl": "https://github.com/emaxe/skill-hub-catalog.git",
"project": "my-project",
"gitignoreAgentDirs": true,
"extensions": [
{ "type": "skill", "name": "git-commit-and-push", "version": "1.0.0", "scope": "project" },
{ "type": "agent", "name": "code-reviewer", "version": "1.0.0", "scope": "global" }
]
}Colleagues cloning the project will see the sync dialog on first skill-hub launch and can auto-install all listed extensions.
skill-hub (this repo)
├── cli/ # CLI + MCP server (npm: @emaxe/skill-hub)
│ ├── src/
│ │ ├── adapters/ # Agent adapters (claude-code, cursor, copilot, codex)
│ │ ├── commands/ # CLI commands
│ │ └── tui/ # Interactive TUI (Ink/React)
│ └── base-skills/ # Bootstrap skills for each agent
├── docs/ # Feature documentation
└── CLAUDE.md # Instructions for AI agents
skill-hub-catalog (separate repo)
├── skills/ # Published skills
├── agents/ # Published agents
├── commands/ # Published commands
├── catalog.json # Auto-generated index
├── schema/ # Frontmatter validation schemas
└── docs/ # Extension creation guides
Delivery flow:
git clone --depth 1 skill-hub-catalog→~/.skill-hub/(local cache). Protected files (installed.json,bootstrap/) are preserved during re-clone by cloning into a temporary directory and moving contents atomically- Installation = adapter copies extension to the agent's target directory
- Update =
git pullin cache, re-copy installed extensions
cd cli && npm run build # build
npm link # global link
skill-hub search git # test
npm unlink -g @emaxe/skill-hub # remove link
cd cli && npm test # tests (290 tests)After source changes, just rebuild (npm run build) — the link updates automatically.
Extensions (skills, agents, commands) are published to skill-hub-catalog. See the docs/ directory there for creation guides.
For CLI improvements — open a PR in this repository. Details in CONTRIBUTING.md.





