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.
Files changed (3) hide show
  1. package/README.md +66 -0
  2. package/bin/cli.js +315 -0
  3. 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
+ }