تصور کنید دو برنامهنویس روی یک پروژه کار میکنند؛ یکی سرویس پرداخت قدیمی را حذف میکند و دیگری همزمان در حال افزودن قابلیت جدید به همان سرویس حذفشده است. اگر از عاملهای هوش مصنوعی استفاده میکنید، این سناریوی فاجعهبار اکنون یک واقعیت روزمره است چون گیت فقط تغییرات متنی را میبیند، نه منطق پشت آنها را. به عبارت دیگر، گیت تغییرات متن را ردیابی میکند، نه قصد و نیت پشت آن تغییرات را.
این محدودیت بنیادی به این معناست که دو عامل هوش مصنوعی که روی یک کدبیس کار میکنند، میتوانند هر دو کدهایی بینقص تولید کنند که هنگام ادغام (Merge)، کل سیستم را بهطور کامل از کار بیندازند. برای حل این شکاف هماهنگی خاص، پروژه متنباز Foremerge نسخه ۰.۵.۰ خود را بهعنوان یک نمونه اولیه (MVP) محلی و پیش از نسخه ۱.۰ منتشر کرد.
برای درک بهتر، سناریوی قبلی را باز کنیم: تصور کنید یک عامل مأموریت دارد سرویس پرداخت قدیمی را با یک سرویس جدید مبتنی بر Stripe جایگزین کند. بهطور همزمان، عامل دوم در حال افزودن پشتیبانی از PayPal به همان سرویس قدیمی است. از آنجایی که آنها فایلها یا خطوط متفاوتی را ویرایش میکنند، گیت هر دو را بدون هیچ هشداری ادغام میکند. نتیجه این است که پشتیبانی از PayPal به کلاسی اضافه شده است که دیگر هیچ فراخوانیکنندهای (Caller) در سیستم ندارد. این مشکل اغلب زمانی تشدید میشود که ساختارهای مبهم مخزن مانع از درک درست محیط توسط عاملها شوند و باعث بروز خطاهای پیشبینینشده در محیط عملیاتی گردند.
به نقل از مستندات پروژه، Foremerge مانند یک تختهسفید مشترک بالای لایه گیت عمل میکند. در این سیستم، به جای انتظار برای وقوع تداخل در هنگام ادغام (Merge Conflict)، عاملها باید پیش از شروع کدنویسی «قصد» (Intent) خود را اعلام کنند؛ یعنی دقیقاً بگویند قرار است به کدام بخش از کد دست بزنند. اگر دو عامل برای یک نماد (Symbol) مشترک برنامه داشته باشند، Foremerge بلافاصله یک هشدار توصیهای صادر میکند، در حالی که محیطهای کاری (Worktrees) هنوز پاک و بدون تغییر هستند.
همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، مدیریت دسترسی و هماهنگی در محیطهای توزیعشده همواره چالشبرانگیز بوده است. Foremerge این چالش را با انتقال تمرکز از «تغییر فایل» به «تغییر معنا» حل میکند.
مکانیسم قصد (Intent)
طبق اعلام توسعهدهندگان، این ابزار بهعنوان یک MVP محلی از یک پایگاهداده SQLite استفاده میکند که در پوشه .git پروژه قرار دارد (بهطور دقیقتر در مسیر <git-common-dir>/foremerge/state.sqlite3). این طراحی تضمین میکند که هر عاملی روی یک ماشین، چه Claude Code باشد، چه Codex و چه Cursor، وضعیت هماهنگی یکسانی را مشاهده کند.

