بازگشت به کتابخانهکتابخانه7.2آزمایش حلقه ابدی (Perpetual Loop)
تکنیک Ralph WiggumTHE RALPH WIGGUM TECHNIQUEاجرای ایجنت کدنویس در حلقه — از یک اسکریپت Bash تا ارکستراسیون کامل
v1.0.0
LESSON 7.2فصل ۷ریموت، حلقه ابدی و ارکستراسیون

آزمایش حلقه ابدی (Perpetual Loop)

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

سازنده یک آزمایش جالب کرد: Ralph CLI را به یک حلقه ابدی تبدیل کرد که خودش فیچر بعدی را برنامه‌ریزی و پیاده می‌کند. مدل را یک شب رها کرد و صبح با ۳۰ Pull Request و بیش از ۳۱٬۸۰۰ خط کد در ۳۰۰+ فایل روبه‌رو شد — و در کمال تعجب، پروژه واقعاً اجرا می‌شد و صفر تست شکست‌خورده داشت.

قلب ماجرا: Complete Hook

کلید کار، یک Hook است که وقتی یک حلقه Ralph تمام می‌شود صدا زده می‌شود. داخلش دو Claude پشت سر هم Spawn می‌شود:

# ralph.toml
[hooks]
complete = "./hooks/on-complete.sh"
#!/bin/bash
# ۱) اگر PR بازی هست، Merge کن
claude -p "If there is an open PR, merge it."
# ۲) فیچر بعدی را برنامه‌ریزی کن (کاملاً خودکار)
claude -p "$(cat .claude/skills/next-feature/SKILL.md)"

Skill به نام `next-feature` به Linear نگاه می‌کند تا ببیند چه انجام شده، بعد سند Vision را می‌خواند — همان North Star. اسکلت واقعی آن سند در آزمایش این بود:

# Vision — North Star

A multi-tenant food ordering platform.

## Constraints
- Multi-tenancy is required
- Tech stack is frozen:
  - Laravel
  - Inertia + React
  - SQLite
  - Laravel built-in auth  (do not invent another auth)

## Feature areas (in order)
1. Foundation — tenants, auth, seeding
2. Management interface — menu, staff, settings
3. Webshop — discovery, cart, checkout, tracking
4. Advanced — payments, reviews, promotions
Perpetual Loop
حلقه‌ای که خودش کار بعدی را می‌سازد و بی‌پایان ادامه می‌دهد؛ خروجی هر حلقه، ورودی حلقه بعد را برنامه‌ریزی می‌کند.
Complete Hook
Hook ای که با پایان هر حلقه اجرا می‌شود؛ اینجا PR را Merge و فیچر بعدی را Plan می‌کند.
Vision Document
سند «ستاره شمالی» که جهت کلی محصول را می‌دهد تا مدل در حلقه ابدی از ریل خارج نشود.

مهار مدل: چند Guardrail

برای اینکه مدل کاملاً از ریل خارج نشود، سازنده چند کار کرد:

  • **Vision Document:** ستاره شمالی — «یک پلتفرم چند-مستأجری سفارش غذا». Tech Stack تثبیت‌شده: Laravel، Inertia + React، SQLite، Auth توکار Laravel. و چند حوزه فیچر: پایه، پنل مدیریت، فروشگاه، و فیچرهای پیشرفته (پرداخت، نظرات و…).
  • **شروع دستی پروژه:** خودش `laravel new` را در مخزن خالی اجرا کرد — لذتی که هنوز حاضر نیست از آن بگذرد.
  • **Agent Browser Skill:** به مدل یاد داد کار خودش را در مرورگر بررسی کند (با تنظیم یک Docker Fragment سفارشی برای کارکرد داخل YoloBox).
  • **Stop Hook:** Claude معروف است که موقع تست‌های شکست‌خورده تنبلی می‌کند؛ این Hook باعث می‌شود نتواند شکست تست را نادیده بگیرد.
Stop Hook
Hook ای که هنگام «توقف» مدل اجرا می‌شود؛ اینجا مدل را مجبور می‌کند شکست تست را نادیده نگیرد.
North Star
هدف راهنمای واحد که همه تصمیم‌ها را جهت می‌دهد.

نتیجه: چه ساخته شد؟

پلتفرم واقعاً کار می‌کرد: کشف رستوران، مرور منو، افزودن به سبد با Modifier، Checkout، تأیید سفارش، پنل مدیریت، Kitchen Display، رهگیری سفارش. حتی نکته امنیتی جالب: کلید Stripe و Webhook Secret در دیتابیس رمزنگاری شده بودند، نه Plaintext — چیزی که سازنده انتظار نداشت مدل درست انجام دهد.

اما نقص‌ها هم بود: نوتیفیکیشن با Polling بود نه WebSocket (که در این حالت واقعاً باید WebSocket می‌بود)، یک Visual Glitch که با Refresh می‌رفت، و منطق ساعات کاری اجازه بازه‌های هم‌پوشان می‌داد.

DIAGRAMحلقه ابدی
حلقه Ralph تمام می‌شود
Complete Hook
Claude ۱: Merge PR
Claude ۲: next-feature از روی Vision
حلقه بعدی خودکار شروع می‌شود

اگر این‌جور آزمایش‌ها برایت جذاب است، Anthropic هم مقاله خوبی درباره Harness Engineering منتشر کرده که ارزش خواندن دارد.

به زبان ساده

می‌شود حلقه را طوری ساخت که بعد از هر PR، خودش فیچر بعدی را از روی یک سند چشم‌انداز برنامه‌ریزی کند. صبح با ده‌ها PR بیدار می‌شوی — اجرا می‌شود، ولی بازبینیش practically غیرممکن است.

مثال واقعی

۳۰ PR و ۳۱٬۸۸۱ خط برای پلتفرم سفارش غذا. جریان واقعی کار کرد: سبد با Modifier، Checkout، Kitchen Display، رهگیری. Stripe Secret در دیتابیس رمزنگاری شده بود. نوتیفیکیشن Polling بود نه WebSocket. سازنده گفت به Production نمی‌فرستد، چون ۳۰ هزار خط را نمی‌شود خواند.

دانش‌سنجی

آزمون درس

۵ Q
01
قلب حلقه ابدی کدام Hook است و چه می‌کند؟
02
چرا Vision Document در حلقه بی‌ناظر حیاتی است؟
03
نتیجه آزمایش شبانه چه بود؟
04
Stop Hook در این آزمایش چه مشکلی را هدف گرفت؟
05
سازنده این خروجی را به Production می‌فرستاد؟ چرا؟

سناریوی تشریحی

می‌خواهی یک حلقه ابدی برای «ابزار داخلی تیکت پشتیبانی» آزمایش کنی، نه فروشگاه غذا. چه سند Vision، چه Hookها و چه Guardrailهایی می‌گذاری تا صبح با ۳۰ PR غافلگیرکننده ولی غیرقابل‌بازبینی روبه‌رو نشوی؟ اول خودت بنویس، بعد مقایسه کن.