Foremerge 0.5.0 – 並行コーディングエージェントのためのインテントベースの競合検出

Foremerge 0.5.0 は、コードが書かれる前にエージェントがインテントの競合を検出できるようにします

Foremerge 0.5.0 は、1.0 未満のローカルファーストの MVP で、Git の上に調整レイヤーを追加します。複数の AI コーディングエージェントが分離された Git ワークツリーで作業し、インテント(セマンティックスコープと操作)を公開し、それらのインテントが衝突したときに即座に決定的な警告を受け取ることができます。このプロトコルはアドバイザリであり、エージェントがロックされることはありませんが、従来の行ベースのマージが見逃す「お互いの作業を静かに元に戻す」問題を防ぎます。


インテントベースの競合検出の仕組み

  1. エージェントは触れるものを宣言します – テキストの差分ではなく、エージェントはターゲットを説明する JSON ペイロードを送信します(例:symbol:PaymentService=replace)。
  2. すべてのエージェントは共有 SQLite データベースを読み取ります – リポジトリの Git 共通ディレクトリ(<git-common-dir>/foremerge/state.sqlite3)に保存されています。データベースはアトミックに更新されるため、すべてのローカルエージェントが同じビューを参照します。
  3. Foremerge はインテントを決定的に比較し、2 つのプランが衝突する場合に HIGH アドバイザリを発行し、説明と推奨される抽象化(例:PaymentProvider)を提供します。
  4. エージェントは進行方法を決定します – プランを調整したり、スコープを主張したり、アドバイザリ警告付きで続行したりできます。ファイルロックは取得されないため、エージェントがクラッシュしてもデッドロックを回避できます。

「Foremerge はモデルに競合を判断させることはないため、同じ入力は常に同じ答えを生成します。」 – Foremerge README


Git が見ることができない競合の例

Agent A: PaymentService を StripePaymentService に置き換える
Agent B: PaymentService に PayPal サポートを追加する

両方のエージェントが異なるファイルを変更するため、Git は問題なくマージします。Foremerge は、両方が同じ symbol:PaymentService スコープを反対の操作(replace と extend)で宣言していることを検出し、PaymentProvider などの共有抽象化を提案して HIGH アドバイザリを発行します。

リポジトリ内のターミナルデモは、ワークツリーの変更前に競合が報告されることを示しています:

競合検出のターミナルデモ


クイックスタート:5 分以内に競合を確認する

  1. インストール – curl -fsSL https://foremerge.com/install.sh | sh(foremerge とエイリアス fmg をインストール)。
  2. 初期化 – foremerge init でローカル SQLite 状態を作成。
  3. エージェントを配線 – foremerge setup all で Claude、Codex、Cursor などの MCP スキルを登録。
  4. 検証チェックを定義 – 例:foremerge checks set test -- cargo test --all-targets。
  5. デモを実行 – 2 つのエージェントを登録し、スコープ付きインテントを公開し、README に示されているように jq を使用して JSON 競合出力を検査します。

すべてのコマンドは実際のものであり、デモ出力は examples/terminal-session.txt に記録されています。


コアデータモデルとワークフロー

Agent → Task → Intent → Claim → Symbol → Dependency
      → ChangeSet → Test → Result → Decision → Provenance
  • Intent – 計画された変更のセマンティックな説明。
  • Claim – スコープに対するアドバイザリリース。複数のエージェントが同じスコープを主張できますが、競合警告が添付されます。
  • ChangeSet – コードの正確なフィンガープリント、宣言されたシンボル、検証コマンドを記録します。
  • 検証ゲート – ChangeSet が受け入れられる前に、正確なフィンガープリントで成功する必要があるユーザー定義のチェック(例:cargo test)。

状態遷移は決定的であり、SQLite にハッシュチェーンされたイベントとして保存されるため、分散コンセンサスを必要とせずに監査可能なトレイルを提供します。


Git ワークツリーとの統合

Foremerge は Git の 共通ディレクトリ を活用して、分離されたワークツリーがファイルツリーを分離したまま同じ調整データベースを共有できるようにします。ワークツリーを作成してエージェントを登録する例:

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"

他のワークツリーは、登録されたエージェントとそのインテントをすぐに確認できます。MVP は SQLite ストアをマシン間で複製しません。ローカル、単一マシンでの調整を目的としています。


アドバイザリクレームとハードロック

Foremerge はファイルやシンボルのロックを意図的に回避します。ロックは、単一のエージェントがクラッシュした場合にフリート全体を停止させ、デッドロックする可能性のあるキューを作成します。代わりに、クレームは アドバイザリ であり、重複警告を表面化しながらエージェントが作業を続行できるようにします。最終的な受け入れゲート(検証と競合解決)は、コミットが refs/foremerge/accepted/* に記録される前のハードチェックポイントです。


Hacker News からのコミュニティフィードバック

  • エージェントのためのバージョン管理 – あるコメンターは、従来の VCS は人間向けに設計されており、AI エージェント向けではないと指摘し、Foremerge が「エージェントファースト」ワークフローへの一歩になる可能性があると述べました。
  • カスタムソリューション – ユーザーはアドホックなブラックボードパターンや weave などのツールを報告しましたが、Foremerge が提供することを目指すより体系的なアプローチへの要望を表明しました。
  • 競合の関連性 – 競合がいつエージェントを停止すべきかについて質問が提起されました。Foremerge の現在のモデルは、セマンティックな重複を HIGH アドバイザリとしてフラグします。ロードマップには、よりリッチなヒューリスティックとユーザー設定可能な重大度が含まれています。
  • 将来のロードマップ – 著者は、依存関係レベルの競合をキャッチするための treesitter ベースのコードグラフと、リアルタイムアラートのためのプッシュ通知の計画に言及しました。

制限事項と信頼モデル(文書化されている通り)

  • 競合検出は決定的ですがヒューリスティックです。誤検知/誤検知の可能性があります。
  • クレームはアドバイザリのみであり、排他的な所有権を強制しません。
  • 検証は、記録されたコマンドが特定のフィンガープリントで成功したことを証明しますが、テストスイートが網羅的であることを証明するものではありません。
  • SQLite ストアはローカルのみであり、分散コンセンサスやマルチテナントのセキュリティモデルはありません。
  • 公開されたベンチマーク結果はまだありません。パフォーマンス比較が計画されています。
  • Foremerge はコードレビュー、CI、セキュリティスキャン、バックアッププロセスを置き換えるものではありません。

拡張と貢献

Foremerge は Apache-2.0 の下でオープンソースです。特にスコープ語彙、競合証拠、ChangeSet の来歴、検証ポリシーに関する貢献が奨励されています。リポジトリには以下が含まれます:

  • 完全なドキュメント(アーキテクチャ、プロトコル、状態モデル、競合検出、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