این پروتکل از یک گراف معنایی خاص برای ردیابی کارها استفاده میکند: عامل $ \rightarrow $ وظیفه $ \rightarrow $ قصد $ \rightarrow $ ادعا $ \rightarrow $ نماد $ \rightarrow $ وابستگی $ \rightarrow $ مجموعه تغییرات $ \rightarrow $ تست $ \rightarrow $ نتیجه $ \rightarrow $ تصمیم $ \rightarrow $ منشأ. هر تغییر (Mutation) باعث بهروزرسانی تصویرهای SQLite تایپشده و افزودن یک رویداد معنایی زنجیرهشده با هش (Hash-chained) در یک تراکنش واحد میشود که لاگی برای اثبات عدم دستکاری (Tamper evidence) فراهم میکند.
این ساختار اجازه میدهد تداخلات بر اساس نمادها شناسایی شوند، نه فقط بر اساس مسیر فایلها. برای مثال، اگر عامل A اعلام کند symbol:PaymentService=replace و عامل B اعلام کند symbol:PaymentService=extend (گسترش)، Foremerge این اعلانها را پیش از نوشتن هر خط کد مقایسه میکند. سپس یک هشدار سطح بالا (HIGH) صادر کرده و پیشنهاد میدهد که روی یک انتزاع پایدار مانند PaymentProvider هماهنگ شوند. چون عملیات از پیش اعلام شده است، فرقی نمیکند عامل بگوید «پرداختها را روی Stripe یکپارچه کن» یا «PaymentService را با Stripe جایگزین کن»؛ حکم نهایی سیستم یکسان خواهد بود.
یکپارچهسازی و گردش کار
راهاندازی این ابزار شامل چند گام خاص برای متصل کردن کلاینتهای هوش مصنوعی به حلقه هماهنگی است. کاربران میتوانند با قرار دادن یک پرامپت در Claude Code, Codex یا Cursor اجازه دهند عامل این کار را انجام دهد، یا بهصورت دستی با استفاده از نسخههای جدید گیت و ابزار jq اقدام کنند.
جزئیات استقرار به شرح زیر است:
- نصب: کاربران میتوانند باینری تاییدشده را از طریق دستور
curl -fsSL https://foremerge.com/install.sh | sh(که در مسیر~/.local/binنصب میشود) دریافت کنند یا با استفاده از Rust ۱.۸۵+ و دستورcargo install --locked --git https://github.com/naw103/foremerge foremergeآن را از سورس بسازند. نصبکننده هر دو دستورforemergeوfmgرا بهعنوان نامهای مستعار برای یک باینری واحد فراهم میکند. - مقداردهی: دستور
foremerge initوضعیت هماهنگی محلی را در دایرکتوری مشترک گیت مخزن ایجاد میکند، بدون اینکه فایلهای ردیابیشده را تغییر دهد. - تنظیم کلاینت: دستور
foremerge setup allمهارتهای بومی و ورودیهای پروتکل زمینه مدل (MCP) — شبیه به یک مترجم استاندارد که اجازه میدهد مدلهای مختلف با ابزارهای مختلف حرف بزنند — را برای عاملهای پشتیبانیشده نصب میکند. این شامل دستوراتsetup codex،setup claudeیاsetup cursorبرای کلاینتهای مجزا است. ثبتنام Codex در سطح کاربر است و برای تمام مخازن اعمال میشود. - تأیید: کاربران یک بررسی مورد اعتماد تعریف میکنند (مثلاً
foremerge checks set test -- cargo test --all-targets) که Foremerge برای اعتبارسنجی یک مجموعه تغییرات (ChangeSet) اجرا میکند. اگر بررسی معناداری وجود نداشته باشد، کاربران میتوانندforemerge checks policy advisoryرا تنظیم کنند تا کارها بهعنوان «تأییدنشده» (UNVERIFIED) علامتگذاری شوند. - تأیید نهایی: دستور
foremerge doctor --client allگزارش میدهد که آیا بررسیهای ثبتشده واقعاً در محیطهای کاری عاملها قابل اجرا هستند یا خیر، زیرا دایرکتوریهای وابستگی اغلب در.gitignoreقرار دارند.

