ECC 的 /hookify-list 命令实战:列出与审计所有已配置的 Hookify 拦截规则
【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC
在 ECC(The agent harness performance optimization system)中,hookify 是一套通过声明式规则文件拦截 Claude Code 等 Agent 不当行为的防护机制,而/hookify-configure与其配套的/hookify命令负责创建规则、/hookify-list则负责回答一个关键运维问题:当前项目里到底配置了哪些拦截规则、哪些处于启用状态、分别匹配什么模式。读完本文,你将掌握/hookify-list的完整工作流程(查找规则文件、解析 frontmatter、渲染审计表格、给出管理提示)、hookify 规则文件的字段语义与事件类型,以及如何配合其他命令完成规则的全生命周期管理。
1. /hookify-list 的定位:hookify 三件套中的"审计视图"
在 ECC 的命令体系中,hookify 相关命令共三个,注册信息见 docs/COMMAND-REGISTRY.json:
| 命令 | 职责 | 注册描述 |
|---|---|---|
/hookify [description] | 创建新规则 | Create hooks to prevent unwanted behaviors from conversation analysis or explicit instructions |
/hookify-list | 列出全部已配置规则 | List all configured hookify rules |
/hookify-configure | 交互式启停规则 | Enable or disable hookify rules interactively |
/hookify-list本身是一个只读命令:它不修改任何文件,只负责"发现 + 解析 + 展示 + 提示"。在 docs/COMMAND-REGISTRY.json 中,该命令的type被标记为general,primaryAgents为空数组,意味着它不绑定特定 Agent,可在任意会话中直接调用。
2. /hookify-list 的四步工作流程
以下内容完整继承自命令定义 commands/hookify-list.md,并结合仓库其他文档做了参数层面的补充。
Step 1:查找所有规则文件
命令的第一步是在项目根目录的.claude/下按 glob 模式发现规则文件:
.claude/hookify.*.local.md命名约定有三个要点(见 skills/hookify-rules/SKILL.md 的 File Organization 章节):
- 位置:项目根目录的
.claude/目录; - 命名:
hookify.{descriptive-name}.local.md,其中descriptive-name是规则标识符; - 版本控制约定:
.local.md后缀表明这是本地生效的规则,建议把.claude/*.local.md加入.gitignore,避免个人化拦截规则污染仓库共享配置。
Step 2:解析每个文件的 frontmatter
对发现的每个规则文件,/hookify-list需要读取其 YAML frontmatter 中的五个字段:
| 字段 | 必填 | 取值 | 语义 |
|---|---|---|---|
name | 是 | kebab-case 字符串 | 规则唯一标识符,建议动词开头(warn-*、block-*、require-*) |
enabled | 是 | true/false | 启停开关,可"停用而不删除" |
event | 是 | bash/file/stop/prompt/all | 决定规则挂接到哪类 hook 事件 |
action | 否 | warn/block | warn(默认)仅提示;block阻止操作继续 |
pattern | 是* | 正则字符串 | 匹配模式(*复杂规则可改用 conditions 多条件结构) |
action字段在 commands/hookify-list.md 中虽被读取,但默认行为是warn:触发时只显示正文消息,不中断流程;只有显式写成block才会真正拦截。
Step 3:渲染为审计表格
解析完成后,/hookify-list将结果渲染为如下固定列结构的表格(列定义直接来自命令定义):
| Rule | Enabled | Event | Pattern | File |
|---|---|---|---|---|
| 规则名 | 是否启用 | 事件类型 | 匹配模式 | 规则文件路径 |
一个典型输出示例(规则文件为假设内容,仅用于展示表格形态):
| Rule | Enabled | Event | Pattern | File |
|---|---|---|---|---|
warn-rm-rf | true | bash | rm\s+-rf | .claude/hookify.warn-rm-rf.local.md |
block-env-write | false | file | \.env$ | .claude/hookify.block-env-write.local.md |
这张表格的设计意图是"一眼审计":Enabled列快速定位被静默禁用的规则,Event列判断规则的触发面,File列给出可直接打开编辑的落盘路径,避免审计时再反查文件名。
Step 4:输出计数并提示后续操作
命令的最后一步是汇总规则总数,并提醒用户:规则的启用/禁用状态可以稍后通过/hookify-configure交互式修改。这一步把只读审计和写操作解耦——/hookify-list从不改动enabled:字段,写权限统一收口到/hookify-configure(其流程是:同样先发现全部hookify.*.local.md文件、读取当前状态、交互询问要切换哪些规则、更新enabled:字段、最后确认变更,见 commands/hookify-configure.md)。
3. 规则文件的完整格式:/hookify-list 解析对象的解剖
理解/hookify-list展示的每一列,前提是理解被解析的文件本身。规则文件是"YAML frontmatter + 正文提示消息"结构的 Markdown 文件,完整格式见 commands/hookify-help.md 与 skills/hookify-rules/SKILL.md:
--- name: descriptive-name enabled: true event: bash|file|stop|prompt|all action: block|warn pattern: "regex pattern to match" --- 规则触发时显示的消息。 支持多行与 Markdown 格式。正文部分即规则命中后展示给 Agent / 用户的提示文案,可包含警告、建议与 Markdown 排版。
事件类型(event 字段)语义
/hookify-list表格中的Event列取以下五个值之一,各自对应 Claude Code 的不同 hook 触发点:
| event | 触发时机 | pattern 匹配对象 |
|---|---|---|
bash | Bash 工具调用时 | 完整命令字符串 |
file | Write/Edit 文件工具调用时 | 文件路径(或多条件下的file_path/new_text等字段) |
stop | 会话结束时 | .*恒匹配,用于收尾检查与提醒 |
prompt | 用户消息提交时 | 用户输入内容 |
all | 所有事件 | 依事件而定 |
进阶结构:conditions 多条件
除了单pattern,规则文件还支持conditions数组表达"多字段、多操作符"的复合匹配,所有条件同时满足才触发。字段可用范围按事件划分:bash事件用command;file事件用file_path、new_text、old_text、content;prompt事件用user_prompt。操作符包括regex_match、contains、equals、not_contains、starts_with、ends_with。
--- 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 --- You're adding an API key to a .env file. Ensure this file is in .gitignore!这类复杂规则在/hookify-list的表格中会退化展示event与文件路径(pattern列无单值可显示),这正是File列保留完整路径的价值:审计者点开文件即可看到完整 conditions。
模式编写与校验技巧
skills/hookify-rules/SKILL.md 的 Pattern Writing Tips 章节给出了可直接套用的经验:
- 转义特殊字符:
.写\.,(写\(;\s空白、\d数字、\w单词字符;+一次或多次、*零次或多次、?可选、|或运算; - 过宽的陷阱:
log会误伤 "login"、"dialog",应写console\.log\(; - 过窄的陷阱:
rm -rf /tmp只能命中单一路径,应写rm\s+-rf; - YAML 转义注意:不带引号的 pattern 中
\s直接书写即可;带引号的字符串需要\\s; - 部署前先本地验证正则:
python3 -c "import re; print(re.search(r'your_pattern', 'test text'))"。
常见危险模式参考(bash 事件):rm\s+-rf、dd\s+if=、mkfs、sudo\s+、chmod\s+777;文件安全参考(file 事件):eval\(、innerHTML\s*=、\.env$、\.pem$。
4. 与创建/配置命令的协同:规则全生命周期
/hookify-list不是孤立命令,它是 hookify 规则生命周期中的"审计节点":
- 创建(commands/hookify.md):
/hookify [行为描述]生成规则。不带参数时,它会调用 conversation-analyzer Agent 分析当前会话,挖掘"值得预防的行为"——包括显式纠正、对重复错误的挫败反应、被回退的改动、反复出现的同类问题;随后向用户展示行为描述、拟议事件类型、拟议模式与拟议动作,用户确认后落盘为.claude/hookify.{name}.local.md。 - 审计(本文主题,commands/hookify-list.md):只读列出全部规则、计数、提示管理入口。
- 启停(commands/hookify-configure.md):交互式切换
enabled:字段;/hookify-list结尾的提示语("remind the user that/hookify-configurecan change state later")正是把审计结果导向此步骤。
三者的职责边界清晰:/hookify写新文件、/hookify-configure改已有文件、/hookify-list只读——这种设计让"查看"这一最高频操作零风险。
5. 仓库中的佐证与扩展入口
- 命令注册:docs/COMMAND-REGISTRY.json 中
hookify、hookify-list、hookify-configure、hookify-help四条命令均有登记,路径分别指向commands/hookify.md、commands/hookify-list.md、commands/hookify-configure.md、commands/hookify-help.md,可据此核对命令与定义文件的一一对应关系; - 打包分发:package.json 的打包清单中包含
skills/hookify-rules/,说明规则编写技能随插件一起分发,安装后即可在会话中请求"写一条 hookify 规则"获得语法与模式指导; - 插件生态定位:plugins/README.md 将
hookify列为推荐的 Development 类插件("Create hooks conversationally");the-shortform-guide.md 也给出了同样的建议——用hookify插件以对话方式创建 hook,替代手写 hook JSON,并在其 hook 章节展示了 PostToolUse hook 的反馈示例; - 帮助命令:
/hookify-help(commands/hookify-help.md)提供事件类型、文件格式、命令清单与模式技巧的完整速查,是/hookify-list表格各列取值范围的权威出处。
6. 适用前提与小结
适用前提:hookify 规则文件位于项目根目录的.claude/下,且遵循hookify.*.local.md命名;规则通过 Claude Code 的 hook 系统在运行时消费,/hookify-list本身只做发现、解析与展示,不触达 hook 执行链路。
小结:/hookify-list是 ECC hookify 体系中的只读审计命令,其工作流为"glob 发现hookify.*.local.md→ 解析name/enabled/event/action/pattern五个 frontmatter 字段 → 渲染五列审计表格(Rule | Enabled | Event | Pattern | File)→ 输出计数并提示用/hookify-configure变更状态"。掌握它与/hookify、/hookify-configure的分工,再结合 skills/hookify-rules/SKILL.md 中的规则格式、事件类型与模式编写技巧,即可在 Agent 驱动的开发流程中建立一套可审计、可启停的行为拦截规则库。
【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考