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

انتقال حلقه به یک ماشین ریموت

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

Ralph CLI روی ماشین محلی عالی کار می‌کند، ولی یک جایی از خودت می‌پرسی چرا همه‌چیز به لپ‌تاپم گره خورده؟ شاید در تیم کار می‌کنی، شاید مدام دستگاه عوض می‌کنی، یا فقط نمی‌خواهی کل Workflow ات به ماشین محلی وابسته باشد. اینجا Remote Worker وارد می‌شود — و این دقیقاً روشی است که سازنده سری چند ماه است Ralph را اجرا می‌کند.

دو راه، یک ایده

سازنده یک Mac Mini اختصاصی در دفتر خانه دارد که با `ssh cloudbox` در دسترس است. اما نیازی به ماشین اختصاصی نیست؛ هر VPS از هر Provider ای که بتوانی به آن SSH بزنی کار می‌کند.

Remote Worker
ماشین دیگری (Mac Mini، VPS و…) که حلقه‌های Ralph روی آن اجرا می‌شوند تا Workflow به دستگاه محلی وابسته نباشد.
SSH — Secure Shell
پروتکل اتصال امن به ماشین ریموت برای اجرای دستور از راه دور.

راه اول: SSH + tmux دستی

ساده‌ترین راه، همان چیزهایی است که قبلاً یاد گرفتیم:

ssh cloudbox
# روی ریموت مطمئن شو Ralph نصب و نسخه درست است
tmux new -s laracasts_ralph
cd project
ralph

روی ریموت باید همان Setup محلی را داشته باشی: Ralph نصب، متغیر `LINEAR_API_KEY` (اگر Linear می‌خواهی)، YoloBox نصب، و GitHub CLI احراز هویت‌شده. بعد Detach کن (`Ctrl-B D`)؛ چون در حالت Linear با Polling هستیم، حلقه Headless می‌ماند و کار را از Linear برمی‌دارد. حالا Linear عملاً Control Plane توست — حتی از موبایل می‌توانی کار Dispatch کنی.

عیب این روش: برای دیدن خروجی یا کشتن ایجنت باید به ریموت و Session وصل شوی (`tmux attach -t laracasts_ralph`). ولی صادقانه، سازنده می‌گوید همین‌طوری اجرایش می‌کند و برایش مشکلی نیست.

راه دوم: پشتیبانی Remote توکار در CLI

اگر آن کنترل اضافه را می‌خواهی، Ralph CLI پشتیبانی Remote دارد. در `ralph.toml`:

[remote]
host = "cloudbox"
project_dir = "/home/user/laracasts"
workspace = "copy-on-write"
directory = "laracasts"
yolobox = true
auto_create_pr = true

حالا محلی با فلگ اجرا می‌کنی:

ralph --remote cloudbox

پشت صحنه: Ralph یک Session SSH به ریموت باز می‌کند، حلقه را Headless داخل یک tmux Session اجرا می‌کند، و لاگ‌ها را به Control Plane محلی‌ات Stream می‌کند. اگر وسط اجرا `Q` بزنی، حلقه را نمی‌کشی — فقط Detach می‌شوی و بعداً از هر دستگاهی دوباره وصل می‌شوی. وقتی حلقه تمام شد، Session tmux را هم می‌بندد؛ پس tmux لایه Persistence است که ماشین محلی می‌داند کدام ایجنت هنوز زنده است.

جداسازی هویت: کاربر GitHub اختصاصی

نکته مهم عملیاتی: روی ماشین‌های ریموت با یک کاربر GitHub «اختصاصی» احراز هویت کن، نه کاربر شخصی خودت. دلایل:

  • حتی با Fine-grained Token ها، تنظیم دقیق مرزها سخت است.
  • استفاده از هویت خودت گیج‌کننده می‌شود: وقتی به یک Commit یا PR نگاه می‌کنی، معلوم نیست کار تو بوده یا ایجنت.

جداسازی تمیز بین «کار انسان» و «کار ایجنت» نه‌فقط برای امنیت، که برای وضوح ارزشمند است. هزینه‌اش شاید یک Seat اضافه باشد، ولی به‌گفته سازنده می‌ارزد. در PR واقعی، کاربر `cloudbox` سازنده PR است — کاملاً مشخص که کار ایجنت بوده.

Fine-grained Token
توکن دسترسی GitHub با مجوزهای ریز؛ حتی با آن هم تعیین مرز دقیق سخت است، پس کاربر اختصاصی بهتر است.
DIAGRAMاجرای ریموت
ماشین محلی: ralph --remote
SSH → ریموت (Mac Mini / VPS)
tmux session + حلقه Headless
لاگ Stream به کنترل محلی
Linear به‌عنوان Control Plane

اگر جایی گیر کردی، همان‌طور که سازنده می‌گوید، جادوی ایجنت‌ها دم دستت است — از Claude بخواه مشکل Setup را برایت حل کند.

به زبان ساده

حلقه لازم نیست روی لپ‌تاپت باشد. به یک VPS یا Mini وصل شو، داخل tmux اجرا کن، Detach کن. Linear از موبایل هم کار می‌فرستد.

مثال واقعی

سازنده چند ماه است روی Mac Mini با `ssh cloudbox` اجرا می‌کند. کاربر GitHub اختصاصی `cloudbox` PR می‌سازد — معلوم است کار ایجنت بوده نه انسان. Q در CLI ریموت حلقه را نمی‌کشد؛ فقط تو را جدا می‌کند.

دانش‌سنجی

آزمون درس

۵ Q
01
برای Remote Worker حتماً به یک Mac Mini اختصاصی نیاز داری؟
02
در راه ساده (SSH + tmux)، چه چیزی Linear را به Control Plane تبدیل می‌کند؟
03
در پشتیبانی Remote توکار CLI، فشردن Q وسط اجرا چه می‌کند؟
04
نقش tmux به‌عنوان «لایه ماندگاری» یعنی چه؟
05
چرا روی ریموت با یک کاربر GitHub اختصاصی احراز هویت می‌کنیم؟