claude-skills-cli 0.0.11 → 0.0.12
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 +33 -11
- package/dist/commands/add-hook.js +3 -3
- package/dist/commands/add-hook.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -138,21 +138,37 @@ personal overrides.
|
|
|
138
138
|
|
|
139
139
|
## Skill Activation in Claude Code
|
|
140
140
|
|
|
141
|
-
Skills are designed to auto-activate in Claude Code, but
|
|
142
|
-
activation
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
Skills are designed to auto-activate in Claude Code, but in practice,
|
|
142
|
+
**[activation is unreliable without explicit hooks](https://scottspence.com/posts/claude-code-skills-dont-auto-activate)**.
|
|
143
|
+
Despite documentation claiming skills are "model-invoked," Claude
|
|
144
|
+
often bypasses skills unless directly instructed.
|
|
145
|
+
|
|
146
|
+
### The Solution: Explicit Activation Hooks
|
|
147
|
+
|
|
148
|
+
Use the `add-hook` command to add an explicit activation instruction:
|
|
145
149
|
|
|
146
150
|
```bash
|
|
147
151
|
pnpx claude-skills-cli add-hook # Recommended: global (all projects)
|
|
148
152
|
```
|
|
149
153
|
|
|
150
|
-
This adds a hook that:
|
|
154
|
+
This adds a `UserPromptSubmit` hook that:
|
|
155
|
+
|
|
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)
|
|
151
161
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
162
|
+
**Why explicit instructions matter:**
|
|
163
|
+
|
|
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:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
INSTRUCTION: Check available skills, match keywords to skill names/descriptions,
|
|
170
|
+
and activate matching skills using Skill(skill-name).
|
|
171
|
+
```
|
|
156
172
|
|
|
157
173
|
**Scopes:**
|
|
158
174
|
|
|
@@ -163,8 +179,14 @@ This adds a hook that:
|
|
|
163
179
|
- **Local** (`--local`): `./.claude/settings.local.json` - gitignored,
|
|
164
180
|
personal
|
|
165
181
|
|
|
166
|
-
**
|
|
167
|
-
|
|
182
|
+
**Alternative: Keyword-based scripts**
|
|
183
|
+
|
|
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.
|
|
187
|
+
|
|
188
|
+
Read more:
|
|
189
|
+
[Why Claude Code Skills Don't Auto-Activate](https://scottspence.com/posts/claude-code-skills-dont-auto-activate)
|
|
168
190
|
|
|
169
191
|
## Resources
|
|
170
192
|
|
|
@@ -3,7 +3,7 @@ import { homedir } from 'node:os';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { ensure_dir } from '../utils/fs.js';
|
|
5
5
|
import { error, info, success, warning } from '../utils/output.js';
|
|
6
|
-
const HOOK_COMMAND = "echo '
|
|
6
|
+
const HOOK_COMMAND = "echo 'INSTRUCTION: If the prompt matches any available skill keywords, use Skill(skill-name) to activate it.'";
|
|
7
7
|
export function add_hook_command(options = {}) {
|
|
8
8
|
// Determine which settings file to use
|
|
9
9
|
let settings_path;
|
|
@@ -100,8 +100,8 @@ export function add_hook_command(options = {}) {
|
|
|
100
100
|
console.log('');
|
|
101
101
|
info(`Location: ${settings_path}`);
|
|
102
102
|
console.log('');
|
|
103
|
-
info('This hook improves skill activation reliability by
|
|
104
|
-
info('Claude to check
|
|
103
|
+
info('This hook improves skill activation reliability by explicitly');
|
|
104
|
+
info('instructing Claude to check AND activate matching skills.');
|
|
105
105
|
console.log('');
|
|
106
106
|
info('Next steps:');
|
|
107
107
|
console.log(' 1. Create skills with: claude-skills-cli init --name <name>');
|
|
@@ -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;AAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAoBnE,MAAM,YAAY,GACjB,
|
|
1
|
+
{"version":3,"file":"add-hook.js","sourceRoot":"","sources":["../../src/commands/add-hook.ts"],"names":[],"mappings":"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"}
|