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.
@@ -1,8 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-skill-manager
3
- Version: 0.1.0
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
- ### From PyPI
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
- # Using pip
53
- pip install agent-skill-manager
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 pip install agent-skill-manager
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
- ## Quick Start
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
- # Update all skills
81
- sm update --all
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
- # Deploy local skills to agents
84
- sm deploy
111
+ ## Quick Start
85
112
 
86
- # Uninstall a skill (safe delete)
87
- sm uninstall
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
+ ]
@@ -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"]