چرخه حیات یک تغییر
Foremerge یک گردش کار معنایی سختگیرانه را برای تضمین منشأ و ایمنی اجرا میکند:
قصد (INTENT) $ \rightarrow $ ادعا (CLAIMED) $ \rightarrow $ در حال اجرا (IN_PROGRESS) $ \rightarrow $ موقت (PROVISIONAL) $ \rightarrow $ تأییدشده (VALIDATED) $ \rightarrow $ پذیرفتهشده (ACCEPTED) $ \rightarrow $ ثبتشده (COMMITTED).
یک عامل ابتدا یک «قصد» را منتشر میکند، سپس روی یک محدوده معنایی «ادعا» ایجاد میکند. ادعاها در واقع هشدارهای اجارهای هستند، نه قفلهای انحصاری؛ چندین عامل میتوانند یک محدوده را ادعا کنند، اما هشدارهای همپوشانی دریافت خواهند کرد. هنگامی که پیادهسازی در یک محیط کاری ایزوله به پایان رسید، عامل یک «مجموعه تغییرات موقت» (Provisional ChangeSet) منتشر میکند.
جزئیات مجموعه تغییرات و اعتبارسنجی
یک ChangeSet یک رکورد جامع است که شامل موارد زیر است:
- هویت عامل/مدل و جزئیات وظیفه/قصد.
- فایلهای اثرپذیر، نمادها، قراردادها و وابستگیها.
- خلاصه پیادهسازی و تستهای گزارششده.
- تصمیمات، منشأ، مسیر محیط کاری و اثر انگشت گیت.
- وضعیت و رفرنس (ref) گیت مرتبط.
این ChangeSet باید از یک دروازه تأیید عبور کند. Foremerge بهجای اعتماد به نتایج گزارششده توسط عامل، دستور تست ثبتشده را خودش اجرا میکند. هر تغییری که پس از اعتبارسنجی شناسایی شود، آن تلاش را «غیرمعتبر» میکند. برای مدیریت خروجیهای موقت و ردیابینشده (مانند coverage.log)، اپراتورها میتوانند از foremerge validation-exclusions set برای تعریف قوانین مسیر استفاده کنند.
تنها پس از اعتبارسنجی و حل تداخلات سطح «HIGH»، رفرنس میتواند بهعنوان «پذیرفتهشده» علامتگذاری شود (ایجاد refs/foremerge/accepted/<changeset-id>). در نهایت، عامل کد را از طریق گیت معمولی یا یک PR ادغام کرده و کامیت نهایی را با دستور foremerge changeset commit ثبت میکند.
محدودیتهای فنی و طراحی
برای جلوگیری از مشکل «ناو متوقفشده» (stalled fleet)، Foremerge بهطور عمدی از قفل کردن فایلها یا مسدود کردن عاملها پرهیز میکند؛ یک عامل کرشکرده نباید باعث توقف کل تیم شود. تمام هشدارها توصیهای هستند و تصمیم نهایی با برنامهنویس انسان است. علاوه بر این، تشخیصدهنده تداخلات کاملاً قطعی (Deterministic) است؛ یعنی از یک LLM برای قضاوت درباره تداخلها استفاده نمیکند تا تضمین شود ورودیهای یکسان همیشه نتایج یکسانی تولید میکنند.
معماری محلی-اول (Local-First) و API
Foremerge از Git Worktrees برای فراهم کردن فایلهای ایزوله با آگاهی مشترک بهره میبرد. با استفاده از یک پوشش نازک (foremerge worktree create)، عاملها میتوانند در مسیرهای مجزا کار کنند در حالی که پایگاهداده SQLite مشترکی را در دایرکتوری مشترک گیت به اشتراک میگذارند.
برای دسترسی برنامهنویسی، Foremerge موارد زیر را ارائه میدهد:
- سرور MCP: ۱۸ ابزار چرخه حیات (مانند
publish_intent،run_verificationوresolve_conflict) که از طریق stdio ارائه میشوند. - API JSON: یک دیمون محلی که بهطور پیشفرض روی
http://127.0.0.1:47811با HTTP لوپبک احراز هویتشده اجرا میشود. این API برای امنیت از توکنهای Bearer با مجوزهای فایل خصوصی استفاده میکند.
طبق مستندات پروژه، MVP فعلی محدود به هماهنگی محلی است. این ابزار پایگاهداده SQLite را بین ماشینهای مختلف تکثیر نمیکند، به این معنی که هنوز یک ابزار اجماع توزیعشده (Distributed Consensus) نیست. همچنین جایگزینی برای خط لولههای CI/CD، اسکنهای امنیتی یا بازبینیهای انسانی کد نیست.
جزئیات فنی گسترده
محدودههای معنایی (Semantic Scopes)
Foremerge برای جلوگیری از برخورد در مناطقی که گیت قادر به دیدن آنها نیست، فراتر از مسیر فایلها میرود. انواع محدودههای پشتیبانیشده عبارتند از:symbol, api, schema, config, infra, test, migration, env, file, component, contract, domain.
با انتشار محدودترین محدوده معنایی مفید، عاملها از تداخل در مرزهای بینزبانی یا تغییرات زیرساختی که در متن همپوشانی ندارند اما در منطق با هم برخورد میکنند، جلوگیری میکنند.
مجموعه ابزارهای MCP
پیادهسازی پروتکل زمینه مدل (MCP) ۱۸ ابزار خاص برای مدیریت چرخه حیات عامل فراهم میکند:
- هماهنگی:
publish_intent,claim_work,query_work,check_conflicts,coordinate_with_agent. - اجرا:
start_work,publish_changeset,run_verification,accept_changeset. - حسابرسی و حل:
record_assessment,resolve_conflict,record_commit,discard_work. - بازرسی:
list_agents,get_intent,get_changeset,status.
API و امنیت
API JSON فقط برای لوپبک محلی طراحی شده است و برای جلوگیری از تبدیل شدن به یک سرویس چندمستاجری (Multi-tenant)، اتصال به غیر از لوپبک را رد میکند. مسیر /healthz زنده بودن پردازش را بررسی میکند و /readyz بهعنوان یک پروب ذخیرهساز بدون انتظار عمل میکند. تمام مسیرهای /v1 به توکن Bearer نیاز دارند که هنگام foremerge init با مجوزهای فایل خصوصی تولید میشود.
یکپارچگی با Git Worktree
Foremerge استفاده از محیطهای کاری ایزوله را ساده میکند. یک جریان کاری معمولی شامل این مراحل است:
۱. ایجاد یک worktree: foremerge worktree create --branch agent/paypal --path ../payments-paypal --base HEAD.
۲. ثبت عامل در آن مسیر: foremerge --cwd ../payments-paypal --json agent register --name paypal-agent --model "$ACTUAL_MODEL_ID".
این امر اجازه میدهد چندین عامل روی یک مخزن کار کنند بدون اینکه بر سر فایلهای فیزیکی یکسان بجنگند، در حالی که همچنان وضعیت هماهنگی را در دایرکتوری مشترک گیت به اشتراک میگذارند.
دستورات مرزی و عملیات
برای مدیریت چرخه حیات از طریق CLI، Foremerge دستورات مرزی خاصی را ارائه میدهد:
- منشأ:
foremerge agent register --name NAME --model MODEL - قصد:
foremerge intent publish --agent ID --task TASK --summary TEXT --scope KIND:KEY=OPERATION - مالکیت:
foremerge work claim --agent ID --intent ID --scope KIND:KEY - اجرا:
foremerge work start INTENT_ID --agent AGENT_ID - کشف:
foremerge work query --scope KIND:KEYیاforemerge status - پیشپرواز:
foremerge conflicts check --intent TEXT --scope KIND:KEY=OPERATION - حل:
foremerge assess record --agent ID --intent ID --related-intent-id ID --verdict V --rationale TEXT --action A - ارتباط:
foremerge coordinate send --from ID --to ID --message TEXT - مانیتورینگ:
foremerge work watch --after-seq 0
تحلیل: تغییر پارادایم عاملها
برای توسعهدهندگانی که ناوگانی از عاملهای هوش مصنوعی را مدیریت میکنند، این ابزار نشاندهنده تغییری از «تشخیص و اصلاح» به «پیشبینی و پیشگیری» است. اکثر گردشهای کاری فعلی بر این تکیه دارند که LLM خطاها را در طول بازبینی PR یا پس از شکست تست شناسایی کند. با انتقال تشخیص تداخل به مرحله «قصد»، Foremerge اتلاف محاسبات و زمانی را که صرف پیادهسازیهای محکوم به شکست میشود، کاهش میدهد. این رویکرد به نوعی مکمل راهکارهای مدیریت پیکربندی است، مشابه آنچه در بررسی گردشکارهای کامپایلری برای جلوگیری از Drift در تنظیمات عاملها مشاهده کردیم.
این رویکرد فرض بنیادی کدنویسی با هوش مصنوعی را تغییر میدهد: این فرض که عاملها میتوانند در انزوای کامل کار کنند. با معرفی یک لایه هماهنگی سبک، Foremerge با عاملها بهعنوان یک تیم با حافظه مشترک برخورد میکند، نه اسکریپتهای مستقل. این برای مقیاسبندی عاملهای AI از نوشتن اسکریپتهای ساده به مدیریت معماریهای پیچیده و چندماژوله ضروری است. همچنین به توسعهدهندگان کمک میکند تا از ایجاد نویزهای غیرضروری در Diffهای کدنویسی AI جلوگیری کنند و خروجیهای تمیزتری داشته باشند.
برای شروع، میتوانید ابزار را از طریق curl -fsSL https://foremerge.com/install.sh | sh نصب کرده و آن را به ادیتور AI مورد علاقه خود متصل کنید تا ببینید آیا گردشهای کاری فعلی شما در حال ایجاد «بدهیهای معنایی» پنهان هستند یا خیر.
گام بعدی شما
- اگر از چندین عامل AI برای مدیریت پروژههای بزرگ استفاده میکنید، Foremerge را نصب کنید تا «بدهیهای معنایی» پنهان را شناسایی کنید.
- پروتکل MCP را در ادیتورهای خود فعال کنید تا عاملها بتوانند بهطور خودکار قصد خود را منتشر کنند.
- تستهای خودکار پروژه را به عنوان
verification gateدر Foremerge تعریف کنید تا از صحت ادعاهای عاملها مطمئن شوید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو