claude-skills-cli 0.0.7 → 0.0.8
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 +15 -0
- package/dist/commands/doctor.js +128 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/core/templates.js +18 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/core/validator.js +10 -5
- package/dist/core/validator.js.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/skills/skill-creator/SKILL.md +2 -4
- package/dist/skills/skill-creator/references/cli-reference.md +117 -3
- package/dist/validators/frontmatter-validator.js +54 -3
- package/dist/validators/frontmatter-validator.js.map +1 -1
- package/docs/prompt-that-started-it-all.md +19 -0
- package/package.json +1 -1
- package/docs/CLI-IMPROVEMENTS.md +0 -960
- package/docs/SKILL-CREATOR-UPDATES.md +0 -1071
- package/docs/SKILL-DEVELOPMENT.md +0 -460
- package/docs/SKILL-EXAMPLES.md +0 -528
- package/docs/SKILLS-ARCHITECTURE.md +0 -381
- package/docs/SKILLS-ECOSYSTEM-ANALYSIS.md +0 -509
- package/docs/SKILLS-OPPORTUNITIES.md +0 -652
package/docs/CLI-IMPROVEMENTS.md
DELETED
|
@@ -1,960 +0,0 @@
|
|
|
1
|
-
# claude-skills-cli: Enhancement Recommendations
|
|
2
|
-
|
|
3
|
-
Actionable improvements based on ecosystem analysis, prioritized by
|
|
4
|
-
impact and feasibility.
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
Current CLI commands:
|
|
9
|
-
|
|
10
|
-
- `init` - Create skill scaffolding
|
|
11
|
-
- `validate` - Check progressive disclosure compliance
|
|
12
|
-
- `stats` - Overview of all skills
|
|
13
|
-
- `package` - Create uploadable zip
|
|
14
|
-
|
|
15
|
-
**Gaps identified**:
|
|
16
|
-
|
|
17
|
-
1. No behavioral testing capability
|
|
18
|
-
2. No skill discovery/installation
|
|
19
|
-
3. No hook management
|
|
20
|
-
4. Limited quality metrics
|
|
21
|
-
5. No community integration
|
|
22
|
-
|
|
23
|
-
## Priority 0: Critical Enhancements
|
|
24
|
-
|
|
25
|
-
### 1. Add `test` Command - Behavioral Validation
|
|
26
|
-
|
|
27
|
-
**Problem**: Validation only checks structure, not effectiveness.
|
|
28
|
-
|
|
29
|
-
**Solution**: Subagent-based behavioral testing.
|
|
30
|
-
|
|
31
|
-
#### Implementation
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
// src/commands/test.ts
|
|
35
|
-
export async function testSkill(skillPath: string, options: TestOptions): Promise<TestResult> {
|
|
36
|
-
// 1. Load test scenarios
|
|
37
|
-
const scenarios = loadTestScenarios(skillPath);
|
|
38
|
-
|
|
39
|
-
// 2. For each scenario:
|
|
40
|
-
// - Launch subagent with skill
|
|
41
|
-
// - Provide scenario input
|
|
42
|
-
// - Observe behavior
|
|
43
|
-
// - Compare to expected
|
|
44
|
-
|
|
45
|
-
// 3. Generate report
|
|
46
|
-
return {
|
|
47
|
-
passed: 5,
|
|
48
|
-
failed: 2,
|
|
49
|
-
scenarios: [...],
|
|
50
|
-
coverage: 0.71
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
#### CLI Usage
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
# Test with default scenarios
|
|
59
|
-
pnpx claude-skills-cli test .claude/skills/my-skill
|
|
60
|
-
|
|
61
|
-
# Test with custom scenarios
|
|
62
|
-
pnpx claude-skills-cli test .claude/skills/my-skill --scenarios tests.json
|
|
63
|
-
|
|
64
|
-
# Test all skills
|
|
65
|
-
pnpx claude-skills-cli test .claude/skills --all
|
|
66
|
-
|
|
67
|
-
# Generate test scenarios from skill description
|
|
68
|
-
pnpx claude-skills-cli test .claude/skills/my-skill --generate-scenarios
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
#### Test Scenario Format
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"name": "my-skill-tests",
|
|
76
|
-
"version": "1.0.0",
|
|
77
|
-
"scenarios": [
|
|
78
|
-
{
|
|
79
|
-
"id": "happy-path-1",
|
|
80
|
-
"name": "Creates new feature with tests",
|
|
81
|
-
"skill": "feature-implementer",
|
|
82
|
-
"input": "Add a user profile component",
|
|
83
|
-
"context": {
|
|
84
|
-
"files": ["src/App.tsx", "src/types.ts"],
|
|
85
|
-
"framework": "React"
|
|
86
|
-
},
|
|
87
|
-
"expected": {
|
|
88
|
-
"files_created": [
|
|
89
|
-
"src/components/UserProfile.tsx",
|
|
90
|
-
"src/components/UserProfile.test.tsx"
|
|
91
|
-
],
|
|
92
|
-
"behavior_keywords": [
|
|
93
|
-
"creates component",
|
|
94
|
-
"adds tests",
|
|
95
|
-
"updates imports"
|
|
96
|
-
],
|
|
97
|
-
"not_behavior_keywords": [
|
|
98
|
-
"deletes files",
|
|
99
|
-
"modifies unrelated"
|
|
100
|
-
]
|
|
101
|
-
},
|
|
102
|
-
"pressure": ["time constraint", "unclear requirements"],
|
|
103
|
-
"timeout_seconds": 120
|
|
104
|
-
}
|
|
105
|
-
]
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
#### Value Proposition
|
|
110
|
-
|
|
111
|
-
- **Validates effectiveness**, not just structure
|
|
112
|
-
- **Catches regressions** when updating skills
|
|
113
|
-
- **Documents expected behavior** via tests
|
|
114
|
-
- **Builds confidence** in skill quality
|
|
115
|
-
|
|
116
|
-
#### Effort Estimate
|
|
117
|
-
|
|
118
|
-
- Implementation: 2-3 days
|
|
119
|
-
- Testing: 1 day
|
|
120
|
-
- Documentation: 0.5 days
|
|
121
|
-
- **Total: ~4 days**
|
|
122
|
-
|
|
123
|
-
### 2. Add `search` and `install` Commands - Discovery
|
|
124
|
-
|
|
125
|
-
**Problem**: No way to discover or install community skills.
|
|
126
|
-
|
|
127
|
-
**Solution**: Skills registry with search/install commands.
|
|
128
|
-
|
|
129
|
-
#### Registry Format
|
|
130
|
-
|
|
131
|
-
```json
|
|
132
|
-
{
|
|
133
|
-
"name": "claude-skills-registry",
|
|
134
|
-
"version": "1.0.0",
|
|
135
|
-
"skills": [
|
|
136
|
-
{
|
|
137
|
-
"name": "test-runner",
|
|
138
|
-
"description": "Smart test execution based on changes...",
|
|
139
|
-
"author": "community",
|
|
140
|
-
"version": "1.2.0",
|
|
141
|
-
"source": "https://github.com/user/repo/tree/main/.claude/skills/test-runner",
|
|
142
|
-
"tags": ["testing", "automation", "qa"],
|
|
143
|
-
"languages": ["javascript", "python", "rust"],
|
|
144
|
-
"quality_score": 0.92,
|
|
145
|
-
"downloads": 1523,
|
|
146
|
-
"updated": "2025-10-15"
|
|
147
|
-
}
|
|
148
|
-
]
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
#### CLI Usage
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
# Search for skills
|
|
156
|
-
pnpx claude-skills-cli search testing
|
|
157
|
-
pnpx claude-skills-cli search --tag security
|
|
158
|
-
pnpx claude-skills-cli search --language python
|
|
159
|
-
|
|
160
|
-
# Show skill details
|
|
161
|
-
pnpx claude-skills-cli info test-runner
|
|
162
|
-
|
|
163
|
-
# Install skill
|
|
164
|
-
pnpx claude-skills-cli install test-runner
|
|
165
|
-
pnpx claude-skills-cli install test-runner --global # ~/.claude/skills
|
|
166
|
-
pnpx claude-skills-cli install https://github.com/user/repo/tree/main/.claude/skills/custom-skill
|
|
167
|
-
|
|
168
|
-
# List installed skills
|
|
169
|
-
pnpx claude-skills-cli list
|
|
170
|
-
pnpx claude-skills-cli list --global
|
|
171
|
-
|
|
172
|
-
# Update skills
|
|
173
|
-
pnpx claude-skills-cli update test-runner
|
|
174
|
-
pnpx claude-skills-cli update --all
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
#### Implementation
|
|
178
|
-
|
|
179
|
-
```typescript
|
|
180
|
-
// src/commands/search.ts
|
|
181
|
-
export async function searchSkills(
|
|
182
|
-
query: string,
|
|
183
|
-
options: SearchOptions,
|
|
184
|
-
): Promise<Skill[]> {
|
|
185
|
-
// 1. Fetch registry from GitHub/CDN
|
|
186
|
-
const registry = await fetchRegistry();
|
|
187
|
-
|
|
188
|
-
// 2. Filter by query, tags, language
|
|
189
|
-
const results = registry.skills.filter(
|
|
190
|
-
(skill) =>
|
|
191
|
-
skill.name.includes(query) ||
|
|
192
|
-
skill.description.includes(query) ||
|
|
193
|
-
skill.tags.some((tag) => tag.includes(query)),
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
// 3. Sort by relevance and quality score
|
|
197
|
-
return results.sort((a, b) => b.quality_score - a.quality_score);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// src/commands/install.ts
|
|
201
|
-
export async function installSkill(
|
|
202
|
-
skillName: string,
|
|
203
|
-
options: InstallOptions,
|
|
204
|
-
): Promise<void> {
|
|
205
|
-
// 1. Find skill in registry
|
|
206
|
-
const skill = await findSkill(skillName);
|
|
207
|
-
|
|
208
|
-
// 2. Download skill files
|
|
209
|
-
const files = await downloadSkill(skill.source);
|
|
210
|
-
|
|
211
|
-
// 3. Validate before installing
|
|
212
|
-
const validation = await validateSkill(files);
|
|
213
|
-
if (!validation.valid) {
|
|
214
|
-
throw new Error(`Skill validation failed: ${validation.errors}`);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// 4. Install to ~/.claude/skills or .claude/skills
|
|
218
|
-
const targetPath = options.global
|
|
219
|
-
? '~/.claude/skills'
|
|
220
|
-
: '.claude/skills';
|
|
221
|
-
await copyFiles(files, `${targetPath}/${skill.name}`);
|
|
222
|
-
|
|
223
|
-
// 5. Report success
|
|
224
|
-
console.log(
|
|
225
|
-
`✅ Installed ${skill.name} to ${targetPath}/${skill.name}`,
|
|
226
|
-
);
|
|
227
|
-
}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
#### Registry Hosting
|
|
231
|
-
|
|
232
|
-
**Phase 1**: Static JSON on GitHub
|
|
233
|
-
|
|
234
|
-
- `https://raw.githubusercontent.com/spences10/claude-skills-registry/main/registry.json`
|
|
235
|
-
- Updated via PRs to registry repo
|
|
236
|
-
- Free, simple, version controlled
|
|
237
|
-
|
|
238
|
-
**Phase 2**: Dynamic API
|
|
239
|
-
|
|
240
|
-
- Search with full-text indexing
|
|
241
|
-
- Analytics (downloads, ratings)
|
|
242
|
-
- Automated quality scoring
|
|
243
|
-
- Community curation
|
|
244
|
-
|
|
245
|
-
#### Value Proposition
|
|
246
|
-
|
|
247
|
-
- **Solves discovery problem** - Users can find relevant skills
|
|
248
|
-
- **One-click installation** - Lower barrier to adoption
|
|
249
|
-
- **Quality signals** - Scores help users choose
|
|
250
|
-
- **Community growth** - Makes skill sharing easy
|
|
251
|
-
|
|
252
|
-
#### Effort Estimate
|
|
253
|
-
|
|
254
|
-
- Implementation: 3-4 days
|
|
255
|
-
- Registry setup: 1 day
|
|
256
|
-
- Testing: 1 day
|
|
257
|
-
- Documentation: 0.5 days
|
|
258
|
-
- **Total: ~6 days**
|
|
259
|
-
|
|
260
|
-
### 3. Enhanced `validate` Command - Quality Scoring
|
|
261
|
-
|
|
262
|
-
**Problem**: Validation is pass/fail, no quality guidance.
|
|
263
|
-
|
|
264
|
-
**Solution**: Add quality scoring with actionable feedback.
|
|
265
|
-
|
|
266
|
-
#### Quality Dimensions
|
|
267
|
-
|
|
268
|
-
```typescript
|
|
269
|
-
interface QualityScore {
|
|
270
|
-
overall: number; // 0-1
|
|
271
|
-
dimensions: {
|
|
272
|
-
structure: number; // Frontmatter, sections, organization
|
|
273
|
-
clarity: number; // Description, examples, documentation
|
|
274
|
-
completeness: number; // References, scripts, tests
|
|
275
|
-
maintainability: number; // Freshness, versioning, changelog
|
|
276
|
-
effectiveness: number; // Test results, usage metrics
|
|
277
|
-
};
|
|
278
|
-
feedback: Feedback[];
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
interface Feedback {
|
|
282
|
-
type: 'error' | 'warning' | 'suggestion';
|
|
283
|
-
dimension: string;
|
|
284
|
-
message: string;
|
|
285
|
-
action?: string; // What to do to fix it
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
#### Implementation
|
|
290
|
-
|
|
291
|
-
```typescript
|
|
292
|
-
// src/validation/quality-scorer.ts
|
|
293
|
-
export function scoreQuality(skill: Skill): QualityScore {
|
|
294
|
-
const scores = {
|
|
295
|
-
structure: scoreStructure(skill),
|
|
296
|
-
clarity: scoreClarity(skill),
|
|
297
|
-
completeness: scoreCompleteness(skill),
|
|
298
|
-
maintainability: scoreMaintainability(skill),
|
|
299
|
-
effectiveness: scoreEffectiveness(skill),
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
const overall = Object.values(scores).reduce((a, b) => a + b) / 5;
|
|
303
|
-
|
|
304
|
-
return {
|
|
305
|
-
overall,
|
|
306
|
-
dimensions: scores,
|
|
307
|
-
feedback: generateFeedback(skill, scores),
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
function scoreClarity(skill: Skill): number {
|
|
312
|
-
let score = 1.0;
|
|
313
|
-
|
|
314
|
-
// Description quality
|
|
315
|
-
if (skill.description.length < 50) score -= 0.2;
|
|
316
|
-
if (!hasTriggerWords(skill.description)) score -= 0.2;
|
|
317
|
-
if (hasGenericPhrases(skill.description)) score -= 0.1;
|
|
318
|
-
|
|
319
|
-
// Example quality
|
|
320
|
-
if (skill.examples.length === 0) score -= 0.2;
|
|
321
|
-
if (hasConcreteExamples(skill.examples)) score += 0.1;
|
|
322
|
-
|
|
323
|
-
// Documentation quality
|
|
324
|
-
if (skill.body.includes('TODO')) score -= 0.2;
|
|
325
|
-
if (hasVagueInstructions(skill.body)) score -= 0.1;
|
|
326
|
-
|
|
327
|
-
return Math.max(0, score);
|
|
328
|
-
}
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
#### CLI Usage
|
|
332
|
-
|
|
333
|
-
```bash
|
|
334
|
-
# Validate with quality score
|
|
335
|
-
pnpx claude-skills-cli validate .claude/skills/my-skill --score
|
|
336
|
-
|
|
337
|
-
# Output:
|
|
338
|
-
# ✅ Valid skill structure
|
|
339
|
-
#
|
|
340
|
-
# Quality Score: 0.78 / 1.00 (Good)
|
|
341
|
-
#
|
|
342
|
-
# Dimensions:
|
|
343
|
-
# Structure: 0.95 ✅ Excellent
|
|
344
|
-
# Clarity: 0.72 ⚠️ Could improve
|
|
345
|
-
# Completeness: 0.65 ⚠️ Could improve
|
|
346
|
-
# Maintainability: 0.90 ✅ Excellent
|
|
347
|
-
# Effectiveness: 0.68 ⚠️ Could improve
|
|
348
|
-
#
|
|
349
|
-
# Feedback:
|
|
350
|
-
# ⚠️ Clarity: Description lacks trigger keywords
|
|
351
|
-
# Action: Add keywords like "testing", "coverage", "qa"
|
|
352
|
-
#
|
|
353
|
-
# ⚠️ Completeness: No reference documentation
|
|
354
|
-
# Action: Move detailed examples to references/ directory
|
|
355
|
-
#
|
|
356
|
-
# 💡 Suggestion: Add test scenarios to validate effectiveness
|
|
357
|
-
# Action: Run `claude-skills-cli test --generate-scenarios`
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
#### Value Proposition
|
|
361
|
-
|
|
362
|
-
- **Actionable feedback** - Not just "bad", but "how to improve"
|
|
363
|
-
- **Continuous improvement** - Track score over time
|
|
364
|
-
- **Competitive benchmark** - Compare to high-quality skills
|
|
365
|
-
- **Learning tool** - Teaches skill development best practices
|
|
366
|
-
|
|
367
|
-
#### Effort Estimate
|
|
368
|
-
|
|
369
|
-
- Implementation: 2 days
|
|
370
|
-
- Scoring algorithms: 1 day
|
|
371
|
-
- Testing: 1 day
|
|
372
|
-
- Documentation: 0.5 days
|
|
373
|
-
- **Total: ~4.5 days**
|
|
374
|
-
|
|
375
|
-
## Priority 1: Important Enhancements
|
|
376
|
-
|
|
377
|
-
### 4. Add `hook` Command - Hook Management
|
|
378
|
-
|
|
379
|
-
**Problem**: Hook integration is underutilized, lacks templates.
|
|
380
|
-
|
|
381
|
-
**Solution**: Hook management with common templates.
|
|
382
|
-
|
|
383
|
-
#### CLI Usage
|
|
384
|
-
|
|
385
|
-
```bash
|
|
386
|
-
# List available hook templates
|
|
387
|
-
pnpx claude-skills-cli hook list-templates
|
|
388
|
-
|
|
389
|
-
# Add hook from template
|
|
390
|
-
pnpx claude-skills-cli hook add --template pre-commit-validation
|
|
391
|
-
pnpx claude-skills-cli hook add --template post-edit-skill-validation
|
|
392
|
-
pnpx claude-skills-cli hook add --template resource-tracking
|
|
393
|
-
|
|
394
|
-
# Add custom hook
|
|
395
|
-
pnpx claude-skills-cli hook add --tool Edit --script ./my-hook.sh
|
|
396
|
-
|
|
397
|
-
# List installed hooks
|
|
398
|
-
pnpx claude-skills-cli hook list
|
|
399
|
-
|
|
400
|
-
# Remove hook
|
|
401
|
-
pnpx claude-skills-cli hook remove --tool Edit --script ./my-hook.sh
|
|
402
|
-
|
|
403
|
-
# Test hook
|
|
404
|
-
pnpx claude-skills-cli hook test pre-commit-validation --tool Bash --args "git commit -m 'test'"
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
#### Hook Templates
|
|
408
|
-
|
|
409
|
-
```typescript
|
|
410
|
-
// src/hooks/templates.ts
|
|
411
|
-
export const HOOK_TEMPLATES = {
|
|
412
|
-
'pre-commit-validation': {
|
|
413
|
-
name: 'Pre-commit Validation',
|
|
414
|
-
description: 'Validates code before commits',
|
|
415
|
-
tool: 'Bash',
|
|
416
|
-
pattern: 'git commit*',
|
|
417
|
-
script: `#!/bin/bash
|
|
418
|
-
set -euo pipefail
|
|
419
|
-
|
|
420
|
-
# Run linter
|
|
421
|
-
npm run lint || exit 1
|
|
422
|
-
|
|
423
|
-
# Run tests
|
|
424
|
-
npm test || exit 1
|
|
425
|
-
|
|
426
|
-
echo "✅ Pre-commit checks passed"
|
|
427
|
-
exit 0
|
|
428
|
-
`,
|
|
429
|
-
},
|
|
430
|
-
|
|
431
|
-
'post-edit-skill-validation': {
|
|
432
|
-
name: 'Post-Edit Skill Validation',
|
|
433
|
-
description: 'Validates skills after editing SKILL.md files',
|
|
434
|
-
tool: 'Edit',
|
|
435
|
-
pattern: '*/SKILL.md',
|
|
436
|
-
script: `#!/bin/bash
|
|
437
|
-
set -euo pipefail
|
|
438
|
-
|
|
439
|
-
SKILL_DIR=$(dirname "$CLAUDE_FILE_PATH")
|
|
440
|
-
|
|
441
|
-
# Validate skill structure
|
|
442
|
-
pnpx claude-skills-cli validate "$SKILL_DIR" --quiet || {
|
|
443
|
-
echo "❌ Skill validation failed. Please fix errors before proceeding."
|
|
444
|
-
exit 1
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
exit 0
|
|
448
|
-
`,
|
|
449
|
-
},
|
|
450
|
-
|
|
451
|
-
'resource-tracking': {
|
|
452
|
-
name: 'Resource Usage Tracking',
|
|
453
|
-
description: 'Tracks token usage and performance',
|
|
454
|
-
tool: '*',
|
|
455
|
-
script: `#!/usr/bin/env python3
|
|
456
|
-
import json
|
|
457
|
-
import time
|
|
458
|
-
from pathlib import Path
|
|
459
|
-
|
|
460
|
-
log_file = Path.home() / '.claude' / 'usage.jsonl'
|
|
461
|
-
|
|
462
|
-
entry = {
|
|
463
|
-
'timestamp': time.time(),
|
|
464
|
-
'tool': os.environ.get('CLAUDE_TOOL'),
|
|
465
|
-
'file_paths': os.environ.get('CLAUDE_FILE_PATHS', '').split(',')
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
with open(log_file, 'a') as f:
|
|
469
|
-
f.write(json.dumps(entry) + '\\n')
|
|
470
|
-
|
|
471
|
-
exit 0
|
|
472
|
-
`,
|
|
473
|
-
},
|
|
474
|
-
};
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
#### Implementation
|
|
478
|
-
|
|
479
|
-
```typescript
|
|
480
|
-
// src/commands/hook.ts
|
|
481
|
-
export async function addHook(
|
|
482
|
-
options: AddHookOptions,
|
|
483
|
-
): Promise<void> {
|
|
484
|
-
// 1. Load or create .claude/settings.json
|
|
485
|
-
const settings = await loadSettings();
|
|
486
|
-
|
|
487
|
-
// 2. Get hook script (from template or custom)
|
|
488
|
-
const hookScript = options.template
|
|
489
|
-
? HOOK_TEMPLATES[options.template].script
|
|
490
|
-
: fs.readFileSync(options.script, 'utf-8');
|
|
491
|
-
|
|
492
|
-
// 3. Write hook script to .claude/hooks/
|
|
493
|
-
const hookPath = `.claude/hooks/${options.name}.sh`;
|
|
494
|
-
await fs.writeFile(hookPath, hookScript, { mode: 0o755 });
|
|
495
|
-
|
|
496
|
-
// 4. Update settings.json
|
|
497
|
-
if (!settings.PreToolUse) settings.PreToolUse = {};
|
|
498
|
-
settings.PreToolUse[options.tool] = `bash ${hookPath}`;
|
|
499
|
-
|
|
500
|
-
await saveSettings(settings);
|
|
501
|
-
|
|
502
|
-
console.log(`✅ Added hook: ${options.name}`);
|
|
503
|
-
}
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
#### Value Proposition
|
|
507
|
-
|
|
508
|
-
- **Lowers barrier** - Templates make hooks accessible
|
|
509
|
-
- **Best practices** - Templates encode proven patterns
|
|
510
|
-
- **Automation** - Enables powerful workflows
|
|
511
|
-
- **Learning tool** - Shows what's possible with hooks
|
|
512
|
-
|
|
513
|
-
#### Effort Estimate
|
|
514
|
-
|
|
515
|
-
- Implementation: 2 days
|
|
516
|
-
- Templates: 1 day
|
|
517
|
-
- Testing: 0.5 days
|
|
518
|
-
- Documentation: 0.5 days
|
|
519
|
-
- **Total: ~4 days**
|
|
520
|
-
|
|
521
|
-
### 5. Enhanced `stats` Command - Rich Analytics
|
|
522
|
-
|
|
523
|
-
**Problem**: Current stats are basic, no insights.
|
|
524
|
-
|
|
525
|
-
**Solution**: Add quality metrics, trends, comparisons.
|
|
526
|
-
|
|
527
|
-
#### CLI Usage
|
|
528
|
-
|
|
529
|
-
```bash
|
|
530
|
-
# Basic stats (current behavior)
|
|
531
|
-
pnpx claude-skills-cli stats .claude/skills
|
|
532
|
-
|
|
533
|
-
# Enhanced stats with quality scores
|
|
534
|
-
pnpx claude-skills-cli stats .claude/skills --detailed
|
|
535
|
-
|
|
536
|
-
# Compare against benchmarks
|
|
537
|
-
pnpx claude-skills-cli stats .claude/skills --benchmark
|
|
538
|
-
|
|
539
|
-
# Show trends over time
|
|
540
|
-
pnpx claude-skills-cli stats .claude/skills --history
|
|
541
|
-
|
|
542
|
-
# Export to JSON for analysis
|
|
543
|
-
pnpx claude-skills-cli stats .claude/skills --json > stats.json
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
#### Enhanced Output
|
|
547
|
-
|
|
548
|
-
```
|
|
549
|
-
📊 Skills Statistics
|
|
550
|
-
|
|
551
|
-
Overview:
|
|
552
|
-
Total skills: 12
|
|
553
|
-
Average quality: 0.78 (Good)
|
|
554
|
-
Total size: 156 KB
|
|
555
|
-
Last updated: 2 days ago
|
|
556
|
-
|
|
557
|
-
Quality Distribution:
|
|
558
|
-
Excellent (0.9+): 3 skills ▓▓▓░░░░░░░
|
|
559
|
-
Good (0.7-0.9): 6 skills ▓▓▓▓▓▓░░░░
|
|
560
|
-
Fair (0.5-0.7): 2 skills ▓▓░░░░░░░░
|
|
561
|
-
Poor (<0.5): 1 skill ▓░░░░░░░░░
|
|
562
|
-
|
|
563
|
-
Top Skills by Quality:
|
|
564
|
-
1. test-runner 0.94 ✅
|
|
565
|
-
2. git-workflow 0.91 ✅
|
|
566
|
-
3. doc-generator 0.88 ✅
|
|
567
|
-
|
|
568
|
-
Skills Needing Attention:
|
|
569
|
-
1. old-skill 0.42 ❌ No tests, outdated
|
|
570
|
-
2. experimental 0.58 ⚠️ Missing references
|
|
571
|
-
|
|
572
|
-
Recommendations:
|
|
573
|
-
💡 Add test scenarios to 8 skills without tests
|
|
574
|
-
💡 Update 3 skills not modified in 30+ days
|
|
575
|
-
💡 Consider archiving 'old-skill' (low quality, unused)
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
#### Implementation
|
|
579
|
-
|
|
580
|
-
```typescript
|
|
581
|
-
// src/commands/stats.ts
|
|
582
|
-
export async function generateStats(
|
|
583
|
-
skillsPath: string,
|
|
584
|
-
options: StatsOptions,
|
|
585
|
-
): Promise<Stats> {
|
|
586
|
-
const skills = await loadAllSkills(skillsPath);
|
|
587
|
-
|
|
588
|
-
// Calculate quality scores for all skills
|
|
589
|
-
const scores = await Promise.all(
|
|
590
|
-
skills.map((skill) => scoreQuality(skill)),
|
|
591
|
-
);
|
|
592
|
-
|
|
593
|
-
// Analyze trends if history available
|
|
594
|
-
const trends = options.history
|
|
595
|
-
? await analyzeTrends(skillsPath)
|
|
596
|
-
: null;
|
|
597
|
-
|
|
598
|
-
// Compare against benchmarks
|
|
599
|
-
const comparison = options.benchmark
|
|
600
|
-
? compareAgainstBenchmarks(scores)
|
|
601
|
-
: null;
|
|
602
|
-
|
|
603
|
-
return {
|
|
604
|
-
overview: generateOverview(skills, scores),
|
|
605
|
-
distribution: generateDistribution(scores),
|
|
606
|
-
topSkills: getTopSkills(skills, scores),
|
|
607
|
-
needsAttention: getNeedsAttention(skills, scores),
|
|
608
|
-
recommendations: generateRecommendations(skills, scores),
|
|
609
|
-
trends,
|
|
610
|
-
comparison,
|
|
611
|
-
};
|
|
612
|
-
}
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
#### Value Proposition
|
|
616
|
-
|
|
617
|
-
- **Portfolio view** - Understand skill quality at a glance
|
|
618
|
-
- **Actionable insights** - Know what to improve
|
|
619
|
-
- **Trend tracking** - See quality evolution over time
|
|
620
|
-
- **Benchmark comparison** - Know how you compare to community
|
|
621
|
-
|
|
622
|
-
#### Effort Estimate
|
|
623
|
-
|
|
624
|
-
- Implementation: 1.5 days
|
|
625
|
-
- Visualization: 0.5 days
|
|
626
|
-
- Testing: 0.5 days
|
|
627
|
-
- Documentation: 0.5 days
|
|
628
|
-
- **Total: ~3 days**
|
|
629
|
-
|
|
630
|
-
### 6. Add `init` Templates - Framework-Specific Scaffolding
|
|
631
|
-
|
|
632
|
-
**Problem**: Generic init template, no framework-specific patterns.
|
|
633
|
-
|
|
634
|
-
**Solution**: Add templates for common skill types.
|
|
635
|
-
|
|
636
|
-
#### CLI Usage
|
|
637
|
-
|
|
638
|
-
```bash
|
|
639
|
-
# List available templates
|
|
640
|
-
pnpx claude-skills-cli init --list-templates
|
|
641
|
-
|
|
642
|
-
# Use template
|
|
643
|
-
pnpx claude-skills-cli init --name my-skill --template testing
|
|
644
|
-
pnpx claude-skills-cli init --name api-docs --template documentation
|
|
645
|
-
pnpx claude-skills-cli init --name react-patterns --template framework
|
|
646
|
-
|
|
647
|
-
# Interactive mode
|
|
648
|
-
pnpx claude-skills-cli init --interactive
|
|
649
|
-
```
|
|
650
|
-
|
|
651
|
-
#### Templates
|
|
652
|
-
|
|
653
|
-
```typescript
|
|
654
|
-
export const INIT_TEMPLATES = {
|
|
655
|
-
basic: {
|
|
656
|
-
name: 'Basic Skill',
|
|
657
|
-
description: 'Minimal skill structure',
|
|
658
|
-
includes: ['SKILL.md', 'README.md'],
|
|
659
|
-
},
|
|
660
|
-
|
|
661
|
-
testing: {
|
|
662
|
-
name: 'Testing Skill',
|
|
663
|
-
description: 'Skill for test-related workflows',
|
|
664
|
-
includes: [
|
|
665
|
-
'SKILL.md',
|
|
666
|
-
'README.md',
|
|
667
|
-
'references/',
|
|
668
|
-
'scripts/',
|
|
669
|
-
'tests/',
|
|
670
|
-
],
|
|
671
|
-
skillMdTemplate: `---
|
|
672
|
-
name: {{name}}
|
|
673
|
-
description: Smart test execution and analysis. Use when running tests, analyzing failures, or improving test coverage.
|
|
674
|
-
---
|
|
675
|
-
|
|
676
|
-
# {{name}}
|
|
677
|
-
|
|
678
|
-
Intelligent test runner that adapts to your testing framework.
|
|
679
|
-
|
|
680
|
-
## Quick Start
|
|
681
|
-
|
|
682
|
-
Run tests for changed files:
|
|
683
|
-
\`\`\`bash
|
|
684
|
-
python .claude/skills/{{name}}/scripts/run_tests.py --changed
|
|
685
|
-
\`\`\`
|
|
686
|
-
|
|
687
|
-
## Supported Frameworks
|
|
688
|
-
|
|
689
|
-
- Jest / Vitest (JavaScript/TypeScript)
|
|
690
|
-
- pytest (Python)
|
|
691
|
-
- cargo test (Rust)
|
|
692
|
-
- go test (Go)
|
|
693
|
-
|
|
694
|
-
## Core Patterns
|
|
695
|
-
|
|
696
|
-
1. **Smart test selection**: Runs only tests affected by changes
|
|
697
|
-
2. **Failure analysis**: Parses errors and suggests fixes
|
|
698
|
-
3. **Coverage tracking**: Identifies untested code paths
|
|
699
|
-
|
|
700
|
-
See [references/framework-detection.md](references/framework-detection.md) for details.
|
|
701
|
-
`,
|
|
702
|
-
},
|
|
703
|
-
|
|
704
|
-
documentation: {
|
|
705
|
-
name: 'Documentation Skill',
|
|
706
|
-
description: 'Skill for documentation workflows',
|
|
707
|
-
includes: ['SKILL.md', 'README.md', 'references/', 'templates/'],
|
|
708
|
-
skillMdTemplate: `---
|
|
709
|
-
name: {{name}}
|
|
710
|
-
description: Generate and maintain documentation. Use when creating docs, updating API references, or improving documentation quality.
|
|
711
|
-
---
|
|
712
|
-
...
|
|
713
|
-
`,
|
|
714
|
-
},
|
|
715
|
-
|
|
716
|
-
framework: {
|
|
717
|
-
name: 'Framework Expertise Skill',
|
|
718
|
-
description: 'Skill for framework-specific patterns',
|
|
719
|
-
includes: ['SKILL.md', 'README.md', 'references/', 'examples/'],
|
|
720
|
-
skillMdTemplate: `---
|
|
721
|
-
name: {{name}}
|
|
722
|
-
description: Expert knowledge of {{framework}} patterns, best practices, and conventions. Use when working with {{framework}} code.
|
|
723
|
-
---
|
|
724
|
-
...
|
|
725
|
-
`,
|
|
726
|
-
},
|
|
727
|
-
};
|
|
728
|
-
```
|
|
729
|
-
|
|
730
|
-
#### Value Proposition
|
|
731
|
-
|
|
732
|
-
- **Faster starts** - Don't start from scratch
|
|
733
|
-
- **Best practices** - Templates encode proven patterns
|
|
734
|
-
- **Consistency** - Similar skills have similar structure
|
|
735
|
-
- **Learning** - Shows what good looks like
|
|
736
|
-
|
|
737
|
-
#### Effort Estimate
|
|
738
|
-
|
|
739
|
-
- Implementation: 1.5 days
|
|
740
|
-
- Template creation: 1 day
|
|
741
|
-
- Testing: 0.5 days
|
|
742
|
-
- Documentation: 0.5 days
|
|
743
|
-
- **Total: ~3.5 days**
|
|
744
|
-
|
|
745
|
-
## Priority 2: Nice-to-Have Enhancements
|
|
746
|
-
|
|
747
|
-
### 7. Add `publish` Command - Community Sharing
|
|
748
|
-
|
|
749
|
-
**Problem**: No easy way to share skills with community.
|
|
750
|
-
|
|
751
|
-
**Solution**: Publish skills to registry with one command.
|
|
752
|
-
|
|
753
|
-
#### CLI Usage
|
|
754
|
-
|
|
755
|
-
```bash
|
|
756
|
-
# Publish skill to registry
|
|
757
|
-
pnpx claude-skills-cli publish .claude/skills/my-skill
|
|
758
|
-
|
|
759
|
-
# Update published skill
|
|
760
|
-
pnpx claude-skills-cli publish .claude/skills/my-skill --update
|
|
761
|
-
|
|
762
|
-
# Unpublish skill
|
|
763
|
-
pnpx claude-skills-cli unpublish my-skill
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
**Effort**: 2-3 days
|
|
767
|
-
|
|
768
|
-
### 8. Add `doctor` Command - Health Check
|
|
769
|
-
|
|
770
|
-
**Problem**: Hard to diagnose skill issues.
|
|
771
|
-
|
|
772
|
-
**Solution**: Comprehensive health check command.
|
|
773
|
-
|
|
774
|
-
#### CLI Usage
|
|
775
|
-
|
|
776
|
-
```bash
|
|
777
|
-
# Check skill health
|
|
778
|
-
pnpx claude-skills-cli doctor .claude/skills/my-skill
|
|
779
|
-
|
|
780
|
-
# Check all skills
|
|
781
|
-
pnpx claude-skills-cli doctor .claude/skills --all
|
|
782
|
-
|
|
783
|
-
# Fix common issues
|
|
784
|
-
pnpx claude-skills-cli doctor .claude/skills/my-skill --fix
|
|
785
|
-
```
|
|
786
|
-
|
|
787
|
-
**Effort**: 2 days
|
|
788
|
-
|
|
789
|
-
### 9. Add `benchmark` Command - Performance Testing
|
|
790
|
-
|
|
791
|
-
**Problem**: No way to measure skill performance impact.
|
|
792
|
-
|
|
793
|
-
**Solution**: Benchmark token usage and execution time.
|
|
794
|
-
|
|
795
|
-
#### CLI Usage
|
|
796
|
-
|
|
797
|
-
```bash
|
|
798
|
-
# Benchmark skill
|
|
799
|
-
pnpx claude-skills-cli benchmark .claude/skills/my-skill
|
|
800
|
-
|
|
801
|
-
# Compare before/after changes
|
|
802
|
-
pnpx claude-skills-cli benchmark .claude/skills/my-skill --compare
|
|
803
|
-
```
|
|
804
|
-
|
|
805
|
-
**Effort**: 2-3 days
|
|
806
|
-
|
|
807
|
-
## Implementation Roadmap
|
|
808
|
-
|
|
809
|
-
### Version 0.1.0 (Current)
|
|
810
|
-
|
|
811
|
-
- ✅ init
|
|
812
|
-
- ✅ validate
|
|
813
|
-
- ✅ stats
|
|
814
|
-
- ✅ package
|
|
815
|
-
|
|
816
|
-
### Version 0.2.0 (Next Release - ~2-3 weeks)
|
|
817
|
-
|
|
818
|
-
**Priority 0 features**:
|
|
819
|
-
|
|
820
|
-
- `test` command with subagent harness
|
|
821
|
-
- `search` and `install` commands
|
|
822
|
-
- Enhanced `validate` with quality scoring
|
|
823
|
-
|
|
824
|
-
**Effort**: ~14 days **Impact**: Massive - enables behavioral
|
|
825
|
-
validation and discovery
|
|
826
|
-
|
|
827
|
-
### Version 0.3.0 (Future - ~1-2 months)
|
|
828
|
-
|
|
829
|
-
**Priority 1 features**:
|
|
830
|
-
|
|
831
|
-
- `hook` command with templates
|
|
832
|
-
- Enhanced `stats` with analytics
|
|
833
|
-
- `init` templates for common patterns
|
|
834
|
-
|
|
835
|
-
**Effort**: ~10 days **Impact**: High - improves usability and
|
|
836
|
-
automation
|
|
837
|
-
|
|
838
|
-
### Version 0.4.0 (Future - ~2-3 months)
|
|
839
|
-
|
|
840
|
-
**Priority 2 features**:
|
|
841
|
-
|
|
842
|
-
- `publish` command
|
|
843
|
-
- `doctor` command
|
|
844
|
-
- `benchmark` command
|
|
845
|
-
|
|
846
|
-
**Effort**: ~7 days **Impact**: Medium - enables community growth
|
|
847
|
-
|
|
848
|
-
## Technical Considerations
|
|
849
|
-
|
|
850
|
-
### Testing Strategy
|
|
851
|
-
|
|
852
|
-
```
|
|
853
|
-
tests/
|
|
854
|
-
├── unit/
|
|
855
|
-
│ ├── validation.test.ts
|
|
856
|
-
│ ├── quality-scorer.test.ts
|
|
857
|
-
│ └── ...
|
|
858
|
-
├── integration/
|
|
859
|
-
│ ├── test-command.test.ts
|
|
860
|
-
│ ├── install-command.test.ts
|
|
861
|
-
│ └── ...
|
|
862
|
-
└── fixtures/
|
|
863
|
-
├── valid-skill/
|
|
864
|
-
├── invalid-skill/
|
|
865
|
-
└── test-scenarios/
|
|
866
|
-
```
|
|
867
|
-
|
|
868
|
-
### Dependencies to Add
|
|
869
|
-
|
|
870
|
-
```json
|
|
871
|
-
{
|
|
872
|
-
"dependencies": {
|
|
873
|
-
"node-fetch": "^3.3.2", // For registry fetching
|
|
874
|
-
"js-yaml": "^4.1.0", // YAML parsing
|
|
875
|
-
"chalk": "^5.6.2" // Already have
|
|
876
|
-
},
|
|
877
|
-
"devDependencies": {
|
|
878
|
-
"vitest": "^1.0.0", // Testing
|
|
879
|
-
"@types/js-yaml": "^4.0.9"
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
```
|
|
883
|
-
|
|
884
|
-
### Configuration File
|
|
885
|
-
|
|
886
|
-
```typescript
|
|
887
|
-
// .claude/skills-cli.json
|
|
888
|
-
{
|
|
889
|
-
"registry": "https://raw.githubusercontent.com/spences10/claude-skills-registry/main/registry.json",
|
|
890
|
-
"quality_thresholds": {
|
|
891
|
-
"minimum": 0.5,
|
|
892
|
-
"good": 0.7,
|
|
893
|
-
"excellent": 0.9
|
|
894
|
-
},
|
|
895
|
-
"test": {
|
|
896
|
-
"timeout": 120,
|
|
897
|
-
"parallel": false
|
|
898
|
-
},
|
|
899
|
-
"analytics": {
|
|
900
|
-
"enabled": false, // Opt-in
|
|
901
|
-
"anonymous": true
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
```
|
|
905
|
-
|
|
906
|
-
## Success Metrics
|
|
907
|
-
|
|
908
|
-
### User Adoption
|
|
909
|
-
|
|
910
|
-
- Downloads per week
|
|
911
|
-
- Active users (via opt-in analytics)
|
|
912
|
-
- GitHub stars and forks
|
|
913
|
-
|
|
914
|
-
### Quality Improvement
|
|
915
|
-
|
|
916
|
-
- Average skill quality score over time
|
|
917
|
-
- % of skills with tests
|
|
918
|
-
- % of skills passing behavioral validation
|
|
919
|
-
|
|
920
|
-
### Community Growth
|
|
921
|
-
|
|
922
|
-
- Skills in registry
|
|
923
|
-
- Skill installs per week
|
|
924
|
-
- Community contributions (PRs, issues)
|
|
925
|
-
|
|
926
|
-
### User Satisfaction
|
|
927
|
-
|
|
928
|
-
- Issue resolution time
|
|
929
|
-
- Positive feedback ratio
|
|
930
|
-
- Feature request themes
|
|
931
|
-
|
|
932
|
-
## Conclusion
|
|
933
|
-
|
|
934
|
-
Prioritized implementation plan:
|
|
935
|
-
|
|
936
|
-
**Ship first** (v0.2.0):
|
|
937
|
-
|
|
938
|
-
1. `test` command - Solves validation gap
|
|
939
|
-
2. `search`/`install` - Solves discovery gap
|
|
940
|
-
3. Quality scoring - Raises quality bar
|
|
941
|
-
|
|
942
|
-
**Ship second** (v0.3.0): 4. `hook` command - Enables automation 5.
|
|
943
|
-
Enhanced `stats` - Provides insights 6. Init templates - Lowers
|
|
944
|
-
creation barrier
|
|
945
|
-
|
|
946
|
-
**Ship third** (v0.4.0): 7. `publish` command - Grows community 8.
|
|
947
|
-
`doctor` command - Improves debugging 9. `benchmark` command -
|
|
948
|
-
Optimizes performance
|
|
949
|
-
|
|
950
|
-
This roadmap positions `claude-skills-cli` as the definitive tool for
|
|
951
|
-
Claude Skills development, with unique capabilities (behavioral
|
|
952
|
-
testing) that no other tool provides.
|
|
953
|
-
|
|
954
|
-
Next steps:
|
|
955
|
-
|
|
956
|
-
1. Review and prioritize based on your goals
|
|
957
|
-
2. Set up testing infrastructure
|
|
958
|
-
3. Implement v0.2.0 features
|
|
959
|
-
4. Create skills registry repository
|
|
960
|
-
5. Document new features
|