Foremerge
在代码冲突发生之前,先捕捉意图冲突——为编码 Agent 构建的、架在 Git 之上的开源协调协议。
- Star 数
- ★ 519
- 最近更新
- 今天
- License
- Apache-2.0
- 主语言
- Rust
- FA 评分
- 77/100 · 表现良好
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude CodeChatGPT(部分支持)
- 费用
- 免费,无需付费服务
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 团队同时运行多个 Claude Code、Codex 或 Cursor Agent 在同一仓库并行开发,希望在写代码之前发现语义冲突而不是合并时才发现。
- 不适合
- 需要跨机器或多机协作的团队:MVP 不复制 SQLite,无法提供分布式安全
- 把冲突检测当作硬性锁或强制门禁的团队:警告仅为建议,从不阻止文件或代理
- 不愿为每个代理执行注册、发布意图、认领、验证等流程的小团队或单人仓库
- 源码审查
- 77/100 · 表现良好
这个 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?
安装预编译、带校验和验证的二进制(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。
这个 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 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Foremerge 当前 | 77 · 表现良好 | 命令行工具免费 | ★ 519 | 今天 | Rust | Codex · Claude Code |
| Loop Engineering | 69 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 12k | 1 天前 | TypeScript | Codex · Claude Code |
| Concord MCP | 67 · 存在缺口 | — | ★ 663 | 1 天前 | TypeScript | Codex · Claude Code |
| zerostack | 57 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 1.7k | 1 天前 | Rust | OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
最小权限与确认机制有据可查: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' 声明未经独立核实。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
v0.5.1 Foremerge v0.5.1
发布说明摘录
A patch release, compatible with 0.5.0. The ledger schema is unchanged, so the two read the same coordination store. It fixes doctor on Windows and for anyone who ran setup as fmg, keeps foremerge mcp answering when it starts outside a repository, and adds npm as an install channel. Changed - foremerge mcp started outside a Git repository, without --database, no longer exits before the handshake. It answers initialize and tools/list as an unavailable server does: the instructions begin Foremerge unavailable: NOT_A_REPOSITORY:, and every tool call returns …在 GitHub 查看 ↗ -
v0.5.0 Foremerge v0.5.0
发布说明摘录
This is a minor version because it breaks one HTTP endpoint's request body. The ledger schema is unchanged, so 0.4.x builds and this one read the same coordination store, and the CLI and MCP surfaces are unchanged. Changed - Breaking (HTTP API): POST /v1/changesets/{id}/validate now runs a check by name from the repository's trusted registry, the same one MCP's run_verification uses, instead of executing an argument vector taken from the request body. The body is {"check": "<name>"}, and the check runs in the ChangeSet's recorded worktree. A body carrying command, …在 GitHub 查看 ↗ -
v0.4.3 Foremerge v0.4.3
发布说明摘录
What's Changed * Add the community-raised launch-week items to the roadmap by @naw103 in https://github.com/naw103/foremerge/pull/25 * Send structuredContent only for object results by @naw103 in https://github.com/naw103/foremerge/pull/28 * Scope the roadmap to what this repository will do by @naw103 in https://github.com/naw103/foremerge/pull/29 * Document every MCP tool parameter and when to use each tool by @naw103 in https://github.com/naw103/foremerge/pull/26 * Release 0.4.3: make a ledger migration survivable by @naw103 in https://github.com/naw103/foremerge/pull/30 …在 GitHub 查看 ↗