1. 为什么 Claude Code 总在“差不多”的地方停下
如果你用 Claude Code 跑过稍微长一点的任务,大概率见过这个画面:它噼里啪啦改了一堆文件,跑了一次测试,然后把报错原样贴回来,说一句“已经完成,你可以运行测试验证”。你一看,测试红的,逻辑缺一半,它却已经收工了。
这不是模型能力问题,而是 Claude Code 默认的运行模式决定的——单轮执行。它做完一轮推理就认为任务结束,不会主动回头跑测试、看报错、再改一遍。你得像监工一样反复敲“继续”“还没好”“测试没过”,它才勉强再动一下。任务越长,这种“反复确认却没收尾”的消耗越明显。
Ralph Loop 就是冲着这个痛点来的。它是一个 Claude Code 插件,核心思路来自一个极简的 bash 循环:只要任务没输出约定的完成承诺,就把原始提示词重新喂回去,让 Claude 接着干。名字取自《辛普森一家》里那个永远失败、永远不放弃的 Ralph Wiggum——插件想表达的就是这个意思:不管失败几次,坚持到真正完成为止。
这篇文章面向已经在用 Claude Code、但被长任务中途停摆折磨过的开发者。我会给出可复制的 settings.json 骨架、Ralph Loop 提示词模板,并完整演示一次从任务启动到真正完成的验证动作。全程用 TaoToken 作为模型接入层,配置简单,国内直连可用。
2. TaoToken 前置:把模型接入这层先铺好
Ralph Loop 本身不提供模型,它只是驱动 Claude Code 反复迭代。所以第一步是把 Claude Code 的模型接入配好。我用的是 TaoToken,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。
为什么选它做这件事:Ralph Loop 会高频调用模型,一个任务跑十几轮迭代很常见,接入层的稳定性和计费透明度直接决定你半夜挂机敢不敢睡。TaoToken 提供统一的 API Key,兼容 Anthropic 风格的调用,Claude Code 直接改环境变量就能接上,不需要额外折腾。
你需要先拿到一个 API Key。登录后进控制台,在 API Keys 页面创建一个:
- 控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
创建时建议给 Key 起个能认出来的名字,比如claude-code-ralph,方便后面按项目区分用量。拿到形如sk-xxxx的字符串后先存好,下一步配置要用。
注意:Ralph Loop 会连续多轮调用,建议在控制台给这个 Key 设一个预算上限或用量提醒,避免提示词写糊了导致无限迭代烧配额。
3. 可复制配置:settings.json 骨架与 Ralph Loop 安装
这一节是全文最核心的部分,分三块:Claude Code 的模型接入配置、Ralph Loop 插件安装、以及 settings.json 的完整骨架。
3.1 配置 Claude Code 走 TaoToken
Claude Code 通过环境变量读取 API 端点和 Key。你可以直接写进 shell 配置,也可以放进项目的 settings.json。先看环境变量方式,最直接:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥"写进~/.bashrc或~/.zshrc后source一下,或者新开终端。验证是否生效:
claude --version能正常输出版本号,说明 CLI 本身没问题。真正的连通性验证放到第 4 节。
3.2 安装 Ralph Loop 插件
Ralph Loop 依赖 Claude Code 的插件机制,需要 2.0.76 或以上版本(要支持/plugins命令)。先确认版本:
npm install -g @anthropic-ai/claude-code claude --version版本达标后,在 Claude Code 会话里依次执行:
# 添加插件市场 /plugin marketplace add anthropics/claude-code # 安装 Ralph Wiggum 插件 /plugin install ralph-wiggum@claude-code-plugins # 重载插件 /reload-plugins # 确认安装(注意是复数 plugins) /plugins装好后你会得到两个命令:/ralph-wiggum:ralph-loop启动循环,/ralph-wiggum:cancel-ralph取消循环。
3.3 settings.json 骨架
把模型接入和插件行为固化到项目里,推荐在项目根目录建.claude/settings.json。下面是我实测可用的骨架,你可以直接复制改:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥" }, "permissions": { "allow": [ "Bash(npm run test:*)", "Bash(npm run build:*)", "Bash(pytest:*)", "Read", "Edit", "Write" ] }, "ralphLoop": { "defaultMaxIterations": 15, "completionPromise": "DONE", "stateFile": ".claude/.ralph-loop.local.md" } }几个关键点解释一下。env块让这个项目固定走 TaoToken,不依赖全局环境变量,团队协作时不会互相干扰。permissions.allow里放的是 Ralph Loop 迭代过程中会反复调用的命令——测试、构建、读写文件。如果你不放行,每一轮迭代都会弹权限确认,循环根本跑不起来。
ralphLoop块是插件读取的默认参数。defaultMaxIterations设 15 是保守值,大多数中等任务够用;completionPromise定义完成关键词,必须和提示词里写的完全一致;stateFile是循环状态保存位置,Claude 每轮重启都从这里读进度,知道哪里做完了、哪里还差。
注意:settings.json 里不要提交真实 Key 到 Git。生产项目建议用环境变量注入,或者把 Key 放在
.claude/settings.local.json并加入.gitignore。
4. 验证请求:跑通一次真实迭代
配置铺好后,先做一次最小验证,确认 TaoToken 接入和 Ralph Loop 都能正常工作,再上真实任务。
4.1 先验证模型连通
在 Claude Code 会话里直接问一句,确认请求能打到 TaoToken:
claude -p "用一句话说明你当前使用的模型名称"如果返回正常文本,说明ANTHROPIC_BASE_URL和 Key 都生效了。如果报 401,检查 Key 是否复制完整;如果报连接超时,检查端点是否写成了https://taotoken.net/api(不要多加斜杠或路径)。
4.2 启动第一个 Ralph 循环
用一个简单但需要迭代的任务试水——写一个邮箱校验函数并配测试:
/ralph-wiggum:ralph-loop "Create a Python function that validates email addresses. Include edge case handling and write 3 test cases. Run the tests. If any test fails, fix the code and rerun. Output <promise>DONE</promise> when all tests pass." --completion-promise "DONE" --max-iterations 5观察输出。第一轮它可能只写了基础实现,测试跑出边界问题;第二轮它会读报错、改代码、重跑;直到测试全绿,输出<promise>DONE</promise>,循环才停。
4.3 一次完整任务的验证动作
上面是玩具任务。真实场景我拿一个 Express 的 todo API 来演示。提示词这样写:
/ralph-wiggum:ralph-loop "Build a REST API for todos with Express. Requirements: - All CRUD endpoints working (GET/POST/PUT/DELETE) - Input validation on POST and PUT - Tests passing with coverage above 80% - README with API documentation Run npm test after each change. If tests fail, read the error, fix it, and rerun. Output <promise>COMPLETE</promise> when all criteria are met." --completion-promise "COMPLETE" --max-iterations 20启动后你可以去干别的。Ralph Loop 每轮结束会尝试退出,停止钩子拦截它,检查输出里有没有<promise>COMPLETE</promise>。没有就把原始提示词重新喂回去,Claude 读上一轮产出,发现测试没过或覆盖率不够,继续改。
我实测下来,这个任务跑了 7 轮:第 1 轮搭骨架,第 2 轮补 validation,第 3 轮测试报错,第 4 轮修 bug,第 5 轮补 DELETE 的边界,第 6 轮覆盖率差一点,第 7 轮补齐后输出完成承诺。整个过程状态存在.claude/.ralph-loop.local.md,中途你Ctrl+C掉,下次启动还能接着读进度。
验证成功的标志很明确:终端最后出现<promise>COMPLETE</promise>,且npm test全绿。这时候你再去git diff看改动,会发现它真的把测试跑通了,而不是嘴上说完成。
5. 本篇常见错排查
Ralph Loop 跑不起来,八成是下面几个原因。我按踩坑频率排一下。
循环启动后立刻退出,没有任何迭代。最常见是--completion-promise和提示词里的承诺标签不一致。提示词写<promise>DONE</promise>,参数却传--completion-promise "COMPLETE",Claude 第一轮输出 DONE,钩子找不到 COMPLETE,逻辑就乱了。两边必须逐字符一致,包括大小写。
每轮都弹权限确认,循环卡死。settings.json 的permissions.allow没放行测试或构建命令。Ralph Loop 是非交互的,弹窗没人点,直接挂起。把Bash(npm run test:*)、Bash(pytest:*)这类加进去。
迭代次数用完了任务还没完成。--max-iterations设太小。中等任务建议 15 起,复杂重构可以到 30-50。但别一上来就设 100,先用小值验证提示词逻辑,确认每轮都在有效推进,再加大。
提示词太模糊,Claude 在“猜你想要什么”。这是最烧钱的坑。像 “Build a todo API and make it good” 这种,Claude 不知道什么叫 good,会反复重写。改成带完成清单的写法,每条都可验证:端点全通、validation 到位、测试覆盖率 80% 以上、README 齐全。
报 401 或连接失败。检查ANTHROPIC_BASE_URL是否精确为https://taotoken.net/api,Key 是否过期或被删。可以回控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 重新生成一个对比测试。
想中途叫停。直接/ralph-wiggum:cancel-ralph,别硬Ctrl+C,后者可能留下不完整的状态文件,下次启动读到脏数据。
6. 把长任务真正跑完的下一步
Ralph Loop 解决的是一个很具体的问题:AI 不该只做一轮就停。在编程这件事上,“差不多”和“真的完成”之间隔着好几次测试、好几个 bug 修复、好几轮细节完善。单轮模式让 Claude 在这个关键阶段缺席了,Ralph Loop 把这段距离填上——它不改变推理能力,只改变工作模式,从“给一个答案”变成“直到做对为止”。
前提只有一个:提示词得写清楚。完成标准越可量化,循环越高效,成本越可控。那个 297 美元完成 5 万美元项目的案例,核心就是任务定义极清晰,每一轮都在有效推进,没有陷入内耗。
如果你还没配好接入层,先去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 拿个 Key,按第 3 节的 settings.json 骨架铺好。想先感受模型对话效果,可以从 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 试起。长期跑编码和 Agent 任务的话,Coding Plan 在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,按用量规划更省心。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,遇到参数问题直接查。
最后留一个实用习惯:每次启动 Ralph Loop 前,先把提示词的完成清单在纸上列一遍,确认每一条都能用命令验证。清单越硬,循环越短,你睡得越踏实。