编程 最小Loop:让Claude自己跑测试、修Bug,3个文件告别USB线工作流

2026-06-16 09:13:18 +0800 CST views 7

最小 Loop:让 Claude 自己跑测试、修 Bug,3 个文件告别"USB 线"工作流

标签: Claude Code / Claude Agent / AI 编程 / Loop 工作流 / 自动测试 / Claude Code / hooks / Fixer Agent
原文: 微信公众号「老金独立开发」https://mp.weixin.qq.com/s/14dyKA7188NfMvL0xwK7Ow


问题:AI 编码中你在做的事是"USB 线"

每天晚上的工作流程:

让 Claude 写代码 → 跑测试 → 3 个失败 → 把报错粘贴给 Claude → 它修了一个、又破了另一个 → 再粘贴 → 再修 → 再破……

一个晚上就这么过去了。

问题在哪? 你做的事情是纯机械的:Claude 写代码,你跑测试,你读错误,你再粘给 Claude。你就是个 USB 线。

这完全可以被自动化掉,只需要 3 个文件。


核心思路:把直线弯成循环

默认的 Claude Code 工作方式是一条直线:

你发任务 → Claude 写代码 → Claude 停下来 → 等你

它不会主动跑测试。"完成"在它的默认定义里就是"写完了"。

解决思路:把直线弯成循环:

写代码 → 跑检查 → 有失败?修它 → 再跑检查 → 直到通过

文件 1:CLAUDE.md —— 循环协议

在项目根目录的 CLAUDE.md 里加入循环协议:

循环协议
每个任务作为循环运行,不是直线:
1. 写变更。
2. 运行检查:测试 + linter + 类型检查。
3. 有失败?读错误,找原因,修它,回到第 2 步。
4. 最多循环 5 次。

停止条件:
· 所有检查通过 → 报告"完成",附上通过输出作为证明。
· 5 次用完 → 停下来,报告还剩什么没过。
· 同一个错误连续出现两次 → 立刻停。你在猜,不是在修。

禁止:在没有检查输出的情况下报告"完成"。
禁止:通过删断言、弱化测试来让测试通过。修代码,不修记分牌。

两条"禁止"是最关键的部分。 第一次没加,结果 Claude 在第 3 次迭代里把一个断言直接删掉了——测试绿了,bug 还在。它在作弊,而且作弊得很自然。


文件 2:.claude/settings.json —— 硬约束钩子

Claude 会"忘记"CLAUDE.md 里写的协议。settings.json 的钩子是硬约束:每次它想停下来,系统强制先跑一遍测试,把结果塞回给它。

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "npm test --silent 2>&1 | tail -20"
      }]
    }],
    "PostToolUse": [{
      "matcher": "Write|Edit",
      "hooks": [{
        "type": "command",
        "command": "npx tsc --noEmit --pretty false 2>&1 | head -10"
      }]
    }]
  }
}
钩子触发时机作用
PostToolUse每次改完文件立刻跑类型检查,边写边纠
StopClaude 想说"完成了"时先跑完整测试套件,失败则强制再来一次

Python 项目换 pytest -q + pyright,Rust 项目换 cargo test --quiet + cargo check


文件 3:.claude/agents/fixer.md —— 打破死局

有些问题在同一个上下文窗口里修不好。它已经试了 4 次,上下文里全是失败记录,思路被锁死了。这时候需要一个干净的上下文:

name: fixer
description: 当同一个测试在 2 次修复尝试后仍然失败时调用。
tools: Read, Edit, Grep, Glob, Bash
model: opus

你修复失败的检查。你不允许猜测。

1. 自己运行失败的检查,读完整错误。
2. 从头到尾读失败路径里的每个文件。
3. 写一句话:实际原因是什么。
4. 只修那个原因,不要顺手重构。
5. 再次运行检查,报告修复前后的输出。

禁止:删测试、放宽断言、用 try/catch 压错误、把测试标记为 skip。

主会话里用 @fixer 调用。它没有之前 4 次失败的记忆,重新从零诊断,经常一次就过


配起来:3 步搞定

  1. 把循环协议贴进 CLAUDE.md
  2. 创建 .claude/settings.json 放钩子配置
  3. 创建 .claude/agents/fixer.md
# 目录结构
project/
├── CLAUDE.md
├── .claude/
│   ├── settings.json
│   └── agents/
│       └── fixer.md

给 Claude 一个真实任务,看循环跑起来。


效果

配置完之后你会发现:

  • ✅ 你不再需要盯着终端复制粘贴报错了
  • ✅ Claude 自己跑、自己看、自己修
  • ✅ 修不动了叫 @fixer
  • ✅ 你只需要最后看一眼 diff

总结

文件作用核心配置
CLAUDE.md循环协议禁止作弊(删断言/弱化测试)
.claude/settings.json硬约束钩子PostToolUse(边写边纠)+ Stop(完成前强制测试)
.claude/agents/fixer.md死局打破者新上下文,重新诊断,禁止猜测

核心价值:把"你当 USB 线"的纯机械流程自动化掉,让 Claude 自己跑、自己修、修不动了叫 fixer。你只需要最后看一眼 diff。


Keywords: Claude Code, Claude Agent, 最小Loop, AI编程, 自动测试, hooks, Fixer Agent, Loop工作流, 自动化测试, Claude Code配置

推荐文章

网络数据抓取神器 Pipet
2024-11-19 05:43:20 +0800 CST
在 Rust 中使用 OpenCV 进行绘图
2024-11-19 06:58:07 +0800 CST
Linux 常用进程命令介绍
2024-11-19 05:06:44 +0800 CST
阿里云免sdk发送短信代码
2025-01-01 12:22:14 +0800 CST
PostgreSQL日常运维命令总结分享
2024-11-18 06:58:22 +0800 CST
PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
php strpos查找字符串性能对比
2024-11-19 08:15:16 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
宝塔面板 Nginx 服务管理命令
2024-11-18 17:26:26 +0800 CST
程序员茄子在线接单