claude-skills-cli 0.0.11 ā 0.0.13
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 +66 -26
- package/dist/commands/add-hook.js +147 -38
- package/dist/commands/add-hook.js.map +1 -1
- package/dist/core/templates.js +198 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/index.js +14 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -126,45 +126,85 @@ Creates uploadable zip for Claude.ai. Validates first unless
|
|
|
126
126
|
### add-hook
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
|
|
130
|
-
pnpx claude-skills-cli add-hook
|
|
131
|
-
|
|
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.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
|
141
|
-
Skills are designed to auto-activate in Claude Code, but
|
|
142
|
-
activation
|
|
143
|
-
|
|
144
|
-
|
|
160
|
+
Skills are designed to auto-activate in Claude Code, but in practice,
|
|
161
|
+
**[activation is unreliable without explicit hooks](https://scottspence.com/posts/claude-code-skills-dont-auto-activate)**.
|
|
162
|
+
Despite documentation claiming skills are "model-invoked," Claude
|
|
163
|
+
often bypasses skills unless directly instructed.
|
|
164
|
+
|
|
165
|
+
### The Solution: Activation Hooks
|
|
166
|
+
|
|
167
|
+
Use the `add-hook` command to add skill activation instructions:
|
|
145
168
|
|
|
146
169
|
```bash
|
|
147
|
-
|
|
170
|
+
# Recommended: forced-eval hook (84% success)
|
|
171
|
+
pnpx claude-skills-cli add-hook
|
|
148
172
|
```
|
|
149
173
|
|
|
150
|
-
|
|
174
|
+
After extensive testing (200+ prompts), two approaches emerged as
|
|
175
|
+
significantly better than basic instructions:
|
|
151
176
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- Requires no maintenance (unlike pattern-based approaches)
|
|
155
|
-
- Claude decides which skills apply to the current task
|
|
177
|
+
**Forced Eval Hook (84% success)** - Creates a mandatory 3-step
|
|
178
|
+
process:
|
|
156
179
|
|
|
157
|
-
|
|
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
|
|
158
183
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
-
|
|
164
|
-
|
|
184
|
+
**LLM Eval Hook (80% success)** - Pre-evaluates skills via Claude API:
|
|
185
|
+
|
|
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
|
|
190
|
+
|
|
191
|
+
Both approaches are **massively better** than simple instructions (20%
|
|
192
|
+
success rate).
|
|
193
|
+
|
|
194
|
+
**Why explicit commitment matters:**
|
|
195
|
+
|
|
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.
|
|
201
|
+
|
|
202
|
+
**Read more:**
|
|
165
203
|
|
|
166
|
-
|
|
167
|
-
|
|
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
|
|
168
208
|
|
|
169
209
|
## Resources
|
|
170
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 {
|
|
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
|
|
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
|
-
//
|
|
39
|
-
const
|
|
40
|
-
h.command.includes('
|
|
41
|
-
|
|
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(
|
|
44
|
-
|
|
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
|
|
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:
|
|
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(
|
|
198
|
+
success(`${hook_config.name} hook added successfully! (${scope})`);
|
|
100
199
|
console.log('');
|
|
101
|
-
info(`
|
|
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(
|
|
104
|
-
info(
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"add-hook.js","sourceRoot":"","sources":["../../src/commands/add-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAenE,MAAM,UAAU,GAAG;IAClB,eAAe,EAAE;QAChB,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EACN,+GAA+G;QAChH,MAAM,EAAE,IAAI;KACZ;IACD,eAAe,EAAE;QAChB,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,4BAA4B;QACpC,QAAQ,EAAE,oBAAoB;KAC9B;IACD,aAAa,EAAE;QACd,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,iCAAiC;QACzC,QAAQ,EAAE,yBAAyB;KACnC;IACD,UAAU,EAAE;QACX,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,KAAK;QACnB,WAAW,EACV,wDAAwD;QACzD,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,8BAA8B;QACtC,QAAQ,EAAE,sBAAsB;KAChC;CACQ,CAAC;AAIX,MAAM,UAAU,gBAAgB,CAAC,UAA0B,EAAE;IAC5D,8CAA8C;IAC9C,MAAM,SAAS,GAAa,CAAC,OAAO,CAAC,IAAI;QACxC,aAAa,CAAa,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACzC,IAAI,CACH,kEAAkE,CAClE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAE1C,uCAAuC;IACvC,IAAI,aAAqB,CAAC;IAC1B,IAAI,SAAiB,CAAC;IACtB,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,sCAAsC;QACtC,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QACvD,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,GAAG,eAAe,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,sCAAsC;QACtC,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACjD,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,GAAG,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACP,mBAAmB;QACnB,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC5D,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,KAAK,GAAG,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,GAAiB,EAAE,CAAC;IAEhC,gCAAgC;IAChC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE/B,gDAAgD;YAChD,IACC,QAAQ,CAAC,KAAK,EAAE,gBAAgB;gBAChC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBAC9C,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EACzC,CAAC;gBACF,6DAA6D;gBAC7D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAE5D,mEAAmE;gBACnE,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,IAAI,KAAK,SAAS;oBACpB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;wBACtC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC;wBAC5C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC;wBACnD,CAAC,CAAC,OAAO,CAAC,QAAQ,CACjB,oDAAoD,CACpD,CAAC,CACJ,CAAC;gBAEF,IAAI,aAAa,EAAE,CAAC;oBACnB,OAAO,CACN,2CAA2C,KAAK,WAAW,CAC3D,CAAC;oBACF,IAAI,CAAC,iBAAiB,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAEhB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnB,IAAI,CAAC,mDAAmD,CAAC,CAAC;wBAC1D,2BAA2B;wBAC3B,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAC1B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACP,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBACzB,IAAI,CACH,yEAAyE,CACzE,CAAC;wBACF,OAAO;oBACR,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,mBAAmB,aAAa,KAAK,GAAG,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IAED,+BAA+B;IAC/B,IAAI,YAAoB,CAAC;IAEzB,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,4CAA4C;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAExD,IAAI,CAAC,YAAY,WAAW,CAAC,IAAI,iBAAiB,CAAC,CAAC;QAEpD,IAAI,CAAC;YACJ,UAAU,CAAC,SAAS,CAAC,CAAC;YAEtB,wBAAwB;YACxB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1B,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;YAED,qBAAqB;YACrB,eAAe,CAAC,WAAW,CAAC,CAAC;YAE7B,OAAO,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,2DAA2D;QAC3D,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxB,YAAY,GAAG,WAAW,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,iBAAiB,WAAW,CAAC,MAAM,EAAE,CAAC;QACtD,CAAC;IACF,CAAC;SAAM,CAAC;QACP,iBAAiB;QACjB,YAAY,GAAG,WAAW,CAAC,OAAQ,CAAC;IACrC,CAAC;IAED,iCAAiC;IACjC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;QAE/D,IAAI,gBAAgB,EAAE,CAAC;YACtB,8BAA8B;YAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7B,CAAC;YACD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,IAAI,CACH,UAAU,WAAW,CAAC,IAAI,qBAAqB,KAAK,cAAc,CAClE,CAAC;QACH,CAAC;aAAM,CAAC;YACP,kCAAkC;YAClC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG;gBACjC;oBACC,KAAK,EAAE;wBACN;4BACC,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,YAAY;yBACrB;qBACD;iBACD;aACD,CAAC;YAEF,IAAI,CAAC,UAAU,WAAW,CAAC,IAAI,YAAY,KAAK,cAAc,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;SAAM,CAAC;QACP,2BAA2B;QAC3B,IAAI,CACH,YAAY,KAAK,kBAAkB,WAAW,CAAC,IAAI,UAAU,CAC7D,CAAC;QACF,QAAQ,GAAG;YACV,KAAK,EAAE;gBACN,gBAAgB,EAAE;oBACjB;wBACC,KAAK,EAAE;4BACN;gCACC,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,YAAY;6BACrB;yBACD;qBACD;iBACD;aACD;SACD,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACJ,UAAU,CACT,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;QACF,aAAa,CACZ,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,CACP,CAAC;QACF,OAAO,CACN,GAAG,WAAW,CAAC,IAAI,8BAA8B,KAAK,GAAG,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,aAAa,EAAE,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,cAAc,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,iBAAiB,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,CACN,+DAA+D,CAC/D,CAAC;YACF,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACzD,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CACV,+DAA+D,CAC/D,CAAC;QACF,OAAO,CAAC,GAAG,CACV,uDAAuD,CACvD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,mBAAmB,aAAa,KAAK,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
|
package/dist/core/templates.js
CHANGED
|
@@ -203,4 +203,202 @@ ${description}
|
|
|
203
203
|
|
|
204
204
|
This skill is automatically discovered by Claude when relevant to the task.
|
|
205
205
|
`;
|
|
206
|
+
// Hook templates for skill activation
|
|
207
|
+
export const SIMPLE_HOOK_TEMPLATE = () => `#!/bin/bash
|
|
208
|
+
echo 'INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it.'
|
|
209
|
+
`;
|
|
210
|
+
export const FORCED_EVAL_HOOK_TEMPLATE = () => `#!/bin/bash
|
|
211
|
+
# UserPromptSubmit hook that forces explicit skill evaluation
|
|
212
|
+
#
|
|
213
|
+
# This hook requires Claude to explicitly evaluate each available skill
|
|
214
|
+
# before proceeding with implementation.
|
|
215
|
+
#
|
|
216
|
+
# Installation: Copy to .claude/hooks/UserPromptSubmit
|
|
217
|
+
|
|
218
|
+
cat <<'EOF'
|
|
219
|
+
INSTRUCTION: MANDATORY SKILL ACTIVATION SEQUENCE
|
|
220
|
+
|
|
221
|
+
Step 1 - EVALUATE (do this in your response):
|
|
222
|
+
For each skill in <available_skills>, state: [skill-name] - YES/NO - [reason]
|
|
223
|
+
|
|
224
|
+
Step 2 - ACTIVATE (do this immediately after Step 1):
|
|
225
|
+
IF any skills are YES ā Use Skill(skill-name) tool for EACH relevant skill NOW
|
|
226
|
+
IF no skills are YES ā State "No skills needed" and proceed
|
|
227
|
+
|
|
228
|
+
Step 3 - IMPLEMENT:
|
|
229
|
+
Only after Step 2 is complete, proceed with implementation.
|
|
230
|
+
|
|
231
|
+
CRITICAL: You MUST call Skill() tool in Step 2. Do NOT skip to implementation.
|
|
232
|
+
The evaluation (Step 1) is WORTHLESS unless you ACTIVATE (Step 2) the skills.
|
|
233
|
+
|
|
234
|
+
Example of correct sequence:
|
|
235
|
+
- research: NO - not a research task
|
|
236
|
+
- svelte5-runes: YES - need reactive state
|
|
237
|
+
- sveltekit-structure: YES - creating routes
|
|
238
|
+
|
|
239
|
+
[Then IMMEDIATELY use Skill() tool:]
|
|
240
|
+
> Skill(svelte5-runes)
|
|
241
|
+
> Skill(sveltekit-structure)
|
|
242
|
+
|
|
243
|
+
[THEN and ONLY THEN start implementation]
|
|
244
|
+
EOF
|
|
245
|
+
`;
|
|
246
|
+
export const LLM_EVAL_HOOK_TEMPLATE = () => `#!/bin/bash
|
|
247
|
+
# UserPromptSubmit hook that uses Claude API for intelligent skill evaluation
|
|
248
|
+
#
|
|
249
|
+
# This hook analyses each user prompt and uses the Claude API to determine which
|
|
250
|
+
# skills (if any) are relevant. It then instructs Claude to activate those skills
|
|
251
|
+
# before proceeding with implementation.
|
|
252
|
+
#
|
|
253
|
+
# COST ANALYSIS (per prompt):
|
|
254
|
+
# Current model: Claude Haiku 3.5 ($0.80/$4 per MTok input/output)
|
|
255
|
+
# - Estimated: ~400 input tokens + ~20 output tokens
|
|
256
|
+
# - Cost: ~$0.0004 per evaluation (0.04 cents)
|
|
257
|
+
# - Volume: $0.40 per 1,000 prompts
|
|
258
|
+
#
|
|
259
|
+
# MODEL CONFIGURATION:
|
|
260
|
+
# Uncomment the model you want to use below
|
|
261
|
+
#
|
|
262
|
+
# Alternative: Claude Haiku 4.5 ($1/$5 per MTok) - 25% more expensive
|
|
263
|
+
# - Better accuracy and alignment
|
|
264
|
+
# - Cost: ~$0.0005 per evaluation (0.05 cents)
|
|
265
|
+
# - Trade-off: Extra 0.01Ā¢ per call for improved skill matching
|
|
266
|
+
#
|
|
267
|
+
# REQUIREMENTS:
|
|
268
|
+
# 1. Set ANTHROPIC_API_KEY environment variable
|
|
269
|
+
# export ANTHROPIC_API_KEY=your-key-here
|
|
270
|
+
# 2. Ensure jq is installed for JSON parsing
|
|
271
|
+
|
|
272
|
+
# ============================================================================
|
|
273
|
+
# MODEL CONFIGURATION - Uncomment the model you want to use
|
|
274
|
+
# ============================================================================
|
|
275
|
+
|
|
276
|
+
# Haiku 3.5 - Faster, cheaper, good for simple classification
|
|
277
|
+
MODEL="claude-3-5-haiku-20241022"
|
|
278
|
+
|
|
279
|
+
# Haiku 4.5 - Better accuracy, 25% more expensive (verify model ID from Anthropic docs)
|
|
280
|
+
# MODEL="claude-haiku-4-5-20251015"
|
|
281
|
+
|
|
282
|
+
# ============================================================================
|
|
283
|
+
|
|
284
|
+
# Read JSON input from stdin with timeout
|
|
285
|
+
INPUT_JSON=$(timeout 2 cat || echo '{}')
|
|
286
|
+
|
|
287
|
+
# Extract user prompt and cwd from JSON
|
|
288
|
+
USER_PROMPT=$(echo "$INPUT_JSON" | jq -r '.prompt // ""' 2>/dev/null)
|
|
289
|
+
CWD=$(echo "$INPUT_JSON" | jq -r '.cwd // ""' 2>/dev/null)
|
|
290
|
+
|
|
291
|
+
# Use CLAUDE_PROJECT_DIR if CWD is empty
|
|
292
|
+
if [ -z "$CWD" ] || [ "$CWD" = "null" ]; then
|
|
293
|
+
CWD="\${CLAUDE_PROJECT_DIR:-.}"
|
|
294
|
+
fi
|
|
295
|
+
|
|
296
|
+
# Get available skills with descriptions from both global and project skills
|
|
297
|
+
AVAILABLE_SKILLS=""
|
|
298
|
+
|
|
299
|
+
# Function to scan a skills directory
|
|
300
|
+
scan_skills_dir() {
|
|
301
|
+
local dir="$1"
|
|
302
|
+
|
|
303
|
+
if [ -d "$dir" ]; then
|
|
304
|
+
for skill_dir in "$dir"/*/; do
|
|
305
|
+
if [ -d "$skill_dir" ]; then
|
|
306
|
+
skill_file="$skill_dir/SKILL.md"
|
|
307
|
+
if [ -f "$skill_file" ]; then
|
|
308
|
+
skill_name=$(basename "$skill_dir")
|
|
309
|
+
# Extract description from YAML frontmatter (between --- markers)
|
|
310
|
+
skill_desc=$(sed -n '/^---$/,/^---$/p' "$skill_file" | grep '^description:' | sed 's/^description: *//' | head -n 1)
|
|
311
|
+
|
|
312
|
+
if [ -n "$skill_desc" ]; then
|
|
313
|
+
AVAILABLE_SKILLS="\${AVAILABLE_SKILLS}- \${skill_name}: \${skill_desc}\\n"
|
|
314
|
+
else
|
|
315
|
+
AVAILABLE_SKILLS="\${AVAILABLE_SKILLS}- \${skill_name}\\n"
|
|
316
|
+
fi
|
|
317
|
+
fi
|
|
318
|
+
fi
|
|
319
|
+
done
|
|
320
|
+
fi
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
# Scan global skills
|
|
324
|
+
scan_skills_dir "$HOME/.claude/skills"
|
|
325
|
+
|
|
326
|
+
# Scan project skills
|
|
327
|
+
scan_skills_dir "$CWD/.claude/skills"
|
|
328
|
+
|
|
329
|
+
if [ -z "$AVAILABLE_SKILLS" ]; then
|
|
330
|
+
AVAILABLE_SKILLS="No skills found"
|
|
331
|
+
fi
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
# Fallback instruction message
|
|
335
|
+
FALLBACK_INSTRUCTION="INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it."
|
|
336
|
+
|
|
337
|
+
# If no API key in environment, fall back
|
|
338
|
+
if [ -z "$ANTHROPIC_API_KEY" ]; then
|
|
339
|
+
echo "$FALLBACK_INSTRUCTION"
|
|
340
|
+
exit 0
|
|
341
|
+
fi
|
|
342
|
+
|
|
343
|
+
# Prepare the optimized evaluation prompt
|
|
344
|
+
EVAL_PROMPT=$(cat <<EOF
|
|
345
|
+
Return ONLY a JSON array of skill names that match this request.
|
|
346
|
+
|
|
347
|
+
Request: \${USER_PROMPT}
|
|
348
|
+
|
|
349
|
+
Skills:
|
|
350
|
+
\${AVAILABLE_SKILLS}
|
|
351
|
+
Format: ["skill-name"] or []
|
|
352
|
+
EOF
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
# Call Claude API with optimized parameters
|
|
356
|
+
RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \\
|
|
357
|
+
-H "content-type: application/json" \\
|
|
358
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \\
|
|
359
|
+
-H "anthropic-version: 2023-06-01" \\
|
|
360
|
+
-d "{
|
|
361
|
+
\\"model\\": \\"$MODEL\\",
|
|
362
|
+
\\"max_tokens\\": 200,
|
|
363
|
+
\\"temperature\\": 0,
|
|
364
|
+
\\"system\\": \\"You are a skill matcher. Return only valid JSON arrays.\\",
|
|
365
|
+
\\"messages\\": [{
|
|
366
|
+
\\"role\\": \\"user\\",
|
|
367
|
+
\\"content\\": $(echo "$EVAL_PROMPT" | jq -Rs .)
|
|
368
|
+
}]
|
|
369
|
+
}")
|
|
370
|
+
|
|
371
|
+
# Extract the skill list from response
|
|
372
|
+
RAW_TEXT=$(echo "$RESPONSE" | jq -r '.content[0].text' 2>/dev/null)
|
|
373
|
+
|
|
374
|
+
# Check if we got a valid response
|
|
375
|
+
if [ $? -ne 0 ] || [ -z "$RAW_TEXT" ]; then
|
|
376
|
+
echo "$FALLBACK_INSTRUCTION"
|
|
377
|
+
exit 0
|
|
378
|
+
fi
|
|
379
|
+
|
|
380
|
+
# Strip markdown code fences if present and extract JSON
|
|
381
|
+
SKILLS=$(echo "$RAW_TEXT" | sed -n '/^\\[/,/^\\]/p' | head -n 1)
|
|
382
|
+
|
|
383
|
+
# If that didn't work, try the whole text
|
|
384
|
+
if [ -z "$SKILLS" ]; then
|
|
385
|
+
SKILLS="$RAW_TEXT"
|
|
386
|
+
fi
|
|
387
|
+
|
|
388
|
+
# Parse the skills array
|
|
389
|
+
SKILL_COUNT=$(echo "$SKILLS" | jq 'length' 2>/dev/null)
|
|
390
|
+
|
|
391
|
+
if [ "$SKILL_COUNT" = "0" ]; then
|
|
392
|
+
echo "INSTRUCTION: LLM evaluation determined no skills are needed for this task."
|
|
393
|
+
elif [ -n "$SKILL_COUNT" ] && [ "$SKILL_COUNT" != "null" ]; then
|
|
394
|
+
SKILL_NAMES=$(echo "$SKILLS" | jq -r '.[]' | paste -sd ',' -)
|
|
395
|
+
echo "INSTRUCTION: LLM evaluation determined these skills are relevant: $SKILL_NAMES"
|
|
396
|
+
echo ""
|
|
397
|
+
echo "You MUST activate these skills using the Skill() tool BEFORE implementation:"
|
|
398
|
+
echo "$SKILLS" | jq -r '.[] | "- Skill(\\(.))"'
|
|
399
|
+
else
|
|
400
|
+
# Fallback if parsing failed
|
|
401
|
+
echo "$FALLBACK_INSTRUCTION"
|
|
402
|
+
fi
|
|
403
|
+
`;
|
|
206
404
|
//# 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,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,KAAa,EACb,WAAmB,EAClB,EAAE,CAAC,KAAK,KAAK;;EAEb,WAAW;;;;;;;;;;;;CAYZ,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
|
|
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
|
|
40
|
-
console.log(' claude-skills-cli add-hook --
|
|
41
|
-
console.log(' claude-skills-cli add-hook --
|
|
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":";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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.13",
|
|
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": "^
|
|
43
|
+
"@types/archiver": "^7.0.0",
|
|
44
44
|
"prettier": "^3.6.2",
|
|
45
45
|
"typescript": "^5.9.3"
|
|
46
46
|
},
|