چرا معماری دو-مغزی؟

اکثر دستیارهای کدنویسی از یک مدل واحد استفاده می‌کنند که باید هم تصمیم بگیرد چه چیزی ساخته شود و هم کد منبع را بنویسد. در جلسات طولانی، پنجره بافت (context window) مدل پر می‌شود و باعث ایجاد «انحراف بافت» (context drift) می‌شود؛ یعنی مدل تصمیمات قبلی را فراموش کرده و کدهای متناقض یا تکراری تحویل می‌دهد. Cursor این مشکل را با تقسیم بار ذهنی حل می‌کند:

  • عوامل برنامه‌ریز (Planner agents) روی قدرتمندترین مدل‌ها اجرا می‌شوند (در پیش‌نویس به Opus 4.8 یا Fable 5 اشاره شده است). آن‌ها یک درخواست سطح بالا را به سلسله‌مراتب وظایف تقسیم می‌کنند، ابهامات را برطرف می‌کنند و انتخاب‌های طراحی را ثبت می‌کنند.
  • عوامل اجراکننده (Worker agents) روی مدل‌های سریع‌تر با توان عملیاتی بالا (Composer 2.5) اجرا می‌شوند. آن‌ها وظایف مشخص را از برنامه‌ریزان دریافت کرده و قطعه‌کدهای مربوطه را تولید می‌کنند.

جدا نگه داشتن «چه چیزی» از «چگونه» مانع از بارگذاری بیش از حد می‌شود که سیستم‌های تک-مدلی را دچار توقف می‌کند. هر مدل در محدوده اندازه بافتی باقی می‌ماند که با نقش آن سازگار است، و از انفجار بودجه توکن (token-budget blow-up) که طراحان را مجبور به کوتاه کردن پرامپت‌ها می‌کند، جلوگیری می‌شود.

مقیاس‌پذیری swarm

نسخه‌های اولیه swarm در Cursor حدود هزار کامیت (commit) در ساعت انجام می‌دادند. پس از بازطراحی دو-مغزی، سیستم به حدود هزار کامیت در ثانیه رسید. این سرعت باعث بروز یک گلوگاه جدید شد: ابزارهای کنترل نسخه برای چنین رقابتی ساخته نشده بودند. وقتی دو برنامه‌ریز دستورات هم‌پوشانی داشتند، مخزن (repository) ممکن بود با منطق تکراری مواجه شود؛ مشکلی که تیم آن را «خطاهای دو-مغزی» (split-brain errors) می‌نامد.

Cursor این آشفتگی را با سه راهکار حفاظتی مهار کرد:

  1. اسناد طراحی مشترک – هر برنامه‌ریز تصمیمات خود را در یک سند مرکزی که به کد تولید شده لینک شده است، می‌نویسد. اجراکنندگان از آن لینک‌ها پیروی می‌کنند تا همان طراحی در جای دیگری دوباره ساخته نشود.
  2. بازبینی‌های چندجانبه – سه عامل، هر کدام بخش متفاوتی از کار را بررسی می‌کنند (متن کامل، فقط خروجی، یا فقط کد). این بررسی متقابل، ناهماهنگی‌هایی را که یک دید واحد ممکن است از دست بدهد، شناسایی می‌کند.
  3. راهنماهای میدانی خودنگهدار – عوامل یک «پوشه دانش» از یافته‌های غافلگیرکننده و دام‌ها (pitfalls) نگه می‌دارند. وقتی یک اجراکننده جدید شروع به کار می‌کند، برای جلوگیری از تکرار اشتباهات شناخته‌شده، به آن پوشه مراجعه می‌کند که این امر حافظه کوتاه‌مدت را در کل swarm فراهم می‌آورد.

این اقدامات باعث می‌شود کدبیس (codebase) علی‌رغم سیل تغییرات، منسجم باقی بماند.

بنچمارک‌های مهم

Cursor swarm ترکیبی را با بازسازی کل دفترچه راهنمای SQLite – یک پیاده‌سازی ۸۳۵ صفحه‌ای به زبان Rust – آزمایش کرد؛ وظیفه‌ای که هم دقت و هم حجم را به چالش می‌کشد. نتایج خیره‌کننده بود:

  • دقت – پیکربندی ترکیبی (برنامه‌ریز + اجراکننده‌های Composer) به دقت ۱۰۰٪ دست یافت و به‌طور مداوم از اجرای تک‌نفره پیشرفته‌ترین مدل ذکر شده (GPT-5.5) پیشی گرفت.
  • حجم کد – swarm ترکیبی ۹,۹۰۸ خط کد موتور تولید کرد، در مقابل ۶۴,۳۰۵ خط که توسط swarm قدیمی و یکپارچه (monolithic) تولید شده بود.
  • هزینه – اجرای یک نسخه تک‌نفره GPT-5.5 حدود ۱۰,۵۶۵ دلار هزینه داشت. رویکرد ترکیبی تنها ۴۱۱ دلار برای ناوگان اجراکنندگان هزینه کرد.

شکاف هزینه ناشی از Composer 2.5 است که در پیش‌نویس توصیف شده است که عملکردی قابل مقایسه با مدل‌های پرچم‌دار ارائه می‌دهد، در حالی که تنها بخشی از قیمت هر میلیون توکن را دریافت می‌کند. با انتقال بیشتر مصرف توکن به این مدل ارزان‌تر، swarm هزینه کلی را بدون قربانی کردن کیفیت، پایین نگه می‌دارد.

خلاصه نهایی

  • جفت کردن یک برنامه‌ریز قدرتمند با یک اجراکننده ارزان، دستاوردهایی چندین برابر (orders-of-magnitude) در سرعت، فشرده‌سازی کد و هزینه به همراه دارد.
  • این طراحی با اختصاص دادن «چه چیزی» به مدل‌های پیشرو (frontier models) و «چگونه» به مدل‌های متخصص، انحراف بافت را از بین می‌برد.
  • هزینه‌های عملیاتی و نیازهای زیرساختی همچنان بزرگترین موانع برای پذیرش گسترده‌تر هستند.