claude-skills-cli 0.0.6 → 0.0.7

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 (40) hide show
  1. package/README.md +34 -9
  2. package/dist/commands/init.js +5 -3
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/install.js +1 -1
  5. package/dist/commands/install.js.map +1 -1
  6. package/dist/commands/stats.js +1 -1
  7. package/dist/commands/stats.js.map +1 -1
  8. package/dist/commands/validate.js +24 -3
  9. package/dist/commands/validate.js.map +1 -1
  10. package/dist/commands/watch.js +82 -0
  11. package/dist/commands/watch.js.map +1 -0
  12. package/dist/core/validator.js +169 -321
  13. package/dist/core/validator.js.map +1 -1
  14. package/dist/index.js +23 -12
  15. package/dist/index.js.map +1 -1
  16. package/dist/skills/skill-creator/SKILL.md +26 -108
  17. package/dist/skills/skill-creator/references/cli-reference.md +35 -35
  18. package/dist/skills/skill-creator/references/development-process.md +208 -0
  19. package/dist/skills/skill-creator/references/skill-examples.md +1 -1
  20. package/dist/validators/alignment-validator.js +54 -0
  21. package/dist/validators/alignment-validator.js.map +1 -0
  22. package/dist/validators/content-validator.js +144 -0
  23. package/dist/validators/content-validator.js.map +1 -0
  24. package/dist/validators/description-validator.js +136 -0
  25. package/dist/validators/description-validator.js.map +1 -0
  26. package/dist/validators/file-structure-validator.js +125 -0
  27. package/dist/validators/file-structure-validator.js.map +1 -0
  28. package/dist/validators/frontmatter-validator.js +114 -0
  29. package/dist/validators/frontmatter-validator.js.map +1 -0
  30. package/dist/validators/references-validator.js +125 -0
  31. package/dist/validators/references-validator.js.map +1 -0
  32. package/dist/validators/text-analysis.js +71 -0
  33. package/dist/validators/text-analysis.js.map +1 -0
  34. package/docs/CLI-IMPROVEMENTS.md +960 -0
  35. package/docs/SKILL-CREATOR-UPDATES.md +1071 -0
  36. package/docs/SKILL-DEVELOPMENT.md +10 -10
  37. package/docs/SKILLS-ARCHITECTURE.md +1 -1
  38. package/docs/SKILLS-ECOSYSTEM-ANALYSIS.md +509 -0
  39. package/docs/SKILLS-OPPORTUNITIES.md +652 -0
  40. package/package.json +3 -3
