claude-skills-cli 0.0.12 → 0.0.14

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 CHANGED
@@ -46,8 +46,8 @@ pnpx claude-skills-cli init --name my-skill --description "Brief description wit
46
46
  pnpx claude-skills-cli init --name my-skill --description "..." --with-examples
47
47
  ```
48
48
 
49
- Creates minimal skill scaffolding by default (SKILL.md, README.md,
50
- references/). Use `--with-examples` for example files.
49
+ Creates minimal skill scaffolding by default (SKILL.md, references/).
50
+ Use `--with-examples` for example files.
51
51
 
52
52
  ### validate
53
53
 
@@ -126,15 +126,34 @@ Creates uploadable zip for Claude.ai. Validates first unless
126
126
  ### add-hook
127
127
 
128
128
  ```bash
129
- pnpx claude-skills-cli add-hook # Global (all projects)
130
- pnpx claude-skills-cli add-hook --project # Project (committed)
131
- pnpx claude-skills-cli add-hook --local # Project-local (gitignored)
129
+ # Default: forced-eval hook (84% success), global scope
130
+ pnpx claude-skills-cli add-hook
131
+
132
+ # Specify hook type and scope
133
+ pnpx claude-skills-cli add-hook --type llm-eval # LLM eval, global
134
+ pnpx claude-skills-cli add-hook --type forced-eval --project # Forced eval, project
135
+ pnpx claude-skills-cli add-hook --type simple-script --local # Simple script, local
132
136
  ```
133
137
 
134
- Adds skill activation hook to improve reliability. By default, adds to
135
- global settings (`~/.claude/settings.json`) to apply across all
136
- projects. Use `--project` for team-shared settings or `--local` for
137
- personal overrides.
138
+ Adds skill activation hook to improve reliability. Generates hook
139
+ scripts in `.claude/hooks/` and updates settings.json.
140
+
141
+ **Hook Types (--type):**
142
+
143
+ | Type | Success Rate | Description | Notes |
144
+ | --------------- | ------------ | --------------------------- | ---------------------------- |
145
+ | `forced-eval` | **84%** | Mandatory 3-step evaluation | Default, most consistent |
146
+ | `llm-eval` | **80%** | Claude API pre-evaluation | Requires `ANTHROPIC_API_KEY` |
147
+ | `simple-script` | 20% | Basic script file | For reference/debugging |
148
+ | `simple-inline` | 20% | Echo in settings.json | Legacy, backwards compatible |
149
+
150
+ **Scopes:**
151
+
152
+ - **Global** (default): `~/.claude/settings.json` - All projects
153
+ - **Project** (`--project`): `./.claude/settings.json` - Committed,
154
+ team-shared
155
+ - **Local** (`--local`): `./.claude/settings.local.json` - Gitignored,
156
+ personal
138
157
 
139
158
  ## Skill Activation in Claude Code
140
159
 
@@ -143,50 +162,49 @@ Skills are designed to auto-activate in Claude Code, but in practice,
143
162
  Despite documentation claiming skills are "model-invoked," Claude
144
163
  often bypasses skills unless directly instructed.
145
164
 
146
- ### The Solution: Explicit Activation Hooks
165
+ ### The Solution: Activation Hooks
147
166
 
148
- Use the `add-hook` command to add an explicit activation instruction:
167
+ Use the `add-hook` command to add skill activation instructions:
149
168
 
150
169
  ```bash
