vibeship-spawner-skills 1.0.0
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.
- package/README.md +66 -0
- package/bin/cli.js +315 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# spawner-skills
|
|
2
|
+
|
|
3
|
+
CLI installer for VibeShip Spawner skills - 245 specialist skills for AI-powered product building.
|
|
4
|
+
|
|
5
|
+
## Quick Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx spawner-skills install
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This clones the skills repository to `~/.spawner/skills/`.
|
|
12
|
+
|
|
13
|
+
## Commands
|
|
14
|
+
|
|
15
|
+
| Command | Description |
|
|
16
|
+
|---------|-------------|
|
|
17
|
+
| `install` | Install skills to ~/.spawner/skills |
|
|
18
|
+
| `update` | Update skills to latest version |
|
|
19
|
+
| `status` | Check installation status |
|
|
20
|
+
| `list` | List installed skill categories |
|
|
21
|
+
| `help` | Show help message |
|
|
22
|
+
|
|
23
|
+
## Usage Examples
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# First-time installation
|
|
27
|
+
npx spawner-skills install
|
|
28
|
+
|
|
29
|
+
# Update to latest skills
|
|
30
|
+
npx spawner-skills update
|
|
31
|
+
|
|
32
|
+
# Check if installed
|
|
33
|
+
npx spawner-skills status
|
|
34
|
+
|
|
35
|
+
# List all categories
|
|
36
|
+
npx spawner-skills list
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## After Installation
|
|
40
|
+
|
|
41
|
+
Skills are available at: `~/.spawner/skills/`
|
|
42
|
+
|
|
43
|
+
Load skills in Claude by reading their YAML files:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Read: ~/.spawner/skills/development/backend/skill.yaml
|
|
47
|
+
Read: ~/.spawner/skills/development/backend/sharp-edges.yaml
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Skill Categories
|
|
51
|
+
|
|
52
|
+
- **development** (57 skills) - Backend, frontend, API, auth, testing
|
|
53
|
+
- **marketing** (33 skills) - Content, SEO, social, email
|
|
54
|
+
- **ai** (12 skills) - LLM, ML, embeddings, RAG
|
|
55
|
+
- **agents** (10 skills) - Autonomous agents, multi-agent systems
|
|
56
|
+
- **data** (8 skills) - PostgreSQL, Redis, data pipelines
|
|
57
|
+
- **mind** (10 skills) - Memory systems, context management
|
|
58
|
+
- And many more...
|
|
59
|
+
|
|
60
|
+
## Documentation
|
|
61
|
+
|
|
62
|
+
Full documentation: https://github.com/vibeforge1111/vibeship-spawner-skills
|
|
63
|
+
|
|
64
|
+
## License
|
|
65
|
+
|
|
66
|
+
MIT
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { execSync, spawn } = require('child_process');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const os = require('os');
|
|
7
|
+
|
|
8
|
+
const REPO_URL = 'https://github.com/vibeforge1111/vibeship-spawner-skills.git';
|
|
9
|
+
const SKILLS_DIR = path.join(os.homedir(), '.spawner', 'skills');
|
|
10
|
+
const SPAWNER_DIR = path.join(os.homedir(), '.spawner');
|
|
11
|
+
|
|
12
|
+
const COLORS = {
|
|
13
|
+
reset: '\x1b[0m',
|
|
14
|
+
bright: '\x1b[1m',
|
|
15
|
+
green: '\x1b[32m',
|
|
16
|
+
yellow: '\x1b[33m',
|
|
17
|
+
blue: '\x1b[34m',
|
|
18
|
+
magenta: '\x1b[35m',
|
|
19
|
+
cyan: '\x1b[36m',
|
|
20
|
+
red: '\x1b[31m',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
function log(msg, color = '') {
|
|
24
|
+
console.log(`${color}${msg}${COLORS.reset}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function logStep(step, msg) {
|
|
28
|
+
log(`\n${COLORS.cyan}[${step}]${COLORS.reset} ${msg}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function logSuccess(msg) {
|
|
32
|
+
log(`${COLORS.green}✓${COLORS.reset} ${msg}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function logError(msg) {
|
|
36
|
+
log(`${COLORS.red}✗${COLORS.reset} ${msg}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function logInfo(msg) {
|
|
40
|
+
log(`${COLORS.blue}ℹ${COLORS.reset} ${msg}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function checkGitInstalled() {
|
|
44
|
+
try {
|
|
45
|
+
execSync('git --version', { stdio: 'pipe' });
|
|
46
|
+
return true;
|
|
47
|
+
} catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function skillsExist() {
|
|
53
|
+
return fs.existsSync(SKILLS_DIR) && fs.existsSync(path.join(SKILLS_DIR, '.git'));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function countSkills() {
|
|
57
|
+
if (!fs.existsSync(SKILLS_DIR)) return 0;
|
|
58
|
+
|
|
59
|
+
let count = 0;
|
|
60
|
+
const categories = fs.readdirSync(SKILLS_DIR).filter(f => {
|
|
61
|
+
const fullPath = path.join(SKILLS_DIR, f);
|
|
62
|
+
return fs.statSync(fullPath).isDirectory() && !f.startsWith('.') && f !== 'scripts' && f !== 'cli';
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
for (const category of categories) {
|
|
66
|
+
const categoryPath = path.join(SKILLS_DIR, category);
|
|
67
|
+
const skills = fs.readdirSync(categoryPath).filter(f => {
|
|
68
|
+
const skillPath = path.join(categoryPath, f);
|
|
69
|
+
return fs.statSync(skillPath).isDirectory();
|
|
70
|
+
});
|
|
71
|
+
count += skills.length;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return count;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function printBanner() {
|
|
78
|
+
console.log(`
|
|
79
|
+
${COLORS.magenta}╔═══════════════════════════════════════════════════════════╗
|
|
80
|
+
║ ║
|
|
81
|
+
║ ${COLORS.bright}SPAWNER SKILLS${COLORS.reset}${COLORS.magenta} ║
|
|
82
|
+
║ ${COLORS.cyan}245 Specialist Skills for AI-Powered Product Building${COLORS.reset}${COLORS.magenta} ║
|
|
83
|
+
║ ║
|
|
84
|
+
╚═══════════════════════════════════════════════════════════╝${COLORS.reset}
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function printUsage() {
|
|
89
|
+
console.log(`
|
|
90
|
+
${COLORS.bright}Usage:${COLORS.reset}
|
|
91
|
+
npx spawner-skills <command>
|
|
92
|
+
|
|
93
|
+
${COLORS.bright}Commands:${COLORS.reset}
|
|
94
|
+
install Install skills to ~/.spawner/skills
|
|
95
|
+
update Update skills to latest version
|
|
96
|
+
status Check installation status
|
|
97
|
+
list List installed skill categories
|
|
98
|
+
help Show this help message
|
|
99
|
+
|
|
100
|
+
${COLORS.bright}Examples:${COLORS.reset}
|
|
101
|
+
npx spawner-skills install # First-time installation
|
|
102
|
+
npx spawner-skills update # Pull latest skills
|
|
103
|
+
npx spawner-skills status # Check if installed
|
|
104
|
+
|
|
105
|
+
${COLORS.bright}After Installation:${COLORS.reset}
|
|
106
|
+
Skills are available at: ~/.spawner/skills/
|
|
107
|
+
|
|
108
|
+
Load skills in Claude:
|
|
109
|
+
Read: ~/.spawner/skills/development/backend/skill.yaml
|
|
110
|
+
Read: ~/.spawner/skills/development/backend/sharp-edges.yaml
|
|
111
|
+
|
|
112
|
+
${COLORS.bright}Skill Categories:${COLORS.reset}
|
|
113
|
+
development, data, ai, agents, marketing, design, enterprise,
|
|
114
|
+
finance, mind, frameworks, startup, strategy, and more...
|
|
115
|
+
|
|
116
|
+
${COLORS.bright}Documentation:${COLORS.reset}
|
|
117
|
+
https://github.com/vibeforge1111/vibeship-spawner-skills
|
|
118
|
+
`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async function install() {
|
|
122
|
+
logStep('1/3', 'Checking prerequisites...');
|
|
123
|
+
|
|
124
|
+
if (!checkGitInstalled()) {
|
|
125
|
+
logError('Git is not installed. Please install Git first.');
|
|
126
|
+
logInfo('Download: https://git-scm.com/downloads');
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
logSuccess('Git is installed');
|
|
130
|
+
|
|
131
|
+
if (skillsExist()) {
|
|
132
|
+
logInfo('Skills already installed at ' + SKILLS_DIR);
|
|
133
|
+
logInfo('Run "npx spawner-skills update" to get the latest version');
|
|
134
|
+
const count = countSkills();
|
|
135
|
+
logSuccess(`${count} skills available`);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
logStep('2/3', 'Creating directory structure...');
|
|
140
|
+
|
|
141
|
+
if (!fs.existsSync(SPAWNER_DIR)) {
|
|
142
|
+
fs.mkdirSync(SPAWNER_DIR, { recursive: true });
|
|
143
|
+
logSuccess('Created ~/.spawner/');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
logStep('3/3', 'Cloning skills repository...');
|
|
147
|
+
logInfo('This may take a moment...');
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
execSync(`git clone ${REPO_URL} "${SKILLS_DIR}"`, {
|
|
151
|
+
stdio: 'inherit',
|
|
152
|
+
cwd: SPAWNER_DIR
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const count = countSkills();
|
|
156
|
+
console.log('');
|
|
157
|
+
logSuccess(`Installation complete! ${count} skills installed.`);
|
|
158
|
+
console.log(`
|
|
159
|
+
${COLORS.bright}Skills Location:${COLORS.reset} ${SKILLS_DIR}
|
|
160
|
+
|
|
161
|
+
${COLORS.bright}Quick Start:${COLORS.reset}
|
|
162
|
+
In Claude, load a skill by reading its YAML files:
|
|
163
|
+
|
|
164
|
+
${COLORS.cyan}Read: ~/.spawner/skills/development/backend/skill.yaml
|
|
165
|
+
Read: ~/.spawner/skills/development/backend/sharp-edges.yaml${COLORS.reset}
|
|
166
|
+
|
|
167
|
+
${COLORS.bright}Popular Skills:${COLORS.reset}
|
|
168
|
+
development/backend - Backend/API development
|
|
169
|
+
development/frontend - Frontend/UI development
|
|
170
|
+
data/postgres-wizard - PostgreSQL expert
|
|
171
|
+
ai/llm-architect - LLM integration
|
|
172
|
+
agents/autonomous-agents - AI agents
|
|
173
|
+
|
|
174
|
+
${COLORS.bright}Update Skills:${COLORS.reset}
|
|
175
|
+
npx spawner-skills update
|
|
176
|
+
`);
|
|
177
|
+
} catch (error) {
|
|
178
|
+
logError('Failed to clone repository');
|
|
179
|
+
logInfo('Check your internet connection and try again');
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function update() {
|
|
185
|
+
logStep('1/2', 'Checking installation...');
|
|
186
|
+
|
|
187
|
+
if (!skillsExist()) {
|
|
188
|
+
logError('Skills not installed. Run "npx spawner-skills install" first.');
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
logSuccess('Skills directory found');
|
|
193
|
+
|
|
194
|
+
logStep('2/2', 'Pulling latest changes...');
|
|
195
|
+
|
|
196
|
+
try {
|
|
197
|
+
execSync('git pull', {
|
|
198
|
+
stdio: 'inherit',
|
|
199
|
+
cwd: SKILLS_DIR
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const count = countSkills();
|
|
203
|
+
console.log('');
|
|
204
|
+
logSuccess(`Update complete! ${count} skills available.`);
|
|
205
|
+
} catch (error) {
|
|
206
|
+
logError('Failed to update. Check your internet connection.');
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function status() {
|
|
212
|
+
console.log('');
|
|
213
|
+
log('Spawner Skills Status', COLORS.bright);
|
|
214
|
+
console.log('─'.repeat(40));
|
|
215
|
+
|
|
216
|
+
if (skillsExist()) {
|
|
217
|
+
logSuccess(`Installed at: ${SKILLS_DIR}`);
|
|
218
|
+
const count = countSkills();
|
|
219
|
+
logSuccess(`Skills count: ${count}`);
|
|
220
|
+
|
|
221
|
+
// Get git info
|
|
222
|
+
try {
|
|
223
|
+
const branch = execSync('git branch --show-current', {
|
|
224
|
+
cwd: SKILLS_DIR,
|
|
225
|
+
encoding: 'utf8'
|
|
226
|
+
}).trim();
|
|
227
|
+
const lastCommit = execSync('git log -1 --format="%h %s" --date=short', {
|
|
228
|
+
cwd: SKILLS_DIR,
|
|
229
|
+
encoding: 'utf8'
|
|
230
|
+
}).trim();
|
|
231
|
+
|
|
232
|
+
logInfo(`Branch: ${branch}`);
|
|
233
|
+
logInfo(`Last update: ${lastCommit}`);
|
|
234
|
+
} catch {}
|
|
235
|
+
} else {
|
|
236
|
+
logError('Not installed');
|
|
237
|
+
logInfo('Run: npx spawner-skills install');
|
|
238
|
+
}
|
|
239
|
+
console.log('');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function list() {
|
|
243
|
+
if (!skillsExist()) {
|
|
244
|
+
logError('Skills not installed. Run "npx spawner-skills install" first.');
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
console.log('');
|
|
249
|
+
log('Installed Skill Categories', COLORS.bright);
|
|
250
|
+
console.log('─'.repeat(40));
|
|
251
|
+
|
|
252
|
+
const categories = fs.readdirSync(SKILLS_DIR)
|
|
253
|
+
.filter(f => {
|
|
254
|
+
const fullPath = path.join(SKILLS_DIR, f);
|
|
255
|
+
return fs.statSync(fullPath).isDirectory() &&
|
|
256
|
+
!f.startsWith('.') &&
|
|
257
|
+
f !== 'scripts' &&
|
|
258
|
+
f !== 'cli';
|
|
259
|
+
})
|
|
260
|
+
.sort();
|
|
261
|
+
|
|
262
|
+
let totalSkills = 0;
|
|
263
|
+
|
|
264
|
+
for (const category of categories) {
|
|
265
|
+
const categoryPath = path.join(SKILLS_DIR, category);
|
|
266
|
+
const skills = fs.readdirSync(categoryPath).filter(f => {
|
|
267
|
+
const skillPath = path.join(categoryPath, f);
|
|
268
|
+
return fs.statSync(skillPath).isDirectory();
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
totalSkills += skills.length;
|
|
272
|
+
console.log(`${COLORS.cyan}${category}${COLORS.reset} (${skills.length} skills)`);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
console.log('─'.repeat(40));
|
|
276
|
+
logSuccess(`Total: ${totalSkills} skills across ${categories.length} categories`);
|
|
277
|
+
console.log('');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Main
|
|
281
|
+
const args = process.argv.slice(2);
|
|
282
|
+
const command = args[0] || 'help';
|
|
283
|
+
|
|
284
|
+
printBanner();
|
|
285
|
+
|
|
286
|
+
switch (command) {
|
|
287
|
+
case 'install':
|
|
288
|
+
case 'i':
|
|
289
|
+
install();
|
|
290
|
+
break;
|
|
291
|
+
case 'update':
|
|
292
|
+
case 'u':
|
|
293
|
+
case 'upgrade':
|
|
294
|
+
update();
|
|
295
|
+
break;
|
|
296
|
+
case 'status':
|
|
297
|
+
case 's':
|
|
298
|
+
status();
|
|
299
|
+
break;
|
|
300
|
+
case 'list':
|
|
301
|
+
case 'ls':
|
|
302
|
+
case 'l':
|
|
303
|
+
list();
|
|
304
|
+
break;
|
|
305
|
+
case 'help':
|
|
306
|
+
case 'h':
|
|
307
|
+
case '--help':
|
|
308
|
+
case '-h':
|
|
309
|
+
printUsage();
|
|
310
|
+
break;
|
|
311
|
+
default:
|
|
312
|
+
logError(`Unknown command: ${command}`);
|
|
313
|
+
printUsage();
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vibeship-spawner-skills",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI installer for VibeShip Spawner skills - 245 specialist skills for AI-powered product building",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"spawner",
|
|
7
|
+
"vibeship",
|
|
8
|
+
"skills",
|
|
9
|
+
"mcp",
|
|
10
|
+
"claude",
|
|
11
|
+
"ai",
|
|
12
|
+
"llm"
|
|
13
|
+
],
|
|
14
|
+
"author": "VibeForge",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/vibeforge1111/vibeship-spawner-skills.git"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://github.com/vibeforge1111/vibeship-spawner-skills#readme",
|
|
21
|
+
"bin": {
|
|
22
|
+
"spawner-skills": "./bin/cli.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"bin"
|
|
26
|
+
],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=16.0.0"
|
|
29
|
+
}
|
|
30
|
+
}
|