ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 Hookify 规则拦截危险 rm -rf:Claude Code 插件实战指南

用 Hookify 规则拦截危险 rm -rf:Claude Code 插件实战指南 AI 插件开发工具插件系统【免费下载链接】claude-plugins-officialOfficial, Anthropic-managed directory of high quality Claude Code Plugins.项目地址https://gitcode.com/GitHub_Trending/cl/claude-plugins-official点击查看免费下载导读本篇指南围绕 claude-plugins-official 仓库中 Hookify 插件的核心示例规则文件dangerous-rm.local.md展开讲解如何通过轻量级 Markdown 配置为 Claude Code 建立危险命令拦截/警告防线。读完本文你将掌握 hookify 规则的 frontmatter 字段语义、warn与block两种动作的底层实现差异、Python 正则匹配语法以及如何把这条规则改造成更严格、覆盖rm -rf、dd、mkfs等破坏性命令的安全护栏。示例规则全貌拦截rm -rfHookify 插件的核心思想是无需手写复杂的 hooks.json只需在项目.claude/目录下放一个带 YAML frontmatter 的 Markdown 文件就能定义一条当 Claude 执行某些行为时警告或阻止的规则。仓库中 examples/dangerous-rm.local.md 就是这一思想的典型示例文件内容如下--- name: block-dangerous-rm enabled: true event: bash pattern: rm\s-rf action: block --- ⚠️ **Dangerous rm command detected!** This command could delete important files. Please: - Verify the path is correct - Consider using a safer approach - Make sure you have backups文件分为两部分---之间的 YAML frontmatter 是规则配置---之后是命中规则时展示给 Claude 的消息体。frontmatter 字段逐项解析字段本示例取值含义nameblock-dangerous-rm规则唯一标识会显示在告警消息的标题中**[block-dangerous-rm]**enabledtrue是否启用设为false可临时关闭而不删除文件eventbash规则生效的事件类型本规则作用于 Bash 工具命令patternrm\s-rfPython 正则表达式命中即触发规则actionblock命中后的动作warn警告但放行默认值或block阻止执行其中action的语义在 README.md 中明确说明warn展示警告消息但允许操作继续执行默认值block在 PreToolUse 阶段阻止操作执行若用于 Stop 事件则阻止会话结束。消息体部分则是给 Claude 看的提示文本引导其核对路径、考虑更安全方案、确认备份。原文使用英文你也可以按团队语言习惯替换成中文或其他语言。规则是如何被加载与执行的源码级原理理解这条规则背后的执行链路有助于你调试和设计更复杂的规则。Hookify 的执行链路由 hooks.json 中注册的四个钩子驱动钩子入口脚本触发时机PreToolUsehooks/pretooluse.py任何工具执行之前PostToolUsehooks/posttooluse.py任何工具执行之后Stophooks/stop.pyClaude 想要结束会话时UserPromptSubmithooks/userpromptsubmit.py用户提交提示词时以block-dangerous-rm为例它的实际执行路径是PreToolUse 钩子被调用Claude 即将执行 Bash 工具pretooluse.py从 stdin 读取钩子输入 JSON依据tool_name判定事件类型——Bash映射为bashEdit/Write/MultiEdit映射为file见 pretooluse.py按事件过滤加载规则load_rules(eventbash)通过glob.glob(.claude/hookify.*.local.md)扫描规则文件见 core/config_loader.py只保留enabled: true且event为bash或all的规则规则匹配RuleEngine._rule_matches逐条检查条件_check_condition应用操作符做匹配见 core/rule_engine.py输出决策若命中block规则引擎返回hookSpecificOutput.permissionDecision: denyClaude Code 据此拒绝该命令执行见 core/rule_engine.py。简单 pattern 背后的字段推断值得注意的细节是pattern是legacy 简化写法。加载器在读取 frontmatter 时会把简单pattern自动转换成一个条件Condition转换规则在 core/config_loader.py 中可见event: bash→ 字段推断为commandevent: file→ 字段推断为new_text其他事件 → 字段推断为content。因此pattern: rm\s-rf实际等价于一条完整条件field: command, operator: regex_match, pattern: rm\s-rf匹配目标是 Bash 工具输入中的command字段。这也解释了为什么规则必须至少有一个匹配条件才会生效见 core/rule_engine.py。正则匹配引擎特性规则匹配使用 Python 标准库re且在 core/rule_engine.py 中做了两点关键设计编译结果通过lru_cache(maxsize128)缓存同一模式在多次工具调用间复用降低开销编译时传入re.IGNORECASE即大小写不敏感匹配RM -RF同样会被命中。若正则本身写错抛re.error引擎会打印错误到 stderr 并返回不匹配不会导致工具被误杀见 core/rule_engine.py。另外所有钩子入口在异常时都输出systemMessage并sys.exit(0)保证钩子自身出错绝不会阻塞操作见 pretooluse.py。实操从零创建并验证这条规则第一步创建规则文件规则文件必须放在当前工作目录即启动 Claude Code 的项目根目录下的.claude/中而不是插件目录内。先确保目录存在mkdir -p .claude然后创建.claude/hookify.dangerous-rm.local.md内容直接使用上文示例。文件名遵循hookify.{rule-name}.local.md约定{rule-name}建议用 kebab-case 并以动作动词开头如block-dangerous-rm、warn-console-log。第二步立即测试无需重启Hookify 的钩子已随插件常驻新规则在下一次工具调用时即刻生效无需重启会话。让 Claude 执行一条命中规则的命令来验证Run rm -rf /tmp/test预期结果命令被阻止Claude 会看到类似以下消息来自 core/rule_engine.py 的组装逻辑**[block-dangerous-rm]** ⚠️ **Dangerous rm command detected!** ...第三步日常管理查看所有已加载规则/hookify:list交互式启用/禁用/hookify:configure或直接编辑规则文件把enabled改为false/true删除规则直接删除对应.local.md文件规则为何没有触发时按 README.md 的排查清单依次检查文件是否在项目.claude/目录、enabled是否为true、正则是否可独立验证如python3 -c import re; print(re.search(rrm\s-rf, rm -rf /tmp))、是否可通过/hookify:list看到规则被加载。从警告到拦截两种动作的取舍与组合block-dangerous-rm使用action: block属于硬拦截策略。若希望先观察 Claude 的行为再决定是否升级可把 action 改为warn或直接省略action字段默认即为warn。两种动作在引擎中的差异位于 core/rule_engine.py命中block规则 → 直接返回permissionDecision: denyPreToolUse或decision: blockStop只命中warn规则 → 仅返回systemMessage操作照常执行。引擎还会把多条命中规则的告警消息合并输出且block 规则的优先级高于 warn 规则。如果你想构建一道更全面的防线可以把单模式规则升级为多模式规则——README 中给出的 block-destructive-ops 示例同时覆盖rm -rf、dd if、mkfs、format--- name: block-destructive-ops enabled: true event: bash pattern: rm\s-rf|dd\sif|mkfs|format action: block --- **Destructive operation detected!** This command can cause data loss. Operation blocked for safety. Please verify the exact path and use a safer approach.pattern中使用|表示或这也是 README 中推荐的 pattern 写法之一。注意format这类关键词较宽泛可能误伤合法命令建议结合你的实际工作流收紧。正则语法速查与进阶条件pattern使用Python 正则语法README 中的速查表可直接用于设计自己的规则模式匹配内容示例rm\s-rfrm -rf\s匹配一个或多个空白rm -rf /tmpconsole\.log\(console.log(\.转义点号console.log(test)(eval\|exec)\(eval(或exec(eval(code)\.env$以.env结尾的文件路径.env、.env.localchmod\s777chmod 777chmod 777 file.txt常用技巧\s匹配空白、\.转义字面点号、|表示或、.*匹配任意内容、$锚定结尾。当单条 pattern 无法表达需求时可改用conditions列表规则要求所有条件同时满足才触发。仓库中 examples/sensitive-files-warning.local.md 展示了文件路径匹配敏感文件的写法而 README 中的 api-key-in-typescript 组合了两个条件file_path匹配\.tsx?$且new_text匹配密钥赋值。可用操作符参考 README.mdregex_match、contains、equals、not_contains、starts_with、ends_with。各事件下可用的匹配字段见 README.mdbash 事件有commandfile 事件有file_path、new_text、old_text、contentprompt 事件有user_prompt。其取值逻辑的完整实现位于 core/rule_engine.py例如transcript字段会读取transcript_path指向的会话记录文件全文。更进一步把规则扩展到会话结束与文件编辑dangerous-rm只作用于 bash 事件但同样的规则结构可以横向扩展到其他事件file 事件拦截或警告向代码中写入console.log(、debugger;等调试语句见 examples/console-log-warning.local.mdstop 事件要求会话结束前必须出现过测试命令否则阻止结束见 examples/require-tests-stop.local.md该示例默认enabled: false属严格强制模式按需启用prompt 事件在用户提交提示词时做合规检查。事件类型完整清单bash、file、stop、prompt、all及tool_matcher覆盖机制支持*和A|B形式匹配指定工具见 core/rule_engine.py都可以在 README 与源码中进一步查阅。适用前提与限制规则文件基于 YAML frontmatter 解析解析实现见 core/config_loader.py文件必须以---开头且包含有效 frontmatter否则加载器会告警并跳过该文件Hookify 插件要求 Python 3.7仅依赖标准库插件可通过 Claude Code Marketplace 自动发现也可用cc --plugin-dir /path/to/hookify手动加载测试见 README.md本文所述行为以当前仓库实现为准action: block在 PreToolUse/PostToolUse 事件下通过permissionDecision: deny阻止工具执行在 Stop 事件下通过decision: block阻止会话结束。掌握了block-dangerous-rm这条最小规则你就理解了 hookify 的全部核心机制frontmatter 配置、事件过滤、正则匹配、条件组装与 block/warn 决策。以此为模板你可以为团队定制任意数量的安全与质量护栏。赞分享AI 插件开发工具插件系统【免费下载链接】claude-plugins-officialOfficial, Anthropic-managed directory of high quality Claude Code Plugins.项目地址https://gitcode.com/GitHub_Trending/cl/claude-plugins-official点击查看免费下载相关推荐Apache APISIX uri-blocker 插件使用指南用正则规则精确拦截危险请求 URIApache APISIX uri blocker 插件使用指南用正则规则精确拦截危险请求 URI 导读 uri blocker 是 Apache APISIAPI网关后端云原生微服务Claude Code Hookify 插件实战指南从对话分析到 Markdown 规则文件自动拦截不想要的行为Claude Code Hookify 插件实战指南从对话分析到 Markdown 规则文件自动拦截不想要的行为 Hookify 是 Claude CodeAI 插件开发工具插件系统Apache APISIX uri-blocker 插件完全指南基于正则规则拦截危险 URI 请求Apache APISIX uri blocker 插件完全指南基于正则规则拦截危险 URI 请求 导读 uri blocker 是 Apache APISIAPI网关后端云原生微服务上一篇Umi-OCR离线 OCR3 步把扫描 PDF 变可搜索文档下一篇终极指南如何高效管理Triton模型仓库的镜像元数据与构建依赖创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表