claude-skills-cli 0.0.18 → 0.0.20
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/dist/commands/init.js +6 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +2 -2
- package/dist/commands/install.js.map +1 -1
- package/dist/core/templates.js +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/validators/description-validator.js +25 -11
- package/dist/validators/description-validator.js.map +1 -1
- package/package.json +2 -3
package/dist/commands/init.js
CHANGED
|
@@ -11,11 +11,15 @@ export function init_command(options) {
|
|
|
11
11
|
if (options.path) {
|
|
12
12
|
skill_path = options.path;
|
|
13
13
|
name = skill_path.split('/').pop() || '';
|
|
14
|
-
description =
|
|
14
|
+
description =
|
|
15
|
+
options.description ||
|
|
16
|
+
'TODO: [Domain] [operations]. Use when [trigger phrase]';
|
|
15
17
|
}
|
|
16
18
|
else if (options.name) {
|
|
17
19
|
name = options.name;
|
|
18
|
-
description =
|
|
20
|
+
description =
|
|
21
|
+
options.description ||
|
|
22
|
+
'TODO: [Domain] [operations]. Use when [trigger phrase]';
|
|
19
23
|
// Use ~/.claude/skills/ for global, .claude/skills/ for project
|
|
20
24
|
skill_path = options.global
|
|
21
25
|
? join(homedir(), '.claude', 'skills', name)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,OAAoB;IAChD,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAY,CAAC;IACjB,IAAI,WAAmB,CAAC;IAExB,0BAA0B;IAC1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACzC,WAAW,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/install.js
CHANGED
|
@@ -16,14 +16,14 @@ export function install_command(options) {
|
|
|
16
16
|
info('No bundled skills available');
|
|
17
17
|
console.log('\nOfficial method: /plugin install <skill>@<marketplace>');
|
|
18
18
|
console.log('See: https://code.claude.com/docs/en/plugins');
|
|
19
|
-
console.log('\nFor pre-built skills, see: https://github.com/spences10/claude-code-toolkit');
|
|
19
|
+
console.log('\nFor pre-built skills & activation hooks, see: https://github.com/spences10/claude-code-toolkit');
|
|
20
20
|
console.log('\nUse "claude-skills-cli init" to create new skills.');
|
|
21
21
|
process.exit(0);
|
|
22
22
|
}
|
|
23
23
|
if (!AVAILABLE_SKILLS.includes(skill_name)) {
|
|
24
24
|
error(`Unknown skill: ${skill_name}`);
|
|
25
25
|
console.log('\nNo bundled skills available.');
|
|
26
|
-
console.log('For pre-built skills, see: https://github.com/spences10/claude-code-toolkit');
|
|
26
|
+
console.log('For pre-built skills & activation hooks, see: https://github.com/spences10/claude-code-toolkit');
|
|
27
27
|
process.exit(1);
|
|
28
28
|
}
|
|
29
29
|
// Source and destination paths
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE1D,kEAAkE;AAClE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,+CAA+C;AAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAE3D,MAAM,gBAAgB,GAAa,EAAE,CAAC;AAEtC,MAAM,UAAU,eAAe,CAAC,OAAuB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,sBAAsB;IACtB,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CACV,0DAA0D,CAC1D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CACV
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/core/templates.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const SKILL_MD_TEMPLATE = (name, description, title, include_examples = false) => {
|
|
2
2
|
const minimal_template = `---
|
|
3
3
|
name: ${name}
|
|
4
|
-
#
|
|
4
|
+
# Keep on ONE line, third-person voice, include "Use when/for/to..." trigger
|
|
5
5
|
# prettier-ignore
|
|
6
6
|
description: ${description}
|
|
7
7
|
---
|
|
@@ -43,7 +43,7 @@ For detailed documentation, see:
|
|
|
43
43
|
PROGRESSIVE DISCLOSURE GUIDELINES:
|
|
44
44
|
- Keep this file ~50 lines total (max ~150 lines)
|
|
45
45
|
- Use 1-2 code blocks only (recommend 1)
|
|
46
|
-
- Keep description <
|
|
46
|
+
- Keep description <300 chars for Level 1 efficiency
|
|
47
47
|
- Move detailed docs to references/ for Level 3 loading
|
|
48
48
|
- This is Level 2 - quick reference ONLY, not a manual
|
|
49
49
|
|
|
@@ -57,7 +57,7 @@ LLM WORKFLOW (when editing this file):
|
|
|
57
57
|
`;
|
|
58
58
|
const full_template = `---
|
|
59
59
|
name: ${name}
|
|
60
|
-
#
|
|
60
|
+
# Keep on ONE line, third-person voice, include "Use when/for/to..." trigger
|
|
61
61
|
# prettier-ignore
|
|
62
62
|
description: ${description}
|
|
63
63
|
---
|
|
@@ -104,7 +104,7 @@ For detailed documentation, see:
|
|
|
104
104
|
PROGRESSIVE DISCLOSURE GUIDELINES:
|
|
105
105
|
- Keep this file ~50 lines total (max ~150 lines)
|
|
106
106
|
- Use 1-2 code blocks only (recommend 1)
|
|
107
|
-
- Keep description <
|
|
107
|
+
- Keep description <300 chars for Level 1 efficiency
|
|
108
108
|
- Move detailed docs to references/ for Level 3 loading
|
|
109
109
|
- This is Level 2 - quick reference ONLY, not a manual
|
|
110
110
|
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ const main = defineCommand({
|
|
|
9
9
|
meta: {
|
|
10
10
|
name: 'claude-skills-cli',
|
|
11
11
|
version: pkg.version,
|
|
12
|
-
description: 'CLI toolkit for creating and managing Claude Agent Skills\n\nIMPORTANT FOR LLMs:\n ALWAYS run validate after creating or editing a skill:\n claude-skills-cli validate <skill-path>\n Skills MUST pass validation before use.\n Fix all errors immediately. Address warnings promptly.\n\nResources:\n Pre-built skills: https://github.com/spences10/claude-code-toolkit',
|
|
12
|
+
description: 'CLI toolkit for creating and managing Claude Agent Skills\n\nIMPORTANT FOR LLMs:\n ALWAYS run validate after creating or editing a skill:\n claude-skills-cli validate <skill-path>\n Skills MUST pass validation before use.\n Fix all errors immediately. Address warnings promptly.\n\nResources:\n Pre-built skills & hooks: https://github.com/spences10/claude-code-toolkit\n Includes a UserPromptSubmit hook for automatic skill activation.',
|
|
13
13
|
},
|
|
14
14
|
subCommands: {
|
|
15
15
|
init: () => import('./commands/init.cmd.js').then((r) => r.default),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACrB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC5D,CAAC;AAEF,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACrB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC5D,CAAC;AAEF,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EACV,8bAA8b;KAC/b;IACD,WAAW,EAAE;QACZ,IAAI,EAAE,GAAG,EAAE,CACV,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,CACb,MAAM,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3D,QAAQ,EAAE,GAAG,EAAE,CACd,MAAM,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,MAAM,EAAE,GAAG,EAAE,CACZ,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1D,OAAO,EAAE,GAAG,EAAE,CACb,MAAM,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3D,KAAK,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,UAAU,EAAE,GAAG,EAAE,CAChB,MAAM,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KAC5D;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Description validation (Level 1 progressive disclosure)
|
|
3
3
|
*/
|
|
4
|
-
import { estimate_string_tokens
|
|
4
|
+
import { estimate_string_tokens } from './text-analysis.js';
|
|
5
5
|
/**
|
|
6
6
|
* Validate description length and quality
|
|
7
7
|
*/
|
|
@@ -25,13 +25,6 @@ export function validate_description_content(description) {
|
|
|
25
25
|
` → Keep descriptions concise - quality over quantity`,
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
-
else if (desc_length > 200) {
|
|
29
|
-
validation.warnings.push({
|
|
30
|
-
type: 'length',
|
|
31
|
-
message: `Description is ${desc_length} characters (recommended: <200)\n` +
|
|
32
|
-
` → Estimated ~${desc_tokens} tokens - consider shortening`,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
28
|
// Check for trigger keywords
|
|
36
29
|
const lower_desc = description.toLowerCase();
|
|
37
30
|
const has_trigger = lower_desc.includes('use when') ||
|
|
@@ -55,10 +48,11 @@ export function validate_description_content(description) {
|
|
|
55
48
|
});
|
|
56
49
|
}
|
|
57
50
|
// Short description check
|
|
58
|
-
if (desc_length <
|
|
51
|
+
if (desc_length < 50) {
|
|
59
52
|
validation.warnings.push({
|
|
60
53
|
type: 'short',
|
|
61
|
-
message:
|
|
54
|
+
message: `Description is very short (${desc_length} chars, minimum recommended: 50)\n` +
|
|
55
|
+
` → Must answer both "what does it do" AND "when to use it"`,
|
|
62
56
|
});
|
|
63
57
|
}
|
|
64
58
|
return validation;
|
|
@@ -102,7 +96,19 @@ export function analyze_user_phrasing(description) {
|
|
|
102
96
|
warnings.push({
|
|
103
97
|
type: 'first_person',
|
|
104
98
|
message: `Description uses first person: "${match[0]}"\n` +
|
|
105
|
-
` →
|
|
99
|
+
` → Anthropic requires third-person voice (e.g., "Generates..." not "I can generate...")`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Check for second person
|
|
104
|
+
const second_person_patterns = /\b(You can|You should|You could|You'll|You will|You need|your)\b/i;
|
|
105
|
+
if (second_person_patterns.test(description)) {
|
|
106
|
+
const match = description.match(second_person_patterns);
|
|
107
|
+
if (match) {
|
|
108
|
+
warnings.push({
|
|
109
|
+
type: 'second_person',
|
|
110
|
+
message: `Description uses second person: "${match[0]}"\n` +
|
|
111
|
+
` → Anthropic requires third-person voice (e.g., "Processes..." not "You can process...")`,
|
|
106
112
|
});
|
|
107
113
|
}
|
|
108
114
|
}
|
|
@@ -123,6 +129,14 @@ export function analyze_user_phrasing(description) {
|
|
|
123
129
|
// Check for action-oriented (starts with action verbs)
|
|
124
130
|
const action_verbs = /^(create|build|design|analyze|test|validate|generate|process|manage|execute|handle|provide)/i;
|
|
125
131
|
const is_action_oriented = action_verbs.test(description.trim());
|
|
132
|
+
// Suggest action-oriented language if neither gerund nor action verb
|
|
133
|
+
if (!uses_gerund && !is_action_oriented) {
|
|
134
|
+
warnings.push({
|
|
135
|
+
type: 'passive',
|
|
136
|
+
message: `Description lacks action-oriented language\n` +
|
|
137
|
+
` → Start with a verb or gerund (e.g., "Generates...", "Managing...", "Extract...")`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
126
140
|
const analysis = {
|
|
127
141
|
style_checks: {
|
|
128
142
|
is_third_person,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"description-validator.js","sourceRoot":"","sources":["../../src/validators/description-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"description-validator.js","sourceRoot":"","sources":["../../src/validators/description-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-skills-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "CLI toolkit for creating and managing Claude Agent Skills",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,13 +41,12 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@changesets/cli": "^2.29.8",
|
|
43
43
|
"@types/archiver": "^7.0.0",
|
|
44
|
-
"@types/node": "^25.2.
|
|
44
|
+
"@types/node": "^25.2.2",
|
|
45
45
|
"prettier": "^3.8.1",
|
|
46
46
|
"typescript": "^5.9.3"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
49
|
"build": "tsc",
|
|
50
|
-
"postbuild": "rm -rf dist/skills && cp -r .claude/skills dist/skills",
|
|
51
50
|
"dev": "tsc --watch",
|
|
52
51
|
"start": "node ./dist/index.js",
|
|
53
52
|
"format": "prettier --write .",
|