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

screen و tmux — حلقه‌ای که نمی‌میرد

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

این صحنه را می‌شناسی: شش تب ترمینال باز است — Dev Server، یکی دو ایجنت، یک حلقه Ralph در حال اجرا، Lazygit. می‌خواهی پنجره‌ها را مرتب کنی و... اشتباهی ترمینال را می‌بندی. هر Process ای که آن‌جا بود می‌میرد — از جمله حلقه‌ات. بسته به زمان‌بندی، ممکن است پیشرفت از دست برود. راه‌حل: Session ترمینال را از پنجره ترمینال جدا کن.

ابزار اول: screen

روی اکثر ماشین‌ها از قبل نصب است (`screen --version`؛ اگر نبود: `brew install screen` یا `apt-get install screen`). با اجرای `screen` ظاهراً «هیچ اتفاقی نمی‌افتد» — ولی در واقع الان داخل یک ترمینال مجازی هستی که screen مدیریتش می‌کند، نه پنجره اصلی. هر چیزی اینجا اجرا کنی، به پنجره ترمینال وابسته نیست.

کاردستور / کلید
ساخت Session بی‌نامscreen
ساخت Session با نامscreen -S ralph
جدا شدن (Detach)Ctrl-A بعد D
لیست Session هاscreen -ls
اتصال دوبارهscreen -r ralph
بستن SessionCtrl-D

جریان واقعی کار: `screen -S ralph`، داخلش `node ralph.js`، بعد Ctrl-A D. حالا حتی اگر کل پنجره ترمینال را ببندی، حلقه در پس‌زمینه می‌چرخد. بعداً از هر پنجره‌ای `screen -r ralph` بزن و ببین هنوز دارد کار می‌کند.

ابزار دوم: tmux

tmux برادر مدرن screen است و خیلی منعطف‌تر. اولش می‌تواند ترسناک به نظر برسد — کانفیگ‌های غول‌پیکر، Plugin Manager، آدم‌هایی که سال‌ها Setup شان را «پرفکت» کرده‌اند. خبر خوب: به هیچ‌کدامش نیاز نداری.

کارscreentmux
ساخت با نامscreen -S ralphtmux new -s ralph
DetachCtrl-A DCtrl-B D
اتصال دوبارهscreen -r ralphtmux attach -t ralph
تقسیم عمودی صفحهCtrl-B %
تقسیم افقی صفحهCtrl-B "
جابه‌جایی بین Pane هاCtrl-B + جهت‌نما
خط فرمان داخلیCtrl-B :

قاتل واقعی screen همین Pane هاست: داخل یک Session می‌توانی صفحه را تقسیم کنی — چپ Lazygit، وسط Claude، راست یک ایجنت دیگر. با `Ctrl-B :` و دستور `set -g mouse on` کلیک موس هم Pane را انتخاب می‌کند. این را در `~/.tmux.conf` بگذار تا همیشه فعال باشد:

# ~/.tmux.conf
set -g mouse on

ترفند: تایپ همگام در چند ایجنت

یک قابلیت جالب: داخل Session با `Ctrl-B :` بنویس:

setw synchronize-panes on

حالا هر چه تایپ کنی، هم‌زمان در «همه» Pane ها تایپ می‌شود — یعنی می‌توانی یک پرامپت را هم‌زمان به چند ایجنت مختلف بدهی و خروجی‌ها را مقایسه کنی. برای خاموش کردن: همان دستور با `off`.

Setup واقعی برای Ralph

استفاده عملی نویسنده سری ساده است: یک Session tmux با چند Pane، در هرکدام یک `node ralph.js` روی یک PRD متفاوت:

DIAGRAMچند حلقه هم‌زمان در یک Session
tmux session: ralph
node ralph.js (PRD 1)
node ralph.js (PRD 2)
node ralph.js (PRD 3)
Ctrl-B D → کار خودت را بکن
tmux attach -t ralph → سرکشی

تجربه عملی: بیشتر از ۴ تا ۶ حلقه هم‌زمان عملاً پیش نمی‌آید. و جمع‌بندی توصیه: هر جا می‌توانی tmux؛ اگر محیطی tmux نداشت، screen یک Fallback عالی است.

به زبان ساده

اگر ترمینال را ببندی، هر چه داخلش است می‌میرد. screen و tmux Session را از پنجره جدا می‌کنند؛ Detach کن و برو سراغ کارت.

مثال واقعی

یک Session tmux با چند Pane، در هرکدام `node ralph.js` روی یک PRD متفاوت. Ctrl-B D، پنجره را ببند، بعداً attach کن — حلقه‌ها هنوز می‌چرخند. بیشتر از ۴ تا ۶ تا هم‌زمان عملاً پیش نمی‌آید.

دانش‌سنجی

آزمون درس

۵ Q
01
چرا بستن پنجره ترمینال برای حلقه Ralph خطرناک است؟
02
بعد از screen -S ralph و اجرای حلقه، با چه کلیدی بدون کشتن آن خارج می‌شوی؟
03
مهم‌ترین برتری tmux نسبت به screen در کار روزمره چیست؟
04
setw synchronize-panes on چه می‌کند و کجا به درد Ralph می‌خورد؟
05
توصیه نهایی درس درباره انتخاب ابزار چیست؟