Foremerge 0.5.0 – 針對平行編碼代理的意圖導向衝突偵測
Foremerge 0.5.0 讓代理在撰寫任何程式碼之前就能偵測意圖衝突
Foremerge 0.5.0 是一個預 1.0、以本地為首的最小可行產品(MVP),在 Git 之上新增了一層協調機制。它允許多個 AI 編碼代理在隔離的 Git worktree 中工作,發布 意圖(語意範圍與操作),並在這些意圖發生衝突時立即收到確定性的警告。此協定為建議性——代理永遠不會被鎖定——但能防止傳統行級合併所忽略的「默默覆蓋彼此工作」問題。
意圖導向衝突偵測的工作原理
- 代理宣告將觸及的內容 – 不再比對文字,代理會傳送一個 JSON 負載,描述目標(例如:
symbol:PaymentService=replace)。 - 所有代理讀取儲存在倉儲 Git 共用目錄中的共享 SQLite 資料庫(
<git‑common‑dir>/foremerge/state.sqlite3)。資料庫以原子方式更新,因此每個本地代理看到的視圖都相同。 - Foremerge 確定性地比對意圖,並在兩個計畫衝突時發出
HIGH建議警告,附帶解釋與建議的抽象(例如:PaymentProvider)。 - 代理決定如何進行 – 可調整計畫、申領範圍,或在收到建議警告的情況下繼續。不會取得檔案鎖,避免代理當機時造成死結。
"Foremerge 永遠不會要求模型判斷衝突,因此相同的輸入總是產生相同的答案。" – Foremerge README
Git 無法察覺的範例衝突
Agent A: 將 PaymentService 替換為 StripePaymentService
Agent B: 向 PaymentService 新增 PayPal 支援
兩位代理修改不同的檔案,因此 Git 合併時不會提出警告。Foremerge 偵測到兩者都宣告相同的 symbol:PaymentService 範圍,但操作相反(replace 對 extend),並發出 HIGH 警告,建議使用如 PaymentProvider 之類的共享抽象。
倉儲中的終端機示範顯示衝突是在 任何 worktree 變更之前 就被報告的:

快速入門:五分鐘內看到衝突
- 安裝 –
curl -fsSL https://foremerge.com/install.sh | sh(安裝foremerge和別名fmg)。 - 初始化 –
foremerge init建立本地 SQLite 狀態。 - 連結代理 –
foremerge setup all註冊 Claude、Codex、Cursor 等的 MCP 技能。 - 定義驗證檢查 – 例如:
foremerge checks set test -- cargo test --all-targets。 - 執行示範 – 註冊兩個代理,發布帶有範圍的意圖,並使用
jq檢視 README 中所示的 JSON 衝突輸出。
所有指令皆為真實指令;示範輸出已記錄於 examples/terminal-session.txt 中。
核心資料模型與工作流程
Agent → Task → Intent → Claim → Symbol → Dependency
→ ChangeSet → Test → Result → Decision → Provenance
- 意圖 – 計畫變更的語意描述。
- 申領 – 對某範圍的建議租用;多個代理可申領相同範圍,但會附帶衝突警告。
- 變更集(ChangeSet) – 記錄程式碼的精確特徵碼、宣告的符號與驗證命令。
- 驗證門檻 – 由使用者定義的檢查(例如:
cargo test),必須在變更集被接受前,針對精確特徵碼成功執行。
狀態轉換是確定性的,並以雜湊鏈式事件儲存在 SQLite 中,提供可稽核的追蹤,無需分布式共識。
與 Git worktrees 的整合
Foremerge 利用 Git 的 共用目錄,讓隔離的 worktree 共享相同的協調資料庫,同時保持檔案樹的獨立。建立 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"
其他 worktree 會立即看到已註冊的代理及其意圖。此 MVP 不會 在機器間複製 SQLite 儲存區;其設計僅用於本地、單機協調。
建議性申領 vs. 嚴格鎖定
Foremerge 故意避免檔案或符號鎖定。若單一代理當機,鎖定將使整個群組停擺,並可能造成排隊死結。相反地,申領是 建議性 的:它會浮現重疊警告,同時允許代理繼續工作。最終的接受門檻(驗證 + 衝突解決)是提交記錄至 refs/foremerge/accepted/* 前的硬性檢查點。
Hacker News 社群反饋
- 代理的版本控制 – 有評論者指出,傳統 VCS 是為人類設計,而非 AI 代理,而 Foremerge 可能是朝「代理優先」工作流程邁出的一步。
- 自訂解決方案 – 使用者報告使用即興的黑板模式與工具如
weave,但表達出對更系統化方法的渴望,這正是 Foremerge 的目標。 - 衝突相關性 – 有人質疑衝突何時應阻止代理。Foremerge 目前模型將任何語意重疊標記為
HIGH建議;未來路線圖包含更豐富的啟發式演算法與使用者可設定的嚴重性等級。 - 未來路線圖 – 作者提到計畫使用 treesitter 建立程式碼圖以偵測依賴層級衝突,並加入即時通知功能以提供即時警示。
局限與信任模型(如文件所述)
- 衝突偵測是確定性但啟發式的;可能出現誤報或漏報。
- 申領僅為建議性;不強制獨佔所有權。
- 驗證僅證明特定特徵碼下記錄的命令成功執行,不代表測試套件全面。
- SQLite 儲存區僅限本地;無分布式共識或多租戶安全模型。
- 目前尚未發布基準測試結果;性能比較計畫中。
- Foremerge 不會 取代程式碼審查、CI、安全掃描或備份流程。
擴充與貢獻
Foremerge 以 Apache-2.0 授權開源。鼓勵貢獻,特別是在範圍詞彙、衝突證據、變更集來源與驗證政策方面。倉儲包含:
- 完整文件(架構、協定、狀態模型、衝突偵測、Git 整合、代理-客戶端設定、JSON API、OpenAPI 結構、基準計畫、限制、路線圖)。
- 範例指令碼(
examples/terminal-session.txt、examples/api-requests.sh)。 - crates.io 上的 Rust 套件(
foremerge)。 - Claude、Codex、Cursor 的 MCP 技能檔與可移植的
.agents/skills目錄。
在本機執行完整測試套件:make verify。
總結
Foremerge 0.5.0 提供了一個實用且確定性的層級,讓 AI 編碼代理能在觸碰程式碼前發布並協調意圖,偵測 Git 行級合併無法察覺的語意衝突。儘管仍為 MVP,僅支援本地儲存與建議性警告,但它為建立代理優先的版本控制工作流程提供了具體基礎。
Sources
相關
- Dispatch
- 專案
- Dispatch
- 專案
- Dispatch