151
- pnpx claude-skills-cli add-hook # Recommended: global (all projects)
170
+ # Recommended: forced-eval hook (84% success)
171
+ pnpx claude-skills-cli add-hook
152
172
  ```
153
173
 
154
- This adds a `UserPromptSubmit` hook that:
174
+ After extensive testing (200+ prompts), two approaches emerged as
175
+ significantly better than basic instructions:
155
176
 
156
- - Uses explicit "INSTRUCTION:" prefix (critical for reliability)
157
- - Tells Claude to check skills AND activate them using `Skill()`
158
- syntax
159
- - Scales automatically with new skills (no keyword management needed)
160
- - Fires on every prompt (~20 tokens/prompt overhead)
177
+ **Forced Eval Hook (84% success)** - Creates a mandatory 3-step
178
+ process:
161
179
 
162
- **Why explicit instructions matter:**
180
+ 1. Explicitly evaluate each skill (YES/NO with reasoning)
181
+ 2. Activate matching skills using `Skill()` tool
182
+ 3. Only then proceed with implementation
163
183
 
164
- Testing shows vague hooks like "Check for skills" make Claude _read_
165
- skill files instead of _activating_ them. The instruction must be
166
- direct and unambiguous:
184
+ **LLM Eval Hook (80% success)** - Pre-evaluates skills via Claude API:
167
185
 
168
- ```
169
- INSTRUCTION: Check available skills, match keywords to skill names/descriptions,
170
- and activate matching skills using Skill(skill-name).
171
- ```
186
+ - Costs ~$0.0004 per prompt (0.04 cents)
187
+ - 10% cheaper and 17% faster than forced eval
188
+ - Can miss certain prompt types but "smarter" when it works
189
+ - Requires `ANTHROPIC_API_KEY` environment variable
172
190
 
173
- **Scopes:**
191
+ Both approaches are **massively better** than simple instructions (20%
192
+ success rate).
174
193
 
175
- - **Global** (default): `~/.claude/settings.json` - applies to all
176
- projects
177
- - **Project** (`--project`): `./.claude/settings.json` - committed to
178
- git, team-shared
179
- - **Local** (`--local`): `./.claude/settings.local.json` - gitignored,
180
- personal
194
+ **Why explicit commitment matters:**
181
195
 
182
- **Alternative: Keyword-based scripts**
196
+ Simple hooks like "If the prompt matches any skill keywords, use
197
+ Skill(skill-name)" are passive suggestions that Claude often ignores.
198
+ The forced-eval hook creates a commitment mechanism - Claude must
199
+ write out its evaluation before proceeding, making it harder to skip
200
+ activation.
183
201
 
184
- For 1-2 skills, bash scripts with keyword detection work but become
185
- brittle at scale (keyword collisions, manual maintenance per skill).
186
- The simple echo-based instruction hook is more maintainable.
202
+ **Read more:**
187
203
 
188
- Read more:
189
- [Why Claude Code Skills Don't Auto-Activate](https://scottspence.com/posts/claude-code-skills-dont-auto-activate)
204
+ - [How to Make Claude Code Skills Activate Reliably](https://scottspence.com/posts/how-to-make-claude-code-skills-activate-reliably) -
205
+ Full testing methodology and results
206
+ - [Why Claude Code Skills Don't Auto-Activate](https://scottspence.com/posts/claude-code-skills-dont-auto-activate) -
207
+ Original problem analysis
190
208
 
191
209
  ## Resources
192
210
 
@@ -1,26 +1,72 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
3
  import { join } from 'node:path';
4
- import { ensure_dir } from '../utils/fs.js';
4
+ import { FORCED_EVAL_HOOK_TEMPLATE, LLM_EVAL_HOOK_TEMPLATE, SIMPLE_HOOK_TEMPLATE, } from '../core/templates.js';
5
+ import { ensure_dir, make_executable } from '../utils/fs.js';
5
6
  import { error, info, success, warning } from '../utils/output.js';
6
- const HOOK_COMMAND = "echo 'INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it.'";
7
+ const HOOK_TYPES = {
8
+ 'simple-inline': {
9
+ name: 'Simple Inline',
10
+ success_rate: '20%',
11
+ description: 'Echo command in settings.json',
12
+ command: "echo 'INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it.'",
13
+ script: null,
14
+ },
15
+ 'simple-script': {
16
+ name: 'Simple Script',
17
+ success_rate: '20%',
18
+ description: 'Script file with basic instruction',
19
+ command: null,
20
+ script: 'skill-activation-simple.sh',
21
+ template: SIMPLE_HOOK_TEMPLATE,
22
+ },
23
+ 'forced-eval': {
24
+ name: 'Forced Evaluation',
25
+ success_rate: '84%',
26
+ description: 'Mandatory 3-step evaluation process',
27
+ command: null,
28
+ script: 'skill-activation-forced-eval.sh',
29
+ template: FORCED_EVAL_HOOK_TEMPLATE,
30
+ },
31
+ 'llm-eval': {
32
+ name: 'LLM Evaluation',
33
+ success_rate: '80%',
34
+ description: 'Claude API pre-evaluation (requires ANTHROPIC_API_KEY)',
35
+ command: null,
36
+ script: 'skill-activation-llm-eval.sh',
37
+ template: LLM_EVAL_HOOK_TEMPLATE,
38
+ },
39
+ };
7
40
  export function add_hook_command(options = {}) {
41
+ // Default to forced-eval for best performance
42
+ const hook_type = (options.type ||
43
+ 'forced-eval');
44
+ if (!HOOK_TYPES[hook_type]) {
45
+ error(`Invalid hook type: ${hook_type}`);
46
+ info('Valid types: simple-inline, simple-script, forced-eval, llm-eval');
47
+ process.exit(1);
48
+ }
49
+ const hook_config = HOOK_TYPES[hook_type];
8
50
  // Determine which settings file to use
9
51
  let settings_path;
52
+ let hooks_dir;
10
53
  let scope;
11
54
  if (options.local) {
12
55
  // Project-specific local (gitignored)
13
56
  settings_path = join('.claude', 'settings.local.json');
57
+ hooks_dir = join('.claude', 'hooks');
14
58
  scope = 'project-local';
15
59
  }
16
60
  else if (options.project) {
17
61
  // Project-specific shared (committed)
18
62
  settings_path = join('.claude', 'settings.json');
63
+ hooks_dir = join('.claude', 'hooks');
19
64
  scope = 'project';
20
65
  }
21
66
  else {
22
67
  // Global (default)
23
68
  settings_path = join(homedir(), '.claude', 'settings.json');
69
+ hooks_dir = join(homedir(), '.claude', 'hooks');
24
70
  scope = 'global';
25
71
  }
26
72
  let settings = {};
@@ -35,38 +81,28 @@ export function add_hook_command(options = {}) {
35
81
  settings.hooks.UserPromptSubmit.length > 0) {
36
82
  // Get the first (and should be only) UserPromptSubmit object
37
83
  const userPromptSubmit = settings.hooks.UserPromptSubmit[0];
38
- // Check if our specific hook already exists
39
- const has_skill_hook = userPromptSubmit.hooks?.some((h) => h.type === 'command' &&
40
- h.command.includes('Check .claude/skills/'));
41
- if (has_skill_hook) {
84
+ // Find existing skill activation hook (check for various patterns)
85
+ const existing_hook = userPromptSubmit.hooks?.find((h) => h.type === 'command' &&
86
+ (h.command.includes('skill-activation') ||
87
+ h.command.includes('skill-forced-eval-hook') ||
88
+ h.command.includes('skill-llm-eval-hook') ||
89
+ h.command.includes('skill-simple-instruction-hook') ||
90
+ h.command.includes('If the prompt matches any available skill keywords')));
91
+ if (existing_hook) {
42
92
  warning(`Skill activation hook already exists in ${scope} settings`);
43
- info('No changes made.');
44
- return;
93
+ info(`Current hook: ${existing_hook.command}`);
94
+ console.log('');
95
+ if (options.force) {
96
+ info('--force flag provided, replacing existing hook...');
97
+ // Remove the existing hook
98
+ userPromptSubmit.hooks = userPromptSubmit.hooks?.filter((h) => h !== existing_hook);
99
+ }
100
+ else {
101
+ info('No changes made.');
102
+ info('To replace, run with --force flag or manually remove the existing hook.');
103
+ return;
104
+ }
45
105
  }
46
- // Add to existing hooks array within the first UserPromptSubmit object
47
- if (!userPromptSubmit.hooks) {
48
- userPromptSubmit.hooks = [];
49
- }
50
- userPromptSubmit.hooks.push({
51
- type: 'command',
52
- command: HOOK_COMMAND,
53
- });
54
- info(`Adding skill activation hook to existing ${scope} settings...`);
55
- }
56
- else {
57
- // Create UserPromptSubmit section
58
- settings.hooks = settings.hooks || {};
59
- settings.hooks.UserPromptSubmit = [
60
- {
61
- hooks: [
62
- {
63
- type: 'command',
64
- command: HOOK_COMMAND,
65
- },
66
- ],
67
- },
68
- ];
69
- info(`Adding skill activation hook to ${scope} settings...`);
70
106
  }
71
107
  }
72
108
  catch (err) {
@@ -74,9 +110,72 @@ export function add_hook_command(options = {}) {
74
110
  process.exit(1);
75
111
  }
76
112
  }
113
+ // Determine the command to use
114
+ let hook_command;
115
+ if (hook_config.script) {
116
+ // Script-based hook: create the script file
117
+ const script_path = join(hooks_dir, hook_config.script);
118
+ info(`Creating ${hook_config.name} hook script...`);
119
+ try {
120
+ ensure_dir(hooks_dir);
121
+ // Write the script file
122
+ if (hook_config.template) {
123
+ writeFileSync(script_path, hook_config.template(), 'utf-8');
124
+ }
125
+ // Make it executable
126
+ make_executable(script_path);
127
+ success(`Script created: ${script_path}`);
128
+ }
129
+ catch (err) {
130
+ error(`Failed to create hook script: ${err}`);
131
+ process.exit(1);
132
+ }
133
+ // Use relative path for project hooks, absolute for global
134
+ if (scope === 'global') {
135
+ hook_command = script_path;
136
+ }
137
+ else {
138
+ hook_command = `.claude/hooks/${hook_config.script}`;
139
+ }
140
+ }
141
+ else {
142
+ // Inline command
143
+ hook_command = hook_config.command;
144
+ }
145
+ // Update or create settings.json
146
+ if (existsSync(settings_path)) {
147
+ // Add to existing settings
148
+ const userPromptSubmit = settings.hooks?.UserPromptSubmit?.[0];
149
+ if (userPromptSubmit) {
150
+ // Add to existing hooks array
151
+ if (!userPromptSubmit.hooks) {
152
+ userPromptSubmit.hooks = [];
153
+ }
154
+ userPromptSubmit.hooks.push({
155
+ type: 'command',
156
+ command: hook_command,
157
+ });
158
+ info(`Adding ${hook_config.name} hook to existing ${scope} settings...`);
159
+ }
160
+ else {
161
+ // Create UserPromptSubmit section
162
+ settings.hooks = settings.hooks || {};
163
+ settings.hooks.UserPromptSubmit = [
164
+ {
165
+ hooks: [
166
+ {
167
+ type: 'command',
168
+ command: hook_command,
169
+ },
170
+ ],
171
+ },
172
+ ];
173
+ info(`Adding ${hook_config.name} hook to ${scope} settings...`);
174
+ }
175
+ }
77
176
  else {
78
177
  // Create new settings.json
79
- info(`Creating ${scope} settings with skill activation hook...`);
178
+ info(`Creating ${scope} settings with ${hook_config.name} hook...`);
80
179
  settings = {
81
180
  hooks: {
82
181
  UserPromptSubmit: [
@@ -84,7 +183,7 @@ export function add_hook_command(options = {}) {
84
183
  hooks: [
85
184
  {
86
185
  type: 'command',
87
- command: HOOK_COMMAND,
186
+ command: hook_command,
88
187
  },
89
188
  ],
90
189
  },
@@ -96,13 +195,23 @@ export function add_hook_command(options = {}) {
96
195
  try {
97
196
  ensure_dir(scope === 'global' ? join(homedir(), '.claude') : '.claude');
98
197
  writeFileSync(settings_path, JSON.stringify(settings, null, 2), 'utf-8');
99
- success(`Skill activation hook added successfully! (${scope})`);
198
+ success(`${hook_config.name} hook added successfully! (${scope})`);
100
199
  console.log('');
101
- info(`Location: ${settings_path}`);
200
+ info(`Settings: ${settings_path}`);
201
+ if (hook_config.script) {
202
+ info(`Script: ${join(hooks_dir, hook_config.script)}`);
203
+ }
102
204
  console.log('');
103
- info('This hook improves skill activation reliability by explicitly');
104
- info('instructing Claude to check AND activate matching skills.');
205
+ info(`Hook Type: ${hook_config.name}`);
206
+ info(`Success Rate: ${hook_config.success_rate}`);
207
+ info(`Description: ${hook_config.description}`);
105
208
  console.log('');
209
+ if (hook_type === 'llm-eval') {
210
+ warning('LLM eval hook requires ANTHROPIC_API_KEY environment variable');
211
+ info('Set with: export ANTHROPIC_API_KEY=your-key-here');
212
+ info('Falls back to simple instruction if API key not found');
213
+ console.log('');
214
+ }
106
215
  info('Next steps:');
107
216
  console.log(' 1. Create skills with: claude-skills-cli init --name <name>');
108
217
  console.log(' 2. Validate with: claude-skills-cli validate <path>');
@@ -1 +1 @@
1
- {"version":3,"file":"add-hook.js","sourceRoot":"","sources":["../../src/commands/add-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-hook.js","sourceRoot":"","sources":["../../src/commands/add-hook.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { join } from 'node:path';
2
- import { README_TEMPLATE, REFERENCE_TEMPLATE, SCRIPT_TEMPLATE, SKILL_MD_TEMPLATE, } from '../core/templates.js';
2
+ import { REFERENCE_TEMPLATE, SCRIPT_TEMPLATE, SKILL_MD_TEMPLATE, } from '../core/templates.js';
3
3
  import { ensure_dir, is_lowercase, make_executable, to_title_case, write_file, } from '../utils/fs.js';
4
4
  import { error, success } from '../utils/output.js';
5
5
  export function init_command(options) {
@@ -46,9 +46,6 @@ function create_skill(path, name, description, with_examples = false) {
46
46
  const title = to_title_case(name);
47
47
  const skill_md = SKILL_MD_TEMPLATE(name, description, title, with_examples);
48
48
  write_file(join(path, 'SKILL.md'), skill_md);
49
- // Create README
50
- const readme_md = README_TEMPLATE(title, description);
51
- write_file(join(path, 'README.md'), readme_md);
52
49
  // Only create example files if requested
53
50
  if (with_examples) {
54
51
  // Create example directories
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -188,19 +188,202 @@ function main() {
188
188
 
189
189
  main();
190
190
  `;
191
- export const README_TEMPLATE = (title, description) => `# ${title}
191
+ // Hook templates for skill activation
192
+ export const SIMPLE_HOOK_TEMPLATE = () => `#!/bin/bash
193
+ echo 'INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it.'
194
+ `;
195
+ export const FORCED_EVAL_HOOK_TEMPLATE = () => `#!/bin/bash
196
+ # UserPromptSubmit hook that forces explicit skill evaluation
197
+ #
198
+ # This hook requires Claude to explicitly evaluate each available skill
199
+ # before proceeding with implementation.
200
+ #
201
+ # Installation: Copy to .claude/hooks/UserPromptSubmit
202
+
203
+ cat <<'EOF'
204
+ INSTRUCTION: MANDATORY SKILL ACTIVATION SEQUENCE
205
+
206
+ Step 1 - EVALUATE (do this in your response):
207
+ For each skill in <available_skills>, state: [skill-name] - YES/NO - [reason]
208
+
209
+ Step 2 - ACTIVATE (do this immediately after Step 1):
210
+ IF any skills are YES → Use Skill(skill-name) tool for EACH relevant skill NOW
211
+ IF no skills are YES → State "No skills needed" and proceed
192
212
 
193
- ${description}
213
+ Step 3 - IMPLEMENT:
214
+ Only after Step 2 is complete, proceed with implementation.
194
215
 
