安思波公司一笔 312 美元的账单中,有 60% 源于单一模式:克劳德代码在遭遇 D1 数据库迁移失败后,连续发起 7 到 8 次重试的 Bash 调用以诊断问题所在。每次循环消耗 4 万至 6 万令牌。每个会话发生三到四次这样的循环,就意味着 0.50 至 0.70 美元白白蒸发。
解决方案并非提示词工程。而是一个 PostToolUse(工具使用后)钩子,它在 wrangler d1 migrations apply 命令以非零状态退出时立即触发——此时智能体尚未开始其重试螺旋。
#!/bin/bash
# post_bash_hook.sh
COMMAND="$1"
EXIT_CODE="$2"
if echo "$COMMAND" | grep -q "wrangler d1 migrations apply"; then
if [ "$EXIT_CODE" != "0" ]; then
echo "警报:D1 迁移失败(退出码 $EXIT_CODE)。请检查架构状态。" >&2
curl -s -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/storage/kv/namespaces/$KV_NS/values/migration_failed" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-d "1" > /dev/null
fi
fi
exit 0
一个 Slack 机器人每 3 分钟轮询一次该键值存储键。当值变为 1 时,我会收到通知,从而在克劳德代码决定进一步消耗我的令牌预算进行调查之前进行干预。运行此设置六个月以来:零次架构不匹配事故,且下个月的账单降至 156 美元。
链条的另一半是一个 PreToolUse(工具使用前)钩子,当智能体处于 main(主)分支时,它会阻止 wrangler deploy 命令——这是在经历了一次因从错误分支发布生产部署而导致两个 Worker 服务中断五分钟的惨痛教训后学到的。大多数人忽略的一点是:当你的钩子返回 exit 2 时,克劳德代码会将你写入标准错误的任何内容读取为上下文。模糊的 BLOCK(阻止)起不到任何作用。而 BLOCK: wrangler deploy on main — use staging namespace instead(阻止:在主分支上执行 wrangler 部署——请改用暂存命名空间)则能正确重定向智能体。
链条末端还有一个 pre-commit(预提交)钩子,用于扫描暂存区的差异文件,查找硬编码的生产环境绑定名称和密钥模式——这是在任何内容进入 Git 历史记录之前的最后一道过滤网。
我在 riversealab.com 网站上撰写了完整的分解文章——包括确切的 .claude/settings.json 结构、钩子匹配模式的工作原理(及其失效场景),以及关于执行顺序保证的常见问题解答。