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/README.md
CHANGED
|
@@ -90,6 +90,21 @@ Comprehensive validation including:
|
|
|
90
90
|
Use `--strict` to fail on warnings, `--format json` for programmatic
|
|
91
91
|
use.
|
|
92
92
|
|
|
93
|
+
### doctor
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
pnpx claude-skills-cli doctor .claude/skills/my-skill
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Automatically fixes common skill issues:
|
|
100
|
+
|
|
101
|
+
- **Multi-line descriptions**: Adds `# prettier-ignore` and reflows
|
|
102
|
+
description to single line
|
|
103
|
+
- Ensures Claude Code can recognize the skill
|
|
104
|
+
|
|
105
|
+
Run after formatting or if validation warns about multi-line
|
|
106
|
+
descriptions.
|
|
107
|
+
|
|
93
108
|
### stats
|
|
94
109
|
|
|
95
110
|
```bash
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { basename, join } from 'node:path';
|
|
3
|
+
import { error, info, success } from '../utils/output.js';
|
|
4
|
+
import { extract_frontmatter, is_description_multiline, } from '../validators/frontmatter-validator.js';
|
|
5
|
+
export function doctor_command(options) {
|
|
6
|
+
const { skill_path } = options;
|
|
7
|
+
const skill_name = basename(skill_path);
|
|
8
|
+
const skill_md_path = join(skill_path, 'SKILL.md');
|
|
9
|
+
info(`Running doctor on: ${skill_name}`);
|
|
10
|
+
console.log('='.repeat(60));
|
|
11
|
+
// Read SKILL.md
|
|
12
|
+
let content;
|
|
13
|
+
try {
|
|
14
|
+
content = readFileSync(skill_md_path, 'utf-8');
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
error(`Failed to read SKILL.md: ${err}`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// Extract frontmatter
|
|
21
|
+
const frontmatter_data = extract_frontmatter(content);
|
|
22
|
+
if (!frontmatter_data.description_is_multiline) {
|
|
23
|
+
success('No issues found. Description is already on a single line.');
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
info('Found multi-line description. Fixing...');
|
|
27
|
+
// Fix the multi-line description
|
|
28
|
+
const fixed_content = fix_multiline_description(content);
|
|
29
|
+
// Write fixed content back
|
|
30
|
+
try {
|
|
31
|
+
writeFileSync(skill_md_path, fixed_content, 'utf-8');
|
|
32
|
+
success('Fixed multi-line description!');
|
|
33
|
+
console.log('\nChanges made:');
|
|
34
|
+
console.log(' • Added # prettier-ignore comment before description');
|
|
35
|
+
console.log(' • Reflowed description to single line');
|
|
36
|
+
console.log('\n✓ Run validate command to confirm the fix');
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
error(`Failed to write SKILL.md: ${err}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fix multi-line description by adding prettier-ignore and reflowing to single line
|
|
46
|
+
*/
|
|
47
|
+
function fix_multiline_description(content) {
|
|
48
|
+
const lines = content.split('\n');
|
|
49
|
+
const fixed_lines = [];
|
|
50
|
+
let in_frontmatter = false;
|
|
51
|
+
let frontmatter_count = 0;
|
|
52
|
+
let in_description = false;
|
|
53
|
+
let description_parts = [];
|
|
54
|
+
let description_line_index = -1;
|
|
55
|
+
for (let i = 0; i < lines.length; i++) {
|
|
56
|
+
const line = lines[i];
|
|
57
|
+
// Track frontmatter boundaries
|
|
58
|
+
if (line.trim() === '---') {
|
|
59
|
+
frontmatter_count++;
|
|
60
|
+
// If we're closing frontmatter and still collecting description
|
|
61
|
+
if (frontmatter_count === 2 && in_description) {
|
|
62
|
+
// Write out the collected description
|
|
63
|
+
const full_description = description_parts.join(' ');
|
|
64
|
+
fixed_lines.push(`description: ${full_description}`);
|
|
65
|
+
description_parts = [];
|
|
66
|
+
in_description = false;
|
|
67
|
+
}
|
|
68
|
+
in_frontmatter = frontmatter_count === 1;
|
|
69
|
+
fixed_lines.push(line);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Not in frontmatter, just pass through
|
|
73
|
+
if (!in_frontmatter) {
|
|
74
|
+
fixed_lines.push(line);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Check if this is the description line
|
|
78
|
+
if (line.match(/^description:/)) {
|
|
79
|
+
// Check if it's already multi-line
|
|
80
|
+
if (!is_description_multiline(lines.slice(i).join('\n'))) {
|
|
81
|
+
// Single line, just pass through
|
|
82
|
+
fixed_lines.push(line);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
in_description = true;
|
|
86
|
+
description_line_index = fixed_lines.length;
|
|
87
|
+
// Extract value on same line (if any)
|
|
88
|
+
const match = line.match(/^description:\s*(.*)$/);
|
|
89
|
+
const value_on_line = match ? match[1].trim() : '';
|
|
90
|
+
if (value_on_line) {
|
|
91
|
+
description_parts.push(value_on_line);
|
|
92
|
+
}
|
|
93
|
+
// Add prettier-ignore comment
|
|
94
|
+
fixed_lines.push('# prettier-ignore');
|
|
95
|
+
// We'll add the description line later
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// If we're in description, collect continuation lines
|
|
99
|
+
if (in_description) {
|
|
100
|
+
// Stop if we hit another YAML field
|
|
101
|
+
if (line.match(/^[a-z_-]+:/)) {
|
|
102
|
+
// Done collecting description, write it out
|
|
103
|
+
const full_description = description_parts.join(' ');
|
|
104
|
+
fixed_lines.push(`description: ${full_description}`);
|
|
105
|
+
description_parts = [];
|
|
106
|
+
in_description = false;
|
|
107
|
+
// Add the current line (next field)
|
|
108
|
+
fixed_lines.push(line);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Continuation line - collect it
|
|
112
|
+
const trimmed = line.trim();
|
|
113
|
+
if (trimmed && !trimmed.startsWith('#')) {
|
|
114
|
+
description_parts.push(trimmed);
|
|
115
|
+
}
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// Regular frontmatter line
|
|
119
|
+
fixed_lines.push(line);
|
|
120
|
+
}
|
|
121
|
+
// If we ended while still in description (at end of frontmatter)
|
|
122
|
+
if (in_description && description_parts.length > 0) {
|
|
123
|
+
const full_description = description_parts.join(' ');
|
|
124
|
+
fixed_lines.push(`description: ${full_description}`);
|
|
125
|
+
}
|
|
126
|
+
return fixed_lines.join('\n');
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/core/templates.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export const SKILL_MD_TEMPLATE = (name, description, title, include_examples = false) => {
|
|
2
2
|
const minimal_template = `---
|
|
3
3
|
name: ${name}
|
|
4
|
+
# IMPORTANT: Keep description on ONE line for Claude Code compatibility
|
|
5
|
+
# prettier-ignore
|
|
4
6
|
description: ${description}
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -44,10 +46,19 @@ PROGRESSIVE DISCLOSURE GUIDELINES:
|
|
|
44
46
|
- Keep description <200 chars for Level 1 efficiency
|
|
45
47
|
- Move detailed docs to references/ for Level 3 loading
|
|
46
48
|
- This is Level 2 - quick reference ONLY, not a manual
|
|
49
|
+
|
|
50
|
+
LLM WORKFLOW (when editing this file):
|
|
51
|
+
1. Write/edit SKILL.md
|
|
52
|
+
2. Format (if formatter available)
|
|
53
|
+
3. Run: claude-skills-cli validate <path>
|
|
54
|
+
4. If multi-line description warning: run claude-skills-cli doctor <path>
|
|
55
|
+
5. Validate again to confirm
|
|
47
56
|
-->
|
|
48
57
|
`;
|
|
49
58
|
const full_template = `---
|
|
50
59
|
name: ${name}
|
|
60
|
+
# IMPORTANT: Keep description on ONE line for Claude Code compatibility
|
|
61
|
+
# prettier-ignore
|
|
51
62
|
description: ${description}
|
|
52
63
|
---
|
|
53
64
|
|
|
@@ -96,6 +107,13 @@ PROGRESSIVE DISCLOSURE GUIDELINES:
|
|
|
96
107
|
- Keep description <200 chars for Level 1 efficiency
|
|
97
108
|
- Move detailed docs to references/ for Level 3 loading
|
|
98
109
|
- This is Level 2 - quick reference ONLY, not a manual
|
|
110
|
+
|
|
111
|
+
LLM WORKFLOW (when editing this file):
|
|
112
|
+
1. Write/edit SKILL.md
|
|
113
|
+
2. Format (if formatter available)
|
|
114
|
+
3. Run: claude-skills-cli validate <path>
|
|
115
|
+
4. If multi-line description warning: run claude-skills-cli doctor <path>
|
|
116
|
+
5. Validate again to confirm
|
|
99
117
|
-->
|
|
100
118
|
`;
|
|
101
119
|
return include_examples ? full_template : minimal_template;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,IAAY,EACZ,WAAmB,EACnB,KAAa,EACb,mBAA4B,KAAK,EAChC,EAAE;IACH,MAAM,gBAAgB,GAAG;QAClB,IAAI
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,IAAY,EACZ,WAAmB,EACnB,KAAa,EACb,mBAA4B,KAAK,EAChC,EAAE;IACH,MAAM,gBAAgB,GAAG;QAClB,IAAI;;;eAGG,WAAW;;;IAGtB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDR,CAAC;IAED,MAAM,aAAa,GAAG;QACf,IAAI;;;eAGG,WAAW;;;IAGtB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDR,CAAC;IAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,KAAa,EACZ,EAAE,CAAC,KAAK,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,QAAgB,EACf,EAAE,CAAC;;;;;;YAMO,QAAQ;;;;;;;;CAQnB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,KAAa,EACb,WAAmB,EAClB,EAAE,CAAC,KAAK,KAAK;;EAEb,WAAW;;;;;;;;;;;;CAYZ,CAAC"}
|
package/dist/core/validator.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
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
4
|
import { analyze_alignment } from '../validators/alignment-validator.js';
|
|
5
|
+
import { validate_content } from '../validators/content-validator.js';
|
|
6
|
+
import { analyze_trigger_phrase, analyze_user_phrasing, validate_description_content, } from '../validators/description-validator.js';
|
|
7
|
+
import { validate_assets, validate_directory, validate_path_formats, validate_scripts, } from '../validators/file-structure-validator.js';
|
|
8
|
+
import { extract_frontmatter, validate_frontmatter_structure, validate_hard_limits, validate_name_format, } from '../validators/frontmatter-validator.js';
|
|
8
9
|
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';
|
|
10
10
|
export class SkillValidator {
|
|
11
11
|
skill_path;
|
|
12
12
|
errors = [];
|
|
@@ -114,11 +114,16 @@ export class SkillValidator {
|
|
|
114
114
|
return false;
|
|
115
115
|
}
|
|
116
116
|
// Extract frontmatter data
|
|
117
|
-
const { name, description, body } = extract_frontmatter(content);
|
|
117
|
+
const { name, description, body, description_is_multiline } = extract_frontmatter(content);
|
|
118
118
|
if (!name || !description) {
|
|
119
119
|
this.error('Failed to extract name or description from frontmatter');
|
|
120
120
|
return false;
|
|
121
121
|
}
|
|
122
|
+
// Warn if description spans multiple lines
|
|
123
|
+
if (description_is_multiline) {
|
|
124
|
+
this.warning(`Multi-line description detected. Claude Code cannot recognize skills with multi-line descriptions.\n` +
|
|
125
|
+
` → Run 'claude-skills-cli doctor ${this.skill_path}' to fix automatically`);
|
|
126
|
+
}
|
|
122
127
|
// Get directory name
|
|
123
128
|
const dir_name = this.skill_path.split('/').pop() || '';
|
|
124
129
|
// Validate name format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,oBAAoB;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { doctor_command } from './commands/doctor.js';
|
|
2
3
|
import { init_command } from './commands/init.js';
|
|
3
4
|
import { install_command } from './commands/install.js';
|
|
4
5
|
import { package_command } from './commands/package.js';
|
|
@@ -14,6 +15,7 @@ function show_help() {
|
|
|
14
15
|
console.log(' init Create a new skill');
|
|
15
16
|
console.log(' install Install a bundled skill (e.g., skill-creator)');
|
|
16
17
|
console.log(' validate Validate a skill');
|
|
18
|
+
console.log(' doctor Fix common skill issues automatically');
|
|
17
19
|
console.log(' package Package a skill to zip');
|
|
18
20
|
console.log(' stats Show overview of all skills in a directory\n');
|
|
19
21
|
console.log('Options:');
|
|
@@ -29,6 +31,7 @@ function show_help() {
|
|
|
29
31
|
console.log(' claude-skills-cli validate .claude/skills/my-skill');
|
|
30
32
|
console.log(' claude-skills-cli validate .claude/skills/my-skill --format json');
|
|
31
33
|
console.log(' claude-skills-cli validate .claude/skills/my-skill --strict');
|
|
34
|
+
console.log(' claude-skills-cli doctor .claude/skills/my-skill');
|
|
32
35
|
console.log(' claude-skills-cli package .claude/skills/my-skill');
|
|
33
36
|
console.log(' claude-skills-cli stats .claude/skills');
|
|
34
37
|
console.log('\n⚠️ IMPORTANT FOR LLMs:');
|
|
@@ -115,6 +118,18 @@ async function main() {
|
|
|
115
118
|
});
|
|
116
119
|
break;
|
|
117
120
|
}
|
|
121
|
+
case 'doctor': {
|
|
122
|
+
const skill_path = parsed._positional;
|
|
123
|
+
if (!skill_path) {
|
|
124
|
+
console.error('Error: skill path required');
|
|
125
|
+
console.log('\nUsage: claude-skills-cli doctor <skill_path>');
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
doctor_command({
|
|
129
|
+
skill_path,
|
|
130
|
+
});
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
118
133
|
case 'package': {
|
|
119
134
|
const skill_path = parsed._positional;
|
|
120
135
|
if (!skill_path) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-creator
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
principles. Use when building new skills, planning skill
|
|
6
|
-
architecture, or writing skill content.
|
|
3
|
+
# prettier-ignore
|
|
4
|
+
description: Design and create Claude Skills using progressive disclosure principles. Use when building new skills, planning skill architecture, or writing skill content.
|
|
7
5
|
---
|
|
8
6
|
|
|
9
7
|
# Skill Creator
|
|
@@ -156,6 +156,8 @@ npx claude-skills-cli validate .claude/skills/skill-2
|
|
|
156
156
|
|
|
157
157
|
- Description length: <200 chars (optimal), <300 chars (warning),
|
|
158
158
|
<1024 chars (max)
|
|
159
|
+
- Description format: Must be on single line (warns if multi-line,
|
|
160
|
+
suggests `doctor` command)
|
|
159
161
|
- Description includes trigger keywords ("Use when...", "Use for...",
|
|
160
162
|
"Use to...")
|
|
161
163
|
- Description comma count (warns if >3, suggesting list bloat)
|
|
@@ -248,6 +250,112 @@ npx claude-skills-cli validate .claude/skills/skill-2
|
|
|
248
250
|
|
|
249
251
|
---
|
|
250
252
|
|
|
253
|
+
### `doctor` - Fix Common Issues
|
|
254
|
+
|
|
255
|
+
Automatically fix common skill issues to ensure compatibility with
|
|
256
|
+
Claude Code.
|
|
257
|
+
|
|
258
|
+
#### Syntax
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
claude-skills-cli doctor <skill_path>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
#### Arguments
|
|
265
|
+
|
|
266
|
+
| Argument | Type | Required | Description |
|
|
267
|
+
| -------------- | ------ | -------- | ----------------------- |
|
|
268
|
+
| `<skill_path>` | string | Yes | Path to skill directory |
|
|
269
|
+
|
|
270
|
+
#### What It Fixes
|
|
271
|
+
|
|
272
|
+
**Multi-line Descriptions:**
|
|
273
|
+
|
|
274
|
+
When formatters like Prettier wrap descriptions across multiple lines,
|
|
275
|
+
Claude Code cannot recognize the skill. The doctor command:
|
|
276
|
+
|
|
277
|
+
1. Detects multi-line descriptions in YAML frontmatter
|
|
278
|
+
2. Adds `# prettier-ignore` comment before the description field
|
|
279
|
+
3. Reflows the description to a single line
|
|
280
|
+
|
|
281
|
+
**Example:**
|
|
282
|
+
|
|
283
|
+
Before:
|
|
284
|
+
|
|
285
|
+
```yaml
|
|
286
|
+
---
|
|
287
|
+
name: my-skill
|
|
288
|
+
description:
|
|
289
|
+
This is a long description that got wrapped by prettier across
|
|
290
|
+
multiple lines
|
|
291
|
+
---
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
After:
|
|
295
|
+
|
|
296
|
+
```yaml
|
|
297
|
+
---
|
|
298
|
+
name: my-skill
|
|
299
|
+
# prettier-ignore
|
|
300
|
+
description: This is a long description that got wrapped by prettier across multiple lines
|
|
301
|
+
---
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### Examples
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Fix multi-line description
|
|
308
|
+
npx claude-skills-cli doctor .claude/skills/my-skill
|
|
309
|
+
|
|
310
|
+
# Common workflow after formatting
|
|
311
|
+
npx prettier --write .claude/skills/my-skill/SKILL.md
|
|
312
|
+
npx claude-skills-cli doctor .claude/skills/my-skill
|
|
313
|
+
npx claude-skills-cli validate .claude/skills/my-skill
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
#### Output
|
|
317
|
+
|
|
318
|
+
**When issues are found:**
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
📋 Running doctor on: my-skill
|
|
322
|
+
============================================================
|
|
323
|
+
📋 Found multi-line description. Fixing...
|
|
324
|
+
✅ Fixed multi-line description!
|
|
325
|
+
|
|
326
|
+
Changes made:
|
|
327
|
+
• Added # prettier-ignore comment before description
|
|
328
|
+
• Reflowed description to single line
|
|
329
|
+
|
|
330
|
+
✓ Run validate command to confirm the fix
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**When no issues exist:**
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
📋 Running doctor on: my-skill
|
|
337
|
+
============================================================
|
|
338
|
+
✅ No issues found. Description is already on a single line.
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
#### Exit Codes
|
|
342
|
+
|
|
343
|
+
| Code | Meaning |
|
|
344
|
+
| ---- | ---------------------------- |
|
|
345
|
+
| 0 | Success (fixed or no issues) |
|
|
346
|
+
| 1 | Error (file not found, etc.) |
|
|
347
|
+
|
|
348
|
+
#### When to Use
|
|
349
|
+
|
|
350
|
+
Run `doctor` when:
|
|
351
|
+
|
|
352
|
+
- Validation warns about multi-line descriptions
|
|
353
|
+
- After running code formatters (Prettier, dprint, etc.)
|
|
354
|
+
- After manually editing SKILL.md files
|
|
355
|
+
- Before packaging or distributing skills
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
251
359
|
### `package` - Create Distribution Zip
|
|
252
360
|
|
|
253
361
|
Package skill into a zip file for distribution.
|
|
@@ -334,13 +442,19 @@ vim .claude/skills/database-queries/SKILL.md
|
|
|
334
442
|
# 3. Add references
|
|
335
443
|
vim .claude/skills/database-queries/references/schema.md
|
|
336
444
|
|
|
337
|
-
# 4.
|
|
445
|
+
# 4. Format (if using formatter)
|
|
446
|
+
npx prettier --write .claude/skills/database-queries/SKILL.md
|
|
447
|
+
|
|
448
|
+
# 5. Fix any formatting issues
|
|
449
|
+
npx claude-skills-cli doctor .claude/skills/database-queries
|
|
450
|
+
|
|
451
|
+
# 6. Validate
|
|
338
452
|
npx claude-skills-cli validate .claude/skills/database-queries
|
|
339
453
|
|
|
340
|
-
#
|
|
454
|
+
# 7. Fix any remaining issues, re-validate
|
|
341
455
|
npx claude-skills-cli validate .claude/skills/database-queries
|
|
342
456
|
|
|
343
|
-
#
|
|
457
|
+
# 8. Package
|
|
344
458
|
npx claude-skills-cli package .claude/skills/database-queries
|
|
345
459
|
```
|
|
346
460
|
|
|
@@ -7,16 +7,65 @@
|
|
|
7
7
|
export function has_yaml_frontmatter(content) {
|
|
8
8
|
return content.startsWith('---\n') || content.startsWith('---\r\n');
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if description field spans multiple lines in raw YAML
|
|
12
|
+
*/
|
|
13
|
+
export function is_description_multiline(frontmatter) {
|
|
14
|
+
// Find the description line
|
|
15
|
+
const desc_line_match = frontmatter.match(/^description:\s*(.*)$/m);
|
|
16
|
+
if (!desc_line_match) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const value_on_same_line = desc_line_match[1].trim();
|
|
20
|
+
// If there's no value on the same line as "description:", it's multi-line
|
|
21
|
+
if (!value_on_same_line) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
// Check if there are continuation lines (indented lines after description:)
|
|
25
|
+
// that are not other YAML fields
|
|
26
|
+
const lines = frontmatter.split('\n');
|
|
27
|
+
let found_desc = false;
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
const line = lines[i];
|
|
30
|
+
if (line.match(/^description:/)) {
|
|
31
|
+
found_desc = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (found_desc) {
|
|
35
|
+
// If next line starts with spaces/tabs and is not a comment and is not another field
|
|
36
|
+
if (line.match(/^\s+\S/) &&
|
|
37
|
+
!line.trim().startsWith('#') &&
|
|
38
|
+
!line.match(/^[a-z_-]+:/)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
// Stop checking after we hit another field or end
|
|
42
|
+
if (line.match(/^[a-z_-]+:/)) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
10
49
|
/**
|
|
11
50
|
* Extract frontmatter and body from SKILL.md content
|
|
12
51
|
*/
|
|
13
52
|
export function extract_frontmatter(content) {
|
|
14
53
|
if (!has_yaml_frontmatter(content)) {
|
|
15
|
-
return {
|
|
54
|
+
return {
|
|
55
|
+
name: null,
|
|
56
|
+
description: null,
|
|
57
|
+
body: content,
|
|
58
|
+
description_is_multiline: false,
|
|
59
|
+
};
|
|
16
60
|
}
|
|
17
61
|
const parts = content.split('---\n');
|
|
18
62
|
if (parts.length < 3) {
|
|
19
|
-
return {
|
|
63
|
+
return {
|
|
64
|
+
name: null,
|
|
65
|
+
description: null,
|
|
66
|
+
body: content,
|
|
67
|
+
description_is_multiline: false,
|
|
68
|
+
};
|
|
20
69
|
}
|
|
21
70
|
const frontmatter = parts[1];
|
|
22
71
|
const body = parts.slice(2).join('---\n');
|
|
@@ -26,7 +75,9 @@ export function extract_frontmatter(content) {
|
|
|
26
75
|
// Extract description
|
|
27
76
|
const desc_match = frontmatter.match(/description:\s*(.+?)(?=\n[a-z]+:|$)/s);
|
|
28
77
|
const description = desc_match ? desc_match[1].trim() : null;
|
|
29
|
-
|
|
78
|
+
// Check if description spans multiple lines in the raw YAML
|
|
79
|
+
const description_is_multiline = is_description_multiline(frontmatter);
|
|
80
|
+
return { name, description, body, description_is_multiline };
|
|
30
81
|
}
|
|
31
82
|
/**
|
|
32
83
|
* Validate YAML frontmatter structure
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter-validator.js","sourceRoot":"","sources":["../../src/validators/frontmatter-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"frontmatter-validator.js","sourceRoot":"","sources":["../../src/validators/frontmatter-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
ok, you're going to become a super duper Claude skills builder, ok?
|
|
2
|
+
|
|
3
|
+
I'm going to give you some resources I want you to study
|
|
4
|
+
|
|
5
|
+
- https://www.anthropic.com/news/skills
|
|
6
|
+
- https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills
|
|
7
|
+
- https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview#custom-skills-examples
|
|
8
|
+
|
|
9
|
+
feel free to continue you're resource gathering outside of these
|
|
10
|
+
links, there are many linked items in these links that could be of
|
|
11
|
+
use!
|
|
12
|
+
|
|
13
|
+
this is from an image in one of the links which is quite important!
|
|
14
|
+
|
|
15
|
+
| Level | File | Context Window | # Tokens |
|
|
16
|
+
| ----- | ----------------------------------------- | -------------------------- | ----------- |
|
|
17
|
+
| 1 | SKILL.md Metadata (YAML) | Always loaded | ~100 |
|
|
18
|
+
| 2 | SKILL.md Body (Markdown) | Loaded when Skill triggers | <5k |
|
|
19
|
+
| 3+ | Bundled files (text files, scripts, data) | Loaded as-needed by Claude | unlimited\* |
|