plugins/hookify/skills/writing-rules/SKILL.md
--- name: writing-rules description: 此技能应在编写/创建/修改 hookify hook 规则文件时使用. 触发场景: 用户请求创建 hook/编写 hook 规则/设置 hookify 配置/为危险命令或敏感文件添加警告规则. 示例触发语: "帮我创建一个 hook 规则防止删除重要文件"/"如何设置 hook 在编辑 .env 时发出警告"/"编写一条 hook 规则阻止 console.log" version: 0.1.0 --- # 编写 Hookify 规则 ## 概述 hookify 规则是带有 YAML frontmatter 的 markdown 文件, 定义要监控的模式以及匹配时显示的消息. 规则存储在 `.claude/hookify.{rule-name}.local.md` 文件中. ## 规则文件格式 ### 基本结构 ```markdown --- name: rule-identifier enabled: true event: bash|file|stop|prompt|all pattern: re
npx skillsauth add phpmac/skills plugins/hookify/skills/writing-rulesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
hookify 规则是带有 YAML frontmatter 的 markdown 文件, 定义要监控的模式以及匹配时显示的消息. 规则存储在 .claude/hookify.{rule-name}.local.md 文件中.
---
name: rule-identifier
enabled: true
event: bash|file|stop|prompt|all
pattern: regex-pattern-here
---
规则触发时显示给 Claude 的消息.
可以包含 markdown 格式, 警告, 建议等.
name (必填): 规则的唯一标识
warn-dangerous-rm, block-console-logenabled (必填): 布尔值, 启用/禁用
true: 规则活跃false: 规则禁用 (不会触发)event (必填): 触发的 hook 事件
bash: Bash 工具命令file: Edit, Write, MultiEdit 工具stop: 当 Agent 想要停止时prompt: 当用户提交提示时all: 所有事件action (可选): 规则匹配时的操作
warn: 显示消息但允许操作 (默认)block: 阻止操作 (PreToolUse) 或停止会话 (Stop 事件)warnpattern (简单格式): 要匹配的正则表达式
示例:
event: bash
pattern: rm\s+-rf
用于需要多个条件的复杂规则:
---
name: warn-env-file-edits
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.env$
- field: new_text
operator: contains
pattern: API_KEY
---
你正在向 .env 文件添加 API 密钥. 确保此文件已加入 .gitignore!
条件字段:
field: 要检查的字段
commandfile_path, new_text, old_text, contentoperator: 匹配方式
regex_match: 正则表达式匹配contains: 子字符串检查equals: 精确匹配not_contains: 子字符串不得存在starts_with: 前缀检查ends_with: 后缀检查pattern: 要匹配的模式或字符串所有条件必须同时匹配, 规则才会触发.
frontmatter 之后的 markdown 内容是规则触发时显示给 Claude 的消息.
好的消息:
示例:
**检测到调试代码!**
你正在向生产代码添加调试语句.
**为什么这很重要:**
- 调试日志不应发布到生产环境
- 可能暴露敏感数据
- 影响浏览器性能
**替代方案:**
- 使用合适的日志库
- 提交前移除
- 使用条件调试构建
匹配 Bash 命令模式:
---
event: bash
pattern: sudo\s+|rm\s+-rf|chmod\s+777
---
检测到危险命令!
常用模式:
rm\s+-rf, dd\s+if=, mkfssudo\s+, su\s+chmod\s+777, chown\s+root匹配 Edit/Write/MultiEdit 操作:
---
event: file
pattern: debugger;|print\(
---
检测到可能有问题的代码模式!
匹配不同字段:
---
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.tsx?$
- field: new_text
operator: regex_match
pattern: debugger;
---
TypeScript 文件中检测到调试器语句!
常用模式:
debugger, print\(innerHTML\s*=, dangerouslySetInnerHTML\.env$, credentials, \.pem$node_modules/, dist/, build/当 Agent 想要停止时匹配 (完成检查):
---
event: stop
pattern: .*
---
停止前, 请验证:
- [ ] 已运行测试
- [ ] 构建成功
- [ ] 文档已更新
用途:
匹配用户提示内容 (高级):
---
event: prompt
conditions:
- field: user_prompt
operator: contains
pattern: deploy to production
---
生产部署清单:
- [ ] 测试是否通过?
- [ ] 是否已由团队审查?
- [ ] 监控是否就绪?
字面字符: 大多数字符匹配自身
rm 匹配 "rm"debugger 匹配 "debugger"特殊字符需要转义:
. (任意字符) -> \. (字面点号)( ) -> \( \) (字面括号)[ ] -> \[ \] (字面方括号)常用元字符:
\s - 空白字符 (空格, 制表符, 换行)\d - 数字 (0-9)\w - 单词字符 (a-z, A-Z, 0-9, _). - 任意字符+ - 一个或多个* - 零个或多个? - 零个或一个| - 或示例:
rm\s+-rf 匹配: rm -rf, rm -rf
debugger; 匹配: debugger;
chmod\s+777 匹配: chmod 777, chmod 777
API_KEY\s*= 匹配: API_KEY=, API_KEY =
使用前先测试正则表达式:
python3 -c "import re; print(re.search(r'your_pattern', 'test text'))"
或使用在线正则测试工具 (regex101.com, 选择 Python 模式).
过于宽泛:
pattern: log # 匹配 "log", "login", "dialog", "catalog"
更好: debugger;|print\(
过于具体:
pattern: rm -rf /tmp # 仅匹配精确路径
更好: rm\s+-rf
转义问题:
"pattern" 需要双反斜杠 \\spattern: \s 直接使用位置: 所有规则在 .claude/ 目录
命名: .claude/hookify.{描述性名称}.local.md
Gitignore: 将 .claude/*.local.md 添加到 .gitignore
好的命名:
hookify.dangerous-rm.local.mdhookify.console-log.local.mdhookify.require-tests.local.mdhookify.sensitive-files.local.md不好的命名:
hookify.rule1.local.md (不够描述性)hookify.md (缺少 .local)danger.local.md (缺少 hookify 前缀).claude/hookify.{name}.local.md 文件.local.md 文件临时: 在 frontmatter 中设置 enabled: false
永久: 删除 .local.md 文件
查看 ${CLAUDE_PLUGIN_ROOT}/examples/ 中的完整示例:
dangerous-rm.local.md - 阻止危险的 rm 命令console-log-warning.local.md - 警告调试语句sensitive-files-warning.local.md - 警告编辑 .env 文件最简规则:
---
name: my-rule
enabled: true
event: bash
pattern: dangerous_command
---
警告消息写在这里
带条件的规则:
---
name: my-rule
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.ts$
- field: new_text
operator: contains
pattern: any
---
警告消息
事件类型:
bash - Bash 命令file - 文件编辑stop - 完成检查prompt - 用户输入all - 所有事件字段选项:
commandfile_path, new_text, old_text, contentuser_prompt操作符:
regex_match, contains, equals, not_contains, starts_with, ends_withdata-ai
当用户提到 Linux 提权/本地提权/local privilege escalation/获取root权限/内核漏洞利用/LPE/SUID/sudo滥用/容器逃逸/权限提升检测; 或要求在Linux系统上从普通用户提升到root权限; 或查询CVE提权漏洞(如Dirty Pipe/CopyFail/Dirty Frag/PwnKit/Looney Tunables); 或需要安全加固建议时应使用此技能
tools
当用户要求 "计算仓位", "仓位管理", "止损比例", "凯利公式", "盈亏比", "资金管理", "半凯利", "反马丁格尔", "固定风险", "position sizing", "策略评估", "策略体检", "SQN", "夏普比率", "卡玛比率", "期望值", "获利因子", "MAE", "MFE", "R乘数", "索提诺", "蒙特卡洛", "样本外测试", "策略回测" 或需要计算合约交易的最优仓位/止损/资金分配/策略质量评估时应使用此技能. 覆盖仓位管理/策略评估/交易解剖/压力测试的完整框架. 即使用户只是提到 "这笔交易该下多少", "策略好不好", "复盘怎么算" 等模糊描述也应触发.
development
当用户要求 "提取API", "逆向APK", "分析APP接口", "提取业务端点", "React Native逆向", "Flutter逆向" 或需要从移动应用提取后端API信息时使用此技能. 覆盖APK解包/JS bundle分析/kernel_blob.bin分析/H5页面参数发现/Spring Boot API验证全流程. 支持React Native和Flutter两种框架.
research
当用户要求 "推荐VPS", "选服务器", "对比服务商", "建站VPS", "便宜VPS", "VPS推荐" 或需要研究/筛选/对比VPS服务商时应使用此技能. 从 hostloc/lowendtalk/lowendbox/测评站搜集真实评测数据, 交叉验证后给出可溯源排名.