prompt.md (= CLAUDE.md) に定義、ralph.sh がループ実行する。
1 イテレーション = 1 story の流れ (prompt.md:5-16):
prd.json を読込progress.txt の Codebase Patterns セクションを確認branchName に沿ってブランチをチェックアウト (無ければ main から作成)passes: false の中で 最高優先度 の user story を 1 つだけ選択AGENTS.md / CLAUDE.md に再利用可能なパターンがあれば追記feat: [Story ID] - [Story Title] でコミットpasses: true に更新progress.txt に進捗 (learnings 含む) を追記全 story が passes: true になったら <promise>COMPLETE</promise> を出力。
ralph.sh 側でこれを grep 検知してループを終了する (ralph.sh:99-104)。
ralph.sh がシェルから CLI を繰り返し起動するだけの構造 (ralph.sh:84-108)。
for i in $(seq 1 $MAX_ITERATIONS); do
if [[ "$TOOL" == "amp" ]]; then
OUTPUT=$(cat "$SCRIPT_DIR/prompt.md" | amp --dangerously-allow-all 2>&1 | tee /dev/stderr) || true
else
OUTPUT=$(claude --dangerously-skip-permissions --print < "$SCRIPT_DIR/CLAUDE.md" 2>&1 | tee /dev/stderr) || true
fi
if echo "$OUTPUT" | grep -q "<promise>COMPLETE</promise>"; then
exit 0
fi
sleep 2
done
prompt.md (または CLAUDE.md) を stdin 投入する。prd.json — 何をやるか / どこまで終わったか (passes フラグ)progress.txt — 学びの蓄積 (Codebase Patterns / 各イテレーションの learnings)git — 実装そのものMAX_ITERATIONS (デフォルト 10) まで単純な for ループで回す。archive/ に前回の prd.json と progress.txt を退避する仕組みもある (ralph.sh:43-65)。プロンプト (タスク定義) + 外部ファイル状態 + CLI をループ で叩くだけ
という極めてミニマルな設計。「LLM に会話履歴を持たせない」「状態は全部ファイル」という割り切りで、Agent の長時間自律動作を実現している。