Blog

What is an intent conflict?

An intent conflict is two declared plans that cannot both be true. Git cannot see one, because it compares lines, not plans. A definition, an example and what it is not.

An intent conflict is a contradiction between two declared plans that cannot both be carried out as written. Two coding agents each say what they are about to change and what they will do to it, and the plans disagree: one will replace a thing, the other will build on it. It is called an intent conflict because it exists at the moment the plans are made, before any line of code does.

What does an intent conflict look like?

Take a payments class that two agents have been given work on.

  • Agent A is told to modernize payments. It plans to replace PaymentService, moving every caller onto a new PaymentProvider interface.
  • Agent B is told to add PayPal. It plans to extend PaymentService with a PayPal method.

Each plan is sensible alone. Together they are not possible: B is adding to a class A is retiring. If each agent works in its own worktree, the files never touch. When the branches merge, Git may find nothing to complain about, and the new PayPal code ends up attached to a class that no longer has callers. Worktrees do not remove this collision, they move it to merge time.

An intent conflict is what you want surfaced here, while both agents are still at the planning stage. With Foremerge, each agent publishes an intent and the scopes it will change, with the operation on each. When the second agent declares symbol:PaymentService=extend against the first agent's replace, the comparison raises a destructive_vs_additive finding at HIGH severity, with both worktrees still clean.

How is it different from a merge conflict?

A merge conflict is a statement about text: two branches changed the same lines, and Git cannot choose between them. It appears when the work is finished and the branches are combined.

An intent conflict is a statement about plans. It does not need overlapping lines, overlapping files or even overlapping time. And it can be present when the merge is perfectly clean, which is the case that costs the most, because nothing reports it.

Merge conflictIntent conflict
Compareschanged linesdeclared plans
Appearswhen branches are combinedwhen the second plan is declared
Needs overlapping textyesno
Can exist with a clean mergenoyes

What is it not?

  • Not a prediction that the code will break. It says two plans contradict each other. Whether the damage is a failing test or a quiet dead end depends on the code.
  • Not a replacement for Git. Git is still the right tool for text. The intent record sits above it.
  • Not the same as orchestration. An orchestrator decides who does what. An intent conflict is what is left when two agents each did what they were told and the instructions disagreed. See orchestrators and coordinators.

Where does the term sit?

Git made disagreement between people a named object: a conflict, appearing at a known moment, resolved before anything lands. Agent coordination applies the same idea one layer up. Git can only see a collision when two agents touch the same lines, and the expensive collisions are decided earlier, in the plans. See the coordination layer.

If you only ever run one coding agent at a time, you will not meet an intent conflict. If you run several, the cheapest check is to write down what each will change and what it will do to it, and read two entries side by side before anyone starts. Foremerge is open source (Apache-2.0), pre-1.0 and local-first, so it works on one machine and has no shared mode yet.

Foremerge

The open-source coordination protocol for parallel coding agents, built above Git. Agents declare intent and semantic scopes before writing code, so plans that cannot both be true collide in a queryable store instead of in your merge. One Rust binary, Apache-2.0, local-first.

$ curl -fsSL https://foremerge.com/install.sh | sh