hey, i m damir, cto at agentmash.
when we started running claude code and codex on the same repo, the thing that kept biting us was two agents quietly editing the same file and one of them finding out at merge time. anthropic s own docs basically tell you to split file ownership by hand for agent teams, which works fine until a task touches the shared types or the router and you re back to babysitting
we went the other way and let each agent see what the others are changing so they can work it out between themselves. in our benchmarks they caught 98.6% of overlapping work before touching the file, compared to 55% without agentmash, but i m pretty sure there are setups where splitting by hand is still the saner call
Hey Product Hunt, I'm Damir, CTO of agentmash.
We built agentmash so a team can run coding agents on one repo at the same time, with every agent knowing what a teammate's agent is changing and the agents sorting it out between themselves.
What we care about most is stopping merge conflicts before the conflicting write happens, so there's nothing left to resolve later. In our benchmarks on the same team, models and tasks, agents caught 98.6% of overlapping work before touching the file (55% without agentmash), and the share of tasks that ended in an integration conflict dropped from 17.5% to 4.7%. Each developer also got 17.2 accepted tasks a week instead of 12, while spending about a third fewer tokens per task.
We'd love to hear where your agents still get in each other's way.
@iskakov stopping the conflicting write before it happens instead of resolving it after is the right instinct, most tools just make the merge conflict easier to read. the case I'd want to see tested is the logical conflict, not the literal one - two agents touching different files that both implement the same API contract, so there's no file overlap for agentmash to catch but the end state still breaks. does the shared context layer reason about that at all, or is it strictly file-level right now?
@iskakov @galdayan yeah, that's the harder case. honest answer: it's past file-level, but it's name-level, not meaning-level.
for js/ts, the hook works out which exported declarations an edit changed, and what the file an agent is about to edit imports. the room matches those by name. so if agent a changes a shared `InviteRequest` type or `createUser`, and agent b is about to edit a different file that imports it, b hears about it before the edit: who changed it, when, on which branch, and what they said they were doing. agents can also claim the names they're about to change, so the warning goes out before the change lands.
where it stops: it fires when one agent changes the contract the other one uses. if both just implement the same contract differently without touching a shared definition, or the contract isn't a name in code at all (a rest route and its json keys on two sides of the wire, two `slugify`s written from scratch), nothing fires. other languages are matched by file only for now. it doesn't read signatures and doesn't run your compiler or tests, so the build on the merged code is still the backstop.
we wrote this up with five examples and what catches each: https://agentmash.dev/guides/semantic-merge-conflicts
if you've got a real case like that from your team, i'd love to try it.
Hey, great project! One question - do I have to buy subscriptions separately (ex: directly from Claude) or it is already included in your plan?
@faysee you have to bring your own subscription, e.g. u just connect your own claude code/codex/etc. and use agentmash
congrats on the launch damir. 55% to 98.6% is a big jump. in my case most fights between agents are not the same file but the same idea, two of them fixing one bug in diffrent places ) could claims work on a task level too, not only on names?
@agshin_rajabov thanks! you’re right, that’s the gap. today a claim is the paths an agent expects to touch plus a one-line task, and overlap is matched on the paths and names. so two agents fixing one bug in different files both get through without a note.
what helps a little now: any agent can call list_claims and read the task lines its teammates’ agents claimed, so “fix the login redirect” twice is there to see. but nothing compares them for you yet.
matching on the task itself, not just the names, is the next step that makes sense. when two tasks look alike, would you want both agents told, or the people asked first?
I run a few agent sessions at once on one repo and they don't talk to each other, one main session collects their questions and brings them to me as one list. When agentmash agents settle an overlap between themselves, does the owner see what they agreed on, or just the end result?
Love the idea! Having multiple AI agents working together sounds exciting until they start stepping on each other's changes. Solving this at the coordination level is a really smart approach. @iskakov
@iskakov @mansi_somani thanks! that’s exactly where it breaks. git only catches it at merge, so we move it before the write: the agent gets told who’s in the file, on which branch, doing what. a note, not a lock.
building infrastructure for AI agents is the next stage of startups
question for everyone here, which level do you ship with day to day? and if you run more than one agent at a time, what breaks first for you