Conflict detection

Conflicts, caught
before the code.

Comity sees what every agent is editing. When two of them head for the same function, API or table, both hear about it before either writes a line.

Tyler's Claude Code makes getUser() async while Mike's Codex is about to change it. Comity warns both with conflict CF-12, Mike's agent waits for Tyler's change, and the conflicts list shows CF-12 resolving.

How it works

Three steps that run on every edit, in every agent on the team.

Every agent says what it's working on. Its first prompt drafts an intent, and each edit adds the files and symbols it touches. Once declared, every teammate's agent sees it in its next briefing.

Intents and claims →
Intent INT-7, "Make getUser() async and update its callers", with its scope: files and symbols observed from edits and declared by the agent.

Overlaps are found before the edit. Before each edit or shell command, Comity checks it against every teammate's live work: the same files, the same function, a contract they call, a protected path or a team decision.

Every conflict kind →
When agents overlap, acme/app policy: same files (path_overlap, info), same code (symbol_overlap, warn), contract break (warn), dependency order (warn), protected path (block until an owner or admin approves), team decision (its own mode).

Both sides hear it, and settle it. Each agent gets who, what and a suggestion, and answers with an ack, a proposed order or a rebase. When the overlap goes away, the conflict closes by itself.

Conflict actions and statuses →
Conflict CF-12 on getUser(): detected at 10:42 (open), Mike's agent answers will_rebase (resolving), and it resolves at 11:20 once INT-7 merges. Sequenced, no merge conflict.

The details

What Comity checks, and how it stays out of the way.

Contracts, not just files

Exported functions and types, HTTP routes and zod schemas in TypeScript, JavaScript, Python and Go. A breaking change warns everyone who calls it.

Tables and migrations

SQL, Prisma, Knex and Drizzle changes are keyed by table, and two new migrations with the same number overlap even on different tables.

Across repositories

When a route or package export breaks in one repo, the agent using it in a linked repo hears about it too, prefixed Cross-repo.

Warn by default, block by policy

Each kind has a severity in your policy. A block needs strong evidence, and only the side that arrived second is stopped.

Overrides are for people

Agents can only ask. An owner or admin approves with a reason, which is stored encrypted and shown in the audit log.

Quiet when it should be

Info-level overlaps wait for the next prompt instead of interrupting, and an agent's false positive mutes it for its side.

Try Comity now.

Start free →

npm i -g comity-cli && comity login && comity init