سازنده یک آزمایش جالب کرد: 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مهار مدل: چند Guardrail
برای اینکه مدل کاملاً از ریل خارج نشود، سازنده چند کار کرد:
- **Vision Document:** ستاره شمالی — «یک پلتفرم چند-مستأجری سفارش غذا». Tech Stack تثبیتشده: Laravel، Inertia + React، SQLite، Auth توکار Laravel. و چند حوزه فیچر: پایه، پنل مدیریت، فروشگاه، و فیچرهای پیشرفته (پرداخت، نظرات و…).
- **شروع دستی پروژه:** خودش `laravel new` را در مخزن خالی اجرا کرد — لذتی که هنوز حاضر نیست از آن بگذرد.
- **Agent Browser Skill:** به مدل یاد داد کار خودش را در مرورگر بررسی کند (با تنظیم یک Docker Fragment سفارشی برای کارکرد داخل YoloBox).
- **Stop Hook:** Claude معروف است که موقع تستهای شکستخورده تنبلی میکند؛ این Hook باعث میشود نتواند شکست تست را نادیده بگیرد.
نتیجه: چه ساخته شد؟
پلتفرم واقعاً کار میکرد: کشف رستوران، مرور منو، افزودن به سبد با Modifier، Checkout، تأیید سفارش، پنل مدیریت، Kitchen Display، رهگیری سفارش. حتی نکته امنیتی جالب: کلید Stripe و Webhook Secret در دیتابیس رمزنگاری شده بودند، نه Plaintext — چیزی که سازنده انتظار نداشت مدل درست انجام دهد.
اما نقصها هم بود: نوتیفیکیشن با Polling بود نه WebSocket (که در این حالت واقعاً باید WebSocket میبود)، یک Visual Glitch که با Refresh میرفت، و منطق ساعات کاری اجازه بازههای همپوشان میداد.
اگر اینجور آزمایشها برایت جذاب است، Anthropic هم مقاله خوبی درباره Harness Engineering منتشر کرده که ارزش خواندن دارد.
به زبان ساده
میشود حلقه را طوری ساخت که بعد از هر PR، خودش فیچر بعدی را از روی یک سند چشمانداز برنامهریزی کند. صبح با دهها PR بیدار میشوی — اجرا میشود، ولی بازبینیش practically غیرممکن است.
مثال واقعی
۳۰ PR و ۳۱٬۸۸۱ خط برای پلتفرم سفارش غذا. جریان واقعی کار کرد: سبد با Modifier، Checkout، Kitchen Display، رهگیری. Stripe Secret در دیتابیس رمزنگاری شده بود. نوتیفیکیشن Polling بود نه WebSocket. سازنده گفت به Production نمیفرستد، چون ۳۰ هزار خط را نمیشود خواند.