小白:"我又要手动运行测试 → 看报错 → 改代码 → 再测试......已经重复 20 遍了!救命!"
大师:"你需要的不是更快的键盘,而是 时间循环魔法 ------
/loop。"
1. /loop 是什么?------ 一个会自己"转圈"直到成功的 AI 助手
/loop 是 Claude Code CLI 里的一个超级命令。它的作用很简单:让 Claude 重复执行某个任务序列,直到你喊停或满足某个条件。
想象你有一个任劳任怨的小精灵,你对它说:
"你给这段代码写单元测试,运行它,如果失败就修改代码,再运行测试......直到全部通过为止。"
没有 /loop 时,你得一遍遍手动输入 "修复测试"、"再运行"、"再修复"......
有了 /loop,你只需要说:
text
/loop "修复所有失败的测试,直到全部通过"
Claude 就会进入一个自动循环:写代码 → 运行测试 → 判断结果 → 修复 → 再运行 → 直到绿灯 🟢。
2. 实现原理 ------ 小精灵脑子里的"死循环"流程图
/loop 本质上是一个 带终止条件的递归/循环。Claude 不会真的无限转圈,它会:
-
记住你给的目标(例如"让所有测试通过")
-
执行一步(生成代码、运行命令、检查结果)
-
判断目标是否达成?
- ✅ 达成 → 结束循环,输出"搞定!"
- ❌ 没达成 → 根据反馈调整计划,再执行一步(回到第2步)
为了防止小精灵累死,循环还有安全限制:
- 最多循环 N 次(默认 10 次)
- 每次循环会把上下文(之前的尝试、报错信息)一起发给 LLM,让它越修越聪明。
核心伪代码(TypeScript 风格)
typescript
async function runLoop(
userGoal: string, // "让所有测试通过"
initialContext: Context, // 当前代码、文件树等
maxIterations = 10
): Promise<FinalResult> {
let context = initialContext;
let iteration = 0;
while (iteration < maxIterations) {
iteration++;
console.log(`🔄 第 ${iteration} 次尝试...`);
// 1. 让 LLM 根据当前上下文和目标,决定下一步动作
const action = await llm.decideNextAction({
goal: userGoal,
history: context.history,
lastOutput: context.lastOutput,
});
// 2. 执行动作(写文件、运行命令、读取日志)
const toolResult = await executeTool(action);
// 3. 更新上下文
context = updateContext(context, action, toolResult);
// 4. 检查是否达成目标(可以LLM判断或规则判断)
const isGoalMet = await checkGoalMet(userGoal, context);
if (isGoalMet) {
console.log("🎉 目标达成!退出循环。");
return { success: true, finalContext: context };
}
// 5. 如果上次动作失败或没有进展,LLM 会自动调整策略
}
console.log("⚠️ 达到最大循环次数,请检查问题。");
return { success: false, finalContext: context };
}
关键点 :每一次循环,Claude 都能看到之前所有失败和成功,就像你有一个不会遗忘的记忆。它会学习"上次那样改不行,这次换一种方式"。
3. 最佳用法 ------ 四个让小白变大神的神级场景
① 测试驱动开发(TDD)循环
bash
# 写一个加法函数,但还没写测试
/loop "为 add.py 中的 add(a,b) 编写 pytest 单元测试,运行测试,如果失败就修复 add 函数,直到所有测试通过"
Claude 会自己:
- 创建
test_add.py - 运行
pytest test_add.py - 发现失败 → 修改
add.py - 再运行 → 直到绿色
② 批量修复 Lint 错误
bash
/loop "运行 `npm run lint`,修复所有报错(自动或手动),然后重新 lint,直到没有错误"
③ 代码重构 + 回归测试
bash
/loop "把 `utils.js` 里所有 var 改成 const/let,每次改动后运行 `npm test`,如果测试失败就撤销那一步并换一种方式"
④ 渐进式性能优化
bash
/loop "运行基准测试 `benchmark.py`,如果运行时间 > 2 秒,就优化代码(但不要改变输出结果),重复直到 < 2 秒"
4. 时序图 ------ 一次 /loop 魔法的完整演出

5. 小白的"避坑指南" ------ 别让循环吃掉你的周末
| 问题 | 解决方案 |
|---|---|
| 循环永远停不下来(比如目标模糊) | 在目标里加明确终止条件 :"直到 tests/ 下没有 FAILED" 而不是 "尽量让测试通过" |
| 一次循环改太多,搞乱代码 | 用 /loop 搭配 原子操作 :"每次只修复一个函数,然后运行测试" |
| 浪费 token,循环太多次 | 设置 --max-iterations 5 或通过 /config 修改默认值 |
| 想手动介入但循环还在跑 | 按 Ctrl+C 中断,然后输入 /clear 重置状态 |
6. 总结 ------ /loop 就是你的"自动进取机"
- 本质:带记忆和终止判断的 while 循环,每次迭代 LLM 都能看到历史。
- 威力:把重复劳动(改错→测试→改错)变成一键自动化。
- 灵魂 :清晰的目标 + 可验证的终止条件 + 合理的最大迭代数。
现在,小白对着那个卡了 20 遍的测试文件,深吸一口气,输入:
text
/loop "修复所有测试失败,每轮只改一处,直到 pytest 全部通过,最多 10 次"
然后去泡了杯咖啡。回来时,终端上闪耀着绿色的 🎉 All tests passed! ------ 他第一次体验到,什么叫 让 AI 替你转圈。🌀