【Bug已解决】Claude hooks not executing / Pre-post hooks skipped — Claude Hooks 不执行解决方案

【Bug已解决】Claude hooks not executing / Pre-post hooks skipped — Claude Hooks 不执行解决方案
【Bug已解决】Claude: hooks not executing / Pre/post hooks skipped — Claude Hooks 不执行解决方案1. 问题描述Claude Code 配置的 hooks钩子未执行或被跳过# Hooks 不执行 $ cat .claude/settings.json { hooks: { PreToolUse: npm run lint, PostToolUse: npm run format } } $ claude --auto-approve 修改 src/index.js # lint 和 format 没有执行 # 或 hook 命令失败 $ claude task Error: Hook PreToolUse failed npm run lint exited with code 1. # 或 hook 超时 $ claude task Error: Hook timeout PreToolUse hook exceeded 30000ms. # 或 hook 配置不识别 $ claude Error: Unknown hook event: pre_tool_use # 配置名称错误这个问题在以下场景中特别常见hook 配置格式错误hook 事件名称错误hook 命令不存在hook 命令超时配置文件不被加载版本不支持 hooks2. 原因分析原因分类表原因分类具体表现占比配置格式错误JSON约 30%事件名错误pre_tool_use约 25%命令不存在EACCES约 20%超时30s约 10%配置不加载位置约 10%版本不支持旧版约 5%3. 解决方案方案一检查 hook 配置格式最推荐# 步骤 1检查配置 python3 -m json.tool .claude/settings.json # 步骤 2正确格式 cat .claude/settings.json EOF { hooks: { PreToolUse: [npm run lint], PostToolUse: [npm run format] } } EOF # 步骤 3验证 JSON python3 -m json.tool .claude/settings.json # 步骤 4测试 claude --auto-approve 修改 src/index.js方案二使用正确的事件名# 步骤 1查看支持的事件名 claude --help | grep -i hook # 步骤 2正确的事件名 # PreToolUse不是 pre_tool_use # PostToolUse不是 post_tool_use # Notification # Stop # 步骤 3更新配置 cat .claude/settings.json EOF { hooks: { PreToolUse: [npm run lint], PostToolUse: [npm run format], Stop: [echo Done] } } EOF # 步骤 4验证 claude --debug 21 | grep -i hook方案三检查 hook 命令# 步骤 1手动测试 hook 命令 npm run lint # 如果报错修复 lint # 步骤 2检查命令是否存在 which npm which eslint # 步骤 3使用绝对路径 cat .claude/settings.json EOF { hooks: { PreToolUse: [/usr/local/bin/npm run lint] } } EOF # 步骤 4验证 claude --auto-approve 修改 src/index.js方案四增加 hook 超时# 步骤 1设置 hook 超时 cat .claude/settings.json EOF { hooks: { PreToolUse: [npm run lint], hookTimeout: 60000 } } EOF # 步骤 2或环境变量 export CLAUDE_HOOK_TIMEOUT60000 # 步骤 3永久设置 echo export CLAUDE_HOOK_TIMEOUT60000 ~/.zshrc source ~/.zshrc # 步骤 4验证 claude --auto-approve task方案五在根目录创建配置# 步骤 1确保在项目根目录 cd /project ls .claude/settings.json # 步骤 2如果不存在创建 mkdir -p .claude cat .claude/settings.json EOF { hooks: { PreToolUse: [npm run lint], PostToolUse: [npm run format] } } EOF # 步骤 3验证加载 claude --debug 21 | grep -i hook\|settings # 步骤 4测试 claude --auto-approve 修改 src/index.js方案六更新版本# 步骤 1检查版本 claude --version # 步骤 2更新 npm update -g anthropic-ai/claude-code # 步骤 3验证 hooks 支持 claude --help | grep -i hook # 步骤 4测试 claude --auto-approve task claude --debug 21 | grep -i hook4. 各方案对比总结方案适用场景推荐指数难度方案一配置格式格式⭐⭐⭐⭐⭐低方案二事件名名称⭐⭐⭐⭐⭐低方案三检查命令命令⭐⭐⭐⭐⭐低方案四超时超时⭐⭐⭐⭐低方案五根目录位置⭐⭐⭐⭐⭐低方案六更新版本⭐⭐⭐低5. 常见问题 FAQ5.1 Hooks 是什么Claude Code 的钩子机制在工具调用前后自动执行命令。5.2 支持哪些 hook 事件PreToolUse: 工具调用前PostToolUse: 工具调用后Notification: 通知时Stop: 会话结束时5.3 hooks 配置在哪里.claude/settings.json中的hooks字段。5.4 如何验证 hooks 执行claude --debug 21 | grep -i hook5.5 hook 命令失败怎么办检查命令是否存在手动运行测试使用绝对路径。5.6 hook 超时多少默认 30 秒。通过hookTimeout或CLAUDE_HOOK_TIMEOUT调整。5.7 配置不被加载确保在项目根目录检查 JSON 格式使用claude --debug | grep settings。5.8 hooks 值是数组还是字符串应该是数组[npm run lint]不是字符串npm run lint。5.9 可以配置多个 hook 吗是的。[npm run lint, npm run typecheck]。5.10 排查清单速查表□ 1. python3 -m json.tool 验证 JSON □ 2. 事件名: PreToolUse/PostToolUse大写 □ 3. hooks 值是数组: [command] □ 4. 手动测试 hook 命令 □ 5. which npm 检查命令存在 □ 6. 使用绝对路径 □ 7. hookTimeout: 60000 增加超时 □ 8. CLAUDE_HOOK_TIMEOUT60000 环境变量 □ 9. 在根目录创建 .claude/settings.json □ 10. claude --debug | grep hook 验证6. 总结根本原因Hooks 不执行最常见原因是配置格式错误30%和事件名错误25%最佳实践使用python3 -m json.tool验证配置使用正确的事件名PreToolUse/PostToolUse命令检查手动运行 hook 命令使用绝对路径增加hookTimeout配置位置在项目根目录.claude/settings.json中配置最佳实践建议使用claude --debug 21 | grep -i hook验证 hooks 执行故障排查流程图flowchart TD A[Hooks 不执行] -- B[python3 -m json.tool 验证] B -- C{JSON 有效?} C --|否| D[修复 JSON 格式] C --|是| E[检查事件名] D -- F[重新创建 settings.json] F -- G[claude --debug | grep hook] E -- H{名称正确?} H --|否| I[改为 PreToolUse/PostToolUse] H --|是| j[检查命令] I -- G j -- K[手动运行 hook 命令] K -- L{命令成功?} L --|否| M[修复命令或使用绝对路径] L --|是| N[检查超时] M -- G N -- O{hook 超时?} O --|是| P[hookTimeout: 60000] O --|否| Q[检查配置位置] P -- G Q -- R{在根目录?} R --|否| S[移到 /project/.claude/] R --|是| T[更新版本] S -- G T -- U[npm update -g claude-code] U -- G G -- V{hooks 执行?} V --|是| W[✅ 问题解决] V --|否| X[检查 hooks 值格式] X -- Y[改为数组: [command]] Y -- G W -- Z[长期: 正确格式 事件名 命令] Z -- AA[✅ 长期方案]