让 Claude Code 的 Skills 激活率从 25% 飙升到 90%+。
Claude Code 默认情况下,AI 主动调用 Skills 的概率只有约 25%。你精心编写的项目规范,有 75% 的概率被直接忽略。
本质原因:AI 有能力,但缺乏"制度约束"。Skills 只是"可选参考",AI 会根据自己的判断决定是否调用。
通过 3 个生命周期钩子,在 AI 工作的每个关键节点强制执行正确的动作:
用户提问
↓
[Hook] skill-force-eval.js ← 触发词预匹配,强制评估技能
↓
AI 执行任务(调用工具、写代码)
↓
[Hook] pre-tool-use.js ← 拦截危险命令,敏感操作二次确认
↓
AI 完成回答
↓
[Hook] stop.js ← 分析变更,推荐下一步操作
claude-hooks-kit/
├── hooks/
│ ├── skill-force-eval.js # 强制技能评估(核心)
│ ├── pre-tool-use.js # 安全防护
│ ├── stop.js # 完成总结
│ └── skills-registry.json # 技能注册表(触发词 + 分类)
├── templates/
│ └── SKILL-TEMPLATE.md # SKILL.md 编写模板
├── settings.example.json # settings.json 配置示例
└── README.md
挂载事件:UserPromptSubmit(用户每次提交问题时自动触发)
工作原理:三级过滤,精准且省 token
用户输入 "帮我写一个 Python 爬虫"
↓
第 1 级:逃生通道检查
- 斜杠命令(/dev、/tdd)→ 跳过
- 简短闲聊(你好、ok)→ 跳过
↓
第 2 级:触发词预匹配(零 AI 开销)
- "python" 命中 → 开发规范分类 ✓
- "爬虫" 命中 → 第三方集成分类 ✓
- 其他分类 → 未命中,跳过
↓
第 3 级:大分类精准过滤(>15 个技能的分类)
- 第三方集成有 28 个技能,但只保留名称匹配的
- "爬虫" → apify-automation ✓, firecrawl-automation ✓
- 其余 26 个 → 跳过
↓
输出:只注入 2 个命中分类、11 个相关技能(而非全部 72 个)
Token 消耗对比:
| 方案 | 单次注入 | 40 条消息对话 | 占 200K 上下文 |
|---|---|---|---|
| 全量注入 102 个技能 | ~1500 tokens | 60,000 tokens | 30% |
| 两级评估(分类摘要) | ~400 tokens | 16,000 tokens | 8% |
| 触发词预匹配(本方案) | ~100-400 tokens | 4,000-16,000 tokens | 2-8% |
| 无命中时 | ~50 tokens | 2,000 tokens | 1% |
逃生通道:斜杠命令和简短闲聊自动跳过,不浪费 token。
挂载事件:PreToolUse(matcher: Bash)
拦截 AI 执行的每一条 Bash 命令,分两级处理:
直接阻止(block):
rm -rf /、rm -rf ~/、rm -rf .drop database、truncate table、delete from ... ;(无 WHERE)format、mkfs、dd if=... of=/dev/chmod -R 777 /- fork bomb
:(){ :|:& };: curl ... | sh、wget ... | sh
二次确认(ask):
rm -rf删除文件/目录git push --force、git reset --hard、git clean -fnpm publishdocker system prunekill -9、pkillsystemctl stop/disable/restart
挂载事件:Stop(AI 完成回答后)
自动执行:
- 清理临时文件(如 Windows 兼容问题产生的
nul文件) - 检测
git status变更文件数量和类型 - 按文件类型智能推荐下一步操作:
- 有后端代码但无测试 → 建议
/tdd或/code-review - 有 SQL 变更 → 提醒同步数据库
- 有配置文件变更 → 提醒检查敏感信息
- 新增文件较多 → 建议代码审查
- 变更多但无文档 → 建议
/update-docs
- 有后端代码但无测试 → 建议
核心配置文件,定义了所有技能的分类和触发词:
{
"开发规范": {
"_triggers": ["python", "go", "java", "前端", "后端", "api", ...],
"coding-standards": "通用编码规范/风格",
"python-patterns": "Python 开发模式",
...
},
"框架": {
"_triggers": ["django", "spring", "docker", "postgres", ...],
...
}
}每个分类包含:
_triggers:触发词数组,用于快速预匹配- 技能键值对:
"技能名": "描述"
自定义方法:编辑此文件即可增删技能,无需改动 JS 代码。
# 克隆仓库
git clone https://github.com/YOUR_USERNAME/claude-hooks-kit.git
# 复制 hooks 到 Claude Code 配置目录
mkdir -p ~/.claude/hooks
cp hooks/* ~/.claude/hooks/
# 复制模板(可选)
mkdir -p ~/.claude/templates
cp templates/* ~/.claude/templates/将 settings.example.json 中的 hooks 字段合并到你的 ~/.claude/settings.json:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/skill-force-eval.js"
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/pre-tool-use.js"
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/stop.js"
}
]
}
]
}
}编辑 ~/.claude/hooks/skills-registry.json,添加你自己的技能和触发词。
重启会话即可生效。
使用 templates/SKILL-TEMPLATE.md 作为模板:
---
name: my-skill
description: |
一句话说明。
触发词:关键词1、关键词2
---
# 技能名称
## 核心规范
(代码模板 > 文字说明)
## 禁止事项
- ❌ 禁止 xxx
## 检查清单
- [ ] 是否遵循规范编写原则(来自抓蛙师的实践):
- 400-600 字最佳,太长反而拖累
- 代码模板优先于文字说明
- 用 ✅/❌ 对比正确和错误做法
- 触发词要多样化,覆盖用户各种表达方式
本项目的设计思路来源于 抓蛙师 的 Claude Code 工程化实践系列:
MIT