بازگشت به کتابخانهکتابخانه1.1Ralph چیست؟
تکنیک Ralph WiggumTHE RALPH WIGGUM TECHNIQUEاجرای ایجنت کدنویس در حلقه — از یک اسکریپت Bash تا ارکستراسیون کامل
v1.0.0
LESSON 1.1فصل ۱حلقه Ralph — ایده و اولین اجرا

Ralph چیست؟

  • ~۱۰ دقیقه
  • ۵ پرسش
  • متن را انتخاب کن تا هایلایت شود

اوایل ۲۰۲۶ یک تکنیک به اسم Ralph Wiggum وایرال شد و شیوه کار خیلی از توسعه‌دهنده‌ها با ایجنت‌ها را عوض کرد. ایده به طرز مشکوکی ساده است: ایجنت کدنویس محبوبت — Claude Code، یا هر ایجنت دیگری — را بردار و داخل یک حلقه اجرایش کن. همین. ولی پشت این سادگی، یک راه‌حل هوشمندانه برای بزرگ‌ترین ضعف مدل‌های زبانی پنهان است.

اسکلت حلقه: ralph.sh

کل تکنیک در یک اسکریپت Bash خلاصه می‌شود. یک پارامتر می‌گیرد (تعداد Iteration، پیش‌فرض ۱۰)، و در هر دور Claude Code را در Print Mode با محتوای `prompt.md` اجرا می‌کند:

#!/bin/bash
ITERATIONS=${1:-10}

for i in $(seq 1 $ITERATIONS); do
  echo "=== Iteration $i of $ITERATIONS ==="

  RESULT=$(claude -p "$(cat prompt.md)")
  echo "$RESULT"

  if [[ "$RESULT" == *"ALL TASKS COMPLETE"* ]]; then
    echo "All tasks completed after $i iterations."
    break
  fi
done
Print Mode — flag -p
به‌جای شل تعاملی، مدل پرامپت را می‌گیرد، کارش را می‌کند و فقط خروجی نهایی را چاپ می‌کند. `claude "hello"‎` شل تعاملی باز می‌کند؛ `claude -p "hello"‎` فقط جواب را چاپ می‌کند و تمام می‌شود.
Magic String
یک رشته توافقی مثل ALL TASKS COMPLETE. به مدل می‌گوییم «اگر پروژه تمام بود، دقیقاً این را چاپ کن». اسکریپت خروجی را چک می‌کند و اگر رشته را دید، از حلقه بیرون می‌آید.

حافظه بیرونی: سه فایل Markdown

هر دور حلقه، یک Session کاملاً تازه است. پس حافظه مدل را به فایل‌ها منتقل می‌کنیم:

فایلنقش
prompt.mdدستورالعمل ثابت هر دور: «مهم‌ترین وظیفه را از project.md پیدا کن و انجام بده»
project.mdفهرست وظایف پروژه با چک‌باکس — کارنامه «چه باید بشود»
progress.mdگزارش پیشرفت — کارنامه «تا حالا چه شده»

خود `prompt.md` چیزی شبیه این است:

Find the highest-priority task in project.md and implement it.
Append your progress to progress.md.
Check off the completed task in project.md.
Commit and push your changes.

Guidelines:
- Work on exactly ONE task per run.
- If every task is complete, output exactly: ALL TASKS COMPLETE

دو قید مهم در همین پرامپت است: مدل در هر دور فقط حق دارد روی «یک» وظیفه کار کند، و فقط وقتی همه‌چیز تمام است Magic String را چاپ کند.

نمونه واقعی: یک اپ Vue با چهار وظیفه

در ویدیوی اول سری، `project.md` یک پروژه کوچک تعریف می‌کند:

# Project: Vue playground

- [ ] Bootstrap a Vue 3 app in ./app
- [ ] Add a /hello-agent route that renders "Hello World 🤖"
- [ ] Link to /hello-agent from the index page
- [ ] Add confetti when the title is clicked

قبل از اجرا، در `‎.claude/settings.json` مدل را برای موفقیت آماده می‌کنیم — همان فایلی که در ویدیوی اول روی صفحه بود:

{
  "permissions": {
    "allow": [
      "Bash(npm install)",
      "Bash(npm create *)",
      "Bash(npm run *)"
    ],
    "deny": [
      "Bash(rm *)",
      "Bash(git rm *)"
    ]
  }
}

فصل ۴ این لیست‌ها را عمیق می‌کند. بعد روی یک Branch تازه، `‎./ralph.sh` را اجرا می‌کنیم. حدود ۳۰ ثانیه بعد اولین تیک در `project.md` می‌خورد؛ چند دور بعد همه وظایف تمام‌اند، مدل Magic String را چاپ می‌کند و حلقه بعد از پنج Iteration می‌ایستد. نتیجه؟ روت `‎/hello-agent` کار می‌کند و کلیک روی تیتر، Confetti می‌ریزد.

DIAGRAMیک دور از حلقه Ralph
prompt.md + project.md
claude -p
یک وظیفه انجام شد
progress.md آپدیت شد
commit & push
چک Magic String

چرا حلقه؟ مشکل Context Window

مدل‌ها Context Window محدودی دارند. وقتی پر شود، مدل مجبور است خانه‌تکانی (Compaction) کند و عملاً بخشی از حافظه‌اش را از دست می‌دهد. بدتر اینکه ثابت شده کارایی مدل با پر شدن Context افت می‌کند: مدل در نیمه اول پنجره‌اش می‌درخشد و بعد از آن سرازیری است — حتی با پنجره‌های یک میلیون توکنی.

حلقه Ralph این را دور می‌زند: هر Iteration یک Session نو با Context خالی است. حافظه، بیرون از مدل و داخل `project.md` و `progress.md` زندگی می‌کند. و یک سود دوم هم دارد: خودِ تو — انسان — از حلقه خارج می‌شوی و می‌توانی سراغ کار دیگری بروی.

به زبان ساده

Ralph یعنی ایجنت را در یک حلقه بیندازی: هر دور از صفر شروع می‌کند، یک کار کوچک می‌کند، تیک می‌زند و Commit می‌کند. حافظه‌اش روی کاغذ است نه توی سرش.

مثال واقعی

اپ Vue با چهار تیک: ساخت پروژه، روت hello-agent، لینک از صفحه اول، Confetti روی کلیک. بعد از پنج دور Magic String چاپ شد و حلقه ایستاد — روت کار می‌کرد و کلیک، Confetti می‌ریخت.

دانش‌سنجی

آزمون درس

۵ Q
01
ایده اصلی تکنیک Ralph چیست؟
02
چرا هر دور حلقه با Context خالی شروع می‌شود؟
03
نقش project.md و progress.md در حلقه چیست؟
04
Magic String دقیقاً چه کاری می‌کند؟
05
چرا در پرامپت قید می‌کنیم «در هر دور فقط یک وظیفه»؟