@@ -1,5 +1,12 @@
1
- import { existsSync, readdirSync, readFileSync, statSync, } from 'node:fs';
1
+ import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
+ // Import validators
4
+ import { extract_frontmatter, validate_frontmatter_structure, validate_name_format, validate_hard_limits, } from '../validators/frontmatter-validator.js';
5
+ import { validate_description_content, analyze_trigger_phrase, analyze_user_phrasing, } from '../validators/description-validator.js';
6
+ import { validate_content } from '../validators/content-validator.js';
7
+ import { analyze_alignment } from '../validators/alignment-validator.js';
8
+ import { validate_references } from '../validators/references-validator.js';
9
+ import { validate_directory, validate_path_formats, validate_scripts, validate_assets, } from '../validators/file-structure-validator.js';
3
10
  export class SkillValidator {
4
11
  skill_path;
5
12
  errors = [];
@@ -14,10 +21,64 @@ export class SkillValidator {
14
21
  sections: 0,
15
22
  long_paragraphs: 0,
16
23
  };
17
- // Progressive disclosure limits (from Anthropic guidelines)
18
- MAX_WORDS = 5000; // Hard limit
19
- RECOMMENDED_WORDS = 1000; // Sweet spot
20
- IDEAL_WORDS = 500; // Minimal but effective
24
+ // Structured validation data
25
+ structured_validation = {
26
+ hard_limits: {
27
+ name: { length: 0, limit: 64, valid: true, error: null },
28
+ description: {
29
+ length: 0,
30
+ limit: 1024,
31
+ valid: true,
32
+ error: null,
33
+ },
34
+ },
35
+ name_format: {
36
+ name: '',
37
+ format_valid: true,
38
+ directory_name: '',
39
+ matches_directory: true,
40
+ errors: [],
41
+ },
42
+ yaml_validation: {
43
+ valid: true,
44
+ has_frontmatter: false,
45
+ parse_error: null,
46
+ missing_fields: [],
47
+ },
48
+ path_format: {
49
+ invalid_paths: [],
50
+ },
51
+ triggering: {
52
+ trigger_phrase: {
53
+ has_explicit_trigger: false,
54
+ trigger_phrase: null,
55
+ trigger_type: 'missing',
56
+ },
57
+ user_phrasing: {
58
+ style_checks: {
59
+ is_third_person: true,
60
+ uses_gerund_form: true,
61
+ is_action_oriented: true,
62
+ },
63
+ issues: [],
64
+ },
65
+ keywords: {
66
+ description_keywords: [],
67
+ content_keywords: [],
68
+ overlap: [],
69
+ description_only: [],
70
+ content_only: [],
71
+ },
72
+ alignment: {
73
+ severity: 'good',
74
+ description_focus: [],
75
+ content_focus: [],
76
+ matches: [],
77
+ mismatches: [],
78
+ explanation: '',
79
+ },
80
+ },
81
+ };
21
82
  constructor(skill_path) {
22
83
  this.skill_path = skill_path;
23
84
  }
@@ -27,176 +88,6 @@ export class SkillValidator {
27
88
  warning(msg) {
28
89
  this.warnings.push(`⚠️ ${msg}`);
29
90
  }
30
- /**
31
- * Extract body content from SKILL.md (excluding YAML frontmatter)
32
- */
33
- extract_body(content) {
34
- const parts = content.split('---\n');
35
- return parts.length >= 3
36
- ? parts.slice(2).join('---\n').trim()
37
- : content;
38
- }
39
- /**
40
- * Count words in text
41
- */
42
- count_words(text) {
43
- return text
44
- .trim()
45
- .split(/\s+/)
46
- .filter((w) => w.length > 0).length;
47
- }
48
- /**
49
- * Estimate tokens (rough approximation: 1 word ≈ 1.3 tokens for English)
50
- */
51
- estimate_tokens(word_count) {
52
- return Math.round(word_count * 1.3);
53
- }
54
- /**
55
- * Estimate tokens for a string by counting words and applying ratio
56
- */
57
- estimate_string_tokens(text) {
58
- const word_count = this.count_words(text);
59
- return this.estimate_tokens(word_count);
60
- }
61
- /**
62
- * Validate Level 1 (Description in frontmatter) for progressive disclosure
63
- */
64
- validate_description(description) {
65
- const desc_length = description.length;
66
- const desc_tokens = this.estimate_string_tokens(description);
67
- // Store stats
68
- this.stats.description_length = desc_length;
69
- this.stats.description_tokens = desc_tokens;
70
- // Level 1 progressive disclosure checks
71
- // Recommended: <200 chars, <30 tokens for optimal Level 1 efficiency
72
- if (desc_length > 300) {
73
- this.error(`Description is ${desc_length} characters (MAX: 300 for Level 1)\n` +
74
- ` → Level 1 is always loaded - keep it concise for token efficiency`);
75
- }
76
- else if (desc_length > 200) {
77
- this.warning(`Description is ${desc_length} characters (recommended: <200 for Level 1)\n` +
78
- ` → Estimated ~${desc_tokens} tokens - consider shortening for efficiency`);
79
- }
80
- // Check for trigger keywords
81
- const lower_desc = description.toLowerCase();
82
- const has_trigger = lower_desc.includes('use when') ||
83
- lower_desc.includes('use for') ||
84
- lower_desc.includes('use to');
85
- if (!has_trigger) {
86
- this.warning(`Description missing trigger keywords ('Use when...', 'Use for...', 'Use to...')\n` +
87
- ` → Help Claude know when to activate this skill`);
88
- }
89
- // Check for list bloat (multiple commas indicating detailed lists)
90
- // Only warn if BOTH long description AND many commas (allows concise technical lists)
91
- const comma_count = (description.match(/,/g) || []).length;
92
- if (desc_length > 150 && comma_count >= 5) {
93
- this.warning(`Description contains long lists (${comma_count} commas, ${desc_length} chars)\n` +
94
- ` → Move detailed lists to Level 2 (SKILL.md body) or Level 3 (references/)`);
95
- }
96
- }
97
- /**
98
- * Remove HTML comments from content (for line counting)
99
- */
100
- strip_html_comments(text) {
101
- return text.replace(/<!--[\s\S]*?-->/g, '');
102
- }
103
- /**
104
- * Analyze content structure and patterns
105
- */
106
- analyze_content(body) {
107
- // Count code blocks
108
- const code_block_matches = body.match(/```[\s\S]*?```/g);
109
- this.stats.code_blocks = code_block_matches
110
- ? code_block_matches.length
111
- : 0;
112
- // Count markdown sections (headings)
113
- const heading_matches = body.match(/^#{1,6}\s/gm);
114
- this.stats.sections = heading_matches
115
- ? heading_matches.length
116
- : 0;
117
- // Count long paragraphs (>100 words)
118
- const paragraphs = body.split(/\n\n+/);
119
- this.stats.long_paragraphs = paragraphs.filter((p) => {
120
- const words = this.count_words(p);
121
- return words > 100;
122
- }).length;
123
- }
124
- /**
125
- * Validate progressive disclosure (word count, token budget, and line count)
126
- */
127
- validate_progressive_disclosure(body) {
128
- const word_count = this.count_words(body);
129
- const estimated_tokens = this.estimate_tokens(word_count);
130
- // Strip HTML comments before counting lines (progressive disclosure guidance shouldn't inflate count)
131
- const body_without_comments = this.strip_html_comments(body);
132
- const line_count = body_without_comments
133
- .trim()
134
- .split('\n').length;
135
- this.stats.word_count = word_count;
136
- this.stats.estimated_tokens = estimated_tokens;
137
- this.stats.line_count = line_count;
138
- // Hard limit check (error)
139
- if (word_count > this.MAX_WORDS) {
140
- this.error(`SKILL.md body has ${word_count} words (MAX: ${this.MAX_WORDS} per Anthropic guidelines)\n` +
141
- ` → Move detailed content to references/ directory for Level 3 loading`);
142
- }
143
- // Recommended limit check (warning)
144
- else if (word_count > this.RECOMMENDED_WORDS) {
145
- this.warning(`SKILL.md body has ${word_count} words (recommended: <${this.RECOMMENDED_WORDS})\n` +
146
- ` → Consider moving examples/docs to references/ for better token efficiency`);
147
- }
148
- // Line count validation (Level 2 progressive disclosure)
149
- // Target: ~50 lines, Warn: >80, Error: >150
150
- if (line_count > 150) {
151
- this.error(`SKILL.md body is ${line_count} lines (MAX: ~150 for Level 2 progressive disclosure)\n` +
152
- ` → Move detailed content to references/ directory\n` +
153
- ` → Target: ~50 lines for optimal scannability`);
154
- }
155
- else if (line_count > 80) {
156
- this.warning(`SKILL.md body is ${line_count} lines (recommended: ~50, max: ~80)\n` +
157
- ` → Consider moving detailed examples to references/ for Level 3 loading`);
158
- }
159
- // Content analysis warnings
160
- // Code blocks: Recommend 1-2, warn at >3
161
- if (this.stats.code_blocks > 3) {
162
- this.warning(`SKILL.md contains ${this.stats.code_blocks} code examples (recommended: 1-2)\n` +
163
- ` → Move additional examples to references/examples.md for Level 3 loading`);
164
- }
165
- // Long paragraphs
166
- if (this.stats.long_paragraphs > 3) {
167
- this.warning(`SKILL.md contains ${this.stats.long_paragraphs} lengthy paragraphs (>100 words)\n` +
168
- ` → Consider moving detailed explanations to references/`);
169
- }
170
- // Sections: Recommend 3-5, warn at >8
171
- if (this.stats.sections > 8) {
172
- this.warning(`SKILL.md contains ${this.stats.sections} sections (recommended: 3-5)\n` +
173
- ` → Consider splitting into focused reference files`);
174
- }
175
- // Check for "Quick Start" section
176
- if (!body.includes('## Quick Start') &&
177
- !body.includes('## Quick start')) {
178
- this.warning(`Missing "## Quick Start" section\n` +
179
- ` → Add one minimal working example to help Claude get started quickly`);
180
- }
181
- // Check for references/ links when body is long
182
- const has_references = body.includes('references/');
183
- if (!has_references && line_count > 60) {
184
- this.warning(`No references/ links found but SKILL.md is ${line_count} lines\n` +
185
- ` → Consider splitting detailed content into reference files`);
186
- }
187
- }
188
- validate_directory() {
189
- if (!existsSync(this.skill_path)) {
190
- this.error(`Skill directory does not exist: ${this.skill_path}`);
191
- return false;
192
- }
193
- const stats = statSync(this.skill_path);
194
- if (!stats.isDirectory()) {
195
- this.error(`Path is not a directory: ${this.skill_path}`);
196
- return false;
197
- }
198
- return true;
199
- }
200
91
  validate_skill_md() {
201
92
  const skill_md_path = join(this.skill_path, 'SKILL.md');
202
93
  if (!existsSync(skill_md_path)) {
@@ -204,173 +95,130 @@ export class SkillValidator {
204
95
  return false;
205
96
  }
206
97
  const content = readFileSync(skill_md_path, 'utf-8');
207
- // Check for YAML frontmatter
208
- if (!content.startsWith('---\n')) {
209
- this.error('SKILL.md must start with YAML frontmatter (---)');
210
- return false;
211
- }
212
- // Extract frontmatter
213
- const parts = content.split('---\n');
214
- if (parts.length < 3) {
215
- this.error('SKILL.md has malformed YAML frontmatter');
216
- return false;
217
- }
218
- const frontmatter = parts[1];
219
- const body = parts.slice(2).join('---\n');
220
- // Validate required fields
221
- if (!frontmatter.includes('name:')) {
222
- this.error("SKILL.md frontmatter missing 'name' field");
98
+ // Validate path formats (no Windows backslashes)
99
+ const path_format_result = validate_path_formats(content);
100
+ this.structured_validation.path_format =
101
+ path_format_result.validation;
102
+ path_format_result.errors.forEach((err) => this.error(err.message));
103
+ // Validate frontmatter structure
104
+ const frontmatter_validation = validate_frontmatter_structure(content);
105
+ this.structured_validation.yaml_validation =
106
+ frontmatter_validation;
107
+ if (!frontmatter_validation.valid) {
108
+ if (frontmatter_validation.parse_error) {
109
+ this.error(frontmatter_validation.parse_error);
110
+ }
111
+ frontmatter_validation.missing_fields.forEach((field) => {
112
+ this.error(`SKILL.md frontmatter missing '${field}' field`);
113
+ });
223
114
  return false;
224
115
  }
225
- if (!frontmatter.includes('description:')) {
226
- this.error("SKILL.md frontmatter missing 'description' field");
116
+ // Extract frontmatter data
117
+ const { name, description, body } = extract_frontmatter(content);
118
+ if (!name || !description) {
119
+ this.error('Failed to extract name or description from frontmatter');
227
120
  return false;
228
121
  }
229
- // Extract name
230
- const name_match = frontmatter.match(/name:\s*(.+)/);
231
- if (name_match) {
232
- const name = name_match[1].trim();
233
- // Validate name format
234
- if (!/^[a-z0-9-]+$/.test(name)) {
235
- this.error(`Skill name must be lowercase kebab-case: '${name}'`);
236
- }
237
- // Check name matches directory
238
- const dir_name = this.skill_path.split('/').pop() || '';
239
- if (name !== dir_name) {
240
- this.warning(`Skill name '${name}' doesn't match directory name '${dir_name}'`);
241
- }
242
- // Check name length
243
- if (name.length > 64) {
244
- this.error(`Skill name too long (max 64 chars): ${name.length}`);
245
- }
246
- }
247
- // Extract description
248
- const desc_match = frontmatter.match(/description:\s*(.+?)(?=\n[a-z]+:|$)/s);
249
- if (desc_match) {
250
- const description = desc_match[1].trim();
251
- // Hard limit check (Anthropic requirement)
252
- if (description.length > 1024) {
253
- this.error(`Description too long (max 1024 chars per Anthropic): ${description.length}`);
254
- }
255
- // Short description check
256
- if (description.length < 20) {
257
- this.warning('Description is very short (consider adding more detail)');
258
- }
259
- // Comprehensive Level 1 validation
260
- this.validate_description(description);
261
- }
262
- // Validate progressive disclosure (word count, token budget)
263
- this.validate_progressive_disclosure(body);
264
- // Analyze content structure
265
- this.analyze_content(body);
266
- // Check body content
267
- if (body.trim().length < 100) {
268
- this.warning('SKILL.md body is very short');
269
- }
270
- // Check for TODO placeholders
271
- if (body.includes('TODO') ||
272
- body.includes('[Add your') ||
273
- body.includes('[Provide')) {
274
- this.warning('SKILL.md contains TODO placeholders');
275
- }
276
- return true;
277
- }
278
- validate_references() {
279
- const references_dir = join(this.skill_path, 'references');
280
- const skill_md_path = join(this.skill_path, 'SKILL.md');
281
- // Check references directory if it exists
282
- if (existsSync(references_dir)) {
283
- const files = readdirSync(references_dir);
284
- const md_files = files.filter((f) => f.endsWith('.md'));
285
- if (md_files.length === 0) {
286
- this.warning('references/ directory exists but is empty');
287
- }
288
- // Check for references in SKILL.md
289
- if (existsSync(skill_md_path)) {
290
- const skill_content = readFileSync(skill_md_path, 'utf-8');
291
- for (const md_file of md_files) {
292
- if (!skill_content.includes(md_file)) {
293
- this.warning(`Reference file '${md_file}' not mentioned in SKILL.md`);
294
- }
295
- }
296
- }
297
- }
298
- // Level 3 validation: Check that all referenced files exist
299
- if (existsSync(skill_md_path)) {
300
- const skill_content = readFileSync(skill_md_path, 'utf-8');
301
- // Extract markdown links to references/ directory
302
- // Matches: [text](references/file.md) or [text](references/subdir/file.md)
303
- const reference_link_pattern = /\[([^\]]+)\]\((references\/[^)]+\.md)\)/g;
304
- const matches = skill_content.matchAll(reference_link_pattern);
305
- for (const match of matches) {
306
- const link_text = match[1];
307
- const file_path = match[2]; // e.g., "references/examples.md"
308
- const full_path = join(this.skill_path, file_path);
309
- if (!existsSync(full_path)) {
310
- this.error(`Referenced file not found: ${file_path}\n` +
311
- ` → Linked from: [${link_text}]\n` +
312
- ` → Create the file or remove the broken link`);
313
- }
314
- }
315
- }
316
- return true;
317
- }
318
- validate_scripts() {
319
- const scripts_dir = join(this.skill_path, 'scripts');
320
- if (existsSync(scripts_dir)) {
321
- const files = readdirSync(scripts_dir);
322
- const script_files = files.filter((f) => f.endsWith('.js') ||
323
- f.endsWith('.ts') ||
324
- f.endsWith('.mjs') ||
325
- f.endsWith('.sh'));
326
- if (script_files.length === 0) {
327
- this.warning('scripts/ directory exists but is empty');
328
- }
329
- for (const script_file of script_files) {
330
- const script_path = join(scripts_dir, script_file);
331
- const stats = statSync(script_path);
332
- // Check if executable (0o111 = --x--x--x)
333
- if ((stats.mode & 0o111) === 0) {
334
- this.warning(`Script is not executable: ${script_file}`);
335
- }
336
- // Check for shebang
337
- const content = readFileSync(script_path, 'utf-8');
338
- const first_line = content.split('\n')[0];
339
- if (!first_line.startsWith('#!')) {
340
- this.warning(`Script missing shebang: ${script_file}`);
341
- }
342
- }
343
- }
344
- return true;
345
- }
346
- validate_assets() {
347
- const assets_dir = join(this.skill_path, 'assets');
348
- if (existsSync(assets_dir)) {
349
- const files = readdirSync(assets_dir);
350
- if (files.length === 0) {
351
- this.warning('assets/ directory exists but is empty');
352
- }
122
+ // Get directory name
123
+ const dir_name = this.skill_path.split('/').pop() || '';
124
+ // Validate name format
125
+ const name_validation = validate_name_format(name, dir_name);
126
+ this.structured_validation.name_format = name_validation;
127
+ name_validation.errors.forEach((err) => this.error(err));
128
+ // Validate hard limits
129
+ const hard_limits = validate_hard_limits(name, description);
130
+ this.structured_validation.hard_limits = hard_limits;
131
+ if (!hard_limits.name.valid && hard_limits.name.error) {
132
+ this.error(hard_limits.name.error);
133
+ }
134
+ if (!hard_limits.description.valid &&
135
+ hard_limits.description.error) {
136
+ this.error(hard_limits.description.error);
137
+ }
138
+ // Validate description content
139
+ const desc_validation = validate_description_content(description);
140
+ this.stats.description_length =
141
+ desc_validation.stats.description_length;
142
+ this.stats.description_tokens =
143
+ desc_validation.stats.description_tokens;
144
+ desc_validation.errors.forEach((err) => this.error(err.message));
145
+ desc_validation.warnings.forEach((warn) => this.warning(warn.message));
146
+ // Analyze trigger phrase
147
+ const trigger_analysis = analyze_trigger_phrase(description);
148
+ this.structured_validation.triggering.trigger_phrase =
149
+ trigger_analysis;
150
+ if (!trigger_analysis.has_explicit_trigger) {
151
+ this.warning(`Description missing explicit trigger phrase ('Use when...', 'Use for...', 'Use to...')\n` +
152
+ ` → Help Claude know when to activate this skill`);
353
153
  }
154
+ // Analyze user phrasing
155
+ const { analysis: phrasing_analysis, warnings: phrasing_warnings, } = analyze_user_phrasing(description);
156
+ this.structured_validation.triggering.user_phrasing =
157
+ phrasing_analysis;
158
+ phrasing_warnings.forEach((warn) => this.warning(warn.message));
159
+ // Analyze alignment
160
+ const alignment_result = analyze_alignment(description, body);
161
+ this.structured_validation.triggering.keywords =
162
+ alignment_result.keywords;
163
+ this.structured_validation.triggering.alignment =
164
+ alignment_result.alignment;
165
+ alignment_result.warnings.forEach((warn) => this.warning(warn.message));
166
+ // Validate content (progressive disclosure)
167
+ const content_validation = validate_content(body);
168
+ this.stats.word_count = content_validation.stats.word_count;
169
+ this.stats.estimated_tokens =
170
+ content_validation.stats.estimated_tokens;
171
+ this.stats.line_count = content_validation.stats.line_count;
172
+ this.stats.code_blocks = content_validation.stats.code_blocks;
173
+ this.stats.sections = content_validation.stats.sections;
174
+ this.stats.long_paragraphs =
175
+ content_validation.stats.long_paragraphs;
176
+ content_validation.errors.forEach((err) => this.error(err.message));
177
+ content_validation.warnings.forEach((warn) => this.warning(warn.message));
354
178
  return true;
355
179
  }
356
180
  validate_all() {
357
- if (!this.validate_directory()) {
181
+ // Validate directory
182
+ const dir_result = validate_directory(this.skill_path);
183
+ if (!dir_result.valid) {
184
+ dir_result.errors.forEach((err) => this.error(err.message));
358
185
  return {
359
186
  errors: this.errors,
360
187
  warnings: this.warnings,
361
188
  is_valid: false,
362
189
  stats: this.stats,
190
+ validation: this.structured_validation,
363
191
  };
364
192
  }
193
+ // Validate SKILL.md
365
194
  this.validate_skill_md();
366
- this.validate_references();
367
- this.validate_scripts();
368
- this.validate_assets();
195
+ // Validate references
196
+ const refs_result = validate_references(this.skill_path);
197
+ refs_result.errors.forEach((err) => this.error(err.message));
198
+ refs_result.warnings.forEach((warn) => this.warning(warn.message));
199
+ // Validate scripts
200
+ const scripts_result = validate_scripts(this.skill_path);
201
+ scripts_result.warnings.forEach((warn) => this.warning(warn.message));
202
+ // Validate assets
203
+ const assets_result = validate_assets(this.skill_path);
204
+ assets_result.warnings.forEach((warn) => this.warning(warn.message));
205
+ // Populate progressive disclosure structured validation
206
+ this.structured_validation.progressive_disclosure = {
207
+ skill_md_size: {
208
+ lines: this.stats.line_count,
209
+ words: this.stats.word_count,
210
+ tokens: this.stats.estimated_tokens,
211
+ exceeds_line_limit: this.stats.line_count > 50,
212
+ exceeds_word_limit: this.stats.word_count > 1000,
213
+ },
214
+ references: refs_result.validation,
215
+ };
369
216
  return {
370
217
  errors: this.errors,
371
218
  warnings: this.warnings,
372
219
  is_valid: this.errors.length === 0,
373
220
  stats: this.stats,
221
+ validation: this.structured_validation,
374
222
  };
375
223
  }
376
224
  get_errors() {
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,9 +7,9 @@ import { validate_command } from './commands/validate.js';
7
7
  const args = process.argv.slice(2);
8
8
  const command = args[0];
9
9
  function show_help() {
10
- console.log('claude-skills - CLI toolkit for creating Claude Agent Skills\n');
10
+ console.log('claude-skills-cli - CLI toolkit for creating Claude Agent Skills\n');
11
11
  console.log('Usage:');
12
- console.log(' claude-skills <command> [options]\n');
12
+ console.log(' claude-skills-cli <command> [options]\n');
13
13
  console.log('Commands:');
14
14
  console.log(' init Create a new skill');
15
15
  console.log(' install Install a bundled skill (e.g., skill-creator)');
@@ -19,14 +19,23 @@ function show_help() {
19
19
  console.log('Options:');
20
20
  console.log(' --help, -h Show help');
21
21
  console.log(' --version, -v Show version');
22
- console.log(' --with-examples Include example files when creating skill\n');
22
+ console.log(' --with-examples Include example files when creating skill');
23
+ console.log(' --format <type> Output format: text (default) or json');
24
+ console.log(' --strict Fail validation if warnings present\n');
23
25
  console.log('Examples:');
24
- console.log(' claude-skills init --name my-skill --description "Description"');
25
- console.log(' claude-skills init --name my-skill --description "..." --with-examples');
26
- console.log(' claude-skills install skill-creator');
27
- console.log(' claude-skills validate .claude/skills/my-skill');
28
- console.log(' claude-skills package .claude/skills/my-skill');
29
- console.log(' claude-skills stats .claude/skills');
26
+ console.log(' claude-skills-cli init --name my-skill --description "Description"');
27
+ console.log(' claude-skills-cli init --name my-skill --description "..." --with-examples');
28
+ console.log(' claude-skills-cli install skill-creator');
29
+ console.log(' claude-skills-cli validate .claude/skills/my-skill');
30
+ console.log(' claude-skills-cli validate .claude/skills/my-skill --format json');
31
+ console.log(' claude-skills-cli validate .claude/skills/my-skill --strict');
32
+ console.log(' claude-skills-cli package .claude/skills/my-skill');
33
+ console.log(' claude-skills-cli stats .claude/skills');
34
+ console.log('\n⚠️ IMPORTANT FOR LLMs:');
35
+ console.log(' ALWAYS run validate after creating or editing a skill:');
36
+ console.log(' claude-skills-cli validate <skill-path>');
37
+ console.log(' Skills MUST pass validation before use.');
38
+ console.log(' Fix all errors immediately. Address warnings promptly.');
30
39
  }
31
40
  function parse_args(args) {
32
41
  const parsed = {};
@@ -70,7 +79,7 @@ async function main() {
70
79
  process.exit(0);
71
80
  }
72
81
  if (command === '--version' || command === '-v') {
73
- console.log('claude-skills v0.0.1');
82
+ console.log('claude-skills-cli v0.0.1');
74
83
  process.exit(0);
75
84
  }
76
85
  const parsed = parse_args(args.slice(1));
@@ -95,12 +104,14 @@ async function main() {
95
104
  const skill_path = parsed._positional;
96
105
  if (!skill_path) {
97
106
  console.error('Error: skill path required');
98
- console.log('\nUsage: claude-skills validate <skill_path>');
107
+ console.log('\nUsage: claude-skills-cli validate <skill_path> [--format json] [--strict]');
99
108
  process.exit(1);
100
109
  }
110
+ const format = parsed.format;
101
111
  validate_command({
102
112
  skill_path,
103
113
  strict: parsed.strict === true,
114
+ format: format === 'json' ? 'json' : 'text',
104
115
  });
105
116
  break;
106
117
  }
@@ -108,7 +119,7 @@ async function main() {
108
119
  const skill_path = parsed._positional;
109
120
  if (!skill_path) {
110
121
  console.error('Error: skill path required');
111
- console.log('\nUsage: claude-skills package <skill_path>');
122
+ console.log('\nUsage: claude-skills-cli package <skill_path>');
112
123
  process.exit(1);
113
124
  }
114
125
  await package_command({