字
字节笔记本
2026年2月21日
Claude Code Skill Activation Prompt Hook 实现
API中转
¥120
本文介绍一个 Claude Code Skill Activation Prompt Hook 的实现代码,该 Hook 可在用户提交 prompt 时自动检测并推荐相关的 Skills,提升开发效率。
功能概述
这个 TypeScript 脚本实现了一个智能的 Skill 激活检查机制,通过分析用户输入的 prompt,自动匹配并推荐相关的 Skills。主要特性包括:
- 关键词匹配:根据预设关键词检测用户意图
- 意图模式识别:使用正则表达式匹配复杂的意图模式
- 优先级分组:将匹配的 Skills 按 critical/high/medium/low 优先级分类展示
- 标准化输出:生成格式化的 Skill 推荐报告
核心数据结构
Hook 输入数据
typescript
interface HookInput {
session_id: string; // 会话 ID
transcript_path: string; // 对话记录路径
cwd: string; // 当前工作目录
permission_mode: string; // 权限模式
prompt: string; // 用户输入的提示词
}Skill 规则配置
typescript
interface SkillRule {
type: 'guardrail' | 'domain';
enforcement: 'block' | 'suggest' | 'warn';
priority: 'critical' | 'high' | 'medium' | 'low';
promptTriggers?: {
keywords?: string[]; // 匹配关键词
intentPatterns?: string[]; // 意图正则模式
};
}实现原理
1. 读取用户输入
Hook 通过标准输入接收 JSON 格式的输入数据:
typescript
const input = readFileSync(0, 'utf-8');
const data: HookInput = JSON.parse(input);
const prompt = data.prompt.toLowerCase();2. 加载 Skill 规则
从项目目录加载 skill-rules.json 配置文件:
typescript
const projectDir = process.env.CLAUDE_PROJECT_DIR || '$HOME/project';
const rulesPath = join(projectDir, '.claude', 'skills', 'skill-rules.json');
const rules: SkillRules = JSON.parse(readFileSync(rulesPath, 'utf-8'));3. 匹配算法
对每个 Skill 进行双重匹配检测:
关键词匹配:
typescript
if (triggers.keywords) {
const keywordMatch = triggers.keywords.some(kw =>
prompt.includes(kw.toLowerCase())
);
if (keywordMatch) {
matchedSkills.push({ name: skillName, matchType: 'keyword', config });
continue;
}
}意图模式匹配:
typescript
if (triggers.intentPatterns) {
const intentMatch = triggers.intentPatterns.some(pattern => {
const regex = new RegExp(pattern, 'i');
return regex.test(prompt);
});
if (intentMatch) {
matchedSkills.push({ name: skillName, matchType: 'intent', config });
}
}4. 输出格式化
按优先级分组展示匹配的 Skills:
text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 SKILL ACTIVATION CHECK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ CRITICAL SKILLS (REQUIRED):
→ skill-name-1
📚 RECOMMENDED SKILLS:
→ skill-name-2
💡 SUGGESTED SKILLS:
→ skill-name-3
📌 OPTIONAL SKILLS:
→ skill-name-4
ACTION: Use Skill tool BEFORE responding
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━配置示例
skill-rules.json 配置示例:
json
{
"version": "1.0",
"skills": {
"database-migration": {
"type": "domain",
"enforcement": "suggest",
"priority": "high",
"promptTriggers": {
"keywords": ["migration", "migrate", "schema", "database"],
"intentPatterns": ["create.*table", "add.*column"]
}
},
"security-guardrail": {
"type": "guardrail",
"enforcement": "block",
"priority": "critical",
"promptTriggers": {
"keywords": ["password", "secret", "api key", "token"]
}
}
}
}使用方法
1. 配置 Hook
在 .claude/settings.json 中添加:
json
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node .claude/hooks/skill-activation-prompt.ts"
}
]
}
]
}
}2. 创建 Skill 规则文件
在项目目录创建 .claude/skills/skill-rules.json,定义各 Skills 的触发条件。
3. 运行效果
当用户输入包含匹配关键词的 prompt 时,Hook 会自动输出 Skill 推荐信息,提示 Claude 在响应前使用相应的 Skill 工具。
扩展建议
- 模糊匹配:可集成 fuse.js 实现模糊关键词匹配
- 语义分析:接入 Embedding API 实现基于语义的 Skill 推荐
- 使用统计:记录 Skill 使用频率,优化推荐排序
- 动态加载:支持从远程 URL 动态加载 Skill 规则
源码链接
分享: