ByteNoteByteNote

字节笔记本

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 规则

源码链接

分享: