
1. 从“写提示词”到“搭循环”Loop Engineering 到底在解决什么问题如果你最近半年一直在用 Claude Code、Codex、Cursor 这类 AI 编程工具大概率经历过这样一个阶段一开始觉得“哇一句话就能生成一个函数”用着用着就发现真正难的不是让模型写出一段代码而是让它持续、稳定、可控地完成一件完整的工程任务。写一个函数是提示词工程Prompt Engineering的范畴但让 AI 自己读需求、改代码、跑测试、看报错、再改、再跑直到任务真正完成——这是另一件事业内现在管它叫Loop Engineering循环工程。我自己的理解很直白Loop Engineering 就是把“人盯着 AI 一步步操作”变成“人设计好一个循环让 AI 在循环里自己迭代”。这个循环里有几个关键零件——目标定义、上下文供给、工具调用、结果校验、退出条件、失败兜底。少一个循环就会变成“死循环”或者“假装在干活”。Claude Code、Codex、Cursor 这些工具本质上都是循环的执行器区别只在于它们各自擅长哪一段Claude Code 强在长上下文和自主 agent 行为Codex 强在代码补全和轻量任务Cursor 强在 IDE 内的交互式编辑体验。这篇内容适合谁看三类人。第一类是完全没接触过这些工具、想从零上手的新手我会把安装、配置、中文设置这些基础环节讲透第二类是已经在用但总感觉“AI 不听话、任务做一半就停”的中级用户重点看循环设计和校验环节第三类是想把 AI 编程接入自己工作流、做自动化的人重点看工具选型、参数配置和踩坑记录。全文我会用“保姆级”的方式讲但不会停留在“点这个按钮”的层面每个选择背后为什么这么做我都会说清楚。先给一个整体认知Loop Engineering 的核心不是模型多强而是循环设计得多合理。模型再强如果你给的目标模糊、上下文残缺、没有校验机制它照样会给你一堆看起来对、跑起来错的代码。反过来一个中等能力的模型配上设计良好的循环能稳定完成相当复杂的任务。这就是为什么同样用 Claude Code有人觉得“神了”有人觉得“也就那样”——差距在循环设计上不在工具本身。2. 工具选型Claude Code、Codex、Cursor 各自适合放进循环的哪一环2.1 三者的定位差异别混着用很多人一上来就问“哪个最好”这个问题本身就问错了。这三个工具不是替代关系而是在循环里承担不同角色。我自己的用法是Cursor 做“人机交互层”Claude Code 做“自主执行层”Codex 做“快速补全层”。下面这张表是我实测下来的定位总结工具核心能力适合放进循环的环节不适合的场景CursorIDE 内交互式编辑、多文件感知需求拆解、代码审查、局部重构长时间无人值守的自主任务Claude Code长上下文、自主 agent、命令行执行完整任务闭环、跑测试、迭代修复需要频繁人工确认的精细编辑Codex代码补全、单文件生成快速写函数、补测试、写注释跨文件复杂重构这个分工不是绝对的但逻辑很清楚Cursor 是“你看着它干”Claude Code 是“你让它自己干”Codex 是“你干到一半它帮你补”。循环工程要解决的是“让它自己干”这一段所以 Claude Code 是主角另外两个是配角。2.2 为什么循环工程更依赖 Claude Code 这类工具传统提示词工程是“一问一答”你问一句模型答一句答完就结束了。循环工程是“一问多答多执行”模型答完还要执行、看结果、再答。这就要求工具具备三个能力能读文件、能跑命令、能根据结果调整。Cursor 的 Chat 模式虽然也能读文件但它默认是“建议式”的改不改由你决定Claude Code 是“执行式”的它可以直接改文件、跑测试、看输出。这个差异决定了循环能不能自动转起来。我举个具体例子。任务“给这个项目加一个用户登录接口并写测试”。用 Cursor流程是你让它写接口 → 它给你代码 → 你复制粘贴 → 你让它写测试 → 它给你测试 → 你跑测试 → 报错 → 你把报错贴回去 → 它改 → 你再跑。这个循环里每一步都需要你手动搬运。用 Claude Code流程是你给它任务 → 它自己读项目结构 → 自己写接口 → 自己写测试 → 自己跑测试 → 自己看报错 → 自己改 → 直到测试通过。这个循环里你只需要在最后验收。差距就在这里。2.3 选型时容易踩的坑第一个坑是把 Cursor 当 Claude Code 用。有人试图在 Cursor 里让 AI 自主完成一个多步骤任务结果发现它总是“做一半停下来等你确认”。这不是 Cursor 不行是它的设计定位就是交互式不是自主式。你要自主循环就得用支持自主执行的工具。第二个坑是同时开多个工具上下文互相污染。我见过有人 Cursor 开着、Claude Code 也开着两边同时改同一个文件最后代码冲突到没法看。循环工程讲究“单一执行源”一个任务只让一个工具主导执行其他工具只做辅助。第三个坑是忽略工具的上下文窗口限制。Claude Code 虽然上下文长但也不是无限的。如果你把整个大项目一次性丢进去它读到后面就忘了前面。正确做法是按任务切分上下文只给它当前任务相关的文件而不是整个仓库。3. 环境准备从零把工具装好、配好、调成中文3.1 Claude Code 的安装与初始化Claude Code 的安装方式取决于你的系统。macOS 和 Linux 用户官方推荐用 npm 全局安装npm install -g anthropic-ai/claude-code装完之后在项目根目录执行claude就能启动。第一次启动会让你登录按提示走就行。Windows 用户如果遇到 npm 环境问题建议先用 WSL2在 WSL 里按 Linux 的方式装比直接在 PowerShell 里折腾省事得多。我试过在纯 Windows 环境装路径和权限问题能折腾半小时WSL 里五分钟搞定。初始化之后建议在项目根目录建一个CLAUDE.md文件这是 Claude Code 的“项目记忆”。里面写清楚项目是干什么的、技术栈是什么、代码规范是什么、测试怎么跑。这个文件的作用是每次启动循环时自动给模型注入项目上下文省得你每次重复解释。我自己的CLAUDE.md大概长这样# 项目说明 这是一个 Node.js TypeScript 的 API 服务用 Express 框架。 # 代码规范 - 用 2 空格缩进 - 函数必须有 JSDoc 注释 - 错误处理统一用自定义 AppError 类 # 测试 - 测试框架用 Jest - 跑测试命令npm test - 新功能必须附带测试这个文件看起来简单但它直接决定了循环的质量。上下文给得越准循环跑得越稳。3.2 Codex 的安装与配置解析Codex 现在主要以插件形式存在在 VS Code 里搜 “Codex” 装官方插件即可。装完之后需要在设置里填 API 配置。配置文件一般在用户目录下的.codex/config或者 VS Code 的 settings.json 里。关键配置项有三个模型选择、超时时间、是否自动执行。{ codex.model: 默认模型, codex.timeout: 30000, codex.autoExecute: false }autoExecute这个选项要特别注意。设成 true它生成代码后会自动应用设成 false它只给建议你确认后才应用。在循环工程里这个选项建议设成 false因为 Codex 的定位是辅助补全不是自主执行自动应用容易改坏代码。3.3 Cursor 的中文设置与常用配置Cursor 设置中文回复是新手问得最多的问题之一。操作路径是打开设置Ctrl/Cmd Shift P输入 “Open Settings”搜索 “language”找到 “Cursor: Language” 或者类似的选项改成 “zh-CN”。如果没有这个选项可以在对话里直接说“请用中文回复”它会在当前会话里记住。但要注意这个设置只影响界面和回复语言不影响代码本身代码里的变量名、注释该用英文还是英文。Cursor 的免费额度是很多人关心的点。免费版每月有一定次数的快速请求和慢速请求具体数字官方会调整我不在这里写死。我的建议是把免费额度用在“高价值交互”上比如需求拆解、代码审查而不是让它帮你写简单的 getter/setter。简单任务用 Codex 补全就够了别浪费 Cursor 的额度。3.4 环境配置的通用避坑清单问题现象解决方式安装后命令找不到终端提示 command not found检查 npm 全局路径是否在 PATH 里登录不上一直转圈或报网络错误检查网络环境换时间段重试中文设置不生效改了设置还是英文回复在对话里明确说“用中文回复”上下文丢失聊到后面它忘了前面用 CLAUDE.md 或项目规则文件固化上下文权限报错无法写入文件检查项目目录读写权限WSL 用户注意跨系统路径这些坑我基本都踩过一遍。最烦的是权限问题尤其是在 WSL 里操作 Windows 挂载盘的时候文件权限经常对不上解决办法是把项目放在 WSL 自己的文件系统里别放在/mnt/c下面。4. 循环工程的核心设计一个能自己转起来的循环长什么样4.1 循环的六个必备零件一个完整的 Loop Engineering 循环我总结下来有六个零件缺一不可目标定义用一句话说清楚“做完什么算完成”。比如“登录接口能通过所有测试”而不是“优化一下登录”。上下文供给告诉它相关文件在哪、规范是什么。靠CLAUDE.md和任务描述共同完成。执行动作模型实际做的操作读文件、写代码、跑命令。结果校验怎么判断这一步做对了。跑测试、跑 lint、人工检查都算。退出条件什么时候停。测试全绿就停或者迭代超过 N 次就停。失败兜底卡住了怎么办。回滚、换方案、或者交给人处理。这六个零件里新手最容易忽略的是退出条件和失败兜底。结果就是循环要么停不下来一直改一直错要么停得太早做一半就交差。我自己的习惯是在任务描述里明确写“如果连续 3 次修改后测试仍不通过停下来告诉我卡在哪。”4.2 目标定义把“模糊需求”翻译成“可校验目标”这是循环工程里最考验人的一步。模型不会读心你给的目标越模糊它跑偏的概率越大。我总结了一个翻译公式动词 对象 校验标准。模糊版“帮我优化一下这个查询”可校验版“把这个查询的响应时间降到 200ms 以内用 EXPLAIN 验证走了索引”模糊版“加个缓存”可校验版“给 getUserById 加 Redis 缓存缓存命中时不再查数据库写一个测试验证第二次调用不触发数据库查询”你看可校验版的目标里校验标准本身就是循环的退出条件。模型知道“做到什么程度算完”循环才能自己停。这一步做得好后面省一半事。4.3 上下文供给给多少、给什么、怎么给上下文不是越多越好。给多了模型注意力被稀释反而抓不住重点给少了它缺信息只能瞎猜。我的经验是按任务边界给这个任务会碰到的文件全给不会碰到的一个不给。具体操作上Claude Code 支持用引用文件比如src/auth/login.ts。你也可以在任务描述里直接说“参考 src/utils/error.ts 里的错误处理方式”。Cursor 里可以用Codebase让它自己搜但搜索结果不一定准关键文件还是手动指定更稳。还有一个技巧是给“反面例子”。比如“不要用 any 类型参考 src/types/user.ts 里的定义方式”。正面例子告诉它做什么反面例子告诉它别做什么两个一起给输出质量明显提升。4.4 结果校验让循环有“眼睛”循环能不能自己转关键看它能不能自己判断对错。校验手段按可靠性排序自动化测试最可靠跑一遍就知道过没过。类型检查 / lint次可靠能抓语法和风格问题。编译 / 构建能抓结构性错误。模型自评最不可靠但可以作为补充。我的做法是至少配两层校验测试 类型检查。测试管行为对不对类型检查管代码写没写歪。两个都过才认为这一步成功。只有一层校验的循环很容易出现“测试过了但代码一塌糊涂”的情况。4.5 退出条件与失败兜底别让循环变成无底洞退出条件分两种成功退出和失败退出。成功退出就是校验全过任务完成。失败退出是迭代次数超限、或者连续多次没有进展。失败退出后循环应该停下来把当前状态、报错信息、尝试过的方案整理出来交给人。我踩过的一个坑是没设失败退出结果模型在一个死胡同里改了二十多遍token 烧了一大堆问题还在原地。后来我学乖了任务描述里必写一句“最多尝试 5 次5 次后如果还没解决停下来汇报。”5. 项目实战用循环工程完成一个真实任务5.1 任务背景与目标拆解假设我们有一个 Express TypeScript 的 API 项目现在要加一个“用户注册”功能。需求是接收邮箱和密码校验邮箱格式密码做哈希存进数据库返回用户 ID。这个任务不大但足够演示完整循环。我把它拆成可校验的目标新增POST /api/register接口邮箱格式非法时返回 400密码用 bcrypt 哈希后存储注册成功返回 201 和用户 ID附带单元测试覆盖成功和失败两种情况拆解的逻辑是每个目标都能对应一个测试用例。测试写出来循环的退出条件就明确了。5.2 循环的第一轮让模型读项目、出方案启动 Claude Code第一句话不是“帮我写代码”而是“先读项目告诉我你打算怎么做”。这一步的目的是让模型建立上下文同时给你一个检查点。如果它的方案跑偏了你在这一步就能拦住不用等它写完一堆代码再返工。我实际用的提示词大概是这样读一下项目结构重点看 src/routes 和 src/models。 我要加一个用户注册接口需求是[需求描述]。 先别写代码告诉我你打算改哪些文件、每个文件改什么、测试怎么写。它会给一个方案比如“在 src/routes/auth.ts 加路由在 src/models/user.ts 加模型方法在 tests/auth.test.ts 加测试”。你看一眼觉得合理就说“按这个方案做”。这一步花不了几分钟但能省掉大量返工。5.3 循环的第二轮执行、校验、迭代方案确认后让它开始执行。它会自己读文件、写代码、写测试。写完第一版它会跑测试。这时候大概率会报错——可能是类型不对可能是依赖没装可能是测试写错了。关键来了不要手动帮它改让它自己看报错自己改。我实测下来Claude Code 处理这类报错的能力相当强。它会读报错信息定位到具体行改完再跑。一般两三轮就能跑通。如果超过五轮还在同一个错误上打转说明它卡住了这时候我会介入给它一个提示比如“检查一下 bcrypt 的导入方式”。这里有个细节每次迭代后让它汇报“改了什么、为什么改”。这样你能跟上它的思路也能及时发现它在“瞎改”。如果它改的地方和报错无关说明它在乱试这时候要打断它重新给方向。5.4 循环的收尾验收与固化测试全绿之后别急着结束。让它做三件事跑一遍完整测试套件确保没改坏别的、跑一遍类型检查、总结这次改动的文件清单。这三件事做完你验收起来就很快。验收通过后把这次任务的经验固化下来。比如把“注册接口的错误码规范”写进CLAUDE.md下次做类似任务时模型自动就知道规范了。循环工程的复利就在这里每跑一次循环项目上下文就丰富一点下次循环质量就高一点。5.5 实战中的参数与配置记录这次实战里我调整过的配置有两个。一个是 Claude Code 的自动执行权限默认它每次改文件会问你我改成了“信任当前会话”这样循环能连续跑不用我每次点确认。另一个是测试超时时间默认 30 秒我改成了 60 秒因为 bcrypt 哈希在慢机器上偶尔会超时。配置项默认值调整后调整原因文件写入确认每次询问信任会话减少循环中断测试超时30s60sbcrypt 哈希偶发超时最大迭代次数无限制5 次防止死循环烧 token这些参数没有标准答案根据你的项目特点和机器性能调。原则是能让循环连续跑的就放开可能出问题的就收紧。6. 常见问题与排查技巧实录6.1 循环跑不起来从环境到配置的排查顺序循环跑不起来原因可能有很多。我整理了一个排查顺序从外到内一层层查工具能不能启动命令行敲claude有没有反应。没反应就是安装或 PATH 问题。能不能登录启动后卡在登录界面检查网络环境。能不能读文件让它读一个文件试试读不到就是权限或路径问题。能不能写文件让它改一个文件试试写不了就是权限问题。能不能跑命令让它跑npm test试试跑不了就是环境变量或依赖问题。这个顺序的逻辑是从依赖到功能先确认基础能力再确认任务能力。很多人一上来就查任务为什么失败其实问题在更底层。6.2 循环跑偏模型不按方案走的处理方式模型跑偏的典型表现是说好了改 A 文件它去改 B 文件说好了用方案一它自作主张用方案二。处理方式分两种轻微跑偏就纠正严重跑偏就重来。轻微跑偏比如它多改了一个无关文件你直接说“把 X 文件的改动撤掉只保留 Y 文件的”。严重跑偏比如它完全理解错了需求别在错误的基础上修修补补直接git checkout回滚重新描述需求。在错误的基础上迭代只会越走越远。6.3 循环卡死反复改不对的破局思路卡死是最耗 token 的情况。模型在一个错误上反复改每次改完还是错。破局思路有三个换角度描述问题它可能理解错了你的意思换个说法再讲一遍。缩小范围把任务拆得更小先解决一个子问题。人工介入你自己看一眼报错给它一个明确提示。我遇到过一次模型死活搞不定一个 TypeScript 类型报错改了七八遍。我一看是它把泛型参数写反了。我直接说“泛型参数顺序反了应该是T, U不是U, T”它一秒就改对了。有时候人一眼能看出的问题模型就是绕不出来该介入就介入。6.4 常见问题速查表问题可能原因排查动作命令找不到PATH 未配置echo $PATH检查登录失败网络或账号问题换时间段重试中文不生效设置未保存对话里明确要求中文上下文丢失超出窗口拆分任务减少文件测试跑不过依赖缺失npm install重装循环停不下来无退出条件任务里加迭代上限代码改坏无校验加测试和类型检查额度用完高频请求简单任务换 Codex这张表里的每一条都是我或者身边朋友实际遇到过的。排查的核心思路是“先确认现象再定位原因最后验证解决”别跳步。6.5 几个独家避坑技巧第一个技巧每次循环前先 commit。这样循环跑歪了一个git reset就回来了不用手动撤销一堆改动。我现在的习惯是启动任何自主循环前先git add . git commit -m checkpoint before loop。第二个技巧给模型“思考时间”。复杂任务别指望它一次做对在任务描述里加一句“先分析再动手”它会先输出一段分析你检查完再让它执行。这一步能拦掉大部分方向性错误。第三个技巧用“小步快跑”代替“大步慢跑”。与其让它一次改五个文件不如一次改一个改完验证验证通过再改下一个。虽然步骤多了但每步都可控总体反而更快。7. 把循环工程变成日常习惯我的工作流总结用了一段时间之后我现在的日常流程基本固定下来了。早上到工位先看今天的任务把每个任务拆成可校验目标写进一个待办清单。然后打开 Claude Code从最简单的任务开始跑循环。跑循环的时候我不干等去处理别的事它跑完会通知我。验收通过就 commit不通过就看它卡在哪给个提示继续跑。这个流程里最值钱的不是工具是拆解任务的能力。工具会更新模型会换代但“把模糊需求翻译成可校验目标”这个能力是循环工程里唯一不会过时的东西。我见过太多人纠结“用哪个模型”“哪个工具更强”却忽略了任务拆解结果工具换了一圈效率还是上不去。最后分享一个我最近在用的扩展思路把循环工程用到非编程任务上。比如写文档目标定义成“写一篇 2000 字的说明包含三个小节每节有例子”校验标准是“字数达标、结构完整、例子能跑通”。你会发现同样的循环逻辑换个领域照样能用。循环工程的本质是把“做事”变成“设计做事的流程”这个思路的适用范围远不止写代码。Cursor 的中文设置、Claude Code 的安装、Codex 的配置这些具体操作会随着版本更新变化但循环设计的逻辑是稳定的。与其追着每个版本的更新跑不如把循环设计的六个零件吃透工具换了你照样能快速搭起一个能自己转的循环。