Foremerge
在代码冲突发生之前,先捕捉意图冲突——为编码 Agent 构建的、架在 Git 之上的开源协调协议。
最小权限与确认机制有据可查:MCP 无法修改验证排除策略、发布需受保护环境审批、setup 不会覆盖已编辑的技能文件(需 --force);扣一分因验证命令以用户全部权限运行且明确不沙箱。数据流透明度高(信封字段、状态字段、令牌不进入日志的明确声明)。敏感数据处理声明详尽(OS keyring、无明文回退),但静态审查无法验证实现。依赖较新且用 rustls,但无审计/锁定证据。回滚与撤销路径(cloud logout/unlink)描述细致但不可执行验证。来源归属依赖 agent register --model,属自报。
README、Cargo.toml、CI 三处版本一致(0.4.0),语义一致性强;但静态审查未见源码,无法确认错误处理质量。依赖均为知名 crate 且 cargo install --locked 可复现构建;故障路径(CLOUD_MUTATION_DEGRADED、doctor 检查)有文档但未见实现代码。
面向 Claude Code/Codex/Cursor 多客户端、macOS/Linux/Windows 多平台的场景描述充分;能力边界(预 1.0、单机、无分布式安全)声明明确。触发精度依赖代理自觉发布意图,属约定而非强制;网络挂载数据库等环境误用有警告但默认行为对非常规环境支持有限。
信息架构清晰(How it works / Quickstart / Cloud / ChangeSets 分层);安装说明覆盖安装脚本、cargo、Windows、更新与 fmg 冲突处理;LICENSE 完整 Apache-2.0;limitations 与 SECURITY 明确列出已知局限。扣分处:README 截断、未见 CHANGELOG 文件、维护者仅为个人仓库(naw103),维护承诺只有 'best effort' 与七日响应目标,无团队或资金支持证据;示例丰富但 FAQ 缺失,命名稳定性靠注释论证而非历史记录。
输出可用性有 JSON API、jq 友好字段、结构化冲突解释支撑;边际价值高——解决 Git 无法看到的语义冲突是真实空白且方案(确定性、非 LLM 判定)定位明确。成本收益中等:引入新协议、验证门与状态库对单人或小团队有一定负担,MVP 阶段收益需实践验证,静态审查无法证实实际效果。
声明大多可追溯到具体命令、字段名、ADR 引用与示例 transcript;事实与推断区分良好(明确标注哪些是 hash 链不提供的能力、哪些是演示输出、'Rendered from the actual conflict fields')。扣分处:'real terminal recording'、'checksum-verified' 等声明静态无法独立核实,跨来源印证仅限文档内部一致性,未见到独立评测或第三方引用。
- 验证命令以当前用户完整权限运行且不做沙箱,只应注册你完全信任的检查命令。
- 预 1.0 软件:公共 schema 可能变更,单机 SQLite 不提供分布式安全,切勿从网络挂载数据库推断安全性。
- README 建议让代理执行 curl | sh 安装脚本;建议先人工审阅安装脚本再执行。
- MCP 无法修改验证策略不等于安全边界;能写入 Git common directory 的任何本地用户都能改变可执行策略。
- 维护者为个人仓库,安全响应为尽力而为,不构成服务级保证。
- 本评估为静态审查,未执行任何命令或测试;演示图像与 'real recording' 声明未经独立核实。
这个 Agent 能做什么,适合哪些场景?
Foremerge 是一个面向编码 Agent 的开源协调协议,以单个 Rust 二进制形式运行在 Git 之上,核心思路是让并行工作的 Agent 在写代码之前先声明意图。它通过 CLI、MCP 服务器(stdio)和本地回环 JSON API 三种前端,将意图、语义作用域、依赖、临时 ChangeSet、决策与溯源写入存储在 Git 公共目录中的 SQLite 数据库,使同一机器上的隔离 worktree 中的 Agent 共享同一份协调视图。冲突检测是确定性的:相同的输入永远产生相同的判定,不需要模型参与裁决,输出的告警是可解释的建议而非强制锁。声明(claims)只是租约式的提醒,从不锁定文件或阻塞 Agent;接受(acceptance)由验证门把关——Foremerge 亲自运行注册的检查命令,而不是采信 Agent 的自述。当前版本 0.4.0 是本地优先的 pre-1.0 MVP,尚未支持跨机器共享模式和公开基准测试结果。
工作流程如下:用 foremerge init 在仓库的 Git 公共目录创建 state.sqlite3 协调状态;用 foremerge agent register 记录 Agent、模型和 worktree 溯源;用 foremerge intent publish --scope symbol:PaymentService=replace 发布意图并声明对每个语义作用域的操作。作用域类型包括 symbol、api、schema、config、infra、test、migration、env、file、component、contract、domain。发布时 Foremerge 的确定性冲突检测器立即比对声明,例如一个 Agent 对 symbol:PaymentService 声明 replace、另一个声明 extend,会产出 HIGH 级别的 destructive_vs_additive 发现并附解释与建议(如协调到 PaymentProvider 抽象)。后续通过 work claim 创建咨询性租约、work start 推进实现、work query 查询谁在改什么、conflicts check 预检计划、coordinate send 发送协调消息。完成后 changeset publish 记录实现、指纹与 Git 溯源,changeset validate 由 Foremerge 亲自运行受信检查并记录命令、退出码与输出,changeset accept 施加冲突、依赖、验证与 Git 门(创建 refs/foremerge/accepted/<changeset-id>,不合并代码),最后 changeset commit 记录实际落地的提交。foremerge setup claude/codex/cursor 为各客户端安装原生 skill 并注册 MCP 服务器(foremerge mcp,暴露 18 个生命周期工具),foremerge daemon 提供带 bearer token 的回环 HTTP JSON API。Cloud 连接器可同步已验证的 agent.registered 与 intent.published 事件(含 Ed25519 快照校验、keyring 存储凭据),不改变独立工作流。
- 团队同时运行多个 Claude Code、Codex 或 Cursor Agent 在同一仓库并行开发,希望在写代码之前发现语义冲突而不是合并时才发现。
- 一个 Agent 把调用方迁移到新的 StripePaymentService,另一个 Agent 给旧的 PaymentService 加 PayPal 支持——两个改动文件不重叠、Git 静默合并,但功能互相抵消;Foremerge 在实现开始前就发出 HIGH 告警。
- 维护者希望接受门由仓库自己定义的可执行检查(如
cargo test --all-targets)把关,而不是采信 Agent 自报的测试结果。 - 使用 Git worktree 给每个 Agent 隔离文件副本的团队,希望所有 worktree 共享同一份协调状态(默认存于 Git 公共目录)。
- 需要审计谁在何时对哪个符号做了什么决策的团队,依赖哈希链事件日志与 UNVERIFIED 记录机制留存证据。
- 在 CI 或托管环境中通过
env:FOREMERGE_CLOUD_TOKEN使用 Cloud 连接器,同步已验证的注册与意图事件。
这个 Agent 有哪些优点和局限?
- 冲突检测是确定性的:基于声明的操作而非对摘要的自然语言解读,'Consolidate payments onto Stripe' 和 'Replace PaymentService with Stripe' 得到相同判定,无需模型裁决。
- 检测发生在写代码之前,两个 worktree 都还干净,冲突时无需丢弃任何工作;告警附带解释、涉及的 Agent 与可操作建议。
- 验证门由 Foremerge 亲自执行注册检查并记录命令、退出码、输出与指纹,Agent 自报的测试结果只算溯源、不算通过;验证后指纹变化会使尝试失效。
- 纯本地优先架构:状态存在 Git 公共目录的 SQLite 中,不改变任何被跟踪文件;Hash 链事件日志提供防篡改证据;声明是咨询性租约,崩溃的 Agent 不会阻塞整个机群。
- pre-1.0 MVP(0.4.0),公共 schema 可能变化;不支持跨机器共享模式,不能从网络挂载的数据库推断分布式安全性。
- 冲突检测是启发式的:可能漏掉同义概念,也可能对兼容的工作发出误报;需要团队养成发布意图的纪律才有效。
- 验证命令以受信本地代码运行,拥有操作系统权限,Foremerge 不做沙箱;JSON API 仅限回环、非多租户硬化服务。
- 没有已发布的协调 vs 不协调性能基准结果;存在基准计划与可执行夹具但证据尚未公开。
- 为每个 Agent 或开发者引入新的工作流步骤(注册、发布意图、认领、ChangeSet、验证、接受、记录提交),对小团队或单人仓库是明显的仪式成本。
如何安装或部署这个 Agent?
安装预编译、带校验和验证的二进制(macOS 与 Linux,装到 ~/.local/bin,同时提供 foremerge 和 fmg 两个名字):curl -fsSL https://foremerge.com/install.sh | sh。Windows 二进制在 releases 页面。或从源码构建(需要 Rust 1.85+):cargo install --locked --git https://github.com/naw103/foremerge foremerge。手动方式还需 Git 和 jq。初始化并自检:foremerge init 然后 foremerge doctor。
如何使用这个 Agent?
最简单的方式是把一段指令粘贴进 Claude Code、Codex 或 Cursor,让它执行:安装、foremerge init、foremerge setup all(为各客户端安装 skill 并启用 MCP,客户端会先提示确认)、foremerge checks set test -- cargo test --all-targets(换成仓库实际的检查命令)、foremerge doctor --client all。之后按安装的 skill 行事:编辑前先发布带语义作用域的意图,认领作用域,开始前检查冲突。手动流程:foremerge -- agent register --name stripe-agent --no-worktree 注册 Agent;foremerge -- intent publish --agent <ID> --task modernize-payments --summary "..." --scope symbol:PaymentService=replace 发布意图并立即收到冲突与 related_work;foremerge work claim 认领作用域;foremerge status 查看所有 Agent 动向。云端功能用 foremerge cloud login --base-url https://cloud.foremerge.com 登录(凭据存 OS keyring),再 cloud link、cloud sync。