skills-manager
The local control plane for your AI coding-agent skills. Create, organize, sync, back up, and quality-check SKILL.md skills across every agent you use — from one CLI and one local web UI.
skills-manageron GitHub:udayvarmora07/skills-manager. PyPI badge tracks a future release:skill-control-planeis not on PyPI yet, so install from source orpip installthe CI-built wheel/sdist below. Distribution nameskill-control-plane(skills-mgrentry point) is reserved for that release.
Why this exists
The Agent Skills format (SKILL.md) is now an open standard supported by Claude Code, Cursor, Gemini CLI, OpenCode, Copilot/VS Code, Goose, Amp, and more. The ecosystem has skill libraries (vercel-labs/agent-skills), installers (skills.sh), and a spec — but nobody owns the management problem:
- The same skill copy-pasted into
~/.claude/skills,~/.codex/skills, Cursor dirs… edits diverge. - Vague descriptions cause false activation or misses; oversized bodies eat context.
- No versioning, no safe update/rollback, no backup story, no cross-tool view.
skills-manager fills that gap: one store, every scope, full lifecycle.
| skills-manager | skills.sh / npx skills add |
skill libraries | |
|---|---|---|---|
| Install remote skills | ✅ (via install) |
✅ | — (source) |
| Create / edit / validate locally | ✅ | — | — |
| Manage across all your agents | ✅ (--scope all) |
single-target | — |
| Sync + dedup between agents | ✅ | — | — |
| Version history + trash/rollback | ✅ | — | — |
| Token-footprint budgeting | ✅ (tokens) |
— | — |
| Local web UI | ✅ | — | — |
Install
Requires Python ≥ 3.10. The runtime is stdlib-only — no dependencies.
PyPI is not published yet (see .github/workflows/release.yml for the
controlled Trusted Publishing path). Until the first GitHub Release lands:
pipx install skill-control-plane # recommended (isolated)
# or
pip install skill-control-plane
Run without installing:
git clone https://github.com/udayvarmora07/skills-manager
cd skills-manager
python3 -m skillsmgr --help
Quickstart
# 1. See everything you have, everywhere
skills-mgr list --scope all
# 2. Create a skill once…
skills-mgr create my-workflow -d "Deploys our staging stack. Use when shipping to staging."
# 3. …sync it to every agent you use
skills-mgr sync my-workflow
# 4. Or manage it visually (localhost only, no build step, works offline)
skills-mgr webui
More:
skills-mgr search "deploy" --scope all # scored search across agents
skills-mgr tokens --scope all # context-footprint budgeting
skills-mgr validate --all # spec lint incl. description/body guidance
skills-mgr export # timestamped backup tarball
skills-mgr install vercel-labs/agent-skills --dry-run # preview remote install
Agent scopes
One command surface, per-agent directories underneath:
| Scope | Directory |
|---|---|
global (default) |
manager store (~/.local/share/skills-manager/skills/) |
claude-code |
~/.claude/skills |
codex |
~/.codex/skills |
cursor |
~/.cursor/skills |
opencode |
~/.config/opencode/skills |
gemini |
~/.gemini/skills |
commandcode |
~/.commandcode/skills |
agents |
~/.agents/skills |
all |
merged read-only view |
list, view, search, doctor, stats accept --scope; sync copies between scopes; tokens/install have their own scope semantics. Agent-scope writes go straight to the agent dir (no DB) — disable renames SKILL.md ⇄ SKILL.md.disabled in place, which Claude Code and Command Code both respect.
Web UI
skills-mgr webui # http://127.0.0.1:8765, opens browser
skills-mgr webui --no-browser # server only
skills-mgr webui --port 9000 # custom port
Stdlib ThreadingHTTPServer backend + vendored Vue 3 (no npm, no CDN, works offline). Scope switcher, live search, trash with undo, validate/doctor/stats/history, templates, tar export plus tar/ZIP import, sync modal. Binds loopback only — never expose it; there is no auth (see Threat model).
Data model
- Filesystem is the source of truth:
<data>/skills/<name>/SKILL.md. - SQLite is a rebuildable index only (
db rebuild/db resyncrepair any drift; never hand-edit it). - Data dir:
$SKILLS_MANAGER_DATA→$XDG_DATA_HOME→~/.local/share, then/skills-manager.
CLI reference
37 invocable names: 27 top-level commands + 7 trash/templates/db subcommands + 3 ls/rm/gui aliases. Exit codes: 0 ok · 1 error · 2 usage · 130 interrupt. --json on data commands.
Full surface: docs/03-cli-surface.md.
Contributing
PRs welcome — start with CONTRIBUTING.md. Locked constraints for any change:
- Filesystem stays the source of truth.
- SQLite schema unchanged.
- CLI stays stdlib-only.
- Web UI: stdlib backend, no build step, no new runtime deps, loopback bind.
- No new CLI commands or Store methods without maintainer approval — open an issue first.
Security
See SECURITY.md for disclosure policy. Design notes: security_best_practices_report.md, skills-manager-threat-model.md.
Roadmap
Where this is going: ROADMAP.md (spec-lint+, cross-scope dedup, registry bridge, eval harness, VS Code extension…).
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skill_control_plane-1.0.1.tar.gz.
File metadata
- Download URL: skill_control_plane-1.0.1.tar.gz
- Upload date:
- Size: 209.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
141e907926e3a68252c09d00f24958772f19f466152a2a3294baa93d82588e82
|
|
| MD5 |
a75eea57f257b99ee869eaeb63ac7b16
|
|
| BLAKE2b-256 |
5a365d9f8f541c9896fe9c3db4fb2ad6858b675797938667fead773b3cd69971
|
Provenance
The following attestation bundles were made for skill_control_plane-1.0.1.tar.gz:
Publisher:
release.yml on udayvarmora07/skills-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skill_control_plane-1.0.1.tar.gz -
Subject digest:
141e907926e3a68252c09d00f24958772f19f466152a2a3294baa93d82588e82 - Sigstore transparency entry: 2785946876
- Sigstore integration time:
-
Permalink:
udayvarmora07/skills-manager@7ec7741677ce1ecfccb19c60a78287df629fe901 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/udayvarmora07
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7ec7741677ce1ecfccb19c60a78287df629fe901 -
Trigger Event:
push
-
Statement type:
File details
Details for the file skill_control_plane-1.0.1-py3-none-any.whl.
File metadata
- Download URL: skill_control_plane-1.0.1-py3-none-any.whl
- Upload date:
- Size: 172.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6b5b80d1e45819ce43962fa5331dbe4c8ae09d07989cd3427900d752695f402
|
|
| MD5 |
f588fa93261fd5667b6015e6076b8fb0
|
|
| BLAKE2b-256 |
f5a7dd704f3bb7afb66d11a7c0fafa542f50690677f48dd5a83a64c8a9d3cd2a
|
Provenance
The following attestation bundles were made for skill_control_plane-1.0.1-py3-none-any.whl:
Publisher:
release.yml on udayvarmora07/skills-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skill_control_plane-1.0.1-py3-none-any.whl -
Subject digest:
a6b5b80d1e45819ce43962fa5331dbe4c8ae09d07989cd3427900d752695f402 - Sigstore transparency entry: 2785946931
- Sigstore integration time:
-
Permalink:
udayvarmora07/skills-manager@7ec7741677ce1ecfccb19c60a78287df629fe901 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/udayvarmora07
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7ec7741677ce1ecfccb19c60a78287df629fe901 -
Trigger Event:
push
-
Statement type: