agent-skill-manager 0.2.0__tar.gz → 0.2.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 (20) hide show
  1. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/PKG-INFO +18 -13
  2. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/README.md +17 -12
  3. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/pyproject.toml +1 -1
  4. agent_skill_manager-0.2.1/skills/agent_skill_manager/SKILL.md +504 -0
  5. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/__init__.py +1 -1
  6. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/cli.py +14 -10
  7. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/uv.lock +1 -1
  8. agent_skill_manager-0.2.0/skills/agent_skill_manager/SKILL.md +0 -386
  9. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/.gitignore +0 -0
  10. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/.pre-commit-config.yaml +0 -0
  11. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/.python-version +0 -0
  12. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/examples/.gitkeep +0 -0
  13. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/scripts/.gitkeep +0 -0
  14. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/agents.py +0 -0
  15. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/deployment.py +0 -0
  16. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/github.py +0 -0
  17. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/metadata.py +0 -0
  18. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/removal.py +0 -0
  19. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/src/skill_manager/validation.py +0 -0
  20. {agent_skill_manager-0.2.0 → agent_skill_manager-0.2.1}/tests/.gitkeep +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-skill-manager
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: CLI tool for managing AI agent skills across multiple platforms
5
5
  Project-URL: Homepage, https://github.com/ackness/skill-manager
6
6
  Project-URL: Repository, https://github.com/ackness/skill-manager
@@ -199,8 +199,8 @@ sm agents # List all supported agents
199
199
  | `-a, --agent AGENT` | Target agent(s), can be specified multiple times |
200
200
  | `-t, --type TYPE` | Deployment type: `global` (default) or `project` |
201
201
  | `-d, --dest PATH` | Custom destination directory for downloads |
202
- | `--symlink` | Use symlinks instead of copying files |
203
- | `--discover` | Discover and install all skills in repository |
202
+ | `--no-symlink` | Disable symlinks, copy files instead (symlinks on by default) |
203
+ | `--no-discover` | Disable auto-discovery (on by default) |
204
204
  | `--no-deploy` | Download only, skip deployment |
205
205
  | `-y, --yes` | Skip confirmation prompts |
206
206
 
@@ -209,19 +209,21 @@ sm agents # List all supported agents
209
209
  ### Install all skills from a repository
210
210
 
211
211
  ```bash
212
- # Discover and install all skills from a repository
213
- sm install https://github.com/cloudflare/skills --discover -a windsurf -a cursor
212
+ # Install all skills from a repo (auto-discovery and symlinks enabled by default)
213
+ sm install https://github.com/cloudflare/skills -a windsurf -a cursor
214
214
 
215
- # Use symlinks to save disk space (single source, multiple agents)
216
- sm install https://github.com/cloudflare/skills --discover --symlink -a windsurf
217
- ```
218
-
219
- ### Install a single skill with CLI options
215
+ # Use symlinks to save disk space (enabled by default, use --no-symlink to disable)
216
+ sm install https://github.com/cloudflare/skills -a claude-code
220
217
 
221
- ```bash
222
218
  # Full CLI mode - no prompts
223
219
  sm install https://github.com/user/repo/tree/main/skills/my-skill -a claude-code -t global
224
220
 
221
+ # Disable auto-discovery to install only the specific path
222
+ sm install https://github.com/user/repo/tree/main/skills/my-skill --no-discover -a cursor
223
+
224
+ # Disable symlinks, copy files instead
225
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
226
+
225
227
  # Download to custom location
226
228
  sm install https://github.com/user/repo/tree/main/skills/my-skill -d ./my-skills -a cursor
227
229
  ```
@@ -275,8 +277,11 @@ sm restore
275
277
  Symlinks allow you to maintain a single copy of skills while deploying to multiple agents:
276
278
 
277
279
  ```bash
278
- # Download skills to a central location and symlink to agents
279
- sm install https://github.com/cloudflare/skills --discover -d ~/skills --symlink -a windsurf -a cursor -a claude-code
280
+ # Download skills to a central location and symlink to agents (default behavior)
281
+ sm install https://github.com/cloudflare/skills -d ~/skills -a windsurf -a cursor -a claude-code
282
+
283
+ # Disable symlinks if needed
284
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
280
285
  ```
281
286
 
282
287
  > [!NOTE]
@@ -174,8 +174,8 @@ sm agents # List all supported agents
174
174
  | `-a, --agent AGENT` | Target agent(s), can be specified multiple times |
175
175
  | `-t, --type TYPE` | Deployment type: `global` (default) or `project` |
176
176
  | `-d, --dest PATH` | Custom destination directory for downloads |
177
- | `--symlink` | Use symlinks instead of copying files |
178
- | `--discover` | Discover and install all skills in repository |
177
+ | `--no-symlink` | Disable symlinks, copy files instead (symlinks on by default) |
178
+ | `--no-discover` | Disable auto-discovery (on by default) |
179
179
  | `--no-deploy` | Download only, skip deployment |
180
180
  | `-y, --yes` | Skip confirmation prompts |
181
181
 
@@ -184,19 +184,21 @@ sm agents # List all supported agents
184
184
  ### Install all skills from a repository
185
185
 
186
186
  ```bash
187
- # Discover and install all skills from a repository
188
- sm install https://github.com/cloudflare/skills --discover -a windsurf -a cursor
187
+ # Install all skills from a repo (auto-discovery and symlinks enabled by default)
188
+ sm install https://github.com/cloudflare/skills -a windsurf -a cursor
189
189
 
190
- # Use symlinks to save disk space (single source, multiple agents)
191
- sm install https://github.com/cloudflare/skills --discover --symlink -a windsurf
192
- ```
193
-
194
- ### Install a single skill with CLI options
190
+ # Use symlinks to save disk space (enabled by default, use --no-symlink to disable)
191
+ sm install https://github.com/cloudflare/skills -a claude-code
195
192
 
196
- ```bash
197
193
  # Full CLI mode - no prompts
198
194
  sm install https://github.com/user/repo/tree/main/skills/my-skill -a claude-code -t global
199
195
 
196
+ # Disable auto-discovery to install only the specific path
197
+ sm install https://github.com/user/repo/tree/main/skills/my-skill --no-discover -a cursor
198
+
199
+ # Disable symlinks, copy files instead
200
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
201
+
200
202
  # Download to custom location
201
203
  sm install https://github.com/user/repo/tree/main/skills/my-skill -d ./my-skills -a cursor
202
204
  ```
@@ -250,8 +252,11 @@ sm restore
250
252
  Symlinks allow you to maintain a single copy of skills while deploying to multiple agents:
251
253
 
252
254
  ```bash
253
- # Download skills to a central location and symlink to agents
254
- sm install https://github.com/cloudflare/skills --discover -d ~/skills --symlink -a windsurf -a cursor -a claude-code
255
+ # Download skills to a central location and symlink to agents (default behavior)
256
+ sm install https://github.com/cloudflare/skills -d ~/skills -a windsurf -a cursor -a claude-code
257
+
258
+ # Disable symlinks if needed
259
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
255
260
  ```
256
261
 
257
262
  > [!NOTE]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-skill-manager"
3
- version = "0.2.0"
3
+ version = "0.2.1"
4
4
  description = "CLI tool for managing AI agent skills across multiple platforms"
5
5
  authors = [
6
6
  { name = "ackness", email = "ackness8@gmail.com" }
@@ -0,0 +1,504 @@
1
+ ---
2
+ name: skill-manager
3
+ description: Manage AI agent skills - download from GitHub, discover skills in repositories, deploy to multiple agents with symlink support, update, uninstall with safe deletion, and track versions. Use when users want to install, manage, or update skills for AI coding assistants like Claude Code, Cursor, Windsurf, etc.
4
+ license: MIT
5
+ compatibility: Requires Python 3.13+, uv or rye package manager, internet access for GitHub downloads
6
+ metadata:
7
+ author: ackness
8
+ version: "0.2.1"
9
+ repository: https://github.com/ackness/skill-manager
10
+ pypi: agent-skill-manager
11
+ platforms:
12
+ - windows
13
+ - linux
14
+ - macos
15
+ allowed-tools: Bash(uv:*) Bash(git:*) Read Write
16
+ ---
17
+
18
+ # Skill Manager
19
+
20
+ A comprehensive CLI tool for managing AI agent skills across multiple platforms. Supports downloading skills from GitHub, discovering all skills in a repository, deploying to various AI agents with symlink support, version tracking, safe deletion with recovery, and automatic updates.
21
+
22
+ ## Key Features
23
+
24
+ - **Skill Discovery** - Automatically find all SKILL.md files in a GitHub repository
25
+ - **Symlink Support** - Deploy skills using symlinks to save disk space
26
+ - **CLI-first** - Full command-line parameter support for automation
27
+ - **39 Agents** - Support for all major AI coding assistants
28
+
29
+ ## Supported AI Agents
30
+
31
+ | Agent | ID | Project Path | Global Path |
32
+ |-------|-----|--------------|-------------|
33
+ | Amp | `amp` | `.agents/skills/` | `~/.config/agents/skills/` |
34
+ | Antigravity | `antigravity` | `.agent/skills/` | `~/.gemini/antigravity/skills/` |
35
+ | Augment | `augment` | `.augment/rules/` | `~/.augment/rules/` |
36
+ | Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
37
+ | Cline | `cline` | `.cline/skills/` | `~/.cline/skills/` |
38
+ | CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
39
+ | Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
40
+ | Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
41
+ | Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
42
+ | Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
43
+ | Cursor | `cursor` | `.cursor/skills/` | `~/.cursor/skills/` |
44
+ | Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |
45
+ | Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
46
+ | GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
47
+ | Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |
48
+ | iFlow CLI | `iflow-cli` | `.iflow/skills/` | `~/.iflow/skills/` |
49
+ | Junie | `junie` | `.junie/skills/` | `~/.junie/skills/` |
50
+ | Kilo Code | `kilo` | `.kilocode/skills/` | `~/.kilocode/skills/` |
51
+ | Kimi Code CLI | `kimi-cli` | `.agents/skills/` | `~/.config/agents/skills/` |
52
+ | Kiro CLI | `kiro-cli` | `.kiro/skills/` | `~/.kiro/skills/` |
53
+ | Kode | `kode` | `.kode/skills/` | `~/.kode/skills/` |
54
+ | MCPJam | `mcpjam` | `.mcpjam/skills/` | `~/.mcpjam/skills/` |
55
+ | Mistral Vibe | `mistral-vibe` | `.vibe/skills/` | `~/.vibe/skills/` |
56
+ | Mux | `mux` | `.mux/skills/` | `~/.mux/skills/` |
57
+ | Neovate | `neovate` | `.neovate/skills/` | `~/.neovate/skills/` |
58
+ | OpenClaw | `openclaw` | `skills/` | `~/.moltbot/skills/` |
59
+ | OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
60
+ | OpenHands | `openhands` | `.openhands/skills/` | `~/.openhands/skills/` |
61
+ | Pi | `pi` | `.pi/skills/` | `~/.pi/agent/skills/` |
62
+ | Pochi | `pochi` | `.pochi/skills/` | `~/.pochi/skills/` |
63
+ | Qoder | `qoder` | `.qoder/skills/` | `~/.qoder/skills/` |
64
+ | Qwen Code | `qwen-code` | `.qwen/skills/` | `~/.qwen/skills/` |
65
+ | Replit | `replit` | `.agents/skills/` | N/A (project-only) |
66
+ | Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
67
+ | Trae | `trae` | `.trae/skills/` | `~/.trae/skills/` |
68
+ | Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
69
+ | Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
70
+ | Zencoder | `zencoder` | `.zencoder/skills/` | `~/.zencoder/skills/` |
71
+ | AdaL | `adal` | `.adal/skills/` | `~/.adal/skills/` |
72
+
73
+ ## Installation
74
+
75
+ ### Quick Install (Recommended)
76
+
77
+ Install with uv tool for the best experience:
78
+
79
+ ```bash
80
+ # Install from PyPI (recommended)
81
+ uv tool install agent-skill-manager
82
+
83
+ # After installation, use the sm command
84
+ sm --version
85
+ sm install
86
+ ```
87
+
88
+ **Benefits:**
89
+ - Clean isolated environment
90
+ - No conflicts with other packages
91
+ - Easy updates: `uv tool upgrade agent-skill-manager`
92
+ - `sm` command available globally
93
+
94
+ ### Alternative: Run Without Installing
95
+
96
+ For one-time use or testing, use uvx:
97
+
98
+ ```bash
99
+ # Run directly without installing
100
+ uvx agent-skill-manager
101
+
102
+ # Or run specific commands
103
+ uvx --from agent-skill-manager sm install
104
+ uvx --from agent-skill-manager sm list
105
+
106
+ # Create an alias for convenience
107
+ alias sm="uvx --from agent-skill-manager sm"
108
+ ```
109
+
110
+ ### Other Installation Methods
111
+
112
+ ```bash
113
+ # Using pip
114
+ pip install agent-skill-manager
115
+
116
+ # From source (for development)
117
+ git clone https://github.com/ackness/skill-manager.git
118
+ cd skill-manager
119
+ uv sync
120
+ uv pip install -e .
121
+ ```
122
+
123
+ After installation, the `sm` command will be available globally.
124
+
125
+ ## Commands Overview
126
+
127
+ | Command | Description |
128
+ |---------|-------------|
129
+ | `sm install [url]` | Download and deploy skills (with discovery) |
130
+ | `sm download [url]` | Download a skill from GitHub |
131
+ | `sm deploy` | Deploy local skills to agents |
132
+ | `sm discover [url]` | Discover all skills in a repository |
133
+ | `sm uninstall` | Remove skills (safe delete/hard delete) |
134
+ | `sm restore` | Restore deleted skills from trash |
135
+ | `sm update [--all]` | Update skills from GitHub |
136
+ | `sm list` | Show installed skills with versions |
137
+ | `sm agents` | List all supported agents |
138
+
139
+ ## CLI Options
140
+
141
+ | Option | Description |
142
+ |--------|-------------|
143
+ | `-a, --agent AGENT` | Target agent(s), can be specified multiple times |
144
+ | `-t, --type TYPE` | Deployment type: `global` (default) or `project` |
145
+ | `-d, --dest PATH` | Custom destination directory for downloads |
146
+ | `--no-symlink` | Disable symlinks, copy files instead (symlinks on by default) |
147
+ | `--no-discover` | Disable auto-discovery, install only the specified path |
148
+ | `--no-deploy` | Download only, skip deployment |
149
+ | `-y`, `--yes` | Skip confirmation prompts |
150
+
151
+ ### Install Skills (CLI Mode - Recommended)
152
+
153
+ 由于支持 skill 的 agent 一般没有交互式环境,优先使用 CLI 格式:
154
+
155
+ ```bash
156
+ # Install all skills from a repo (auto-discovery and symlinks enabled by default)
157
+ sm install https://github.com/cloudflare/skills -a windsurf -a cursor
158
+
159
+ # Full CLI mode - no prompts
160
+ sm install https://github.com/user/repo/tree/main/skills/my-skill -a claude-code -t global
161
+
162
+ # Disable auto-discovery, install only the specified path
163
+ sm install https://github.com/user/repo/tree/main/skills/my-skill --no-discover -a cursor
164
+
165
+ # Disable symlinks, copy files instead
166
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
167
+
168
+ # Download to custom location
169
+ sm install https://github.com/user/repo/tree/main/skills/my-skill -d ./my-skills -a cursor
170
+ ```
171
+
172
+ ### Interactive Mode (For Interactive Terminals Only)
173
+
174
+ ```bash
175
+ sm install
176
+ # Enter URL when prompted
177
+ # Follow the prompts to save locally and deploy
178
+ ```
179
+
180
+ ### Discover Skills
181
+ ```bash
182
+ # Scan a repository to find all skills
183
+ sm discover https://github.com/cloudflare/skills
184
+ # Shows a table of all found skills with their paths
185
+ ```
186
+
187
+ ### Download Skills (CLI Mode - Recommended)
188
+
189
+ ```bash
190
+ # Download all skills from repo (auto-discovery enabled by default)
191
+ sm download https://github.com/user/repo -d ~/my-skills
192
+
193
+ # Download single skill to temp directory (default)
194
+ sm download https://github.com/user/repo/tree/main/skills/my-skill
195
+
196
+ # Disable auto-discovery, download only the specified path
197
+ sm download https://github.com/user/repo/tree/main/skills/my-skill --no-discover -d ~/my-skills
198
+ ```
199
+
200
+ ### Interactive Mode (For Interactive Terminals Only)
201
+
202
+ ```bash
203
+ sm download
204
+ # Follow prompts to enter URL and destination
205
+ ```
206
+
207
+ ### Deploy Skills (CLI Mode - Recommended)
208
+
209
+ For automated deployment without prompts:
210
+
211
+ ```bash
212
+ # Deploy specific skills to specific agents
213
+ sm deploy skill1 skill2 -a claude-code -a cursor -t global
214
+
215
+ # Deploy with symlinks
216
+ sm deploy my-skill -a windsurf --symlink
217
+ ```
218
+
219
+ ### Interactive Mode (For Interactive Terminals Only)
220
+
221
+ ```bash
222
+ sm deploy
223
+ # Select deployment type, agents, and skills interactively
224
+ ```
225
+
226
+ ### Update Skills (CLI Mode - Recommended)
227
+
228
+ ```bash
229
+ # Update all skills without prompts
230
+ sm update --all -y
231
+
232
+ # Update specific skills
233
+ sm update skill1 skill2 -a claude-code
234
+ ```
235
+
236
+ ### Interactive Mode (For Interactive Terminals Only)
237
+
238
+ ```bash
239
+ # Update selected skills interactively
240
+ sm update
241
+
242
+ # Update all skills (with confirmation)
243
+ sm update --all
244
+ ```
245
+
246
+ ### Uninstall Skills (CLI Mode - Recommended)
247
+
248
+ ```bash
249
+ # Uninstall specific skills from specific agents
250
+ sm uninstall skill1 skill2 -a claude-code -a cursor
251
+
252
+ # Hard delete (permanent, no trash)
253
+ sm uninstall my-skill -a windsurf --hard
254
+ ```
255
+
256
+ ### Interactive Mode (For Interactive Terminals Only)
257
+
258
+ ```bash
259
+ sm uninstall
260
+ # Select skills to remove interactively
261
+ # Choose "Safe delete" (default) or "Hard delete"
262
+ ```
263
+
264
+ ### Restore Skills (CLI Mode - Recommended)
265
+
266
+ ```bash
267
+ # Restore specific skills
268
+ sm restore skill1 skill2 -a claude-code
269
+ ```
270
+
271
+ ### Interactive Mode (For Interactive Terminals Only)
272
+
273
+ ```bash
274
+ sm restore
275
+ # Select skills to restore interactively (shows deletion timestamp)
276
+ ```
277
+
278
+ ### List Skills
279
+ ```bash
280
+ sm list
281
+ ```
282
+ Shows all installed skills with version information across agents.
283
+
284
+ ### List Agents
285
+ ```bash
286
+ sm agents
287
+ ```
288
+ Shows all 39 supported agents with their project and global paths.
289
+
290
+ ## Directory Structure
291
+
292
+ ### Global Installation
293
+ Skills installed globally are available to all projects:
294
+ ```
295
+ ~/.claude/skills/ # Claude Code
296
+ ~/.cursor/skills/ # Cursor
297
+ ~/.codeium/windsurf/skills/ # Windsurf
298
+ # ... other agents
299
+ ```
300
+
301
+ ### Project Installation
302
+ Skills installed at project level are only available in that project:
303
+ ```
304
+ project-root/
305
+ .claude/skills/
306
+ .cursor/skills/
307
+ # ... other agents
308
+ ```
309
+
310
+ ### Metadata Storage
311
+ Each skill installed from GitHub includes metadata:
312
+ ```
313
+ skill-name/
314
+ SKILL.md
315
+ .skill_metadata.json # Contains GitHub source, timestamps
316
+ # ... skill files
317
+ ```
318
+
319
+ ### Trash Storage
320
+ Safely deleted skills are stored with timestamps:
321
+ ```
322
+ ~/.claude/
323
+ skills/ # Active skills
324
+ .trash/ # Deleted skills
325
+ 20260120_143052/ # Timestamp directory
326
+ skill-name/
327
+ .trash_metadata # Deletion info
328
+ # ... skill files
329
+ ```
330
+
331
+ ## Version Tracking
332
+
333
+ The tool uses two methods for version identification:
334
+
335
+ 1. **GitHub Metadata** (for installed skills):
336
+ - Tracks installation and update timestamps
337
+ - Stores repository information
338
+ - Enables automatic updates
339
+ - Format: ISO 8601 timestamp
340
+
341
+ 2. **File Modification Time** (for local skills):
342
+ - Uses SKILL.md modification time
343
+ - Fallback for skills without metadata
344
+ - Format: YYYY-MM-DD HH:MM:SS
345
+
346
+ ## Examples (CLI-First)
347
+
348
+ 所有示例优先展示 CLI 格式,适用于自动化和无交互环境:
349
+
350
+ ### Install all skills from a repository (auto-discovery)
351
+ ```bash
352
+ # Auto-discovery is enabled by default - installs all skills found in repo
353
+ sm install https://github.com/cloudflare/skills -a windsurf -a cursor -a claude-code
354
+
355
+ # Use symlinks to save disk space (single copy, multiple deployments)
356
+ sm install https://github.com/cloudflare/skills --symlink -a windsurf
357
+ ```
358
+
359
+ ### Install a single skill (CLI mode)
360
+ ```bash
361
+ # Full CLI mode - no prompts
362
+ sm install https://github.com/user/repo/tree/main/skills/my-skill -a claude-code -t global
363
+
364
+ # Download to custom location
365
+ sm install https://github.com/user/repo/tree/main/skills/my-skill -d ./my-skills -a cursor
366
+ ```
367
+
368
+ ### Interactive mode (alternative for interactive terminals)
369
+ ```bash
370
+ sm install
371
+ # Enter URL when prompted
372
+ # Follow the prompts to save locally and deploy
373
+ ```
374
+
375
+ ### Discover skills in a repo
376
+ ```bash
377
+ sm discover https://github.com/cloudflare/skills
378
+ # Shows a table of all found skills with their paths and URLs
379
+ ```
380
+
381
+ ### Update all skills
382
+ ```bash
383
+ sm update --all
384
+ # Downloads latest versions from GitHub
385
+ # Updates metadata timestamps
386
+ ```
387
+
388
+ ### List installed skills
389
+ ```bash
390
+ sm list
391
+ # Shows table for each agent:
392
+ # Skill Name | Version/Updated | Source | GitHub URL
393
+ ```
394
+
395
+ ### Uninstall with safe delete
396
+ ```bash
397
+ sm uninstall
398
+ # Select skills to remove
399
+ # Choose "Safe delete"
400
+ # Skills moved to .trash with timestamp
401
+ # Can be restored later with sm restore
402
+ ```
403
+
404
+ ### Using symlinks
405
+ ```bash
406
+ # Download skills to a central location and symlink to agents (default behavior)
407
+ sm install https://github.com/cloudflare/skills -d ~/skills -a windsurf -a cursor -a claude-code
408
+
409
+ # Disable symlinks if needed
410
+ sm install https://github.com/cloudflare/skills --no-symlink -a windsurf
411
+ ```
412
+ Note: On Windows, symlinks require Developer Mode or admin privileges. Falls back to copying if not supported or when `--no-symlink` is used.
413
+
414
+ ## Best Practices
415
+
416
+ 1. **Symlinks are enabled by default** - Save disk space automatically, use `--no-symlink` to disable
417
+ 2. **Auto-discovery is enabled by default** - Discover and install all skills automatically, use `--no-discover` to disable
418
+ 3. **Use safe delete by default** - You can always restore if needed
419
+ 4. **Update regularly** - Run `sm update --all` periodically for bug fixes and improvements
420
+ 5. **Use CLI options for automation** - Avoid prompts with `-a`, `-t`, `-y` flags
421
+ 6. **Check versions** - Use `sm list` to see what's installed and outdated
422
+
423
+ ## Troubleshooting
424
+
425
+ ### Command not found: sm
426
+ Reinstall the package:
427
+ ```bash
428
+ uv pip install -e .
429
+ ```
430
+
431
+ ### GitHub download fails
432
+ - Check internet connection
433
+ - Verify the GitHub URL is correct
434
+ - Ensure the URL points to a directory, not a file
435
+ - Check if the repository is public
436
+
437
+ ### Skill not showing in agent
438
+ - Verify the agent is running
439
+ - Check deployment location (global vs project)
440
+ - Ensure the skill has a valid SKILL.md file
441
+ - Restart the agent if necessary
442
+
443
+ ### Update fails
444
+ - The tool automatically restores from backup
445
+ - Check if the GitHub repository still exists
446
+ - Verify internet connection
447
+ - Try reinstalling: `sm uninstall` then `sm install`
448
+
449
+ ## Technical Details
450
+
451
+ ### Metadata Format
452
+ ```json
453
+ {
454
+ "source": "github",
455
+ "github_url": "https://github.com/...",
456
+ "owner": "user",
457
+ "repo": "repo-name",
458
+ "branch": "main",
459
+ "path": "skills/skill-name",
460
+ "installed_at": "2026-01-20T14:30:52.123456+00:00",
461
+ "updated_at": "2026-01-20T14:30:52.123456+00:00"
462
+ }
463
+ ```
464
+
465
+ ### Agent Configuration
466
+ Each agent has defined paths for:
467
+ - **project**: Skills directory within current project
468
+ - **global**: User-wide skills directory
469
+ - See `src/skill_manager/agents.py` for complete mapping
470
+
471
+ ### Update Process
472
+ 1. Read skill metadata to get GitHub source
473
+ 2. Download updated version to temporary location
474
+ 3. Create backup of current version
475
+ 4. Remove current version
476
+ 5. Move updated version to skill location
477
+ 6. Update metadata timestamp
478
+ 7. Clean up temporary files
479
+ 8. On failure: restore from backup
480
+
481
+ ## Development
482
+
483
+ To add support for a new AI agent:
484
+
485
+ 1. Edit `src/skill_manager/agents.py`
486
+ 2. Add agent configuration:
487
+ ```python
488
+ "agent-id": {
489
+ "name": "Agent Name",
490
+ "project": ".agent/skills/",
491
+ "global": "~/.agent/skills/",
492
+ }
493
+ ```
494
+ 3. Test with `sm list` to verify detection
495
+
496
+ ## Related Resources
497
+
498
+ - Agent Skills Specification: https://agentskills.io/specification
499
+ - Report Issues: https://github.com/ackness/skill-manager/issues
500
+ - Skill Registry: https://agentskills.io
501
+
502
+ ## License
503
+
504
+ MIT License - See LICENSE file for details
@@ -5,7 +5,7 @@ This package provides functionality to download, deploy, and manage
5
5
  skills across different AI agent platforms.
6
6
  """
7
7
 
8
- __version__ = "0.2.0"
8
+ __version__ = "0.2.1"
9
9
 
10
10
  from .agents import AGENTS, detect_existing_agents, get_agent_name, get_agent_path, supports_global_deployment
11
11
  from .deployment import (
@@ -88,8 +88,10 @@ def create_parser() -> argparse.ArgumentParser:
88
88
  "-t", "--type", choices=["global", "project"], default="global", help="Deployment type (default: global)"
89
89
  )
90
90
  install_parser.add_argument("-d", "--dest", type=Path, help="Destination directory for downloaded skills")
91
- install_parser.add_argument("--symlink", action="store_true", help="Use symlinks instead of copying")
92
- install_parser.add_argument("--discover", action="store_true", help="Discover and install all skills in a repository")
91
+ install_parser.add_argument("--no-symlink", action="store_true", help="Disable symlinks, copy files instead")
92
+ install_parser.add_argument(
93
+ "--no-discover", action="store_true", help="Disable auto-discovery, install only the specified path"
94
+ )
93
95
  install_parser.add_argument("--no-deploy", action="store_true", help="Download only, do not deploy")
94
96
  install_parser.add_argument("-y", "--yes", action="store_true", help="Skip confirmation prompts")
95
97
 
@@ -97,7 +99,9 @@ def create_parser() -> argparse.ArgumentParser:
97
99
  download_parser = subparsers.add_parser("download", help="Download skills from GitHub")
98
100
  download_parser.add_argument("url", nargs="?", help="GitHub URL of the skill or repository")
99
101
  download_parser.add_argument("-d", "--dest", type=Path, help="Destination directory")
100
- download_parser.add_argument("--discover", action="store_true", help="Discover all skills in a repository")
102
+ download_parser.add_argument(
103
+ "--no-discover", action="store_true", help="Disable auto-discovery, download only the specified path"
104
+ )
101
105
  download_parser.add_argument("-y", "--yes", action="store_true", help="Skip confirmation prompts")
102
106
 
103
107
  # Deploy command
@@ -105,7 +109,7 @@ def create_parser() -> argparse.ArgumentParser:
105
109
  deploy_parser.add_argument("skills", nargs="*", help="Skill names or paths to deploy")
106
110
  deploy_parser.add_argument("-a", "--agent", action="append", dest="agents", help="Target agent(s)")
107
111
  deploy_parser.add_argument("-t", "--type", choices=["global", "project"], default="global", help="Deployment type")
108
- deploy_parser.add_argument("--symlink", action="store_true", help="Use symlinks instead of copying")
112
+ deploy_parser.add_argument("--no-symlink", action="store_true", help="Disable symlinks, copy files instead")
109
113
  deploy_parser.add_argument("-y", "--yes", action="store_true", help="Skip confirmation prompts")
110
114
 
111
115
  # Discover command
@@ -1334,7 +1338,7 @@ def cmd_install_cli(args: argparse.Namespace) -> int:
1334
1338
 
1335
1339
  url = args.url
1336
1340
  deployment_type = args.type
1337
- use_symlink = args.symlink
1341
+ use_symlink = not args.no_symlink
1338
1342
  skip_deploy = args.no_deploy
1339
1343
  # auto_confirm = args.yes # Reserved for future use
1340
1344
 
@@ -1363,7 +1367,7 @@ def cmd_install_cli(args: argparse.Namespace) -> int:
1363
1367
  use_symlink = False
1364
1368
 
1365
1369
  # Discover skills if requested
1366
- if args.discover:
1370
+ if not args.no_discover:
1367
1371
  with Progress(
1368
1372
  SpinnerColumn(),
1369
1373
  TextColumn("[progress.description]{task.description}"),
@@ -1537,7 +1541,7 @@ def cmd_download_cli(args: argparse.Namespace) -> int:
1537
1541
  console.print(f"[dim]Download location: {dest_dir}[/dim]\n")
1538
1542
 
1539
1543
  # Discover skills if requested
1540
- if args.discover:
1544
+ if not args.no_discover:
1541
1545
  with Progress(
1542
1546
  SpinnerColumn(),
1543
1547
  TextColumn("[progress.description]{task.description}"),
@@ -1637,10 +1641,10 @@ def main() -> int:
1637
1641
  "[bold]CLI Options:[/bold]\n"
1638
1642
  " -a, --agent AGENT - Target agent(s)\n"
1639
1643
  " -t, --type TYPE - Deployment type (global/project)\n"
1640
- " --symlink - Use symlinks instead of copying\n"
1641
- " --discover - Discover all skills in repository\n"
1644
+ " --no-symlink - Disable symlinks, copy files instead\n"
1645
+ " --no-discover - Disable auto-discovery\n"
1642
1646
  " -y, --yes - Skip confirmation prompts\n\n"
1643
- "[dim]Example: sm install https://github.com/cloudflare/skills --discover -a windsurf --symlink[/dim]",
1647
+ "[dim]Example: sm install https://github.com/cloudflare/skills -a windsurf -a cursor[/dim]",
1644
1648
  border_style="cyan",
1645
1649
  )
1646
1650
  )
@@ -4,7 +4,7 @@ requires-python = ">=3.13"
4
4
 
5
5
  [[package]]
6
6
  name = "agent-skill-manager"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  source = { editable = "." }
9
9
  dependencies = [
10
10
  { name = "httpx" },
@@ -1,386 +0,0 @@
1
- ---
2
- name: skill-manager
3
- description: Manage AI agent skills - download from GitHub, deploy to multiple agents, update, uninstall with safe deletion, and track versions. Use when users want to install, manage, or update skills for AI coding assistants like Claude Code, Cursor, Windsurf, etc.
4
- license: MIT
5
- compatibility: Requires Python 3.13+, uv or rye package manager, internet access for GitHub downloads
6
- metadata:
7
- author: ackness
8
- version: "0.1.3"
9
- repository: https://github.com/ackness/skill-manager
10
- pypi: agent-skill-manager
11
- platforms:
12
- - windows
13
- - linux
14
- - macos
15
- allowed-tools: Bash(uv:*) Bash(git:*) Read Write
16
- ---
17
-
18
- # Skill Manager
19
-
20
- A comprehensive CLI tool for managing AI agent skills across multiple platforms. Supports downloading skills from GitHub, deploying to various AI agents, version tracking, safe deletion with recovery, and automatic updates.
21
-
22
- ## Supported AI Agents
23
-
24
- - Claude Code
25
- - Cursor
26
- - Windsurf
27
- - OpenCode
28
- - Copilot
29
- - Goose
30
- - Gemini CLI
31
- - Roo Code
32
- - Kilo Code
33
- - Amp
34
- - Codex
35
- - Antigravity
36
- - Clawdbot
37
- - Droid
38
-
39
- ## Installation
40
-
41
- ### Quick Install (Recommended)
42
-
43
- Install with uv tool for the best experience:
44
-
45
- ```bash
46
- # Install from PyPI (recommended)
47
- uv tool install agent-skill-manager
48
-
49
- # After installation, use the sm command
50
- sm --version
51
- sm install
52
- ```
53
-
54
- **Benefits:**
55
- - Clean isolated environment
56
- - No conflicts with other packages
57
- - Easy updates: `uv tool upgrade agent-skill-manager`
58
- - `sm` command available globally
59
-
60
- ### Alternative: Run Without Installing
61
-
62
- For one-time use or testing, use uvx:
63
-
64
- ```bash
65
- # Run directly without installing
66
- uvx agent-skill-manager
67
-
68
- # Or run specific commands
69
- uvx --from agent-skill-manager sm install
70
- uvx --from agent-skill-manager sm list
71
-
72
- # Create an alias for convenience
73
- alias sm="uvx --from agent-skill-manager sm"
74
- ```
75
-
76
- ### Other Installation Methods
77
-
78
- ```bash
79
- # Using pip
80
- pip install agent-skill-manager
81
-
82
- # From source (for development)
83
- git clone https://github.com/ackness/skill-manager.git
84
- cd skill-manager
85
- uv sync
86
- uv pip install -e .
87
- ```
88
-
89
- After installation, the `sm` command will be available globally.
90
-
91
- ## Commands Overview
92
-
93
- ### Download Skills
94
- ```bash
95
- sm download
96
- ```
97
- Downloads a skill from GitHub to local storage. Saves metadata for version tracking and future updates.
98
-
99
- **When to use:** When you want to save a skill locally without deploying it yet.
100
-
101
- **Interactive prompts:**
102
- - GitHub URL of the skill
103
- - Whether to save to local skills/ directory
104
- - Category for organization (optional)
105
-
106
- ### Deploy Skills
107
- ```bash
108
- sm deploy
109
- ```
110
- Deploys skills from your local `skills/` directory to selected AI agents.
111
-
112
- **When to use:** When you have local skills ready to deploy to agents.
113
-
114
- **Interactive prompts:**
115
- - Deployment location (global/project)
116
- - Target agents
117
- - Skills to deploy
118
-
119
- ### Install Skills
120
- ```bash
121
- sm install
122
- ```
123
- Combined operation: downloads from GitHub and deploys to agents in one step.
124
-
125
- **When to use:** When you want to quickly install a skill from GitHub to your agents.
126
-
127
- **Interactive prompts:**
128
- - GitHub URL
129
- - Whether to save locally
130
- - Category (if saving locally)
131
- - Whether to deploy
132
- - Target agents and deployment location
133
-
134
- ### Update Skills
135
- ```bash
136
- # Update selected skills
137
- sm update
138
-
139
- # Update all skills with GitHub metadata
140
- sm update --all
141
- ```
142
- Updates skills from their GitHub sources. Only works for skills installed via `sm install` or with saved metadata.
143
-
144
- **When to use:** When you want to get the latest version of installed skills.
145
-
146
- **Features:**
147
- - Automatic backup before update
148
- - Rollback on failure
149
- - Updates metadata timestamps
150
- - Shows version information
151
-
152
- ### Uninstall Skills
153
- ```bash
154
- sm uninstall
155
- ```
156
- Removes skills from agents with two deletion modes:
157
- - **Safe delete (default):** Moves to `.trash` with timestamp for recovery
158
- - **Hard delete:** Permanent removal
159
-
160
- **When to use:** When you want to remove skills from agents.
161
-
162
- **Interactive prompts:**
163
- - Deployment type
164
- - Target agents
165
- - Skills to remove
166
- - Deletion type (safe/hard)
167
-
168
- ### Restore Skills
169
- ```bash
170
- sm restore
171
- ```
172
- Restores previously deleted skills from trash.
173
-
174
- **When to use:** When you accidentally deleted a skill or want to recover it.
175
-
176
- **Interactive prompts:**
177
- - Deployment type
178
- - Target agents
179
- - Skills to restore (shows deletion timestamp)
180
-
181
- ### List Skills
182
- ```bash
183
- sm list
184
- ```
185
- Shows all installed skills with version information across agents.
186
-
187
- **When to use:** When you want to see what skills are installed and their versions.
188
-
189
- **Displays:**
190
- - Skill names
191
- - Version/update timestamp
192
- - Source (GitHub/Local)
193
- - GitHub URL (for updatable skills)
194
- - Organized by agent
195
-
196
- ## Directory Structure
197
-
198
- ### Global Installation
199
- Skills installed globally are available to all projects:
200
- ```
201
- ~/.claude/skills/ # Claude Code
202
- ~/.cursor/skills/ # Cursor
203
- ~/.codeium/windsurf/skills/ # Windsurf
204
- # ... other agents
205
- ```
206
-
207
- ### Project Installation
208
- Skills installed at project level are only available in that project:
209
- ```
210
- project-root/
211
- .claude/skills/
212
- .cursor/skills/
213
- # ... other agents
214
- ```
215
-
216
- ### Metadata Storage
217
- Each skill installed from GitHub includes metadata:
218
- ```
219
- skill-name/
220
- SKILL.md
221
- .skill_metadata.json # Contains GitHub source, timestamps
222
- # ... skill files
223
- ```
224
-
225
- ### Trash Storage
226
- Safely deleted skills are stored with timestamps:
227
- ```
228
- ~/.claude/
229
- skills/ # Active skills
230
- .trash/ # Deleted skills
231
- 20260120_143052/ # Timestamp directory
232
- skill-name/
233
- .trash_metadata # Deletion info
234
- # ... skill files
235
- ```
236
-
237
- ## Version Tracking
238
-
239
- The tool uses two methods for version identification:
240
-
241
- 1. **GitHub Metadata** (for installed skills):
242
- - Tracks installation and update timestamps
243
- - Stores repository information
244
- - Enables automatic updates
245
- - Format: ISO 8601 timestamp
246
-
247
- 2. **File Modification Time** (for local skills):
248
- - Uses SKILL.md modification time
249
- - Fallback for skills without metadata
250
- - Format: YYYY-MM-DD HH:MM:SS
251
-
252
- ## Examples
253
-
254
- ### Install a skill from GitHub
255
-
256
- With uvx (no installation needed):
257
- ```bash
258
- uvx --from agent-skill-manager sm install
259
- # Enter URL: https://github.com/user/repo/tree/main/skills/example-skill
260
- # Save locally? Yes
261
- # Category: productivity
262
- # Deploy? Yes
263
- # Select agents: Claude Code, Cursor
264
- # Deployment: Global
265
- ```
266
-
267
- Or with installed version:
268
- ```bash
269
- sm install
270
- # Follow the same prompts as above
271
- ```
272
-
273
- ### Update all skills
274
- ```bash
275
- sm update --all
276
- # Selects all agents with GitHub-sourced skills
277
- # Downloads latest versions
278
- # Updates metadata timestamps
279
- ```
280
-
281
- ### List installed skills
282
- ```bash
283
- sm list
284
- # Shows table for each agent:
285
- # Skill Name | Version/Updated | Source | GitHub URL
286
- ```
287
-
288
- ### Uninstall with safe delete
289
- ```bash
290
- sm uninstall
291
- # Select skills to remove
292
- # Choose "Safe delete"
293
- # Skills moved to .trash with timestamp
294
- # Can be restored later with sm restore
295
- ```
296
-
297
- ## Best Practices
298
-
299
- 1. **Use safe delete by default** - You can always restore if needed
300
- 2. **Update regularly** - Run `sm update --all` periodically for bug fixes and improvements
301
- 3. **Save skills locally** - Keep a local copy in `skills/` for backup
302
- 4. **Organize with categories** - Use categories when saving locally for better organization
303
- 5. **Check versions** - Use `sm list` to see what's installed and outdated
304
-
305
- ## Troubleshooting
306
-
307
- ### Command not found: sm
308
- Reinstall the package:
309
- ```bash
310
- uv pip install -e .
311
- ```
312
-
313
- ### GitHub download fails
314
- - Check internet connection
315
- - Verify the GitHub URL is correct
316
- - Ensure the URL points to a directory, not a file
317
- - Check if the repository is public
318
-
319
- ### Skill not showing in agent
320
- - Verify the agent is running
321
- - Check deployment location (global vs project)
322
- - Ensure the skill has a valid SKILL.md file
323
- - Restart the agent if necessary
324
-
325
- ### Update fails
326
- - The tool automatically restores from backup
327
- - Check if the GitHub repository still exists
328
- - Verify internet connection
329
- - Try reinstalling: `sm uninstall` then `sm install`
330
-
331
- ## Technical Details
332
-
333
- ### Metadata Format
334
- ```json
335
- {
336
- "source": "github",
337
- "github_url": "https://github.com/...",
338
- "owner": "user",
339
- "repo": "repo-name",
340
- "branch": "main",
341
- "path": "skills/skill-name",
342
- "installed_at": "2026-01-20T14:30:52.123456+00:00",
343
- "updated_at": "2026-01-20T14:30:52.123456+00:00"
344
- }
345
- ```
346
-
347
- ### Agent Configuration
348
- Each agent has defined paths for:
349
- - **project**: Skills directory within current project
350
- - **global**: User-wide skills directory
351
- - See `src/skill_manager/agents.py` for complete mapping
352
-
353
- ### Update Process
354
- 1. Read skill metadata to get GitHub source
355
- 2. Download updated version to temporary location
356
- 3. Create backup of current version
357
- 4. Remove current version
358
- 5. Move updated version to skill location
359
- 6. Update metadata timestamp
360
- 7. Clean up temporary files
361
- 8. On failure: restore from backup
362
-
363
- ## Development
364
-
365
- To add support for a new AI agent:
366
-
367
- 1. Edit `src/skill_manager/agents.py`
368
- 2. Add agent configuration:
369
- ```python
370
- "agent-id": {
371
- "name": "Agent Name",
372
- "project": ".agent/skills/",
373
- "global": "~/.agent/skills/",
374
- }
375
- ```
376
- 3. Test with `sm list` to verify detection
377
-
378
- ## Related Resources
379
-
380
- - Agent Skills Specification: https://agentskills.io/specification
381
- - Report Issues: https://github.com/ackness/skill-manager/issues
382
- - Skill Registry: https://agentskills.io
383
-
384
- ## License
385
-
386
- MIT License - See LICENSE file for details