1. 为什么我放弃了手动提示,转向 Loop Engineering
如果你正在用 Claude Code 写项目,大概率经历过这种循环:敲一段提示词,等 AI 输出,看一眼觉得不对,再补一段提示词,再等,再改。一个下午过去,项目骨架还没搭完,人已经累了。Loop Engineering 要解决的就是这件事——把「提示、检查、决定下一步」这套动作交给一套自动循环系统,你只负责定目标和验收。
Claude Code 里落地这套方法论的两个核心命令是/goal和/loop,配套的状态记忆文件是PROGRESS.md。/goal负责「跑到目标达成为止」,适合从零搭建项目、批量重构这类有明确终点的任务;/loop负责「按固定间隔反复跑」,适合部署监控、定时扫描这类没有终点的持续任务。两者配合PROGRESS.md做状态记忆,就能让 AI 在多轮迭代中不丢上下文、不重复劳动。
这篇文章面向从零搭建完整项目的开发者。我会给出PROGRESS.md的完整骨架、/goal指令模板、settings.json里接入 TaoToken 统一 Key/API 通道的可复制配置,然后演示多轮自动迭代后的验证动作和结果检查。全程可以跟着敲,不需要你事先精通 Claude Code。
先说清楚一个前提:Loop 不是让 AI 无脑重试。没有反馈闭环的循环,AI 会把错误当正确答案继续跑,越跑越偏。真正能用的 Loop 需要三个要素——可自动验证的停止条件、每轮执行后的反馈闭环、外部文件承载的状态记忆。这三样缺一个,循环就会失控。下面所有配置和模板,都是围绕这三样展开的。
2. 前置准备:TaoToken 统一 Key 与 Claude Code 接入
在跑/goal之前,得先把 Claude Code 的模型通道配好。我实测下来,用 TaoToken 做统一 Key/API 通道比较省事,一个 Key 就能覆盖 Claude 系列模型,不用在多个平台之间来回切换配置。
TaoToken 官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。注册后在控制台创建 API Key,拿到形如sk-xxxx的密钥,接下来写进 Claude Code 的配置文件。
Claude Code 的配置分两层:一层是环境变量或settings.json里的模型通道配置,一层是项目级的CLAUDE.md规则文件。前者决定请求发到哪里,后者决定 AI 在你的项目里遵守什么规矩。Loop Engineering 跑起来之后,CLAUDE.md里的规则会被每一轮循环反复读取,所以规则写得越清楚,循环越稳。
如果你还没创建 Key,可以先去控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 建一个,再参考接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 确认最新的参数格式。文档里会说明当前支持的模型名和 base URL 写法,配置前扫一眼能少踩坑。
有一点要提醒:Loop 跑起来之后 Token 消耗是持续累积的,所以 Key 的额度管理和熔断设置要提前想好。后面第五节会讲怎么在/goal里加 Token 预算限制。
3. 可复制配置:settings.json、PROGRESS.md 与 /goal 模板
这一节是全文的核心,三份配置直接抄就能用。先配通道,再建状态文件,最后套指令模板。
3.1 settings.json 接入 TaoToken
Claude Code 的settings.json一般放在用户目录下的.claude/settings.json,项目级配置可以放在项目根目录的.claude/settings.json。我用的是项目级配置,这样不同项目可以用不同的 Key 和模型。配置内容如下:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-5-haiku-20241022" }, "permissions": { "allow": [ "Bash(npm run build)", "Bash(npm run dev)", "Bash(npx tsc --noEmit)", "Bash(npm test)", "Read", "Write", "Edit" ], "deny": [ "Bash(rm -rf *)", "Bash(git push --force*)" ] } }几个参数说明一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 入口,注意这里不加任何查询参数,保持干净。ANTHROPIC_AUTH_TOKEN填你控制台创建的 Key。ANTHROPIC_MODEL是主模型,负责执行任务;ANTHROPIC_SMALL_FAST_MODEL是轻量模型,负责一些快速判断,比如/goal里那个独立的判断模型就可以走这个通道,省 Token。
permissions.allow里我放开了构建、类型检查、测试这些验证命令,因为 Loop 每轮都要跑它们。permissions.deny里挡掉了rm -rf和强制推送,防止 AI 在循环里做出不可逆操作。这个 deny 列表建议你按自己项目的风险点补充,比如数据库迁移命令、生产环境部署命令,都值得挡一挡。
配好之后,在项目根目录跑一次claude进入交互模式,随便问一句「当前用的是什么模型」,确认请求走通了再往下走。如果报 401,多半是 Key 填错或者额度没开;如果报连接超时,检查 base URL 有没有多写斜杠。
3.2 PROGRESS.md 骨架
PROGRESS.md是 Loop 的状态记忆文件,放在项目根目录。它的作用是让 AI 在每一轮循环开始时,先读这个文件知道自己干到哪了,避免重复劳动,也避免上下文窗口满了之后丢失进度。骨架如下:
# 项目进度 ## 当前阶段 阶段 2:API 路由与数据库层 ## 已完成 - [x] 阶段 1:项目初始化(create-next-app + 依赖安装) - [x] 数据库 Schema 设计(sessions 表:id, content, token_count, code_lines, project, created_at) ## 进行中 - [ ] 阶段 2:/api/sessions 的 GET 与 POST 实现 ## 待办 - [ ] 阶段 3:仪表盘页面 - [ ] 阶段 4:历史列表页(搜索 + 筛选) - [ ] 阶段 5:新增表单页 - [ ] 阶段 6:端到端验证 ## 遇到的问题 | 轮次 | 问题 | 处理 | 状态 | |------|------|------|------| | 3 | better-sqlite3 原生模块编译失败 | 改用预编译版本 | 已解决 | | 7 | 类型定义缺失导致 tsc 报错 | 补 @types 声明 | 已解决 | ## 熔断记录 - 同一问题重试上限:5 次 - 单轮 Token 预算:200K - 进度停滞检测:连续 3 轮无变化则暂停这个骨架的关键在于「遇到的问题」和「熔断记录」两块。前者是调试日志,Loop 跑了几十轮之后出问题,翻这张表能快速定位是哪一轮埋的坑;后者是防死循环的硬约束,AI 每轮开始时会读这两块,知道自己还剩多少重试额度。
3.3 /goal 指令模板
把目标、停止条件、循环规则、熔断机制写进一段/goal指令里。模板如下,方括号部分按你的项目替换:
/goal 从零搭建[项目名]。[技术栈描述]。 功能要求: 1. [功能点 1] 2. [功能点 2] 3. [功能点 3] 停止条件:[可自动验证的条件,如 npm run build 无报错、npm run dev 能启动、所有页面正常渲染] 自主开发循环: 1. 状态追踪:项目根目录维护 PROGRESS.md,每完成一个模块更新一次 2. 开发-验证闭环:每完成一个模块立即跑构建验证,有报错先修复再推进 3. 防死循环:同一问题修复超过 5 次仍未解决,记录到 PROGRESS.md 后跳过 4. 最终验证:全部完成后做一次端到端验证 全程自主开发,不要停下来等我确认,除非遇到无法自行解决的阻塞问题。 完成后输出 Token 总消耗和项目文件清单。这段模板里,「停止条件」必须可自动验证,这是 Loop 能自己判断「做完了没」的前提。「防死循环」那条是保命的,没有它,AI 可能在一个编译错误上耗掉几十万 Token。最后那句「不要停下来等我确认」是让循环真正跑起来的关键,否则 AI 每完成一步就停下来等你,又变回手动模式了。
4. 验证请求与成功结果检查
配置写完,跑一轮验证。我拿一个「AI 开发日志」全栈小项目做演示,技术栈是 Next.js 14 + TypeScript + Tailwind CSS + better-sqlite3。
4.1 启动 /goal 并观察执行节奏
在项目根目录进入 Claude Code,把上一节的模板填好贴进去,回车。AI 会按这样的节奏自己跑:
轮次 1:npx create-next-app 初始化,安装依赖 轮次 2:创建 SQLite Schema 和 db 连接模块 轮次 3:写 /api/sessions 路由,跑 npm run build —— 报错,自己修 轮次 4:重跑构建 —— 通过,更新 PROGRESS.md 轮次 5:写仪表盘页面,跑构建 —— 通过 轮次 6:写历史列表页,跑构建 —— 报错,修了 2 轮通过 轮次 7:写新增表单页,跑构建 —— 通过 轮次 8:端到端验证 npm run build && npm run dev整个过程我没有干预。AI 每完成一个模块就跑一次构建,报错当场修,修完更新PROGRESS.md再推进下一个模块。这就是反馈闭环在起作用——不是最后才检查,是每一步都在检查。
4.2 检查成功结果
跑完之后,按三个层面验收。
第一层,看PROGRESS.md的最终状态。所有待办应该都变成已完成,熔断记录里如果没有新增条目,说明没有触发死循环跳过。
第二层,跑一遍停止条件里的验证命令:
npm run build npm run devnpm run build应该零报错退出。npm run dev启动后,浏览器访问http://localhost:3000,首页仪表盘、历史列表页、新增表单页三个页面都要能正常渲染。新增一条记录,刷新历史页能看到,说明 CRUD 跑通了。
第三层,检查 API 路由。用 curl 直接打接口:
curl -X POST http://localhost:3000/api/sessions \ -H "Content-Type: application/json" \ -d '{"content":"测试会话","token_count":1200,"code_lines":80,"project":"demo"}' curl http://localhost:3000/api/sessionsPOST 应该返回创建成功的记录,GET 应该返回包含刚才那条记录的列表。如果 POST 报 500,多半是数据库文件路径问题;如果 GET 返回空数组,检查 Schema 里的表名和查询语句是否一致。
4.3 用 /loop 做持续监控
项目搭完之后,如果想让 AI 持续盯着服务状态,切到/loop:
/loop 10m 检查 http://localhost:3000/api/sessions 是否返回 200。连续 2 次返回非 200,记录到 health-check.log 并通知我。/loop每 10 分钟跑一次,适合部署后的健康检查、CI 状态轮询这类场景。记住/loop会一直跑,任务不需要了就手动停掉,别让它空烧 Token。
5. 本篇常见错排查
Loop 跑起来之后,报错集中在几个地方。这一节按现象分类,方便你对号入座。
5.1 401 或模型不可用
现象是 Claude Code 一启动就报鉴权失败,或者/goal跑到一半提示模型不可用。先检查settings.json里的ANTHROPIC_AUTH_TOKEN有没有填错,注意不要带多余空格。再确认ANTHROPIC_BASE_URL写的是https://taotoken.net/api,末尾不要加斜杠。如果 Key 没问题,去控制台看额度是否充足、模型名是否在当前支持的列表里。模型名写错也会报不可用,对照接入文档里的模型列表核对一遍。
5.2 /goal 跑飞或陷入死循环
现象是 AI 在同一个编译错误上反复修,Token 消耗快速上涨,PROGRESS.md的「遇到的问题」表里同一问题出现超过 5 次。这说明熔断机制没生效。检查/goal指令里有没有写「同一问题修复超过 5 次仍未解决,记录到 PROGRESS.md 后跳过」这条。如果写了还跑飞,可能是停止条件太模糊,AI 判断不了什么叫「完成」,于是无限重试。把停止条件改成可自动验证的命令,比如npm run build退出码为 0。
5.3 Overbaking:AI 自己加需求
现象是 AI 搭完你要的功能后,开始加用户权限、操作日志、暗黑模式这些你没要的东西。这是 Loop 跑太久、目标约束太松导致的,社区叫 Overbaking。解决办法是在/goal指令里明确写「做什么」和「不做什么」,比如加一句「不要添加用户认证、权限系统、日志系统等未在功能要求中列出的模块」。同时设轮次上限,跑完人工审查再合并。
5.4 PROGRESS.md 不更新或进度丢失
现象是 AI 跑到一半重启后从零开始,或者PROGRESS.md一直是初始状态。检查/goal指令里有没有明确要求「每完成一个模块更新一次 PROGRESS.md」。如果写了还不更新,可能是permissions.allow里没放开Write和Edit,AI 没权限写文件。另外确认PROGRESS.md放在项目根目录,路径写对。
5.5 构建通过但页面白屏
现象是npm run build零报错,但浏览器打开页面是空白。这类问题 Loop 的停止条件检测不到,因为构建确实通过了。排查方向是看浏览器控制台有没有运行时报错,常见原因是客户端组件里用了服务端才有的 API,或者数据库连接在客户端被引用。这类问题建议在/goal的停止条件里补一条「浏览器访问各页面无控制台报错」,让 AI 用无头浏览器做一次渲染检查。
6. 把 Loop 用顺手的几个实操建议
跑通一轮之后,你会发现 Loop 的杠杆效应很明显——目标拆得清楚,它能替你省下大量重复操作;目标写得模糊,它能把 Token 烧成烟花。我踩过的坑里,最贵的一次是没设熔断,目标写了「重构整个项目」,AI 跑了 50 分钟花了快 80 万 Token,效果还不如自己花 2 小时重写。
所以启动前先想三件事:目标能不能量化?做完值不值这个 Token 钱?跑崩了有没有 Plan B?一个/goal省 2 小时手工操作、花几块钱 Token,值;跑了半天还搞砸要返工,纯浪费。
从小目标开始练手。先给 AI 一个小任务让它跑一轮,感受下节奏和 Token 消耗,顺手之后再上多阶段项目、定时循环、熔断机制这些进阶玩法。PROGRESS.md就是你的调试日志,Loop 跑了几十轮后出问题,翻它比翻对话记录快得多。
如果你还没配好通道,先去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 建一个 Key,再对照接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 把settings.json配好。想先感受模型对话效果,可以去模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 试几句。如果你打算长期用 Loop 跑编码和 Agent 任务,Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 的额度模式会比按次调用更划算,具体可以自己算一下每轮循环的平均 Token 消耗再决定。
最后一句实在话:Loop 是放大器,放的是你原本的工程判断力。目标拆得清、停止条件定得准、熔断机制配得全,它就是你项目里的自动驾驶;这三样缺一个,它就是个烧 Token 的无底洞。