skill-control-plane 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. skill_control_plane-1.0.1/LICENSE +21 -0
  2. skill_control_plane-1.0.1/PKG-INFO +168 -0
  3. skill_control_plane-1.0.1/README.md +138 -0
  4. skill_control_plane-1.0.1/pyproject.toml +44 -0
  5. skill_control_plane-1.0.1/setup.cfg +4 -0
  6. skill_control_plane-1.0.1/skill_control_plane.egg-info/PKG-INFO +168 -0
  7. skill_control_plane-1.0.1/skill_control_plane.egg-info/SOURCES.txt +58 -0
  8. skill_control_plane-1.0.1/skill_control_plane.egg-info/dependency_links.txt +1 -0
  9. skill_control_plane-1.0.1/skill_control_plane.egg-info/entry_points.txt +2 -0
  10. skill_control_plane-1.0.1/skill_control_plane.egg-info/top_level.txt +1 -0
  11. skill_control_plane-1.0.1/skillsmgr/__init__.py +3 -0
  12. skill_control_plane-1.0.1/skillsmgr/__main__.py +10 -0
  13. skill_control_plane-1.0.1/skillsmgr/archive.py +433 -0
  14. skill_control_plane-1.0.1/skillsmgr/atomic_io.py +85 -0
  15. skill_control_plane-1.0.1/skillsmgr/cli.py +156 -0
  16. skill_control_plane-1.0.1/skillsmgr/cli_handlers.py +955 -0
  17. skill_control_plane-1.0.1/skillsmgr/cli_output.py +52 -0
  18. skill_control_plane-1.0.1/skillsmgr/cli_parser.py +269 -0
  19. skill_control_plane-1.0.1/skillsmgr/colors.py +57 -0
  20. skill_control_plane-1.0.1/skillsmgr/diagnostics.py +15 -0
  21. skill_control_plane-1.0.1/skillsmgr/frontmatter.py +1022 -0
  22. skill_control_plane-1.0.1/skillsmgr/insights.py +486 -0
  23. skill_control_plane-1.0.1/skillsmgr/loader.py +98 -0
  24. skill_control_plane-1.0.1/skillsmgr/observations.py +50 -0
  25. skill_control_plane-1.0.1/skillsmgr/path_safety.py +49 -0
  26. skill_control_plane-1.0.1/skillsmgr/paths.py +73 -0
  27. skill_control_plane-1.0.1/skillsmgr/root_discovery.py +73 -0
  28. skill_control_plane-1.0.1/skillsmgr/scopes.py +738 -0
  29. skill_control_plane-1.0.1/skillsmgr/search.py +79 -0
  30. skill_control_plane-1.0.1/skillsmgr/store.py +1567 -0
  31. skill_control_plane-1.0.1/skillsmgr/templates.py +74 -0
  32. skill_control_plane-1.0.1/skillsmgr/tokens.py +121 -0
  33. skill_control_plane-1.0.1/skillsmgr/validator.py +396 -0
  34. skill_control_plane-1.0.1/skillsmgr/web_security.py +56 -0
  35. skill_control_plane-1.0.1/skillsmgr/web_serialization.py +33 -0
  36. skill_control_plane-1.0.1/skillsmgr/web_upload.py +108 -0
  37. skill_control_plane-1.0.1/skillsmgr/webapp.py +913 -0
  38. skill_control_plane-1.0.1/skillsmgr/webui/app.js +983 -0
  39. skill_control_plane-1.0.1/skillsmgr/webui/domain.js +161 -0
  40. skill_control_plane-1.0.1/skillsmgr/webui/index.html +784 -0
  41. skill_control_plane-1.0.1/skillsmgr/webui/static/vendor/vue.global.prod.js +9 -0
  42. skill_control_plane-1.0.1/skillsmgr/webui/styles.css +878 -0
  43. skill_control_plane-1.0.1/tests/test_archive_contracts.py +500 -0
  44. skill_control_plane-1.0.1/tests/test_ci_release_contracts.py +331 -0
  45. skill_control_plane-1.0.1/tests/test_cli_contract.py +82 -0
  46. skill_control_plane-1.0.1/tests/test_compatibility.py +55 -0
  47. skill_control_plane-1.0.1/tests/test_complexity_budget.py +111 -0
  48. skill_control_plane-1.0.1/tests/test_concurrency_contracts.py +322 -0
  49. skill_control_plane-1.0.1/tests/test_docs_consistency.py +58 -0
  50. skill_control_plane-1.0.1/tests/test_frontmatter_contracts.py +219 -0
  51. skill_control_plane-1.0.1/tests/test_insights_contracts.py +854 -0
  52. skill_control_plane-1.0.1/tests/test_package_data.py +84 -0
  53. skill_control_plane-1.0.1/tests/test_path_safety.py +507 -0
  54. skill_control_plane-1.0.1/tests/test_scope_contracts.py +243 -0
  55. skill_control_plane-1.0.1/tests/test_search_contracts.py +320 -0
  56. skill_control_plane-1.0.1/tests/test_smoke_fixtures.py +35 -0
  57. skill_control_plane-1.0.1/tests/test_store.py +583 -0
  58. skill_control_plane-1.0.1/tests/test_store_contracts.py +504 -0
  59. skill_control_plane-1.0.1/tests/test_web_scopes.py +307 -0
  60. skill_control_plane-1.0.1/tests/test_webapp.py +457 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 skills-manager contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: skill-control-plane
