📌 项目地址snarktank/ralph | ⭐ 19,736 颗星 | 🔧 TypeScript | 📜 MIT

为什么需要Ralph:AI编码工具的上下文窗口撑不住长任务

我试过用Claude Code写一个完整的用户认证系统。前5轮对话很顺,接口定义、数据库设计都定了。到第10轮,它开始用我没说过的类名,忽略之前约好的错误码格式。重启会话,重新讲一遍需求,折腾半小时。不重启,它继续在错误的方向上写代码。

这不是某个AI工具的问题。单次AI会话的上下文窗口是固定的,窗口满了,最早的信息就被挤出模型视野。Ralph不试图延长窗口长度——它换了一个思路:不用一个对话做完整件事,而是把大任务拆成小任务,每个小任务用全新的会话独立完成。

Ralph是一个shell脚本,GitHub上19736个star。它的核心机制不是增强AI,而是增加一个调度层,让AI工具做完一项后提交结果退场,换下一个干净实例上来自进程重复。

接力机制:用文件状态代替AI记忆

Ralph的工作循环:

  1. 读取 prd.json,里面存着拆好的用户故事列表。
  2. 启动AI编码工具的新实例,分配当前未完成的用户故事。
  3. AI执行任务、提交代码到git、写入进度到 progress.txt,然后退出。
  4. Ralph检测进度文件,如果列表未完成,启动下一个新实例。

每个AI实例都是零上下文启动。项目的状态不靠AI记住,靠三个持久化文件:

  • prd.json:定义要做什么任务。
  • progress.txt:记录当前完成到哪一步。
  • git历史:保存每次任务改了什么代码。

途中电脑关机、AI崩溃、你离开处理其他事——重新运行Ralph,它读取进度文件,从断点继续执行。这不是对话续传,是任务接力。

对于过长任务,README建议在Amp中开启自动移交功能。修改 ~/.config/amp/settings.json,添加配置:

{
  "amp.experimental.autoHandoff": { "context": 90 }
}

上下文占用到90%自动触发新实例接手。

工作流的核心步骤:写一份机器可读的PRD

Ralph的工作流要求你先准备结构化的需求文档。它提供了两个内置技能来完成这件事。

第一步:生成PRD的Markdown文档。

在AI工具中加载prd技能并输入功能描述:

Load the prd skill and create a PRD for [your feature description]

技能会问你一系列问题,最终输出一份分层级的Markdown文件,保存在 tasks/prd-[功能名].md。这一步的目的是把模糊需求拆成用户故事、验收条件、技术约束。

第二步:将Markdown转为JSON格式。

Markdown文件对人类可读,但Ralph脚本需要机器可读的结构。用第二个技能执行转换:

Load the ralph skill and convert tasks/prd-[feature-name].md to prd.json

输出 prd.json 包含一组结构化的用户故事,每条故事就是一次Ralph循环的迭代单元。

这个流程迫使你在动手编码之前完成需求拆解。PRD写得不清晰,AI在循环中就会输出错误内容。写一份合格的PRD是整个工作流中最费时的步骤,但它能节省后续调试的时间。

三种安装方式

方式1:复制到项目内。

# 在项目根目录执行
mkdir -p scripts/ralph
cp /path/to/ralph/ralph.sh scripts/ralph/
# 根据使用的AI工具选择prompt模板
cp /path/to/ralph/prompt.md scripts/ralph/prompt.md    # 用Amp
# 或
cp /path/to/ralph/CLAUDE.md scripts/ralph/CLAUDE.md    # 用Claude Code
chmod +x scripts/ralph/ralph.sh

每个项目重复一次。

方式2:全局安装技能。

skills/prdskills/ralph 两个目录复制到全局技能配置即可。Amp和Claude Code的安装路径不同:

# Amp
cp -r skills/prd ~/.config/amp/skills/
cp -r skills/ralph ~/.config/amp/skills/

# Claude Code(手动安装)
cp -r skills/prd ~/.claude/skills/
cp -r skills/ralph ~/.claude/skills/

全局安装后任何项目都能使用 /prd/ralph 技能。

方式3:Claude Code Marketplace。

将Ralph marketplace添加到Claude Code:

/plugin marketplace add snarktank/ralph

然后安装技能:

/plugin install ralph-skills@ralph-marketplace

安装完成后,直接对Claude说“create a prd”或“convert this prd”,技能会自动触发。

运行循环

./scripts/ralph/ralph.sh

脚本启动后,读取 prd.json,找到当前未完成的第一条用户故事,启动AI工具执行任务,完成后更新进度,如果列表未完成,重复循环。

实用判断与建议

这个方案有明显的适用约束。

它的收益在于:你不需要全程盯着AI执行的进度。脚本在你后台运行,偶尔检查一下进度文件即可。某次任务卡住了,修正后重新执行,进度不会丢失。

它的代价是:前期需求拆解的工作量很大。每条用户故事要拆得够细,边界清晰,验收条件明确。如果不习惯这种工作方式,Ralph会带来冗余感。

对于已经在用AI编码工具且项目周期超过单次会话上下文窗口的开发者,Ralph是一个值得尝试的调度层。它不改变AI的推理能力,它处理的是AI工具在高自由度编码时的稳定性问题。19736个star表明,很多开发者遇到了同样的问题,并认可这个解决方案的有效性。

这篇文章对你有帮助吗?

发表回复