A lightweight desktop app to manage, sync, and organize AI agent skills across 50+ coding tools β Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
4,638
stars
519
commits
Rust
primary language
Sep 8, 2026
updated
One app to manage AI agent skills across all your coding tools.
π¬ Video intro (YouTube) Β Β·Β θ§ι’δ»η» (Bilibili)
δΈζθ―΄ζ Β Β·Β @JayTL00 on X Β Β·Β Buy me a coffee
Install Skills β Marketplace

Global Workspace

Agent Workspace

Project Workspace

Backup & Multi-Device Sync

Settings

.zip / .skill archives, or the skills.sh marketplace. Everything goes into one central repo, which defaults to ~/.skills-manager and can be customized in Settings.SKILL.md / README.md, inspect source metadata, and compare local content with the upstream version inside the app.
~/.claude/skills/ for Claude Code). Each agent page lists everything in that folder β even skills installed without Skills Manager β so you can add, remove, or adopt them; the All Agents overview manages every agent at once.<project>/.claude/skills/). Skills added here only apply to that project.The Backup page (sidebar) keeps your skill library versioned in a Git repository. One device gets versioned backup with restorable snapshots; several devices connected to the same repository stay in sync with each other automatically. The remote stays a plain Git repository β you can git clone it anywhere, no lock-in.
skills-manager-backup repository for you. The token is stored in the OS keychain β never in files or the repo config.Skills, tags, presets, and per-agent skill toggles are backed up. Secrets (API keys, tokens, proxy settings) and machine-specific wiring never leave the machine. Skills over 100 MB stay local and are excluded from backup automatically (labeled on the Backup page). The SQLite database is not in Git β it stores metadata that is rebuilt from the skill files.
The Backup page offers three levels: disconnect this machine (other devices and remote data untouched), revoke the GitHub authorization, or delete the remote backup entirely (routed through GitHub's own type-the-name confirmation).
52 agents are supported out of the box, including:
Claude Code Β· Codex Β· Cursor Β· GitHub Copilot Β· Gemini CLI Β· OpenCode Β· OpenClaw Β· Hermes Agent Β· OpenHands Β· Cline Β· Goose Β· Windsurf Β· Continue Β· Grok Β· Antigravity Β· Qwen Code Β· Crush Β· Kilo Code Β· Roo Code Β· Amp Β· Kiro CLI Β· Droid Β· TRAE IDE Β· Warp Β· Qoder Β· CodeBuddy
Settings lists them all, leading with the ones detected on your machine. You can also add custom tools there and manage their skills the same way.
The Help button in Settings mirrors the current product flow: recommended workflows, presets, skill installation, the Library (with the Untagged filter and per-card delete), the Global Workspace and the + Add Skills sheet, Project Workspaces with the multi-agent target picker, backup & multi-device sync, and environment-level settings (including Export Logs for issue reports). It is intended as the in-app version of this quick-start guide.
| Layer | Tech |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS |
| Desktop | Tauri 2 |
| Backend | Rust |
| Storage | SQLite (rusqlite) |
| i18n | react-i18next |
npm install
npm run tauri:dev
The repository includes an agent-friendly CLI built on the same Rust shared core used by the desktop app. Both the CLI and the desktop app go through the same SQLite database, central library, and sync engine.
# Repository / library overview
npm run cli -- repo status
npm run cli -- skills list
npm run cli -- skills show db
# Install skills (default: enter library only β does NOT sync to agents)
npm run cli -- skills install ./my-skill # local path
npm run cli -- skills install https://github.com/foo/bar.git # git URL
npm run cli -- skills install vercel-labs/agent-skills@react-best-practices # skills.sh
npm run cli -- skills deploy <ref> --agent claude_code --agent codex # deploy to both agents
# Update / check from upstream (git skills re-clone, local skills re-import source).
# An update replaces the skill's folder, so if the new version lacks paths that
# exist now, the CLI applies nothing and lists them as `held_back_removals`
# instead β confirming the loss needs a person, so only the app can proceed.
npm run cli -- skills update --all
npm run cli -- skills check --all
# Re-point an installed skill at a git source, keeping its id, tags, presets
# and deployments (e.g. a local skill you have since published)
npm run cli -- skills set-source <ref> --git-url https://github.com/you/skills/tree/main/my-skill --dry-run
npm run cli -- skills set-source <ref> --git-url you/skills --subpath my-skill --force
# Search the skills.sh marketplace (no API key needed)
npm run cli -- skills search react --limit 5
# Remove (--yes required; --dry-run available)
npm run cli -- skills remove <ref> --dry-run
npm run cli -- skills remove <ref> --yes
# Organize preset membership (does not change agent files)
npm run cli -- presets add-skill <preset> <ref>
npm run cli -- presets remove-skill <preset> <ref>
# Inspect or change actual per-agent deployments
npm run cli -- skills status <ref>
npm run cli -- skills undeploy <ref> --agent codex --dry-run
# Legacy exclusive active-preset sync
npm run cli -- skills sync --dry-run
npm run cli -- skills sync --tool claude_code
# Adopt skills that already exist in an agent directory (e.g. ~/.claude/skills/)
npm run cli -- skills adopt ~/.claude/skills --dry-run
npm run cli -- skills adopt ~/.claude/skills
# Tag
npm run cli -- skills tag add <ref> web frontend
npm run cli -- skills tag set <ref> web frontend
npm run cli -- skills tag rename frontend web
npm run cli -- skills tag delete obsolete --dry-run
npm run cli -- skills tag list
# Presets (CRUD and membership are organization-only; deploy changes agent files)
npm run cli -- presets list
npm run cli -- presets create "Web Dev" --description "Frontend work"
npm run cli -- presets update "Web Dev" --name Frontend
npm run cli -- presets deploy Frontend --agent codex
npm run cli -- presets undeploy Frontend --agent claude_code
npm run cli -- presets status Frontend
npm run cli -- presets add-skill <preset> <skill>
npm run cli -- presets remove-skill <preset> <skill>
# Export one skill to an arbitrary directory (one-shot copy, not managed)
npm run cli -- skills export db --dest ~/.claude/skills/db
# Git-backed skills repo
npm run cli -- git status
npm run cli -- git pull
npm run cli -- git commit -m "chore: update skills"
Available command groups:
repo β inspect or change the configured base directoryagents (tools alias) β list agents and globally enable or disable themskills β manage the central library and real per-agent deployments (deploy / undeploy / status)presets β create, update, delete, organize, deploy, undeploy, and inspect presetsgit β operate on the git-backed skills/ repository (clone, pull, push, commit, versions, restore)Extra flags:
--skills-root <path> β operate on a cloned/exported skills repo directly instead of the local app default. The manager's state (DB, presets, cache, logs) lives in ~/.skills-manager/external/<name>-<hash>/, namespaced by the canonical path of the skills root, so the external checkout itself stays clean.--json β machine-readable output for scripts/agentsnpm run -s cli -- --skills-root /path/to/my-skills --json skills list
Agents and scripts that invoke skills-manager-cli directly (without npm run) need the binary on PATH. Install it with:
npm run cli:install
# equivalent to:
# cargo install --path src-tauri --bin skills-manager-cli --locked --force
This drops the binary at ~/.cargo/bin/skills-manager-cli. Re-run after pulling updates to refresh it.
Official releases also publish standalone CLI binaries for macOS arm64/x64, Windows x64, and Linux x64. Download the matching skills-manager-cli-* asset, make it executable on macOS/Linux, and place it on PATH.
The CLI and desktop app share the same SQLite database and repository lock. The app's filesystem watcher normally refreshes after CLI metadata or deployment changes. If the app was suspended while a command ran, trigger one manual refresh.
npm run tauri:build
npm run cli:build
Releases from v1.29.0 onward are signed with an Apple Developer ID certificate and notarized by Apple, so they open normally β no warning, no Terminal commands. If you are on an older build, upgrading is the fix.
Releases up to and including v1.28.5 predate notarization, and macOS blocks them:
"Apple could not verify β¦ is free of malware" or "App can't be opened because it is from an unidentified developer" (v1.20.0 β v1.28.5) β On macOS 15 (Sequoia) the dialog above only offers Move to Trash / Done: click Done, then open System Settings β Privacy & Security and click Open Anyway (it appears after the first blocked launch). On older macOS you can instead right-click the app in Finder and choose Open, then confirm in the dialog.
"App is damaged and can't be opened" (v1.19.0 and earlier) β Run this in Terminal, then open the app again:
xattr -cr /Applications/skills-manager.app
Replace the path with wherever you placed the .app file if it's not in /Applications.
Upgrading to a notarized build changes the app's code signature, so macOS may ask again for permission to read the skills-manager-git-backup keychain entry. Click Always Allow β the signing identity is stable from v1.29.0 onward, so later updates should not ask again.
MIT
Rust
66.9%
TypeScript
31.6%
A lightweight desktop app to manage, sync, and organize AI agent skills across 50+ coding tools β Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
4,638
stars
519
commits
Rust
primary language
Sep 8, 2026
updated
One app to manage AI agent skills across all your coding tools.
π¬ Video intro (YouTube) Β Β·Β θ§ι’δ»η» (Bilibili)
δΈζθ―΄ζ Β Β·Β @JayTL00 on X Β Β·Β Buy me a coffee
Install Skills β Marketplace

Global Workspace

Agent Workspace

Project Workspace

Backup & Multi-Device Sync

Settings

.zip / .skill archives, or the skills.sh marketplace. Everything goes into one central repo, which defaults to ~/.skills-manager and can be customized in Settings.SKILL.md / README.md, inspect source metadata, and compare local content with the upstream version inside the app.
~/.claude/skills/ for Claude Code). Each agent page lists everything in that folder β even skills installed without Skills Manager β so you can add, remove, or adopt them; the All Agents overview manages every agent at once.<project>/.claude/skills/). Skills added here only apply to that project.The Backup page (sidebar) keeps your skill library versioned in a Git repository. One device gets versioned backup with restorable snapshots; several devices connected to the same repository stay in sync with each other automatically. The remote stays a plain Git repository β you can git clone it anywhere, no lock-in.
skills-manager-backup repository for you. The token is stored in the OS keychain β never in files or the repo config.Skills, tags, presets, and per-agent skill toggles are backed up. Secrets (API keys, tokens, proxy settings) and machine-specific wiring never leave the machine. Skills over 100 MB stay local and are excluded from backup automatically (labeled on the Backup page). The SQLite database is not in Git β it stores metadata that is rebuilt from the skill files.
The Backup page offers three levels: disconnect this machine (other devices and remote data untouched), revoke the GitHub authorization, or delete the remote backup entirely (routed through GitHub's own type-the-name confirmation).
52 agents are supported out of the box, including:
Claude Code Β· Codex Β· Cursor Β· GitHub Copilot Β· Gemini CLI Β· OpenCode Β· OpenClaw Β· Hermes Agent Β· OpenHands Β· Cline Β· Goose Β· Windsurf Β· Continue Β· Grok Β· Antigravity Β· Qwen Code Β· Crush Β· Kilo Code Β· Roo Code Β· Amp Β· Kiro CLI Β· Droid Β· TRAE IDE Β· Warp Β· Qoder Β· CodeBuddy
Settings lists them all, leading with the ones detected on your machine. You can also add custom tools there and manage their skills the same way.
The Help button in Settings mirrors the current product flow: recommended workflows, presets, skill installation, the Library (with the Untagged filter and per-card delete), the Global Workspace and the + Add Skills sheet, Project Workspaces with the multi-agent target picker, backup & multi-device sync, and environment-level settings (including Export Logs for issue reports). It is intended as the in-app version of this quick-start guide.
| Layer | Tech |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS |
| Desktop | Tauri 2 |
| Backend | Rust |
| Storage | SQLite (rusqlite) |
| i18n | react-i18next |
npm install
npm run tauri:dev
The repository includes an agent-friendly CLI built on the same Rust shared core used by the desktop app. Both the CLI and the desktop app go through the same SQLite database, central library, and sync engine.
# Repository / library overview
npm run cli -- repo status
npm run cli -- skills list
npm run cli -- skills show db
# Install skills (default: enter library only β does NOT sync to agents)
npm run cli -- skills install ./my-skill # local path
npm run cli -- skills install https://github.com/foo/bar.git # git URL
npm run cli -- skills install vercel-labs/agent-skills@react-best-practices # skills.sh
npm run cli -- skills deploy <ref> --agent claude_code --agent codex # deploy to both agents
# Update / check from upstream (git skills re-clone, local skills re-import source).
# An update replaces the skill's folder, so if the new version lacks paths that
# exist now, the CLI applies nothing and lists them as `held_back_removals`
# instead β confirming the loss needs a person, so only the app can proceed.
npm run cli -- skills update --all
npm run cli -- skills check --all
# Re-point an installed skill at a git source, keeping its id, tags, presets
# and deployments (e.g. a local skill you have since published)
npm run cli -- skills set-source <ref> --git-url https://github.com/you/skills/tree/main/my-skill --dry-run
npm run cli -- skills set-source <ref> --git-url you/skills --subpath my-skill --force
# Search the skills.sh marketplace (no API key needed)
npm run cli -- skills search react --limit 5
# Remove (--yes required; --dry-run available)
npm run cli -- skills remove <ref> --dry-run
npm run cli -- skills remove <ref> --yes
# Organize preset membership (does not change agent files)
npm run cli -- presets add-skill <preset> <ref>
npm run cli -- presets remove-skill <preset> <ref>
# Inspect or change actual per-agent deployments
npm run cli -- skills status <ref>
npm run cli -- skills undeploy <ref> --agent codex --dry-run
# Legacy exclusive active-preset sync
npm run cli -- skills sync --dry-run
npm run cli -- skills sync --tool claude_code
# Adopt skills that already exist in an agent directory (e.g. ~/.claude/skills/)
npm run cli -- skills adopt ~/.claude/skills --dry-run
npm run cli -- skills adopt ~/.claude/skills
# Tag
npm run cli -- skills tag add <ref> web frontend
npm run cli -- skills tag set <ref> web frontend
npm run cli -- skills tag rename frontend web
npm run cli -- skills tag delete obsolete --dry-run
npm run cli -- skills tag list
# Presets (CRUD and membership are organization-only; deploy changes agent files)
npm run cli -- presets list
npm run cli -- presets create "Web Dev" --description "Frontend work"
npm run cli -- presets update "Web Dev" --name Frontend
npm run cli -- presets deploy Frontend --agent codex
npm run cli -- presets undeploy Frontend --agent claude_code
npm run cli -- presets status Frontend
npm run cli -- presets add-skill <preset> <skill>
npm run cli -- presets remove-skill <preset> <skill>
# Export one skill to an arbitrary directory (one-shot copy, not managed)
npm run cli -- skills export db --dest ~/.claude/skills/db
# Git-backed skills repo
npm run cli -- git status
npm run cli -- git pull
npm run cli -- git commit -m "chore: update skills"
Available command groups:
repo β inspect or change the configured base directoryagents (tools alias) β list agents and globally enable or disable themskills β manage the central library and real per-agent deployments (deploy / undeploy / status)presets β create, update, delete, organize, deploy, undeploy, and inspect presetsgit β operate on the git-backed skills/ repository (clone, pull, push, commit, versions, restore)Extra flags:
--skills-root <path> β operate on a cloned/exported skills repo directly instead of the local app default. The manager's state (DB, presets, cache, logs) lives in ~/.skills-manager/external/<name>-<hash>/, namespaced by the canonical path of the skills root, so the external checkout itself stays clean.--json β machine-readable output for scripts/agentsnpm run -s cli -- --skills-root /path/to/my-skills --json skills list
Agents and scripts that invoke skills-manager-cli directly (without npm run) need the binary on PATH. Install it with:
npm run cli:install
# equivalent to:
# cargo install --path src-tauri --bin skills-manager-cli --locked --force
This drops the binary at ~/.cargo/bin/skills-manager-cli. Re-run after pulling updates to refresh it.
Official releases also publish standalone CLI binaries for macOS arm64/x64, Windows x64, and Linux x64. Download the matching skills-manager-cli-* asset, make it executable on macOS/Linux, and place it on PATH.
The CLI and desktop app share the same SQLite database and repository lock. The app's filesystem watcher normally refreshes after CLI metadata or deployment changes. If the app was suspended while a command ran, trigger one manual refresh.
npm run tauri:build
npm run cli:build
Releases from v1.29.0 onward are signed with an Apple Developer ID certificate and notarized by Apple, so they open normally β no warning, no Terminal commands. If you are on an older build, upgrading is the fix.
Releases up to and including v1.28.5 predate notarization, and macOS blocks them:
"Apple could not verify β¦ is free of malware" or "App can't be opened because it is from an unidentified developer" (v1.20.0 β v1.28.5) β On macOS 15 (Sequoia) the dialog above only offers Move to Trash / Done: click Done, then open System Settings β Privacy & Security and click Open Anyway (it appears after the first blocked launch). On older macOS you can instead right-click the app in Finder and choose Open, then confirm in the dialog.
"App is damaged and can't be opened" (v1.19.0 and earlier) β Run this in Terminal, then open the app again:
xattr -cr /Applications/skills-manager.app
Replace the path with wherever you placed the .app file if it's not in /Applications.
Upgrading to a notarized build changes the app's code signature, so macOS may ask again for permission to read the skills-manager-git-backup keychain entry. Click Always Allow β the signing identity is stable from v1.29.0 onward, so later updates should not ask again.
MIT
Rust
66.9%
TypeScript
31.6%