Git only tells you about a conflict when you merge, so you find out late, at the pull request, after both sides have diverged enough to make the merge painful. Running several agents in parallel makes it worse, because there are more branches and more chances that two of them are quietly rewriting the same file.
Overlap watches the active branches on a repo and compares which files each one is changing. When two branches start overlapping, it tells you while the divergence is still small, and it grades how bad it is by how many files are involved.
The clearest picture of why it exists is a pull request where GitHub says there are no conflicts and merging can proceed automatically, while Overlap says three other branches are editing the same files right now. Both are right. Git is answering a question about the base branch at merge time, and Overlap is answering one about the work that’s still in progress.
It started as three deployed services plus a worker that never stopped running, which is a strange setup for something that only has work to do when someone pushes. It’s one app now. I folded the API into the web server and replaced the worker with durable workflows that wake up on a webhook and go back to sleep. It runs on Postgres with Drizzle, hosted on Vercel and Neon.