195
- ## Structure
216
+ CRITICAL: You MUST call Skill() tool in Step 2. Do NOT skip to implementation.
217
+ The evaluation (Step 1) is WORTHLESS unless you ACTIVATE (Step 2) the skills.
196
218
 
197
- - \`SKILL.md\` - Main skill instructions
198
- - \`references/\` - Detailed documentation loaded as needed
199
- - \`scripts/\` - Executable code for deterministic operations
200
- - \`assets/\` - Templates, images, or other resources
219
+ Example of correct sequence:
220
+ - research: NO - not a research task
221
+ - svelte5-runes: YES - need reactive state
222
+ - sveltekit-structure: YES - creating routes
201
223
 
202
- ## Usage
224
+ [Then IMMEDIATELY use Skill() tool:]
225
+ > Skill(svelte5-runes)
226
+ > Skill(sveltekit-structure)
227
+
228
+ [THEN and ONLY THEN start implementation]
229
+ EOF
230
+ `;
231
+ export const LLM_EVAL_HOOK_TEMPLATE = () => `#!/bin/bash
232
+ # UserPromptSubmit hook that uses Claude API for intelligent skill evaluation
233
+ #
234
+ # This hook analyses each user prompt and uses the Claude API to determine which
235
+ # skills (if any) are relevant. It then instructs Claude to activate those skills
236
+ # before proceeding with implementation.
237
+ #
238
+ # COST ANALYSIS (per prompt):
239
+ # Current model: Claude Haiku 3.5 ($0.80/$4 per MTok input/output)
240
+ # - Estimated: ~400 input tokens + ~20 output tokens
241
+ # - Cost: ~$0.0004 per evaluation (0.04 cents)
242
+ # - Volume: $0.40 per 1,000 prompts
243
+ #
244
+ # MODEL CONFIGURATION:
245
+ # Uncomment the model you want to use below
246
+ #
247
+ # Alternative: Claude Haiku 4.5 ($1/$5 per MTok) - 25% more expensive
248
+ # - Better accuracy and alignment
249
+ # - Cost: ~$0.0005 per evaluation (0.05 cents)
250
+ # - Trade-off: Extra 0.01¢ per call for improved skill matching
251
+ #
252
+ # REQUIREMENTS:
253
+ # 1. Set ANTHROPIC_API_KEY environment variable
254
+ # export ANTHROPIC_API_KEY=your-key-here
255
+ # 2. Ensure jq is installed for JSON parsing
256
+
257
+ # ============================================================================
258
+ # MODEL CONFIGURATION - Uncomment the model you want to use
259
+ # ============================================================================
260
+
261
+ # Haiku 3.5 - Faster, cheaper, good for simple classification
262
+ MODEL="claude-3-5-haiku-20241022"
263
+
264
+ # Haiku 4.5 - Better accuracy, 25% more expensive (verify model ID from Anthropic docs)
265
+ # MODEL="claude-haiku-4-5-20251015"
266
+
267
+ # ============================================================================
268
+
269
+ # Read JSON input from stdin with timeout
270
+ INPUT_JSON=$(timeout 2 cat || echo '{}')
271
+
272
+ # Extract user prompt and cwd from JSON
273
+ USER_PROMPT=$(echo "$INPUT_JSON" | jq -r '.prompt // ""' 2>/dev/null)
274
+ CWD=$(echo "$INPUT_JSON" | jq -r '.cwd // ""' 2>/dev/null)
275
+
276
+ # Use CLAUDE_PROJECT_DIR if CWD is empty
277
+ if [ -z "$CWD" ] || [ "$CWD" = "null" ]; then
278
+ CWD="\${CLAUDE_PROJECT_DIR:-.}"
279
+ fi
280
+
281
+ # Get available skills with descriptions from both global and project skills
282
+ AVAILABLE_SKILLS=""
283
+
284
+ # Function to scan a skills directory
285
+ scan_skills_dir() {
286
+ local dir="$1"
287
+
288
+ if [ -d "$dir" ]; then
289
+ for skill_dir in "$dir"/*/; do
290
+ if [ -d "$skill_dir" ]; then
291
+ skill_file="$skill_dir/SKILL.md"
292
+ if [ -f "$skill_file" ]; then
293
+ skill_name=$(basename "$skill_dir")
294
+ # Extract description from YAML frontmatter (between --- markers)
295
+ skill_desc=$(sed -n '/^---$/,/^---$/p' "$skill_file" | grep '^description:' | sed 's/^description: *//' | head -n 1)
296
+
297
+ if [ -n "$skill_desc" ]; then
298
+ AVAILABLE_SKILLS="\${AVAILABLE_SKILLS}- \${skill_name}: \${skill_desc}\\n"
299
+ else
300
+ AVAILABLE_SKILLS="\${AVAILABLE_SKILLS}- \${skill_name}\\n"
301
+ fi
302
+ fi
303
+ fi
304
+ done
305
+ fi
306
+ }
203
307
 
204
- This skill is automatically discovered by Claude when relevant to the task.
308
+ # Scan global skills
309
+ scan_skills_dir "$HOME/.claude/skills"
310
+
311
+ # Scan project skills
312
+ scan_skills_dir "$CWD/.claude/skills"
313
+
314
+ if [ -z "$AVAILABLE_SKILLS" ]; then
315
+ AVAILABLE_SKILLS="No skills found"
316
+ fi
317
+
318
+
319
+ # Fallback instruction message
320
+ FALLBACK_INSTRUCTION="INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it."
321
+
322
+ # If no API key in environment, fall back
323
+ if [ -z "$ANTHROPIC_API_KEY" ]; then
324
+ echo "$FALLBACK_INSTRUCTION"
325
+ exit 0
326
+ fi
327
+
328
+ # Prepare the optimized evaluation prompt
329
+ EVAL_PROMPT=$(cat <<EOF
330
+ Return ONLY a JSON array of skill names that match this request.
331
+
332
+ Request: \${USER_PROMPT}
333
+
334
+ Skills:
335
+ \${AVAILABLE_SKILLS}
336
+ Format: ["skill-name"] or []
337
+ EOF
338
+ )
339
+
340
+ # Call Claude API with optimized parameters
341
+ RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \\
342
+ -H "content-type: application/json" \\
343
+ -H "x-api-key: $ANTHROPIC_API_KEY" \\
344
+ -H "anthropic-version: 2023-06-01" \\
345
+ -d "{
346
+ \\"model\\": \\"$MODEL\\",
347
+ \\"max_tokens\\": 200,
348
+ \\"temperature\\": 0,
349
+ \\"system\\": \\"You are a skill matcher. Return only valid JSON arrays.\\",
350
+ \\"messages\\": [{
351
+ \\"role\\": \\"user\\",
352
+ \\"content\\": $(echo "$EVAL_PROMPT" | jq -Rs .)
353
+ }]
354
+ }")
355
+
356
+ # Extract the skill list from response
357
+ RAW_TEXT=$(echo "$RESPONSE" | jq -r '.content[0].text' 2>/dev/null)
358
+
359
+ # Check if we got a valid response
360
+ if [ $? -ne 0 ] || [ -z "$RAW_TEXT" ]; then
361
+ echo "$FALLBACK_INSTRUCTION"
362
+ exit 0
363
+ fi
364
+
365
+ # Strip markdown code fences if present and extract JSON
366
+ SKILLS=$(echo "$RAW_TEXT" | sed -n '/^\\[/,/^\\]/p' | head -n 1)
367
+
368
+ # If that didn't work, try the whole text
369
+ if [ -z "$SKILLS" ]; then
370
+ SKILLS="$RAW_TEXT"
371
+ fi
372
+
373
+ # Parse the skills array
374
+ SKILL_COUNT=$(echo "$SKILLS" | jq 'length' 2>/dev/null)
375
+
376
+ if [ "$SKILL_COUNT" = "0" ]; then
377
+ echo "INSTRUCTION: LLM evaluation determined no skills are needed for this task."
378
+ elif [ -n "$SKILL_COUNT" ] && [ "$SKILL_COUNT" != "null" ]; then
379
+ SKILL_NAMES=$(echo "$SKILLS" | jq -r '.[]' | paste -sd ',' -)
380
+ echo "INSTRUCTION: LLM evaluation determined these skills are relevant: $SKILL_NAMES"
381
+ echo ""
382
+ echo "You MUST activate these skills using the Skill() tool BEFORE implementation:"
383
+ echo "$SKILLS" | jq -r '.[] | "- Skill(\\(.))"'
384
+ else
385
+ # Fallback if parsing failed
386
+ echo "$FALLBACK_INSTRUCTION"
387
+ fi
205
388
  `;
