大模型应用
用 PreToolUse 钩子阻止 AI 代理用…
在 Claude Code 项目中配置 PreToolUse 钩子,拦截 AI 代理执行带 --no-verify、--no-gpg-sign 等绕过标志的 git 命令。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 PreToolUse 钩子阻止 AI特定
解决思路
- 在项目根目录创建或更新 .claude/settings.json,在 hooks.PreToolUse 数组中添加一条 matcher 为 "Bash" 的钩子配置。
- 钩子的 command 使用 printf '%s' "$TOOL_INPUT" 安全传入待执行命令(避免 echo 对特殊字符的坑),再用 grep -qE '(^|&&|;|\|)\s*git\s+.*--(no-verify|no-gpg-sign)' 检测是否包含绕过标志。
- 检测到绕过标志时,向 stderr 输出错误提示(如 'BLOCKED: --no-verify and --no-gpg-sign flags are not allowed. Run the commit without bypass flags so that pre-commit hooks execute properly.')并以 exit 2 退出,使 Claude Code 完全拒绝该工具调用。
- 未检测到绕过标志时以 exit 0 退出,命令正常执行;exit 1 表示报错但工具调用仍会继续(仅显示警告)。
- 仅匹配 Bash 工具调用,不影响 Read、Edit、Grep 等其他工具。
- 若需全局生效,把同样的配置写入 ~/.claude/settings.json;若仅限单项目,写入项目根的 .claude/settings.json。
- 安装后验证:执行 git commit --no-verify -m "test" 应被拦截,执行 git commit -m "test" 应正常通过。
- 如需拦截更多标志(如 --force、--force-with-lease),扩展 grep 正则中的标志列表,例如 --(no-verify|no-gpg-sign|force-with-lease|force)。
- 可与其他 PreToolUse 钩子并列组合,例如再加一条拦截 rm -rf / 的钩子。
- 把 .claude/settings.json 提交到版本控制,让所有团队成员共享该钩子。
- 在项目贡献指南/onboarding 文档中说明该钩子,让开发者理解为何绕过标志被禁止。
- 确保项目本身配置了有意义的 pre-commit 钩子,该钩子只是保证它们会被执行。
- 设置完成后用一次测试提交主动触发钩子,确认其生效。
适用边界 · 注意事项
- 项目未使用 Claude Code 或不支持 PreToolUse 钩子机制时无效。
- 项目本身没有配置任何 pre-commit 钩子时,拦截绕过标志意义不大。
- 需要临时合法绕过钩子(如紧急修复)时会被一并阻止,需另行处理。