3
+ Version: 1.0.1
4
+ Summary: Local control plane for AI coding-agent skills: manage SKILL.md across agents from one CLI + web UI
5
+ Author: skills-manager contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/udayvarmora07/skills-manager
8
+ Project-URL: Repository, https://github.com/udayvarmora07/skills-manager
9
+ Project-URL: Issues, https://github.com/udayvarmora07/skills-manager/issues
10
+ Project-URL: Documentation, https://github.com/udayvarmora07/skills-manager#readme
11
+ Project-URL: Changelog, https://github.com/udayvarmora07/skills-manager/blob/main/CHANGELOG.md
12
+ Keywords: ai-agents,agent-skills,skill-management,cli,claude-code,cursor,opencode
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Utilities
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Dynamic: license-file
30
+
31
+ # skills-manager
32
+
33
+ **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.
34
+
35
+ [![CI](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml/badge.svg)](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml)
36
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
37
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg)](pyproject.toml)
38
+
39
+ > `skills-manager` on GitHub: `udayvarmora07/skills-manager`. PyPI badge tracks a future release: `skill-control-plane` is not on PyPI yet, so install from source or `pip install` the CI-built wheel/sdist below. Distribution name `skill-control-plane` (`skills-mgr` entry point) is reserved for that release.
40
+
41
+ ## Why this exists
42
+
43
+ The [Agent Skills](https://agentskills.io) 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](https://github.com/vercel-labs/agent-skills)), **installers** ([skills.sh](https://skills.sh)), and a **spec** — but nobody owns the *management* problem:
44
+
45
+ - The same skill copy-pasted into `~/.claude/skills`, `~/.codex/skills`, Cursor dirs… edits diverge.
46
+ - Vague descriptions cause false activation or misses; oversized bodies eat context.
47
+ - No versioning, no safe update/rollback, no backup story, no cross-tool view.
48
+
49
+ `skills-manager` fills that gap: one store, every scope, full lifecycle.
50
+
51
+ | | skills-manager | `skills.sh` / `npx skills add` | skill libraries |
52
+ |---|---|---|---|
53
+ | Install remote skills | ✅ (via `install`) | ✅ | — (source) |
54
+ | Create / edit / validate locally | ✅ | — | — |
55
+ | Manage across **all** your agents | ✅ (`--scope all`) | single-target | — |
56
+ | Sync + dedup between agents | ✅ | — | — |
57
+ | Version history + trash/rollback | ✅ | — | — |
58
+ | Token-footprint budgeting | ✅ (`tokens`) | — | — |
59
+ | Local web UI | ✅ | — | — |
60
+
61
+ ## Install
62
+
63
+ Requires Python ≥ 3.10. The runtime is **stdlib-only** — no dependencies.
64
+
65
+ PyPI is not published yet (see `.github/workflows/release.yml` for the
66
+ controlled Trusted Publishing path). Until the first GitHub Release lands:
67
+
68
+ ```bash
69
+ pipx install skill-control-plane # recommended (isolated)
70
+ # or
71
+ pip install skill-control-plane
72
+ ```
73
+
74
+ Run without installing:
75
+
76
+ ```bash
77
+ git clone https://github.com/udayvarmora07/skills-manager
78
+ cd skills-manager
79
+ python3 -m skillsmgr --help
80
+ ```
81
+
82
+ ## Quickstart
83
+
84
+ ```bash
85
+ # 1. See everything you have, everywhere
86
+ skills-mgr list --scope all
87
+
88
+ # 2. Create a skill once…
89
+ skills-mgr create my-workflow -d "Deploys our staging stack. Use when shipping to staging."
90
+
91
+ # 3. …sync it to every agent you use
92
+ skills-mgr sync my-workflow
93
+
94
+ # 4. Or manage it visually (localhost only, no build step, works offline)
95
+ skills-mgr webui
96
+ ```
97
+
98
+ More:
99
+
100
+ ```bash
101
+ skills-mgr search "deploy" --scope all # scored search across agents
102
+ skills-mgr tokens --scope all # context-footprint budgeting
103
+ skills-mgr validate --all # spec lint incl. description/body guidance
104
+ skills-mgr export # timestamped backup tarball
105
+ skills-mgr install vercel-labs/agent-skills --dry-run # preview remote install
106
+ ```
107
+
108
+ ## Agent scopes
109
+
110
+ One command surface, per-agent directories underneath:
111
+
112
+ | Scope | Directory |
113
+ |---|---|
114
+ | `global` (default) | manager store (`~/.local/share/skills-manager/skills/`) |
115
+ | `claude-code` | `~/.claude/skills` |
116
+ | `codex` | `~/.codex/skills` |
117
+ | `cursor` | `~/.cursor/skills` |
118
+ | `opencode` | `~/.config/opencode/skills` |
119
+ | `gemini` | `~/.gemini/skills` |
120
+ | `commandcode` | `~/.commandcode/skills` |
121
+ | `agents` | `~/.agents/skills` |
122
+ | `all` | merged read-only view |
123
+
124
+ `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.
125
+
126
+ ## Web UI
127
+
128
+ ```bash
129
+ skills-mgr webui # http://127.0.0.1:8765, opens browser
130
+ skills-mgr webui --no-browser # server only
131
+ skills-mgr webui --port 9000 # custom port
132
+ ```
133
+
134
+ 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](skills-manager-threat-model.md)).
135
+
136
+ ## Data model
137
+
138
+ - **Filesystem is the source of truth**: `<data>/skills/<name>/SKILL.md`.
139
+ - **SQLite is a rebuildable index only** (`db rebuild` / `db resync` repair any drift; never hand-edit it).
140
+ - Data dir: `$SKILLS_MANAGER_DATA` → `$XDG_DATA_HOME` → `~/.local/share`, then `/skills-manager`.
141
+
142
+ ## CLI reference
143
+
144
+ 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.
145
+
146
+ Full surface: [`docs/03-cli-surface.md`](docs/03-cli-surface.md).
147
+
148
+ ## Contributing
149
+
150
+ PRs welcome — start with [`CONTRIBUTING.md`](CONTRIBUTING.md). Locked constraints for any change:
151
+
152
+ 1. Filesystem stays the source of truth.
153
+ 2. SQLite schema unchanged.
154
+ 3. CLI stays stdlib-only.
155
+ 4. Web UI: stdlib backend, no build step, no new runtime deps, loopback bind.
156
+ 5. No new CLI commands or Store methods without maintainer approval — open an issue first.
157
+
158
+ ## Security
159
+
160
+ See [`SECURITY.md`](SECURITY.md) for disclosure policy. Design notes: [`security_best_practices_report.md`](security_best_practices_report.md), [`skills-manager-threat-model.md`](skills-manager-threat-model.md).
161
+
162
+ ## Roadmap
163
+
164
+ Where this is going: [`ROADMAP.md`](ROADMAP.md) (spec-lint+, cross-scope dedup, registry bridge, eval harness, VS Code extension…).
165
+
166
+ ## License
167
+
168
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,138 @@
1
+ # skills-manager
2
+
3
+ **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.
4
+
5
+ [![CI](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml/badge.svg)](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg)](pyproject.toml)
8
+
9
+ > `skills-manager` on GitHub: `udayvarmora07/skills-manager`. PyPI badge tracks a future release: `skill-control-plane` is not on PyPI yet, so install from source or `pip install` the CI-built wheel/sdist below. Distribution name `skill-control-plane` (`skills-mgr` entry point) is reserved for that release.
10
+
11
+ ## Why this exists
12
+
13
+ The [Agent Skills](https://agentskills.io) 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](https://github.com/vercel-labs/agent-skills)), **installers** ([skills.sh](https://skills.sh)), and a **spec** — but nobody owns the *management* problem:
14
+
15
+ - The same skill copy-pasted into `~/.claude/skills`, `~/.codex/skills`, Cursor dirs… edits diverge.
16
+ - Vague descriptions cause false activation or misses; oversized bodies eat context.
17
+ - No versioning, no safe update/rollback, no backup story, no cross-tool view.
18
+
19
+ `skills-manager` fills that gap: one store, every scope, full lifecycle.
20
+
21
+ | | skills-manager | `skills.sh` / `npx skills add` | skill libraries |
22
+ |---|---|---|---|
23
+ | Install remote skills | ✅ (via `install`) | ✅ | — (source) |
24
+ | Create / edit / validate locally | ✅ | — | — |
25
+ | Manage across **all** your agents | ✅ (`--scope all`) | single-target | — |
26
+ | Sync + dedup between agents | ✅ | — | — |
27
+ | Version history + trash/rollback | ✅ | — | — |
28
+ | Token-footprint budgeting | ✅ (`tokens`) | — | — |
29
+ | Local web UI | ✅ | — | — |
30
+
31
+ ## Install
32
+
33
+ Requires Python ≥ 3.10. The runtime is **stdlib-only** — no dependencies.
34
+
35
+ PyPI is not published yet (see `.github/workflows/release.yml` for the
36
+ controlled Trusted Publishing path). Until the first GitHub Release lands:
37
+
38
+ ```bash
39
+ pipx install skill-control-plane # recommended (isolated)
40
+ # or
41
+ pip install skill-control-plane
42
+ ```
43
+
44
+ Run without installing:
45
+
46
+ ```bash
47
+ git clone https://github.com/udayvarmora07/skills-manager
48
+ cd skills-manager
49
+ python3 -m skillsmgr --help
50
+ ```
51
+
52
+ ## Quickstart
53
+
54
+ ```bash
55
+ # 1. See everything you have, everywhere
56
+ skills-mgr list --scope all
57
+
58
+ # 2. Create a skill once…
59
+ skills-mgr create my-workflow -d "Deploys our staging stack. Use when shipping to staging."
60
+
61
+ # 3. …sync it to every agent you use
62
+ skills-mgr sync my-workflow
63
+
64
+ # 4. Or manage it visually (localhost only, no build step, works offline)
65
+ skills-mgr webui
66
+ ```
67
+
68
+ More:
69
+
70
+ ```bash
71
+ skills-mgr search "deploy" --scope all # scored search across agents
72
+ skills-mgr tokens --scope all # context-footprint budgeting
73
+ skills-mgr validate --all # spec lint incl. description/body guidance
74
+ skills-mgr export # timestamped backup tarball
75
+ skills-mgr install vercel-labs/agent-skills --dry-run # preview remote install
76
+ ```
77
+
78
+ ## Agent scopes
79
+
80
+ One command surface, per-agent directories underneath:
81
+
82
+ | Scope | Directory |
83
+ |---|---|
84
+ | `global` (default) | manager store (`~/.local/share/skills-manager/skills/`) |
85
+ | `claude-code` | `~/.claude/skills` |
86
+ | `codex` | `~/.codex/skills` |
87
+ | `cursor` | `~/.cursor/skills` |
88
+ | `opencode` | `~/.config/opencode/skills` |
89
+ | `gemini` | `~/.gemini/skills` |
90
+ | `commandcode` | `~/.commandcode/skills` |
91
+ | `agents` | `~/.agents/skills` |
92
+ | `all` | merged read-only view |
93
+
94
+ `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.
95
+
96
+ ## Web UI
97
+
98
+ ```bash
99
+ skills-mgr webui # http://127.0.0.1:8765, opens browser
100
+ skills-mgr webui --no-browser # server only
101
+ skills-mgr webui --port 9000 # custom port
102
+ ```
103
+
104
+ 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](skills-manager-threat-model.md)).
105
+
106
+ ## Data model
107
+
108
+ - **Filesystem is the source of truth**: `<data>/skills/<name>/SKILL.md`.
109
+ - **SQLite is a rebuildable index only** (`db rebuild` / `db resync` repair any drift; never hand-edit it).
110
+ - Data dir: `$SKILLS_MANAGER_DATA` → `$XDG_DATA_HOME` → `~/.local/share`, then `/skills-manager`.
111
+
112
+ ## CLI reference
113
+
114
+ 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.
115
+
116
+ Full surface: [`docs/03-cli-surface.md`](docs/03-cli-surface.md).
117
+
118
+ ## Contributing
119
+
120
+ PRs welcome — start with [`CONTRIBUTING.md`](CONTRIBUTING.md). Locked constraints for any change:
121
+
122
+ 1. Filesystem stays the source of truth.
123
+ 2. SQLite schema unchanged.
124
+ 3. CLI stays stdlib-only.
125
+ 4. Web UI: stdlib backend, no build step, no new runtime deps, loopback bind.
126
+ 5. No new CLI commands or Store methods without maintainer approval — open an issue first.
127
+
128
+ ## Security
129
+
130
+ See [`SECURITY.md`](SECURITY.md) for disclosure policy. Design notes: [`security_best_practices_report.md`](security_best_practices_report.md), [`skills-manager-threat-model.md`](skills-manager-threat-model.md).
131
+
132
+ ## Roadmap
133
+
134
+ Where this is going: [`ROADMAP.md`](ROADMAP.md) (spec-lint+, cross-scope dedup, registry bridge, eval harness, VS Code extension…).
135
+
136
+ ## License
137
+
138
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "skill-control-plane"
7
+ version = "1.0.1"
8
+ description = "Local control plane for AI coding-agent skills: manage SKILL.md across agents from one CLI + web UI"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "skills-manager contributors" }]
13
+ keywords = ["ai-agents", "agent-skills", "skill-management", "cli", "claude-code", "cursor", "opencode"]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Environment :: Console",
17
+ "Intended Audience :: Developers",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Operating System :: OS Independent",
20
+ "Programming Language :: Python :: 3",
21
+ "Programming Language :: Python :: 3.10",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Programming Language :: Python :: 3.13",
25
+ "Programming Language :: Python :: 3.14",
26
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
27
+ "Topic :: Utilities",
28
+ ]
29
+
30
+ [project.urls]
31
+ Homepage = "https://github.com/udayvarmora07/skills-manager"
32
+ Repository = "https://github.com/udayvarmora07/skills-manager"
33
+ Issues = "https://github.com/udayvarmora07/skills-manager/issues"
34
+ Documentation = "https://github.com/udayvarmora07/skills-manager#readme"
35
+ Changelog = "https://github.com/udayvarmora07/skills-manager/blob/main/CHANGELOG.md"
36
+
37
+ [project.scripts]
38
+ skills-mgr = "skillsmgr.cli:main"
39
+
40
+ [tool.setuptools.packages.find]
41
+ include = ["skillsmgr*"]
42
+
43
+ [tool.setuptools.package-data]
44
+ skillsmgr = ["webui/*", "webui/static/vendor/*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: skill-control-plane
3
+ Version: 1.0.1
4
+ Summary: Local control plane for AI coding-agent skills: manage SKILL.md across agents from one CLI + web UI
5
+ Author: skills-manager contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/udayvarmora07/skills-manager
8
+ Project-URL: Repository, https://github.com/udayvarmora07/skills-manager
9
+ Project-URL: Issues, https://github.com/udayvarmora07/skills-manager/issues
10
+ Project-URL: Documentation, https://github.com/udayvarmora07/skills-manager#readme
11
+ Project-URL: Changelog, https://github.com/udayvarmora07/skills-manager/blob/main/CHANGELOG.md
12
+ Keywords: ai-agents,agent-skills,skill-management,cli,claude-code,cursor,opencode
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Utilities
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Dynamic: license-file
30
+
31
+ # skills-manager
32
+
33
+ **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.
34
+
35
+ [![CI](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml/badge.svg)](https://github.com/udayvarmora07/skills-manager/actions/workflows/ci.yml)
36
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
37
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg)](pyproject.toml)
38
+
39
+ > `skills-manager` on GitHub: `udayvarmora07/skills-manager`. PyPI badge tracks a future release: `skill-control-plane` is not on PyPI yet, so install from source or `pip install` the CI-built wheel/sdist below. Distribution name `skill-control-plane` (`skills-mgr` entry point) is reserved for that release.
40
+
41
+ ## Why this exists
42
+
43
+ The [Agent Skills](https://agentskills.io) 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](https://github.com/vercel-labs/agent-skills)), **installers** ([skills.sh](https://skills.sh)), and a **spec** — but nobody owns the *management* problem:
44
+
45
+ - The same skill copy-pasted into `~/.claude/skills`, `~/.codex/skills`, Cursor dirs… edits diverge.
46
+ - Vague descriptions cause false activation or misses; oversized bodies eat context.
47
+ - No versioning, no safe update/rollback, no backup story, no cross-tool view.
48
+
49
+ `skills-manager` fills that gap: one store, every scope, full lifecycle.
50
+
51
+ | | skills-manager | `skills.sh` / `npx skills add` | skill libraries |
52
+ |---|---|---|---|
53
+ | Install remote skills | ✅ (via `install`) | ✅ | — (source) |
54
+ | Create / edit / validate locally | ✅ | — | — |
55
+ | Manage across **all** your agents | ✅ (`--scope all`) | single-target | — |
56
+ | Sync + dedup between agents | ✅ | — | — |
57
+ | Version history + trash/rollback | ✅ | — | — |
58
+ | Token-footprint budgeting | ✅ (`tokens`) | — | — |
59
+ | Local web UI | ✅ | — | — |
60
+
61
+ ## Install
62
+
63
+ Requires Python ≥ 3.10. The runtime is **stdlib-only** — no dependencies.
64
+
65
+ PyPI is not published yet (see `.github/workflows/release.yml` for the
66
+ controlled Trusted Publishing path). Until the first GitHub Release lands:
67
+
68
+ ```bash
69
+ pipx install skill-control-plane # recommended (isolated)
70
+ # or
71
+ pip install skill-control-plane
72
+ ```
73
+
74
+ Run without installing:
75
+
76
+ ```bash
77
+ git clone https://github.com/udayvarmora07/skills-manager
78
+ cd skills-manager
79
+ python3 -m skillsmgr --help
80
+ ```
81
+
82
+ ## Quickstart
83
+
84
+ ```bash
85
+ # 1. See everything you have, everywhere
86
+ skills-mgr list --scope all
87
+
88
+ # 2. Create a skill once…
89
+ skills-mgr create my-workflow -d "Deploys our staging stack. Use when shipping to staging."
90
+
91
+ # 3. …sync it to every agent you use
92
+ skills-mgr sync my-workflow
93
+
94
+ # 4. Or manage it visually (localhost only, no build step, works offline)
95
+ skills-mgr webui
96
+ ```
97
+
98
+ More:
99
+
100
+ ```bash
101
+ skills-mgr search "deploy" --scope all # scored search across agents
102
+ skills-mgr tokens --scope all # context-footprint budgeting
103
+ skills-mgr validate --all # spec lint incl. description/body guidance
104
+ skills-mgr export # timestamped backup tarball
105
+ skills-mgr install vercel-labs/agent-skills --dry-run # preview remote install
106
+ ```
107
+
108
+ ## Agent scopes
109
+
110
+ One command surface, per-agent directories underneath:
111
+
112
+ | Scope | Directory |
113
+ |---|---|
114
+ | `global` (default) | manager store (`~/.local/share/skills-manager/skills/`) |
115
+ | `claude-code` | `~/.claude/skills` |
116
+ | `codex` | `~/.codex/skills` |
117
+ | `cursor` | `~/.cursor/skills` |
118
+ | `opencode` | `~/.config/opencode/skills` |
119
+ | `gemini` | `~/.gemini/skills` |
120
+ | `commandcode` | `~/.commandcode/skills` |
121
+ | `agents` | `~/.agents/skills` |
122
+ | `all` | merged read-only view |
123
+
124
+ `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.
125
+
126
+ ## Web UI
127
+
128
+ ```bash
129
+ skills-mgr webui # http://127.0.0.1:8765, opens browser
130
+ skills-mgr webui --no-browser # server only
131
+ skills-mgr webui --port 9000 # custom port
132
+ ```
133
+
134
+ 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](skills-manager-threat-model.md)).
135
+
136
+ ## Data model
137
+
138
+ - **Filesystem is the source of truth**: `<data>/skills/<name>/SKILL.md`.
139
+ - **SQLite is a rebuildable index only** (`db rebuild` / `db resync` repair any drift; never hand-edit it).
140
+ - Data dir: `$SKILLS_MANAGER_DATA` → `$XDG_DATA_HOME` → `~/.local/share`, then `/skills-manager`.
141
+
142
+ ## CLI reference
143
+
144
+ 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.
145
+
146
+ Full surface: [`docs/03-cli-surface.md`](docs/03-cli-surface.md).
147
+
148
+ ## Contributing
149
+
150
+ PRs welcome — start with [`CONTRIBUTING.md`](CONTRIBUTING.md). Locked constraints for any change:
151
+
152
+ 1. Filesystem stays the source of truth.
153
+ 2. SQLite schema unchanged.
154
+ 3. CLI stays stdlib-only.
155
+ 4. Web UI: stdlib backend, no build step, no new runtime deps, loopback bind.
156
+ 5. No new CLI commands or Store methods without maintainer approval — open an issue first.
157
+
158
+ ## Security
159
+
160
+ See [`SECURITY.md`](SECURITY.md) for disclosure policy. Design notes: [`security_best_practices_report.md`](security_best_practices_report.md), [`skills-manager-threat-model.md`](skills-manager-threat-model.md).
161
+
162
+ ## Roadmap
163
+
164
+ Where this is going: [`ROADMAP.md`](ROADMAP.md) (spec-lint+, cross-scope dedup, registry bridge, eval harness, VS Code extension…).
165
+
166
+ ## License
167
+
168
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,58 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ skill_control_plane.egg-info/PKG-INFO
5
+ skill_control_plane.egg-info/SOURCES.txt
6
+ skill_control_plane.egg-info/dependency_links.txt
7
+ skill_control_plane.egg-info/entry_points.txt
8
+ skill_control_plane.egg-info/top_level.txt
9
+ skillsmgr/__init__.py
10
+ skillsmgr/__main__.py
11
+ skillsmgr/archive.py
12
+ skillsmgr/atomic_io.py
13
+ skillsmgr/cli.py
14
+ skillsmgr/cli_handlers.py
15
+ skillsmgr/cli_output.py
16
+ skillsmgr/cli_parser.py
17
+ skillsmgr/colors.py
18
+ skillsmgr/diagnostics.py
19
+ skillsmgr/frontmatter.py
20
+ skillsmgr/insights.py
21
+ skillsmgr/loader.py
22
+ skillsmgr/observations.py
23
+ skillsmgr/path_safety.py
24
+ skillsmgr/paths.py
25
+ skillsmgr/root_discovery.py
26
+ skillsmgr/scopes.py
27
+ skillsmgr/search.py
28
+ skillsmgr/store.py
29
+ skillsmgr/templates.py
30
+ skillsmgr/tokens.py
31
+ skillsmgr/validator.py
32
+ skillsmgr/web_security.py
33
+ skillsmgr/web_serialization.py
34
+ skillsmgr/web_upload.py
35
+ skillsmgr/webapp.py
36
+ skillsmgr/webui/app.js
37
+ skillsmgr/webui/domain.js
38
+ skillsmgr/webui/index.html
39
+ skillsmgr/webui/styles.css
40
+ skillsmgr/webui/static/vendor/vue.global.prod.js
41
+ tests/test_archive_contracts.py
42
+ tests/test_ci_release_contracts.py
43
+ tests/test_cli_contract.py
44
+ tests/test_compatibility.py
45
+ tests/test_complexity_budget.py
46
+ tests/test_concurrency_contracts.py
47
+ tests/test_docs_consistency.py
48
+ tests/test_frontmatter_contracts.py
49
+ tests/test_insights_contracts.py
50
+ tests/test_package_data.py
51
+ tests/test_path_safety.py
52
+ tests/test_scope_contracts.py
53
+ tests/test_search_contracts.py
54
+ tests/test_smoke_fixtures.py
55
+ tests/test_store.py
56
+ tests/test_store_contracts.py
57
+ tests/test_web_scopes.py
58
+ tests/test_webapp.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ skills-mgr = skillsmgr.cli:main
@@ -0,0 +1,3 @@
1
+ """skills-mgr: manage agentic AI skills (SKILL.md) from the command line."""
2
+
3
+ __version__ = "1.0.1"
@@ -0,0 +1,10 @@
1
+ """Entry point for ``python3 -m skillsmgr``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+ from .cli import main
8
+
9
+ if __name__ == "__main__":
10
+ sys.exit(main())