ralph — 当前仓库的任务闭环
你用一句话说需求,Agent 把它从 分析 → 计划 → 交付 → 验收 → 归档 做完,过程记录留在仓库里,随时能核对、能接着改。只作用于当前这一个仓库;不动 Git 提交推送,也不碰别的仓库。
写法
| 工具 | 写法 |
|---|---|
| Codex | $jj-ralph … |
| Claude / Grok / Qoder | /jj-ralph … |
适用与边界
用得当:
- 需求只涉及当前这一个仓库
- 做完之后要有东西可查:改了什么、为什么、验收怎么过的
别用在:
| 你想做的 | 去这里 |
|---|---|
| 把项目A 做好的能力迁到项目B / 项目C | same |
| 多个项目一起派、一起盯 | dispatch |
| 只想提交、合分支 | end |
| 把当前仓加进全局项目地图 | init |
开始前
- 在业务仓库的根目录打开对话(不是调度用的控制仓)
- 切到该需求的功能分支;ralph 在当前分支上工作,不会自动切换分支
- 已经安装了 skill
已知当前任务时,Agent 作为 team-lead 读 index.md 和 task_plan.md,写派单并 spawn 子代理去做。不要打开 skill 手册当作启动清单,也不要执行 ralph_ops / jj ralph。人读合同仍是 Goal / 验收 / Steps,验证写进 progress.md。
第一次这样用
你说:
$jj-ralph 先改项目A:登录成功后如果密码过期要弹提示,只做登录成功那条路Agent 会做:
派遣宣告、占位、续接的规则见 skills/jj/references/assignment-spawn.md,本页不再重复。
- 对齐——确认目标和"怎样算做完"(验收项),写入短合同。主对话是 team-lead,不在这里改业务代码
- 计划——列出要改哪些文件、分几步(给派单用)
- 派单实施——每轮写一份
ASSIGNMENT-TASK(读这些 / 交付必须是精确文件),派遣宣告、占位、续接按上述协议,spawnjj-implementer子代理(缺失则general-purpose;description以[implementer]开头)。这一轮结束就停,等下一轮,不连做 Task n+1 - 审查(大功能)——验证通过后写改动摘要,派遣宣告、占位、续接按上述协议,spawn
jj-reviewer(description以[reviewer]开头)。本轮只有文案 / 样式、以及小改,跳过审查 - 你验收——审查
[OK]/[WARN]之后等你测过,再对照验收项收口 - 归档——记录定稿,任务目录移入
completed/
一轮一派单,子代理汇报后停。大功能审完要等你验收,不会直接收工。还会停下来的情况:MUST / 范围 / 验收事后仍确认不了(先问,不要凭猜测推进)、你说了"先不写代码"、要做推送这类不可逆的事。
你会看到: 聊天里先说明这一步在做什么,然后仓库里多出 .workflow/ralph/task-…/:
| 文件 | 里面是什么 |
|---|---|
task_plan.md | 目标、验收项、步骤(当前版本,不堆历史) |
progress.md | 按日期追加的过程记录:做了什么、卡在哪 |
findings.md | 改动摘要、实际踩过的坑、可复用的结论 |
assignments/ | 每轮派单:ASSIGNMENT-TASK / ASSIGNMENT-REVIEW / ASSIGNMENT-FIX |
怎样算做完: 大功能过审且你验收通过后归档——目录已在 .workflow/ralph/completed/ 下,Agent 给你一段短报告(任务名、验收结果、可复用结论)。归档时,可复用结论会记到本机 ~/.jj-flow/memory/,下次同一项目开任务自动带上;全局知识库仅在你主动提出并经确认后写入。
聊天里说"做完了"不算数。算数的是任务目录里的记录和
git diff。
常用说法
开一个需求
$jj-ralph 票面预览的关闭按钮点了没反应
$jj-ralph 先改项目A:登录后密码过期要提示没点名项目时,默认就是当前工作区这个仓。
用截图说需求——直接贴图,说"这里":
$jj-ralph [截图] 这里要改一下:放到列表对应列的下面,标题去掉先分析,不动代码——只写目标和存疑点,你确认后再实施:
$jj-ralph 先不写代码,先分析怎么做
$jj-ralph 我认可你的方案,开始做吧小改——分析和计划写短,仍走五步:
$jj-ralph tip 的 bottom 从 4px 改成 6px明确验收要求:
$jj-ralph 刷新鉴权 token 失败要重登,审查过再归档写整齐一点(可选)——按字段把需求和验收写清楚:
$jj-ralph
当前项目=项目A
目标=登录后密码过期提醒
范围=仅登录成功路径
验收=出现提示且可跳转改密卡住时——换策略、暂停、退回:
$jj-ralph 换策略:先只接 password_expired 字段
$jj-ralph 先暂停,等产品给样例
$jj-ralph 验收不算,退回去改回退只能一步一步(验收 → 改代码 → 计划 → 分析)。默认不会 git revert 你的代码。
做完之后
还是同一件事,就接着同一条任务改——归档过也一样,你不需要记任务编号,Agent 会自己找到它;候选太多分不清时才会列几个标题让你选。
| 你想 | 示例说法 | 会怎样 |
|---|---|---|
| 再改一点 | 「tip 应是 6px 不是 8px」「刚才那个再改一下」 | 找到同一任务接着改 |
| 加一点 | 「close 按钮也跟着下移」 | 同一任务扩范围,重新验收 |
| 同会话接着做 | 「继续」「修完」 | 接着当前没做完的那一步 |
| 按审查意见改 | 「按审查改」 | 对着最新一条审查结论改,不从头分析;不新开「审查修复」任务 |
| 方向错了 | 「改坏了」 | 同一任务换做法,重写步骤 |
| 先不做了 | 「这个先不做了,产品砍了」 | 标成废弃;以后说「还要做」能救回 |
| 完全另一件事 | 「另外做一件…」 | 这时才新开一条任务 |
| 迁到别的仓 | 「交接到 项目B 项目C」 | 交给 same;源仓要先提交 |
| 提交 / 推送 / 合分支 | $jj-end 或「收工」 | 交给 end,只动 Git |
收尾与边界
- 验收通过后 MUST finalize:任务目录移入
completed/,更新index.md,双写run.json。只过门不收尾,任务会留在活跃层,机械status会提示next: finalize;phase=ARCHIVE仍在活跃目录,就提示"未完成收尾" - 默认验收后直接归档;你要求审查、或门禁需要审查证据时,Agent 才跟进 review。提交代码仍需要你的授权
- 「审查修复 / review-fix」不是新任务:在原任务上继续,不另开
task-*-review-fix - 说「写入知识库」时,经你确认后写入
~/.jj-flow/knowledge(当前项目) index.md管活跃任务:超过 5 条还在运行、或任一条 5 天没动,会出现「归档提示」;同一会话或同任务线程的「审查修复」并排运行会出现「同需求提示」。都只提醒,不自动归档- 对话里 Agent 读
index.md活跃表,不执行 CLI;命令行维护用jj ralph locate(定位)与jj ralph remediate(存量收尾,先看名单再加--yes),全集见 CLI 参考 - 旧任务或维护记录里可能看到
task-login-reminder、CAP-login-reminder、DEL-password等机器标识;它们只是记录名字,不是你要输入的格式。控制项目只负责多项目调度,任务 ralph 仍在业务仓里运行
记录在哪
.workflow/ralph/
index.md
business-map.json
task-…/ # 活跃:task_plan(Goal/验收/Steps)+ 按日 progress + findings;机器事件在 .state/
task_plan.md
progress.md
findings.md
.state/
run.json
events.jsonl
reviews/REV-*.json
handoff.json
completed/task-…/ # archive / abandon 后迁入(含 ABANDONED)
migrated/RALPH-*/ # 1.0 RALPH-* 迁移残骸
archive/YYYY-MM-DD-*/ # 旧版快照只读;migrate --prune-archive [--yes] 可清理
tasks/ # 旧版嵌套布局,迁移后提升到根目录日常阅读 task_plan.md 与 progress.md 即可;.state/ 为机器状态,一般无需查看。控制项目中的 DEL-… 属于 dispatch,不要用 ralph 顶替业务实现。