Skip to content
chornous.dev

Type two or more letters. Esc closes.

Index of sheets
Theme

Sheet 03 · Writing

All notes

Anthropic replaced git for its monorepo with Scion: 30,000 merges a day and checkouts in seconds

On October 13, 2026 Anthropic described Scion, the source control system a seven-person team built in five months after merges grew from 2,500 to more than 30,000 a day. It moves commits, merges and history to the server and fetches the trees and blobs a client asks for.

Pl. 18 · pipeline drawing generated from the slug “anthropic-scion-source-control”

Anthropic published "Redesigning source control at Anthropic" on its engineering blog on October 13, 2026, and updated it two days later. The post describes Scion, an in-house version control system that took over the company's monorepo from git. A team of seven built it and finished the migration in five months.

You won't run Scion. Anthropic says so in the post: the design suits enormous monorepos and depends on its own review, search and CI tools. The reasons git stopped working for them still apply to your repo, on a smaller scale, once agents start opening most of your pull requests.

The numbers that broke git

merged changes per day, May to September 2026
2,500 to 30,000+
history of the main branch alone
~100 GB
CI checkouts per day
~25M

A compressed working copy runs over 25 GB. Anthropic estimates naive fetching at more than 600 PB of git traffic a day. At peak the company ran several hundred internal git mirrors and handed out snapshots it called seeds. The seeds drifted from the tip of main between refreshes, and diff and blame on partial clones got harder to maintain as merge rates climbed.

The post names one mismatch under all of it. Git assumes distributed clients that work offline. Anthropic's clients are agents and jobs with a permanent network connection, with a few exceptions.

Server-side everything

Scion flips the split between client and server. The server owns history, blame, commits, merges and rebases. The client keeps a bounded object cache, writes files to disk and watches for changes.

Commits happen on the server, so a client has nothing to push. Cost scales with the size of a change, not the repository. Anthropic discourages branches and tags outside main and release branches, because refs are global state. A ref update is a compare-and-swap on one Spanner row.

The unit of work is a changeset, an entry in a write-ahead log. A git commit points at a full tree. A changeset lists the files that changed against its first parent, with content-addressed pointers to compressed blobs. Scion stores no packfiles, so it needs no repository maintenance.

Blame, path history and commit-graph skip lists all come from one generic mechanism for derived data. Each type defines its value in terms of its parents' values, and Scion computes it up front or on demand. Anthropic added copy detection and path-based search indices later without touching clients.

Fetch what you need

Git's fetch negotiation asks what the client already has. Scion's asks what the client wants. The client starts from a root tree, requests missing trees level by level, then fetches blobs. Each request targets an immutable object, so any cache can answer it, and a dropped transfer resumes without a multi-gigabyte packfile.

Scion serving tiers
TierScopeRole
scion-daemonone per nodestores objects for the whole node, starts from a periodic snapshot
scion-cacheregionalstreams objects from memory in the daemon's disk format, no delta compression
scion-serverauthoritativereads Spanner or cloud storage on a cache miss

All three tiers speak the same RPCs, so a client doesn't know the topology. Each tier keeps a hit rate above 99% and holds no long-lived state. A regional cache failure can't flood the servers behind it.

What it bought

Anthropic reports Scion's CPU and memory footprint at about 200 times smaller than the git mirroring setup it replaced. CI and research checkouts dropped from minutes to seconds. CI gained about 25% in CPU capacity. Many CI jobs skip the checkout and query history through an API, the way the automated bisect and revert pipelines do.

The team also built Antique, a code review tool whose approval rules separate comment-only changes from changes to sensitive logic. The merge queue gave up its global lock. At 30,000 merges a day, Anthropic leans on post-merge and pre-deploy tests and lets Claude resolve conflicts.

Claude did a share of the building. A rewrite of the git-to-Scion ingestion pipeline by Claude Mythos Preview used 20 times less memory and ran four times faster. Engineers spent their time on design intent and on telling the model no, for example when it scanned the commit log to find merges instead of querying Antique.

Prior art

The post credits Google's Piper and Meta's Sapling, in particular Sapling's Mononoke server and Bonsai data model. Anthropic says it wants git hosts to borrow pieces: server-side RPCs, other server architectures, and sparse and shallow features that compose, all while keeping git's model.

This week

You can measure the same pressures on your own repo without building anything.

# How big is the history your CI jobs drag along?
git count-objects -vH

# How many merges landed on main in the last 30 days?
git log --merges --since="30 days ago" --oneline origin/main | wc -l

# Does CI need the full history? Try a blobless, sparse clone.
git clone --filter=blob:none --sparse https://github.com/your-org/your-repo

If your CI clones the full repo for a lint job, switch it to a shallow or blobless clone and compare job time. If agents open a growing share of your pull requests, track merges per day over the next quarter. Anthropic's curve went up twelvefold in four months, and its git setup didn't survive it.

Volodymyr Chornous