
2026/09/22 1:22
Foremerge ~並列動作するコーディングエージェント間の意図の不一致を検出~
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改良版は、欠落していた技術的な詳細を取り入れ、概要をより包括的にすると同時に明瞭さを維持するものとなる。以下が改良されたバージョンです:
改善された概要: Foremerge v0.5.0 は、Git リポジトリ内のコーディングエージェント向けに設計されたオープンソースのローカルファースト協調プロトコルである。孤立したワークツリーを管理し、従来のファイルロックを使用せずに意味論的スコープを通じてエージェント(例:Claude Code、Codex)が意図を共有することを可能にし、偶発的な上書きを防ぐ。该系统は、クラスを置換するかそれかを拡張するかの区別など、高次の意図宣言を分析し、潜在的な衝突を早期に検出して警告を発し、ワークフローをブロックすることなくアドバイザリー警告を発行する。该系统は Git 環境内での共有型型付き SQLite データベースに依存し、CLI、JSON API、MCP サーバーツールの手段で統合される。インストールについてはプリビルトバイナリまたは Rust ソースビルドとして利用可能だが、该プロトコルは明示的にローカル環境のみを対象とし、マシン全体の協調や分散合意には含まれない。ユーザーは検証ゲート付きライフサイクル(Publish Intent → Claim Scope → ... → Accept)に従う必要があり、これは別個の受入コミットと統合コミットを保持する。MVP としての Foremerge は、コードレビュー、CI パイプライン、セキュリティスキャンといった業界標準を置換するものではなく、それを補完するものである。
本文
Foremerge: エージェント間の調整プロトコル
Foremerge は、Git の上層に構築されたコーディングエージェント向けのオープンソース調整プロトコルです。 複数の AI エージェントが同時に作業する際、共有可視化(Shared Awareness) を提供し、「意図的な衝突」を早期に検出・提案することを目的としています。
概要とコンセプト
基本理念
- Git の限界の克服: Git はテキスト比較のみを行うため、「同じ行を編集していないが、意味論的に矛盾する変更(意図的な衝突)」を検出できません。
- 例: A がクラスを置換し、B がそのクラスに機能を追加する場合、Git はマージしますが、機能が残るだけの孤立(stranded)コードになります。
- 解決策: エージェントが実際にコードを書き込む前に**「何をするか(意図)」を宣言**します。
設計方針
- ロック機能なし: ファイルやエージェントをロックせず、単一のエージェントクラッシュで全体停止を防ぎます。警告は助言的であり、常に人間がコントロール権を持ちます。
- 確定性 (Deterministic): モデルに衝突判断を委ねず、同じ入力には常に同じ出力をもたらします。
クイックスタート:5 分で開始
コーディングエージェント(Claude Code、Codex、Cursor など)へのインストールは以下のコマンド 1 つで完了です。
インストール
curl -fsSL https://foremerge.com/install.sh | sh
- 効果: Foremerge が自動的に設定され、個々の worktree を使用してもエージェント間の状況が互いに可視化されます。
- バージョン: 0.5.0 (ローカルフーストな MVP)。将来的にパブリックスキーマは変更される可能性があります。
システムの仕組みとワークフロー
1. 共有ホワイトボード(共有可視化)
各エージェントは独立した
worktree を持っていますが、.git フォルダ内の共有 SQLite データベースを読み書きします。
3 つの主要ステップ
- 宣言 (Declaration): エージェントは「対象となるターゲットのみ」を宣言します(例:「sendEmail 関数を変更しようとしている」)。
- 共有可視化: 全てのエージェントが共有リストから現在状況を閲覧できます。
- 衝突検出: 計画の衝突が発生すると即座に通知されます。
- 両方の worktree はクリーンなままです。
- 作業を破棄する必要はありません。
衝突検出の例:Git が見えない問題
- エージェント A:
をPaymentService
に置換。StripePaymentService - エージェント B:
内に PayPal サポートを追加。PaymentService - 結果: Git は両方をマージしてしまいますが、Foremerge はこれらが「拡張ポイントの削除 vs 利用」により衝突すると検知し、HIGH advisory を発出します。
2. セマンティックワークフロー
作業の流れは以下の状態遷移を通過します。
graph LR Intent["意図 (Intent)"] -->|claim| Claimed["主張済み (Claimed)"] Claimed -->|start| InProgress["進行中 (In Progress)"] InProgress -->|publish| Provisional["暫定 (Provisional)"] Provisional -->|validate| Validated["検証済 (Validated)"] Validated -->|accept-gates| Accepted["受入済 (Accepted)"] Accepted -->|record| Committed["コミット済み (Committed)"]
主要なスコープ種別:
symbol, api, schema, config, infra, test, migration など。
3. ChangeSet と検証ゲート
実装後の変更を管理する単位は ChangeSet です。
誠実な統合手順
- 意図の公開、スコープ主張、実装開始。
- 孤立したブランチでのコミット。
- ChangeSet の公開(
)。changeset publish - 検証実行: Foremerge が定義されたゲートチェック(ビルド・型チェックなど)を実行。
- ハイレベル衝突の解決。
- 受入(Acceptance)、Git リファレンスの記録、最終コミット。
コマンドライン操作ガイド
初期化と設定
調整したいリポジトリ内で実行します。
# 1. 初期化 (Git common directory 下に状態を作成) foremerge init # 2. ドクターチェック foremerge doctor # 3. クライアントスキルインストール (MCP サーバー有効化のため) foremerge setup all # 4. チェック登録 (例:テストコマンド) # 注意: リポジトリの実際のテストコマンドに合わせて調整してください foremerge checks set test -- cargo test --all-targets # 5. 状態確認 foremerge doctor --client all
ローカル JSON API の有効化
認証されたローカルループバックを使用する場合:
- デフォルト:
http://127.0.0.1:47811 - トークン発行:
(プラットフォームサポート時)foremerge init - クライアントは、MCP テンプレートまたは可搬なスキル (
) を使用します。~/.local/bin
実践例:衝突検出のシナリオ
2 つのエージェント(Stripe 導入 vs PayPal 追加)による衝突を検出・解決する手順です。
ステップ 1: エージェント登録
STRIPE_AGENT=$(foremerge --json agent register \ --name stripe-agent \ --no-worktree | jq -er '.data.id') PAYPAL_AGENT=$(foremerge --json agent register \ --name paypal-agent \ --no-worktree | jq -er '.data.id')
ステップ 2: 意図の公開 (Declaration)
それぞれが作業計画を共有します。
-
Stripe Agent:
の置換宣言。PaymentServiceforemerge --json intent publish \ --agent "$STRIPE_AGENT" \ --task "modernize-payments" \ --summary "Replace PaymentService with StripePaymentService" \ --scope symbol:PaymentService=replace -
PayPal Agent:
への拡張宣言。PaymentServiceforemerge --json intent publish \ --agent "$PAYPAL_AGENT" \ --task "add-paypal" \ --summary "Add PayPal support to PaymentService" \ --scope symbol:PaymentService=extend
ステップ 3: 衝突の確認と報告
PayPal Agent が計画を実行しようとした際、Stripe Agent の影響を受けて衝突を検知します。
# 衝突情報を表示 foremerge --json intent publish \ --agent "$PAYPAL_AGENT" \ ... | jq '.data.conflicts[]' # 関連する他のエージェントの意図を確認 foremerge --json intent publish ... | jq '.data.related_work[]'
ステップ 4: スコープの主張 (Claim)
ロックではなく、貸与された助言(leased advisory)として所有権を文脈付けます。
- Stripe Agent: 変更理由を提示して成功。
- PayPal Agent: 警告付きで承認可能ですが、衝突解決が必要です。
# スコープ主張と警告確認の例 foremerge --json work claim \ --agent "$PAYPAL_AGENT" \ --intent "$INTENT_ID" \ --scope symbol:PaymentService | jq '.data.warnings'
エージェントクライアントと MCP
Foremerge は完全なライフサイクル管理を MCP (Model Context Protocol) と JSON API でサポートします。
MCP ツール一覧表
| ツール名 | 機能説明 |
|---|---|
| エージェント・モデル・系譜の記録 |
| 計画作業を公表し、衝突と影響を宣言 |
| 結論と将来アクションの記録 |
| セマンティックスコープ上の助言的主張作成 |
| エージェント・意図・ChangeSet の検索 |
| コード変更前の衝突チェック |
| 実装結果の記録と系譜化 |
| エージェント間の永続メッセージ送信 |
| 検証・ゲート適用後の最終受入 |
インストール方法(ソース構築)
Rust 1.85+ が必要です。
cargo install --locked --git https://github.com/naw103/foremerge foremerge # または cargo install --locked --path .
アーキテクチャと技術的詳細
アーキテクチャ概要
[エージェント A] <------- セマンティックイベント -------> [エージェント B] | | 孤立した worktree A 孤立した worktree B | | +-------------- Foremerge サービス (SQLite) --------------+ / | \ <git-common-dir>/foremerge/state.sqlite3 Git CLI 検証 argv
データベース構成
- 位置:
<git-common-dir>/foremerge/state.sqlite3 - 用途: 調整状態、ChangeSet フィンガープリント、検証履歴の保存。
- 注意点: MVP 段階では SQLite をマシン間での複製やネットワークマウントには使用しないでください。
Git Worktree の利用法
# 新しいエージェントブランチ用の worktree 作成 foremerge worktree create \ --branch agent/paypal \ --path ../payments-paypal \ --base HEAD
- 変更はコミット前に Clean な状態を維持します。
やgit merge
は行われず、Foremerge が管理する参照を使用します。rebase
制限事項と注意点 (MVP として)
以下の点は保証されません。完全な代替手段ではないため、注意が必要です。
- 衝突検出: ヒューリスティック的であり、同義語を完全に理解したり、全ての適合性を判断するわけではない。
- ロック機能: 警告を出すことはあっても、ファイルやリソースをロックしません。
- 検証ゲート: 通過は記録されたコマンドの成功証明のみで、テスト計画の完全性を保証するものではない。
- ベンチマーク: 公開されたベンチマーク結果はまだ存在しない。
- 代替機能: コードレビューや CI/CD を完全に置き換えるものではありません。
- セキュリティ: トークン管理はローカルループバックに限定され、パブリック展開用ではありません。
リソースとドキュメント
- ウェブサイト: foremerge.com
- Cargo crate:
crates.io/crates/foremerge - MCP レジストリ:
io.github.naw103/foremerge
さらに詳細な情報は以下のドキュメントを参照してください。
- アーキテクチャ図
- プロトコル仕様
- ステートモデルと遷移
- 検証除外 ADR (Acceptance Decision Records)