关于 hook-manager
用于管理 b-open-io core 插件所带钩子的技能,适用于 Claude Code、Codex 和 Grok Build 用户。它读取实时清单,并通过分层配置启用或停用钩子,也提供设置与故障诊断流程。
主要功能
- 01读取插件中的钩子清单
- 02按项目或用户配置钩子开关
- 03引导首次设置与分层选择
- 04诊断配置判定和运行前提
适用场景
- 01首次配置插件钩子的启用状态
- 02按项目调整工作流钩子
- 03排查钩子为何拦截或跳过操作
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ b-open-io/ prompts --skill hook-manager安装后在 Claude Code 中输入/hook-manager确认已加载。
附带文件.clawnet/unsigned-skill.jsonREADME.md
详细介绍
Hook Manager
管理 Claude Code、Codex 和 Grok Build 随核心插件附带的钩子。清单的权威来源是已安装插件中的 hooks/manifest.json——应实时读取,而不要相信记忆中的列表:
cat "$(ls -d ~/.claude/plugins/cache/b-open-io/core/*/ | sort -V | tail -1)hooks/manifest.json"
每个条目都包含 name、event、matcher、tier、runtimes、summary 和
description。安装插件时会自动注册钩子;此技能用于控制哪些钩子实际运行。
配置文件
每个钩子的启用或禁用状态保存在 JSON 配置文件中。解析顺序如下(首个对某个钩子给出明确 true/false 判定的文件优先):
$BOPEN_HOOKS_CONFIG— 显式覆盖(测试、脚本)<project>/.claude/bopen-hooks.json— 项目级(Claude)<project>/.grok/bopen-hooks.json— 项目级(Grok)~/.claude/core/hooks-config.json— 用户级(Claude)~/.grok/core/hooks-config.json— 用户级(Grok)
{
"version": 1,
"hooks": {
"bouncer": true,
"damage-control": true,
"publish-gate": true,
"agent-browser-solo": true,
"session-context": true,
"hammertime": true,
"browser-intent": true
}
}
只有显式设置为 false 才会禁用钩子。文件缺失、键缺失或 JSON 无法解析,都表示启用——配置出错绝不能悄无声息地关闭防护。更改会在下一次调用钩子时生效;无需重启。
首次设置([BOPEN-HOOKS-SETUP] 指令)
当会话上下文中包含 [BOPEN-HOOKS-SETUP] 时,表示用户尚无配置。不要打断他们的任务;在自然停顿时提供设置选项。流程如下:
- 读取清单(使用上面的命令),并通过 AskUserQuestion(multiSelect)按两个层级展示钩子:
- 防护(建议启用):
tier: "guard"的条目——可防止工作丢失、机密泄露和未关联工单的发布。 - 工作流(按偏好选择):
tier: "workflow"的条目。
- 防护(建议启用):
- 运行下面的前置条件检查,并将检查结果纳入建议(例如,未安装 agent-browser 时,agent-browser-solo 会静默回退到原生 WebFetch——仍可安全地保持启用)。
- 将完整的钩子映射写入
~/.claude/core/hooks-config.json(Claude/Codex)或~/.grok/core/hooks-config.json(Grok)——必须为每个钩子显式填写布尔值,即使全部使用默认值也一样。写入该文件后,设置提示才会永久消失。
启用 / 禁用钩子
使用 Read 和 Write 工具编辑用户配置(或项目级变更对应的项目配置)——读取文件、更改布尔值,然后写回。文件不存在时,根据上面的模板创建。绝不要编辑插件缓存中的文件;更新会覆盖这些文件。
每次写入配置都需要确认:damage-control 将这些文件视为 ask 级,因此未经用户明确同意,绝不能解除防护(在 Codex 上,写入会被直接拒绝——请用户自行编辑文件)。这是有意设计;不要绕过此机制。
禁用防护钩子前先提醒用户:bouncer 会阻止 git reset --hard 这类可能导致工作丢失的操作,damage-control 会对 .env 等路径强制实施零访问限制,publish-gate 会拦截未关联工单的 npm/链上发布。是否禁用由用户决定,但要明确说明禁用后会失去哪些保护。
诊断
当钩子行为异常,或用户询问“为什么 X 被拦截 / 跳过”时:
# Which config verdict applies to a hook?
for f in "$BOPEN_HOOKS_CONFIG" ./.claude/bopen-hooks.json ./.grok/bopen-hooks.json ~/.claude/core/hooks-config.json ~/.grok/core/hooks-config.json; do
[ -f "$f" ] && echo "$f: $(jq -r '.hooks["<name>"] // "no verdict"' "$f")"
done
# Prerequisites
command -v jq || echo "jq missing — hooks skip JSON parsing without it"
command -v agent-browser || echo "agent-browser missing — agent-browser-solo falls back to native WebFetch"
[ -n "$LINEAR_API_KEY" ] || echo "LINEAR_API_KEY unset — publish-gate denies gated publishes"
command -v python3 || echo "python3 missing — hammertime and JSON escaping degrade"
- 硬性拒绝会以结构化权限拒绝的形式呈现给模型;在 Codex 运行时中,它们会以退出码 2 的 stderr JSON 形式到达。这两种情况都是有意设计。
- hammertime 也有自己的控制项——
Skill(core:hammertime)和hammertime:manageskill——可用于在启用 / 禁用之外调整规则级设置。 - 每个钩子的权威行为说明都在插件
hooks/目录中的对应脚本头部;在猜测之前先读取。
此技能绝不会做什么
- 绝不将钩子文件复制到
~/.claude——钩子随插件一起提供,并通过claude plugin update core@b-open-io更新。 - 绝不编辑
hooks/*.sh、claude-hooks.json或插件缓存中的任何内容。 - 禁用防护钩子前,绝不隐瞒它原本提供的保护。