Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md
gitai, Git designed for AI agents. An animation: a board of 50 agents racing on one branch, where git lands 100 changes and gitai lands 200; the server puts every change in order; every change has the name of the agent that made it; and servers can be added as you grow.

Git designed for AI agents.

Anthropic built Scion, a faster version control system for coding agents, and described it in Redesigning source control: a server-centric system built for hundreds of agents that read, write and land code at the same time. Scion is internal to Anthropic and is not available to the public.

So I built gitai: an open-source version of that design that anyone can run, and that the community can improve and maintain together.

MIT licensed. Vendor neutral: the server never calls a language model, and every AI feature works with any provider, or none.

gitai is an independent implementation of the publicly described design. It is not affiliated with or endorsed by Anthropic.


Why

Classic Git hosting was built for humans who clone a repository, work for hours and push once. Coding agents work differently: thousands of short-lived tasks, each touching a few files, each wanting to land in seconds, all on the same branches. Full clones, merge queues and client-side history walks become the bottleneck.

Scion's answer is to move the work to the server: clients stay online and fetch only what they need, history questions are answered (and cached) by the server, changes land through a compare-and-swap instead of a queue, every update is an entry in a changeset log, and the repository state lives in a consistent database plus object storage so servers scale out. gitai implements these ideas, with normal Git repositories underneath.

The Scion ideas, implemented

Scion ideaIn gitai
Always-online clients that fetch exactly what they needObjectService serves single objects and sparse trees; graft clone and graft sparse materialize only the paths you ask for.
Source control as an API: history runs on the serverBlame, path history, ancestry and code search run server-side and are memoized as derived data, computed once per commit.
Landing without a merge queueUserLand rebases a change onto the current tip and lands it with a compare-and-swap; concurrent lands on one branch are batched into a single reference update.
Automatic conflict resolutionA conflicting land is resolved by a resolver you choose (any LLM provider, a deterministic tool, or none) through a versioned, vendor-neutral protocol.
Changeset logEvery accepted reference update is recorded with its operation and actor in a dense, ordered log that clients list or watch live.
Storage core: a database and object storage, stateless serversEach change is a changeset in a write-ahead log in SQLite or PostgreSQL, with a compare-and-swap per reference; packs live in object storage (file, S3, GCS, Azure). Server nodes are caches that any node can rebuild, so you add nodes to scale.
Test after landing, revert the culpritgraft-verify tests the tip, bisects a failure and reverts the change that broke it.
Monitoring agents ("superfans")Agents follow the changeset stream and report what matters to each component, also through Slack.
Agent-friendly reviewReviews with semantic approval rules: a comment-only change can need fewer approvals than a logic change.
Agents as first-class usersPer-agent tokens, an RPC allowlist and branch policies decide what each agent may do.
Strict cache tiersgraft-cache caches immutable objects in daemon and regional tiers, verifying every object.

Architecture

        agents, CI jobs, sparse workspaces          graft CLI / Go SDK
                            |
                            v   gRPC
        +-------------------------------------------------+
        |  graft-cache (optional daemon and cache tiers)  |
        +------------------------+------------------------+
                                 v
   +---------------------------------------------------------------+
   |  gitai server (any number of nodes)                           |
   |  land - objects - changesets - derived data - search - review |
   |  write path: changeset + compare-and-swap per reference       |
   +-----------+--------------------------------+------------------+
               |                                |
               v                                v
   +-----------------------+       +-----------------------------+
   |  SQLite / PostgreSQL  |       |  object storage             |
   |  changeset WAL, refs, |       |  content-addressed packs    |
   |  changelog, reviews   |       |  (file, S3, GCS, Azure)     |
   +-----------------------+       +-----------------------------+
               \                              /
                local Git repositories = caches any node can rebuild

Details: ARCHITECTURE.md and STORAGE.md.

Quick start

Requirements: Linux or macOS, Go 1.26, a C toolchain, Meson and Ninja (the build compiles a bundled Git).

git clone https://github.com/feder-cr/git-ai.git
cd git-ai
make build                         # server, CLI and tools into _build/bin
examples/graft/quickstart.sh       # a server, a cache daemon, two agents and a land, in a temporary directory
./_build/bin/graft                 # the CLI and its commands

To run your own server, adapt examples/graft/config.toml and start it with _build/bin/gitaly serve config.toml. To put the repository state in a database and object storage, add a [graft.storage] section: start in shadow mode, import your repositories, then switch to authoritative (STORAGE.md).

Inside the code the extensions are called Graft: the [graft] configuration section, the graft CLI, internal/graft and doc/graft.

Documentation

Benchmark

50 agents land 5 changes each on one branch; 20% of the changes conflict on purpose. "Classic" is the same server with batching off: every agent rebases and retries its own compare-and-swap, up to 20 attempts. Measured with acceptance-phase4.sh on one 16-core machine, two runs:

50 agents, 250 changesclassicgitai
changes landed100-101200
attempts per landed change271.0
lands per minute240-2721,862-2,544
p99 latency6.3-7.0 s1.5-1.8 s

The 50 changes gitai does not land are the planned conflicts: these runs use no conflict resolver. With the deterministic resolver of resolve.toml every conflict is resolved and all 250 changes land. Details and more sizes in BENCH.md.

Status

Version 0.2.0. Everything above is implemented and covered by unit, end-to-end, multi-node, crash and fuzz tests. Interfaces may still change before 1.0. Known gaps (for example garbage collection of packs in the storage core) are listed in LIMITATIONS.md.

Community

gitai is meant to be maintained by its community. Open an issue to report a bug or propose an idea, start a discussion before a large design change, and send pull requests: tests and a short description of the reasoning make them easy to review. The design documents in doc/graft/PLAN*.md explain why things are the way they are.

Credits and license

gitai is MIT licensed, see LICENSE.

It started as a fork of Gitaly, GitLab's Git RPC server (MIT, Copyright GitLab Inc.), which provides the Git plumbing underneath; every upstream Gitaly RPC keeps working. The non-MIT ee/ directory of upstream Gitaly is not part of this repository. Gitaly's own README is kept in doc/UPSTREAM-GITALY.md, and third-party notices are in NOTICE.

关于 About

Git designed for AI agents.
ai-agentscoding-agentsgitgolangscionversion-control

语言 Languages

Go95.7%
Protocol Buffer2.2%
Python0.8%
Shell0.5%
JavaScript0.2%
Makefile0.2%
PLpgSQL0.1%
Jinja0.1%
HCL0.1%
Ruby0.0%
Perl0.0%
Dockerfile0.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
42
Total Commits
峰值: 42次/周
Less
More

核心贡献者 Contributors