Git tells you at merge. AgentSCM tells your agent at the edit.

AgentSCM is source control built for AI coding agents, made to work with Git both ways. When an agent tries to edit a file another agent is working on, the first edit is refused before it runs, with the reason. The agent is told before it edits and decides: do other work, ask you, or repeat, and a repeat goes through.

npx agentscm demo

Try it in 30 seconds. No account, Docker or GitHub, and it never writes to your repo.

Alpha 0.1 Try it. Don’t depend on it yet.

claude-2 · laptop-b Working on src/billing.rs “Fix invoice rounding”
claude-1 · laptop-a · edit refused7 ms

AgentSCM: this edit to src/billing.rs was not applied, because another agent is working on that file: bob’s agent claude-2, last active 12 min ago, their task is described as “Fix invoice rounding”. Options, in order: work on something else first; ask the holder to hand it over; ask the user; or repeat the same edit if the overlap is acceptable. A repeat of this edit is allowed and will not be refused again.

Caught before the edit runs. Your agent decides what happens next, and merging stays in GitHub.
Example refusal, shown to the agent. 7 ms is the hook’s p95, not the whole edit.

Git was built for people, not fleets of agents.

Large engineering teams have already hit this. Anthropic moved its monorepo off Git because nearly all of its clients are now always-online agents and CI jobs, not people working offline. Google and Meta built their own systems years earlier.

Most teams aren’t ready to leave Git, and shouldn’t have to be. AgentSCM is building source control for agent-driven work, with Git as the bridge until you choose to move.

Anthropic’s post is about scale. It relies on post-merge and pre-deploy testing, and Claude fixes conflicts after they happen. It doesn’t describe how one agent learns what another is editing before the work is done. That’s the gap AgentSCM fills.

Context, not endorsement. AgentSCM is independent of Anthropic, Google and Meta, and is not affiliated with or endorsed by them. It is not measured at their scale.

See every agent and every clash.

Your hub serves a status page for the whole team. Step through a recorded demo run to see what it shows as agents overlap, and why each part matters.

Two agents start work.

demo-alex’s Claude Code and demo-riley’s Codex start sessions through their hooks and announce the files they are about to change. Nothing is locked: the hub records who is working where, and why.

Recorded from one agentscm demo run: the real hub, hook and MCP calls, with simulated agents. Ids are removed, the repository is renamed and times are spaced out for reading. The status page is alpha.

Agents can ask each other for a file.

Experimental A refused agent can ask the holder through the hub. The holder’s agent can hand that one file over or decline, and the ledger records the answer. In early runs, refused agents asked the holder, and the holder saw and answered every request. So far every answer was a decline.

  1. claude-1 asks agentscm_ask

    “Need src/billing.rs to add tax rounding. Ten minutes?”

  2. claude-2 answers agentscm_handoff

    Hands src/billing.rs over, or declines with a reason.

  3. Ledger

    Records the request, the note and the answer.

Caught at the edit, not first found at the merge.

GitHub alone
Shows the conflict when the pull request opens, after both agents did the work.
File locks
Stop the second agent, without saying what the first one is working on or why.
AgentSCM
Refuses the second agent’s first edit with the reason, lets it ask for the file, and leaves the merge to GitHub.

In our runs, AgentSCM caught the contested edit every time: 12 of 12, before it ran. Two Claude Code agents worked unattended on a test repository, six repetitions each way. With plain Git, the conflict surfaced at merge in 6 of 6. AgentSCM catches the edit; it doesn’t settle it alone. Left unattended, the agents mostly stopped to ask their user, and 3 of 6 merges still conflicted. Handoffs between agents are meant for that step, and are still experimental.

Start beside Git. Move over when you trust it.

Git is the bridge, not the destination. Every step is optional, and Git decides what lands until you choose otherwise.

  1. Today: refused at the edit

    The first overlapping edit is refused with the reason. agentscm collisions shows conflicts across branches and worktrees in about 2 seconds.

    Works · Alpha
  2. Next: the ledger

    A permanent record of revisions, approvals and checks, each tied to one exact version, with checks run in isolation. Agents can ask each other to hand over a file. Git commits come in; work goes out to a Git mirror you own or a GitHub pull request.

    Experimental · GitHub only, not yet tested live
  3. Later: AgentSCM decides what lands

    After a verified two-way round trip with Git, move landing decisions to AgentSCM for one branch, then a whole repository, when your team trusts it. Git and GitHub stay supported.

    Proposed · not built

Test results inform an approval. They are not the approval.

Checks are tied to the exact version they ran on. Approving is a separate step, tied to that version and its task. Push new code and the old approval no longer counts.

Experimental today: local and single-user. This illustration runs nothing.

Fix invoice roundingTask locked
Version
a91f…
Checks
2 passed on a91f…
Approval covers
a91f… + task

Approval matches this version

Checks passed on a91f…, then a91f… was approved for this task.

Try it in 30 seconds.

npx agentscm demo

Starts a throwaway hub, has simulated agents collide on your repo’s busiest file names, and opens the status page signed in. You see the real refusal and your machine’s latency. No account, Docker or GitHub; it never writes to your repo.

npx agentscm
Install with guided setup that asks before each change. agentscm uninstall removes what it added.
agentscm init-repo
Wires Claude Code, Codex, Cursor and Copilot into a repo in one pull request. Nothing to install on the agent side.
agentscm collisions
Readable conflicts across your branches and worktrees in about 2 seconds, using Git alone.
agentscm autopsy
Reads your Claude Code session logs on your machine: how often last week’s sessions edited the same file within minutes, and how many became merge conflicts. Nothing is uploaded.

Running a team of agents? Tell us where coordination breaks. Email updates open once the service is verified.

Self-hosted. The hub listens on localhost by default and records who is editing which files and why. Nothing is sent to us.

Questions, answered.

Do we have to leave Git or GitHub?

Not to start. Git and GitHub keep your repo, pull requests and merges for as long as you want. Moving a branch or a repository to AgentSCM is a proposed, optional step for when your team trusts it.

Does AgentSCM sync with Git both ways?

Partly, today. You can bring a Git commit in and send work back to a Git mirror or a GitHub pull request; both are experimental. Continuous two-way sync is proposed, not built.

Does it lock files?

No. The first edit to a file another agent is working on is refused, with who holds it and why. The agent can do other work, ask you, ask the holder to hand the file over, or repeat the edit, and a repeat goes through.

Which coding agents work with it?

Claude Code, Codex, Cursor and Copilot, through HTTP hooks, agentscm hook or MCP, with nothing to install on the agent side. agentscm init-repo wires a repository in one pull request.

Does it prevent all conflicts?

No. It catches two agents editing the same file, before the edit. It doesn’t catch changes in different files that break each other, and Git still checks for conflicts at merge. In our runs it caught 12 of 12 contested edits before they ran; without a person, 3 of 6 merges still conflicted.

How fast is the check?

About 7 ms at p95 for the hook call, measured in runs with two agents. That is the check itself, not the whole edit.

Where does our data go?

To the hub you run, which contacts only your GitHub or GitLab and the storage you configure. It listens on localhost by default. No telemetry; we receive nothing.