206
389
  //# sourceMappingURL=templates.js.map
@@ -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;;;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"}
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,sCAAsC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC;;CAEzC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC9C,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6J3C,CAAC"}
package/dist/index.js CHANGED
@@ -25,7 +25,8 @@ function show_help() {
25
25
  console.log(' --version, -v Show version');
26
26
  console.log(' --with-examples Include example files when creating skill');
27
27
  console.log(' --format <type> Output format: text (default) or json');
28
- console.log(' --strict Fail validation if warnings present\n');
28
+ console.log(' --strict Fail validation if warnings present');
29
+ console.log(' --force Replace existing hook without prompting\n');
29
30
  console.log('Examples:');
30
31
  console.log(' claude-skills-cli init --name my-skill --description "Description"');
31
32
  console.log(' claude-skills-cli init --name my-skill --description "..." --with-examples');
@@ -36,9 +37,16 @@ function show_help() {
36
37
  console.log(' claude-skills-cli doctor .claude/skills/my-skill');
37
38
  console.log(' claude-skills-cli package .claude/skills/my-skill');
38
39
  console.log(' claude-skills-cli stats .claude/skills');
39
- console.log(' claude-skills-cli add-hook # Global');
40
- console.log(' claude-skills-cli add-hook --project # Project');
41
- console.log(' claude-skills-cli add-hook --local # Project-local');
40
+ console.log(' claude-skills-cli add-hook # Global, forced-eval (84%)');
41
+ console.log(' claude-skills-cli add-hook --type llm-eval # Global, LLM eval (80%)');
42
+ console.log(' claude-skills-cli add-hook --type forced-eval --project # Project, forced-eval');
43
+ console.log(' claude-skills-cli add-hook --type simple-script --local # Local, simple script');
44
+ console.log(' claude-skills-cli add-hook --type forced-eval --force # Replace existing hook');
45
+ console.log('\nHook Types (--type):');
46
+ console.log(' forced-eval 84% success - Mandatory 3-step evaluation (default)');
47
+ console.log(' llm-eval 80% success - Claude API pre-evaluation (requires API key)');
48
+ console.log(' simple-script 20% success - Basic script file');
49
+ console.log(' simple-inline 20% success - Echo command in settings.json');
42
50
  console.log('\n⚠️ IMPORTANT FOR LLMs:');
43
51
  console.log(' ALWAYS run validate after creating or editing a skill:');
44
52
  console.log(' claude-skills-cli validate <skill-path>');
@@ -160,6 +168,8 @@ async function main() {
160
168
  add_hook_command({
161
169
  local: parsed.local === true,
162
170
  project: parsed.project === true,
171
+ type: parsed.type,
172
+ force: parsed.force === true,
163
173
  });
164
174
  break;
165
175
  default:
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":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,SAAS,SAAS;IACjB,OAAO,CAAC,GAAG,CACV,oEAAoE,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CACV,6DAA6D,CAC7D,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CACV,0DAA0D,CAC1D,CAAC;IACF,OAAO,CAAC,GAAG,CACV,oEAAoE,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CACV,iEAAiE,CACjE,CAAC;IACF,OAAO,CAAC,GAAG,CACV,6DAA6D,CAC7D,CAAC;IACF,OAAO,CAAC,GAAG,CACV,2DAA2D,CAC3D,CAAC;IACF,OAAO,CAAC,GAAG,CACV,iEAAiE,CACjE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CACV,sEAAsE,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACV,8EAA8E,CAC9E,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CACV,oEAAoE,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,CACV,+DAA+D,CAC/D,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CACV,mFAAmF,CACnF,CAAC;IACF,OAAO,CAAC,GAAG,CACV,gFAAgF,CAChF,CAAC;IACF,OAAO,CAAC,GAAG,CACV,oFAAoF,CACpF,CAAC;IACF,OAAO,CAAC,GAAG,CACV,oFAAoF,CACpF,CAAC;IACF,OAAO,CAAC,GAAG,CACV,oFAAoF,CACpF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CACV,uEAAuE,CACvE,CAAC;IACF,OAAO,CAAC,GAAG,CACV,8EAA8E,CAC9E,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CACV,+DAA+D,CAC/D,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACV,0DAA0D,CAC1D,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CACV,0DAA0D,CAC1D,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAClB,IAAc;IAEd,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACnB,CAAC,EAAE,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACnB,CAAC,EAAE,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,MAAM;YACV,YAAY,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC,IAA0B;gBACvC,WAAW,EAAE,MAAM,CAAC,WAAiC;gBACrD,IAAI,EAAE,MAAM,CAAC,IAA0B;gBACvC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI;aAC/C,CAAC,CAAC;YACH,MAAM;QAEP,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAqB,CAAC;YAChD,eAAe,CAAC;gBACf,UAAU;gBACV,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;aAC5B,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAqB,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CACV,6EAA6E,CAC7E,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4B,CAAC;YACnD,gBAAgB,CAAC;gBAChB,UAAU;gBACV,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI;gBAC9B,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;aAC3C,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,UAAU,GAAG,MAAM,CAAC,WAAqB,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,cAAc,CAAC;gBACd,UAAU;aACV,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAqB,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CACV,iDAAiD,CACjD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,MAAM,eAAe,CAAC;gBACrB,UAAU;gBACV,MAAM,EAAE,MAAM,CAAC,MAA4B;gBAC3C,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK,IAAI;aACnD,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,WAAiC,CAAC;YAC3D,aAAa,CAAC;gBACb,SAAS;aACT,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QAED,KAAK,UAAU;YACd,gBAAgB,CAAC;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;gBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;gBAChC,IAAI,EAAE,MAAM,CAAC,IAKD;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;aAC5B,CAAC,CAAC;YACH,MAAM;QAEP;YACC,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACpB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -86,7 +86,6 @@ npx claude-skills-cli init --path /custom/path/my-skill \
86
86
  ```
87
87
  .claude/skills/my-skill/
88
88
  ├── SKILL.md # Main skill instructions
89
- ├── README.md # Skill documentation
90
89
  └── references/ # Level 3 detailed documentation
91
90
  ```
92
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-skills-cli",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "CLI toolkit for creating and managing Claude Agent Skills",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "devDependencies": {
41
41
  "@changesets/cli": "^2.29.7",
42
42
  "@types/node": "^24.9.0",
43
- "@types/archiver": "^6.0.3",
43
+ "@types/archiver": "^7.0.0",
44
44
  "prettier": "^3.6.2",
45
45
  "typescript": "^5.9.3"
46
46
  },
@@ -1,45 +0,0 @@
1
- import chalk from 'chalk';
2
- import { generate_hook_config, get_settings_location_message, has_skill_reminder_hook, } from '../utils/settings.js';
3
- export function hook_config_command(options) {
4
- const hook_type = options.sessionStart
5
- ? 'session-start'
6
- : 'user-prompt';
7
- console.log(chalk.cyan.bold('\n📋 Skill Activation Hook Configuration\n'));
8
- // Check if hook already exists
9
- if (has_skill_reminder_hook()) {
10
- console.log(chalk.green('✅ Skill reminder hook already detected in your settings!\n'));
11
- console.log(chalk.dim('You already have a hook that references .claude/skills/.'));
12
- console.log(chalk.dim('If you want to modify it, edit your settings file directly.'));
13
- return;
14
- }
15
- // Display the configuration
16
- console.log(chalk.white(`Copy this to ${chalk.bold(get_settings_location_message())}:\n`));
17
- const config = generate_hook_config(hook_type);
18
- console.log(chalk.cyan(config));
19
- // Explain what it does
20
- console.log(chalk.bold('\n💡 What this does:\n'));
21
- if (hook_type === 'session-start') {
22
- console.log(chalk.white(' • Fires once when Claude Code session starts'));
23
- console.log(chalk.white(' • Costs ~15 tokens once per session'));
24
- console.log(chalk.white(' • Claude sees reminder at start of conversation'));
25
- console.log(chalk.yellow(' • May forget as conversation gets longer'));
26
- }
27
- else {
28
- console.log(chalk.white(' • Fires before Claude processes each prompt'));
29
- console.log(chalk.white(' • Costs ~15 tokens per prompt'));
30
- console.log(chalk.white(' • Makes Claude check your skills consistently'));
31
- console.log(chalk.green(' • Recommended: Claude needs constant reminding!'));
32
- }
33
- console.log(chalk.white(' • No maintenance required (unlike skill-rules.json)'));
34
- console.log(chalk.white(' • Claude decides which skills are relevant\n'));
35
- // Show alternative
36
- if (hook_type === 'session-start') {
37
- console.log(chalk.dim('Alternative: UserPromptSubmit (constant reminders)'));
38
- console.log(chalk.dim(' Run: claude-skills-cli hook-config\n'));
39
- }
40
- else {
41
- console.log(chalk.dim('Alternative: SessionStart (once per session)'));
42
- console.log(chalk.dim(' Run: claude-skills-cli hook-config --session-start\n'));
43
- }
44
- }
45
- //# sourceMappingURL=hook-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-config.js","sourceRoot":"","sources":["../../src/commands/hook-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACN,oBAAoB,EACpB,6BAA6B,EAC7B,uBAAuB,GACvB,MAAM,sBAAsB,CAAC;AAM9B,MAAM,UAAU,mBAAmB,CAClC,OAA0B;IAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY;QACrC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,aAAa,CAAC;IAEjB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAC7D,CAAC;IAEF,+BAA+B;IAC/B,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,4DAA4D,CAC5D,CACD,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CACR,0DAA0D,CAC1D,CACD,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CACR,6DAA6D,CAC7D,CACD,CAAC;QACF,OAAO;IACR,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,gBAAgB,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,KAAK,CAChE,CACD,CAAC;IAEF,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhC,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAC7D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,mDAAmD,CACnD,CACD,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAC1D,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAC5D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAC9D,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,mDAAmD,CACnD,CACD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CACV,uDAAuD,CACvD,CACD,CAAC;IACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAC7D,CAAC;IAEF,mBAAmB;IACnB,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAC/D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CACR,wDAAwD,CACxD,CACD,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -1,82 +0,0 @@
1
- import { watch } from 'node:fs';
2
- import { basename, dirname, join } from 'node:path';
3
- import { existsSync } from 'node:fs';
4
- import { SkillValidator } from '../core/validator.js';
5
- import { display_validation_stats, error, info, success, warning, } from '../utils/output.js';
6
- export function watch_command(options) {
7
- const { directory } = options;
8
- const watch_path = directory || '.claude/skills';
9
- if (!existsSync(watch_path)) {
10
- error(`Directory does not exist: ${watch_path}`);
11
- process.exit(1);
12
- }
13
- info(`Watching for changes in: ${watch_path}`);
14
- console.log('='.repeat(60));
15
- console.log('Auto-validating SKILL.md files on save...\n');
16
- console.log('Press Ctrl+C to stop\n');
17
- // Track last validation time to debounce rapid changes
18
- const last_validation = new Map();
19
- const DEBOUNCE_MS = 500;
20
- // Watch recursively
21
- const watcher = watch(watch_path, { recursive: true }, (eventType, filename) => {
22
- if (!filename)
23
- return;
24
- // Only validate SKILL.md files
25
- if (!filename.endsWith('SKILL.md'))
26
- return;
27
- const full_path = join(watch_path, filename);
28
- const skill_path = dirname(full_path);
29
- const skill_name = basename(skill_path);
30
- // Debounce rapid changes
31
- const now = Date.now();
32
- const last = last_validation.get(full_path) || 0;
33
- if (now - last < DEBOUNCE_MS)
34
- return;
35
- last_validation.set(full_path, now);
36
- console.log('\n' + '='.repeat(60));
37
- info(`Change detected: ${skill_name}/SKILL.md`);
38
- console.log('='.repeat(60));
39
- // Validate
40
- const validator = new SkillValidator(skill_path);
41
- const result = validator.validate_all();
42
- // Display progressive disclosure stats
43
- if (result.stats) {
44
- display_validation_stats(result.stats);
45
- }
46
- // Print errors
47
- if (result.errors.length > 0) {
48
- console.log('\n❌ Errors:');
49
- for (const err of result.errors) {
50
- console.log(` ${err}`);
51
- }
52
- }
53
- // Print warnings
54
- if (result.warnings.length > 0) {
55
- console.log('\n⚠️ Warnings:');
56
- for (const warn of result.warnings) {
57
- console.log(` ${warn}`);
58
- }
59
- }
60
- // Print final status
61
- if (!result.errors.length && !result.warnings.length) {
62
- console.log('');
63
- success(`✅ ${skill_name} is valid!`);
64
- }
65
- else if (!result.errors.length) {
66
- console.log('');
67
- warning(`⚠️ ${skill_name} is valid (with warnings)`);
68
- }
69
- else {
70
- console.log('');
71
- error(`❌ ${skill_name} validation failed with ${result.errors.length} error(s)`);
72
- }
73
- console.log('\nWatching for changes...');
74
- });
75
- // Handle cleanup
76
- process.on('SIGINT', () => {
77
- console.log('\n\nStopping watcher...');
78
- watcher.close();
79
- process.exit(0);
80
- });
81
- }
82
- //# sourceMappingURL=watch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -1,110 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- /**
5
- * Get path to settings file (project-level or global)
6
- * Returns null if neither exists
7
- */
8
- export function get_settings_path() {
9
- // Check project-level first
10
- const project_settings = join(process.cwd(), '.claude', 'settings.json');
11
- if (existsSync(project_settings)) {
12
- return project_settings;
13
- }
14
- // Check global settings
15
- const global_settings = join(homedir(), '.claude.json');
16
- if (existsSync(global_settings)) {
17
- return global_settings;
18
- }
19
- // Return project path even if doesn't exist (most likely location)
20
- return project_settings;
21
- }
22
- /**
23
- * Read and parse Claude settings file
24
- */
25
- function read_settings(path) {
26
- try {
27
- const content = readFileSync(path, 'utf-8');
28
- return JSON.parse(content);
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- /**
35
- * Check if skill reminder hook exists in settings
36
- */
37
- export function has_skill_reminder_hook() {
38
- const settings_path = get_settings_path();
39
- if (!settings_path || !existsSync(settings_path)) {
40
- return false;
41
- }
42
- const settings = read_settings(settings_path);
43
- if (!settings?.hooks) {
44
- return false;
45
- }
46
- // Check UserPromptSubmit hooks
47
- const user_prompt_hooks = settings.hooks.UserPromptSubmit;
48
- if (user_prompt_hooks) {
49
- for (const hook_group of user_prompt_hooks) {
50
- for (const hook of hook_group.hooks) {
51
- if (hook.command.includes('.claude/skills') ||
52
- hook.command.includes('skills/')) {
53
- return true;
54
- }
55
- }
56
- }
57
- }
58
- // Check SessionStart hooks
59
- const session_start_hooks = settings.hooks.SessionStart;
60
- if (session_start_hooks) {
61
- for (const hook_group of session_start_hooks) {
62
- for (const hook of hook_group.hooks) {
63
- if (hook.command.includes('.claude/skills') ||
64
- hook.command.includes('skills/')) {
65
- return true;
66
- }
67
- }
68
- }
69
- }
70
- return false;
71
- }
72
- /**
73
- * Generate hook configuration JSON string
74
- */
75
- export function generate_hook_config(hook_type = 'user-prompt') {
76
- if (hook_type === 'session-start') {
77
- return `{
78
- "hooks": {
79
- "SessionStart": [{
80
- "hooks": [{
81
- "type": "command",
82
- "command": "echo '💡 Skills available in .claude/skills/ - check for relevant ones!'"
83
- }]
84
- }]
85
- }
86
- }`;
87
- }
88
- // Default: UserPromptSubmit
89
- return `{
90
- "hooks": {
91
- "UserPromptSubmit": [{
92
- "hooks": [{
93
- "type": "command",
94
- "command": "echo '💡 Check .claude/skills/ for relevant skills before responding!'"
95
- }]
96
- }]
97
- }
98
- }`;
99
- }
100
- /**
101
- * Get the recommended settings file location message
102
- */
103
- export function get_settings_location_message() {
104
- const settings_path = get_settings_path();
105
- if (settings_path && existsSync(settings_path)) {
106
- return settings_path;
107
- }
108
- return '.claude/settings.json (create this file in your project root)';
109
- }
110
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"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"}