Foremerge 0.5.0 – 并行编码代理的基于意图的冲突检测
Foremerge 0.5.0 让代理在编写任何代码之前就能检测到意图冲突
Foremerge 0.5.0 是一个 pre-1.0 的本地优先 MVP,它在 Git 之上增加了一个协调层。它允许多个 AI 编码代理在隔离的 Git worktrees 中工作,发布 意图(语义范围和操作),并在这些意图发生冲突时立即收到确定性的警告。该协议是建议性的——代理永远不会被锁定——但它可以防止传统基于行的合并所遗漏的“无声地撤销彼此工作”的问题。
基于意图的冲突检测如何工作
- 代理宣布它们将修改的内容 – 不是通过对比文本,代理会发送一个 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
- Intent – 计划变更的语义描述。
- Claim – 对一个范围的建议性租约;多个代理可以声明同一范围,但会附带冲突警告。
- ChangeSet – 记录代码的精确指纹、声明的符号和验证命令。
- 验证门禁 – 用户定义的检查(例如,
cargo test),必须在确切指纹上通过,ChangeSet 才能被接受。
状态转换是确定性的,并以哈希链事件的形式存储在 SQLite 中,提供可审计的记录,而无需分布式共识。
与 Git worktrees 的集成
Foremerge 利用 Git 的 公共目录,使隔离的 worktrees 共享相同的协调数据库,同时保持各自的文件树分离。创建 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"
其他 worktrees 会立即看到已注册的代理及其意图。MVP 不会在机器之间复制 SQLite 存储;它旨在用于本地、单机协调。
建议性声明 vs. 硬锁
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 crate(
foremerge)。 - Claude、Codex、Cursor 的 MCP 技能文件以及可移植的
.agents/skills目录。
在本地运行完整测试套件:make verify。
总结
Foremerge 0.5.0 提供了一个实用且确定性的层,让 AI 编码代理在修改代码前发布并协调意图,捕捉 Git 基于行的合并无法察觉的语义冲突。尽管仍是一个 MVP,具有仅本地存储和建议性警告,但它为构建以代理为中心的版本控制工作流提供了坚实的基础。
Sources
相关
- Dispatch
- 项目
- Dispatch
- 项目
- Dispatch