mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-15 03:04:43 +08:00
140 lines
3.5 KiB
Markdown
140 lines
3.5 KiB
Markdown
---
|
||
name: hookify-rules
|
||
description: 当用户要求创建hookify规则、编写hook规则、配置hookify、添加hookify规则或需要关于hookify规则语法和模式的指导时,应使用此技能。
|
||
---
|
||
|
||
# 编写 Hookify 规则
|
||
|
||
## 概述
|
||
|
||
Hookify 规则是带有 YAML 前置元数据的 Markdown 文件,用于定义要监控的模式以及匹配时显示的消息。规则存储在 `.claude/hookify.{rule-name}.local.md` 文件中。
|
||
|
||
## 规则文件格式
|
||
|
||
### 基本结构
|
||
|
||
```markdown
|
||
---
|
||
name: rule-identifier
|
||
enabled: true
|
||
event: bash|file|stop|prompt|all
|
||
pattern: regex-pattern-here
|
||
---
|
||
|
||
当此规则触发时向 Claude 显示的消息。
|
||
可包含 Markdown 格式、警告、建议等内容。
|
||
```
|
||
|
||
### 前置元数据字段
|
||
|
||
| 字段 | 必填 | 值 | 描述 |
|
||
|-------|----------|--------|-------------|
|
||
| name | 是 | kebab-case 字符串 | 唯一标识符(动词优先:warn-*、block-*、require-*) |
|
||
| enabled | 是 | true/false | 无需删除即可切换 |
|
||
| event | 是 | bash/file/stop/prompt/all | 触发规则的钩子事件 |
|
||
| action | 否 | warn/block | warn(默认)显示消息;block 阻止操作 |
|
||
| pattern | 是* | 正则表达式字符串 | 要匹配的模式(\*或使用 conditions 实现复杂规则) |
|
||
|
||
### 高级格式(多条件)
|
||
|
||
```markdown
|
||
---
|
||
name: warn-env-api-keys
|
||
enabled: true
|
||
event: file
|
||
conditions:
|
||
- field: file_path
|
||
operator: regex_match
|
||
pattern: \.env$
|
||
- field: new_text
|
||
operator: contains
|
||
pattern: API_KEY
|
||
---
|
||
|
||
你正在向 .env 文件中添加 API 密钥。请确保该文件已包含在 .gitignore 中!
|
||
```
|
||
|
||
**按事件划分的条件字段:**
|
||
|
||
* bash:`command`
|
||
* file:`file_path`、`new_text`、`old_text`、`content`
|
||
* prompt:`user_prompt`
|
||
|
||
**运算符:** `regex_match`、`contains`、`equals`、`not_contains`、`starts_with`、`ends_with`
|
||
|
||
所有条件必须同时满足才能触发规则。
|
||
|
||
## 事件类型指南
|
||
|
||
### bash 事件
|
||
|
||
匹配 Bash 命令模式:
|
||
|
||
* 危险命令:`rm\s+-rf`、`dd\s+if=`、`mkfs`
|
||
* 权限提升:`sudo\s+`、`su\s+`
|
||
* 权限问题:`chmod\s+777`
|
||
|
||
### file 事件
|
||
|
||
匹配编辑/写入/多重编辑操作:
|
||
|
||
* 调试代码:`console\.log\(`、`debugger`
|
||
* 安全风险:`eval\(`、`innerHTML\s*=`
|
||
* 敏感文件:`\.env$`、`credentials`、`\.pem$`
|
||
|
||
### stop 事件
|
||
|
||
完成检查与提醒。模式 `.*` 始终匹配。
|
||
|
||
### prompt 事件
|
||
|
||
匹配用户提示内容以强制执行工作流程。
|
||
|
||
## 模式编写技巧
|
||
|
||
### 正则表达式基础
|
||
|
||
* 转义特殊字符:`.` 转义为 `\.`,`(` 转义为 `\(`
|
||
* `\s` 空白字符,`\d` 数字,`\w` 单词字符
|
||
* `+` 一个或多个,`*` 零个或多个,`?` 可选
|
||
* `|` 或运算符
|
||
|
||
### 常见陷阱
|
||
|
||
* **过于宽泛**:`log` 会匹配 "login"、"dialog"——请使用 `console\.log\(`
|
||
* **过于具体**:`rm -rf /tmp`——请使用 `rm\s+-rf`
|
||
* **YAML 转义**:使用无引号模式;带引号的字符串需要 `\\s`
|
||
|
||
### 测试
|
||
|
||
```bash
|
||
python3 -c "import re; print(re.search(r'your_pattern', 'test text'))"
|
||
```
|
||
|
||
## 文件组织
|
||
|
||
* **位置**:项目根目录下的 `.claude/` 目录
|
||
* **命名**:`.claude/hookify.{descriptive-name}.local.md`
|
||
* **Gitignore**:将 `.claude/*.local.md` 添加到 `.gitignore`
|
||
|
||
## 命令
|
||
|
||
* `/hookify [description]` - 创建新规则(无参数时自动分析对话)
|
||
* `/hookify-list` - 以表格形式查看所有规则
|
||
* `/hookify-configure` - 交互式切换规则开关
|
||
* `/hookify-help` - 完整文档
|
||
|
||
## 快速参考
|
||
|
||
最小可行规则:
|
||
|
||
```markdown
|
||
---
|
||
name: my-rule
|
||
enabled: true
|
||
event: bash
|
||
pattern: dangerous_command
|
||
---
|
||
此处显示警告信息
|
||
```
|