agent-skill-manager 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
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.
- {agent_skill_manager-0.1.0.dist-info → agent_skill_manager-0.1.1.dist-info}/METADATA +55 -19
- agent_skill_manager-0.1.1.dist-info/RECORD +12 -0
- skill_manager/__init__.py +79 -0
- skill_manager/agents.py +137 -0
- skill_manager/cli.py +1178 -0
- skill_manager/deployment.py +260 -0
- skill_manager/github.py +177 -0
- skill_manager/metadata.py +141 -0
- skill_manager/removal.py +278 -0
- skill_manager/validation.py +83 -0
- agent_skill_manager-0.1.0.dist-info/RECORD +0 -4
- {agent_skill_manager-0.1.0.dist-info → agent_skill_manager-0.1.1.dist-info}/WHEEL +0 -0
- {agent_skill_manager-0.1.0.dist-info → agent_skill_manager-0.1.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-skill-manager
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: CLI tool for managing AI agent skills across multiple platforms
|
|
5
|
+
Project-URL: Homepage, https://github.com/ackness/skill-manager
|
|
6
|
+
Project-URL: Repository, https://github.com/ackness/skill-manager
|
|
7
|
+
Project-URL: Issues, https://github.com/ackness/skill-manager/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/ackness/skill-manager#readme
|
|
5
9
|
Author-email: ackness <ackness8@gmail.com>
|
|
10
|
+
License: MIT
|
|
11
|
+
Keywords: agents,ai,claude,cli,cursor,skills,windsurf
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
18
|
+
Classifier: Topic :: Utilities
|
|
6
19
|
Requires-Python: >=3.13
|
|
7
20
|
Requires-Dist: httpx>=0.28.1
|
|
8
21
|
Requires-Dist: inquirerpy>=0.3.4
|
|
@@ -46,14 +59,32 @@ A comprehensive CLI tool for managing AI agent skills across multiple platforms.
|
|
|
46
59
|
|
|
47
60
|
## Installation
|
|
48
61
|
|
|
49
|
-
###
|
|
62
|
+
### Quick Run with uvx (No Installation Required)
|
|
63
|
+
|
|
64
|
+
Run directly without installing (recommended for trying it out):
|
|
50
65
|
|
|
51
66
|
```bash
|
|
52
|
-
#
|
|
53
|
-
|
|
67
|
+
# Show help (default command)
|
|
68
|
+
uvx agent-skill-manager
|
|
69
|
+
|
|
70
|
+
# Use sm command for specific operations
|
|
71
|
+
uvx --from agent-skill-manager sm install
|
|
72
|
+
uvx --from agent-skill-manager sm list
|
|
73
|
+
uvx --from agent-skill-manager sm update --all
|
|
74
|
+
|
|
75
|
+
# Or create an alias for convenience
|
|
76
|
+
alias sm="uvx --from agent-skill-manager sm"
|
|
77
|
+
sm install # Now you can use it like the installed version
|
|
78
|
+
```
|
|
54
79
|
|
|
80
|
+
### Permanent Installation
|
|
81
|
+
|
|
82
|
+
```bash
|
|
55
83
|
# Using uv (recommended)
|
|
56
|
-
uv
|
|
84
|
+
uv tool install agent-skill-manager
|
|
85
|
+
|
|
86
|
+
# Using pip
|
|
87
|
+
pip install agent-skill-manager
|
|
57
88
|
|
|
58
89
|
# Using pipx (isolated installation)
|
|
59
90
|
pipx install agent-skill-manager
|
|
@@ -68,23 +99,28 @@ uv sync
|
|
|
68
99
|
uv pip install -e .
|
|
69
100
|
```
|
|
70
101
|
|
|
71
|
-
##
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# Install a skill from GitHub
|
|
75
|
-
sm install
|
|
76
|
-
|
|
77
|
-
# List installed skills
|
|
78
|
-
sm list
|
|
102
|
+
## Usage Methods Comparison
|
|
79
103
|
|
|
80
|
-
|
|
81
|
-
|
|
104
|
+
| Method | Command | Use Case |
|
|
105
|
+
|--------|---------|----------|
|
|
106
|
+
| **uvx (no install)** | `uvx --from agent-skill-manager sm install` | One-time use, testing, CI/CD |
|
|
107
|
+
| **uv tool install** | `uv tool install agent-skill-manager` then `sm install` | Regular use, isolated |
|
|
108
|
+
| **pip install** | `pip install agent-skill-manager` then `sm install` | Traditional installation |
|
|
109
|
+
| **From source** | `git clone ...` then `uv pip install -e .` | Development |
|
|
82
110
|
|
|
83
|
-
|
|
84
|
-
sm deploy
|
|
111
|
+
## Quick Start
|
|
85
112
|
|
|
86
|
-
|
|
87
|
-
|
|
113
|
+
```bash
|
|
114
|
+
# Run without installing (using uvx)
|
|
115
|
+
uvx --from agent-skill-manager sm install
|
|
116
|
+
uvx --from agent-skill-manager sm list
|
|
117
|
+
|
|
118
|
+
# Or after installation, use sm command directly:
|
|
119
|
+
sm install # Install a skill from GitHub
|
|
120
|
+
sm list # List installed skills
|
|
121
|
+
sm update --all # Update all skills
|
|
122
|
+
sm deploy # Deploy local skills to agents
|
|
123
|
+
sm uninstall # Uninstall a skill (safe delete)
|
|
88
124
|
```
|
|
89
125
|
|
|
90
126
|
## Commands
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
skill_manager/__init__.py,sha256=0XIUCOGXT7Emm8ZLJ9YbNM-4Dv2v-m4Fkavq5onzwrY,1717
|
|
2
|
+
skill_manager/agents.py,sha256=1sqdXQwoZCXhedyfo608crZp3rjPX6-LpFU9WsK45sU,3590
|
|
3
|
+
skill_manager/cli.py,sha256=RMqOTzJlB1cHeA4DrPEdFSQyRKjNX8CA-HpuxDq1CRE,36295
|
|
4
|
+
skill_manager/deployment.py,sha256=nq57YxdLNm_gEvxY28kLTxltEiq8Fyx-OltC0x7zpww,7697
|
|
5
|
+
skill_manager/github.py,sha256=WIju94QHVcJnCprwHujticgkeWs0Z07AXOJ6a39wKTg,4841
|
|
6
|
+
skill_manager/metadata.py,sha256=IEb1R8tDuJ5BfXTIsQ8ZiJRlbQ5aXScQPTXFego1J0k,3458
|
|
7
|
+
skill_manager/removal.py,sha256=3yAn0Fd92_X40Z_SmxELHKKrWxew0vUGS8WO6Uq3730,8040
|
|
8
|
+
skill_manager/validation.py,sha256=fRUJDs4TiuKlH3doey31SPJfe671JJQcBFSAhJwoSIE,1970
|
|
9
|
+
agent_skill_manager-0.1.1.dist-info/METADATA,sha256=qfrREjAu7323WrdIkrsP0OQIUw8nkaGMDuS8yszu3I0,7318
|
|
10
|
+
agent_skill_manager-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
11
|
+
agent_skill_manager-0.1.1.dist-info/entry_points.txt,sha256=ac3L07OC98p1llk259d9PUhDp-cl3ifV2nmYHGb3WO8,85
|
|
12
|
+
agent_skill_manager-0.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Skill Manager - Tool for managing AI agent skills.
|
|
3
|
+
|
|
4
|
+
This package provides functionality to download, deploy, and manage
|
|
5
|
+
skills across different AI agent platforms.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
__version__ = "0.1.0"
|
|
9
|
+
|
|
10
|
+
from .agents import AGENTS, detect_existing_agents, get_agent_name, get_agent_path
|
|
11
|
+
from .deployment import (
|
|
12
|
+
deploy_multiple_skills,
|
|
13
|
+
deploy_skill,
|
|
14
|
+
deploy_skill_to_agents,
|
|
15
|
+
update_all_skills,
|
|
16
|
+
update_skill,
|
|
17
|
+
)
|
|
18
|
+
from .github import (
|
|
19
|
+
download_skill_from_github,
|
|
20
|
+
parse_github_url,
|
|
21
|
+
)
|
|
22
|
+
from .metadata import (
|
|
23
|
+
has_github_source,
|
|
24
|
+
list_updatable_skills,
|
|
25
|
+
read_skill_metadata,
|
|
26
|
+
save_skill_metadata,
|
|
27
|
+
update_skill_metadata,
|
|
28
|
+
)
|
|
29
|
+
from .removal import (
|
|
30
|
+
clean_trash,
|
|
31
|
+
hard_delete_skill,
|
|
32
|
+
list_installed_skills,
|
|
33
|
+
list_trashed_skills,
|
|
34
|
+
restore_skill,
|
|
35
|
+
soft_delete_skill,
|
|
36
|
+
)
|
|
37
|
+
from .validation import (
|
|
38
|
+
get_project_root,
|
|
39
|
+
get_skill_name,
|
|
40
|
+
scan_available_skills,
|
|
41
|
+
validate_skill,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
__all__ = [
|
|
45
|
+
# Version
|
|
46
|
+
"__version__",
|
|
47
|
+
# Agents
|
|
48
|
+
"AGENTS",
|
|
49
|
+
"detect_existing_agents",
|
|
50
|
+
"get_agent_name",
|
|
51
|
+
"get_agent_path",
|
|
52
|
+
# Deployment
|
|
53
|
+
"deploy_skill",
|
|
54
|
+
"deploy_skill_to_agents",
|
|
55
|
+
"deploy_multiple_skills",
|
|
56
|
+
"update_skill",
|
|
57
|
+
"update_all_skills",
|
|
58
|
+
# GitHub
|
|
59
|
+
"download_skill_from_github",
|
|
60
|
+
"parse_github_url",
|
|
61
|
+
# Metadata
|
|
62
|
+
"save_skill_metadata",
|
|
63
|
+
"read_skill_metadata",
|
|
64
|
+
"update_skill_metadata",
|
|
65
|
+
"list_updatable_skills",
|
|
66
|
+
"has_github_source",
|
|
67
|
+
# Removal
|
|
68
|
+
"soft_delete_skill",
|
|
69
|
+
"hard_delete_skill",
|
|
70
|
+
"restore_skill",
|
|
71
|
+
"list_installed_skills",
|
|
72
|
+
"list_trashed_skills",
|
|
73
|
+
"clean_trash",
|
|
74
|
+
# Validation
|
|
75
|
+
"validate_skill",
|
|
76
|
+
"get_skill_name",
|
|
77
|
+
"get_project_root",
|
|
78
|
+
"scan_available_skills",
|
|
79
|
+
]
|
skill_manager/agents.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Agent configuration and detection module.
|
|
4
|
+
Manages different AI agent skill directory configurations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
# Agent configuration mapping
|
|
10
|
+
# Each agent has a name, project-level path, and global path
|
|
11
|
+
AGENTS = {
|
|
12
|
+
"opencode": {
|
|
13
|
+
"name": "OpenCode",
|
|
14
|
+
"project": ".opencode/skills/",
|
|
15
|
+
"global": "~/.config/opencode/skills/",
|
|
16
|
+
},
|
|
17
|
+
"claude-code": {
|
|
18
|
+
"name": "Claude Code",
|
|
19
|
+
"project": ".claude/skills/",
|
|
20
|
+
"global": "~/.claude/skills/",
|
|
21
|
+
},
|
|
22
|
+
"codex": {
|
|
23
|
+
"name": "Codex",
|
|
24
|
+
"project": ".codex/skills/",
|
|
25
|
+
"global": "~/.codex/skills/",
|
|
26
|
+
},
|
|
27
|
+
"cursor": {
|
|
28
|
+
"name": "Cursor",
|
|
29
|
+
"project": ".cursor/skills/",
|
|
30
|
+
"global": "~/.cursor/skills/",
|
|
31
|
+
},
|
|
32
|
+
"amp": {
|
|
33
|
+
"name": "Amp",
|
|
34
|
+
"project": ".agents/skills/",
|
|
35
|
+
"global": "~/.config/agents/skills/",
|
|
36
|
+
},
|
|
37
|
+
"kilo": {
|
|
38
|
+
"name": "Kilo Code",
|
|
39
|
+
"project": ".kilocode/skills/",
|
|
40
|
+
"global": "~/.kilocode/skills/",
|
|
41
|
+
},
|
|
42
|
+
"roo": {
|
|
43
|
+
"name": "Roo Code",
|
|
44
|
+
"project": ".roo/skills/",
|
|
45
|
+
"global": "~/.roo/skills/",
|
|
46
|
+
},
|
|
47
|
+
"goose": {
|
|
48
|
+
"name": "Goose",
|
|
49
|
+
"project": ".goose/skills/",
|
|
50
|
+
"global": "~/.config/goose/skills/",
|
|
51
|
+
},
|
|
52
|
+
"gemini-cli": {
|
|
53
|
+
"name": "Gemini CLI",
|
|
54
|
+
"project": ".gemini/skills/",
|
|
55
|
+
"global": "~/.gemini/skills/",
|
|
56
|
+
},
|
|
57
|
+
"antigravity": {
|
|
58
|
+
"name": "Antigravity",
|
|
59
|
+
"project": ".agent/skills/",
|
|
60
|
+
"global": "~/.gemini/antigravity/skills/",
|
|
61
|
+
},
|
|
62
|
+
"github-copilot": {
|
|
63
|
+
"name": "GitHub Copilot",
|
|
64
|
+
"project": ".github/skills/",
|
|
65
|
+
"global": "~/.copilot/skills/",
|
|
66
|
+
},
|
|
67
|
+
"clawdbot": {
|
|
68
|
+
"name": "Clawdbot",
|
|
69
|
+
"project": "skills/",
|
|
70
|
+
"global": "~/.clawdbot/skills/",
|
|
71
|
+
},
|
|
72
|
+
"droid": {
|
|
73
|
+
"name": "Droid",
|
|
74
|
+
"project": ".factory/skills/",
|
|
75
|
+
"global": "~/.factory/skills/",
|
|
76
|
+
},
|
|
77
|
+
"windsurf": {
|
|
78
|
+
"name": "Windsurf",
|
|
79
|
+
"project": ".windsurf/skills/",
|
|
80
|
+
"global": "~/.codeium/windsurf/skills/",
|
|
81
|
+
},
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def detect_existing_agents() -> dict[str, Path]:
|
|
86
|
+
"""
|
|
87
|
+
Detect which agents are installed on the system.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Dictionary mapping agent IDs to their global paths for installed agents.
|
|
91
|
+
"""
|
|
92
|
+
existing = {}
|
|
93
|
+
for agent_id, info in AGENTS.items():
|
|
94
|
+
global_path = Path(info["global"]).expanduser()
|
|
95
|
+
if global_path.exists():
|
|
96
|
+
existing[agent_id] = global_path
|
|
97
|
+
return existing
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_agent_path(agent_id: str, deployment_type: str = "global", project_root: Path | None = None) -> Path:
|
|
101
|
+
"""
|
|
102
|
+
Get the target path for an agent.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
agent_id: The agent identifier
|
|
106
|
+
deployment_type: Either "global" or "project"
|
|
107
|
+
project_root: The project root directory (required for project deployment)
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
The target path for the agent
|
|
111
|
+
"""
|
|
112
|
+
if agent_id not in AGENTS:
|
|
113
|
+
raise ValueError(f"Unknown agent: {agent_id}")
|
|
114
|
+
|
|
115
|
+
info = AGENTS[agent_id]
|
|
116
|
+
|
|
117
|
+
if deployment_type == "global":
|
|
118
|
+
return Path(info["global"]).expanduser()
|
|
119
|
+
else:
|
|
120
|
+
if project_root is None:
|
|
121
|
+
project_root = Path.cwd()
|
|
122
|
+
return project_root / info["project"]
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def get_agent_name(agent_id: str) -> str:
|
|
126
|
+
"""
|
|
127
|
+
Get the display name for an agent.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
agent_id: The agent identifier
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
The agent's display name
|
|
134
|
+
"""
|
|
135
|
+
if agent_id not in AGENTS:
|
|
136
|
+
raise ValueError(f"Unknown agent: {agent_id}")
|
|
137
|
+
return AGENTS[agent_id]["name"]
|