Three weeks of the grit factory
v0.5.0 was the last release made by hand. Since Oct 6, cloud agents have planned, written, reviewed, landed and released grit, with one human maintainer setting direction and making the calls the agents escalate. This is what they did and how.
The work, day by day
4,811 agent runs over 22 days: 4,765 hours of agent time and 52.7B tokens. Every change was built by one agent and reviewed by another; release numbers mark the days a release went out.
Agent runs started per day
Show the numbers
| Day | Building | Reviewing | Other | Commits | Agent hours |
|---|---|---|---|---|---|
| Oct 6 | 68 | 152 | 36 | 114 | 110 |
| Oct 7 | 58 | 121 | 35 | 165 | 162 |
| Oct 8 | 47 | 117 | 12 | 202 | 115 |
| Oct 9 | 30 | 73 | 9 | 122 | 61 |
| Oct 10 | 61 | 153 | 11 | 244 | 159 |
| Oct 11 | 76 | 111 | 42 | 181 | 184 |
| Oct 12 | 53 | 133 | 25 | 202 | 160 |
| Oct 13 | 42 | 93 | 22 | 163 | 144 |
| Oct 14 | 33 | 69 | 19 | 70 | 146 |
| Oct 15 | 20 | 83 | 5 | 123 | 189 |
| Oct 16 | 43 | 119 | 25 | 150 | 157 |
| Oct 17 | 38 | 58 | 9 | 88 | 459 |
| Oct 18 | 58 | 65 | 27 | 107 | 71 |
| Oct 19 | 23 | 50 | 16 | 95 | 79 |
| Oct 20 | 77 | 190 | 23 | 178 | 442 |
| Oct 21 | 85 | 224 | 29 | 280 | 283 |
| Oct 22 | 107 | 251 | 40 | 312 | 328 |
| Oct 23 | 90 | 221 | 34 | 311 | 267 |
| Oct 24 | 115 | 223 | 113 | 324 | 602 |
| Oct 25 | 91 | 168 | 102 | 302 | 458 |
| Oct 26 | 50 | 89 | 62 | 183 | 141 |
| Oct 27 | 23 | 27 | 37 | 54 | 49 |
Commits landed on main per day
Where the agent hours went
How a change gets to main
Nothing lands unreviewed. A second agent on a different model reviews every branch and sends it back until it’s right; the branch then has to pass the Rust test suite before it’s integrated. The maintainer is asked only when the factory isn’t sure.
1 · Work comes in
- Roadmap steps462
- Issue fixes426
- One-off tasks219
- Speed loop45
- Quality loop44
2 · Another agent reviews
2,790reviews. 28% of changes passed on the first round; the rest went back for fixes, up to 6 rounds.
3 · Integration
- Automatic928
- Integration agent232
- Maintainer211
Automatic when reviewed and tests pass; security fixes always ask.
4 · Main
3,970commits from 1,199 changes
5 · Daily release
22releases, each checked on Linux, macOS and Windows with everyday scenarios
Review rounds before a change was accepted
What the integration agent decided
Models doing the work
Dogfooding finds the bugs
383 closed with a fix the agents wrote; 56 still open.
The roadmap: 36 items, all done
The maintainer wrote the roadmap; a planning agent broke each item into about a dozen steps, the maintainer approved the plan, and build agents worked through the steps. 407 steps across 12 workstreams, finished on Oct 24. Then the factory switched to dogfooding.
Speed: from 2× slower than git to even
A daily benchmark times every supported command on several repository shapes against stock git (git version 2.55.0). The speed loop always has one agent attacking the worst gap it shows, and a regression the next morning becomes a fix task.
On Oct 26 the benchmark machine moved from git 2.43.0 to 2.55.0, whose push and fetch are much faster; that explains most of that day’s uptick and the push rows below.
grit’s time relative to git, typical scenario
Scenarios where grit beats git
Everyday commands today
By area
Against v0.5.0 itself
Biggest single wins from the speed loop
Libification: grit became a library
At v0.5.0, most of grit was a 281k-line legacy binary and the library held 31% of the code. The factory deleted the legacy crate on day one, rebuilt every command on grit-lib, and kept the CLI a thin layer that renders library results: today the library is 89% of the code.
Lines of Rust per release
Rust tests
The quality loop
| Theme | Runs | Lines added | Lines removed | What it does |
|---|---|---|---|---|
| Move logic into grit-lib | 15 | +10,061 | −3,510 | Moves decisions out of grit-cli into typed library APIs, so the CLI only renders |
| Deduplicate | 8 | +2,575 | −1,444 | Finds logic implemented more than once and keeps one copy |
| Dead code and dependencies | 7 | +269 | −4,295 | Deletes code nothing calls and dependencies nothing needs |
| Library API quality | 7 | +4,035 | −1,287 | Typed errors and clearer signatures for embedders |
| Simplify | 7 | +1,297 | −2,870 | Rewrites tangled code into something shorter and clearer |
New ideas, not just a git clone
Beyond git compatibility, the roadmap pushed grit toward being a better tool for agents and for programs that embed it.
Change ids on every commit
Every commit carries a stable change id that survives amend, rebase, pick and revert, so a change can be followed through history rewrites.
v0.5.16 · 9 stepsHunk selection for agents
Stage, commit, restore and stash individual hunks and lines by id, non-interactively. It replaces `-p`, which agents can't drive.
v0.5.18 · 21 steps--json and --markdown everywhere
A documented output contract on every command: machine-readable JSON for tools and agents, Markdown for humans and LLMs.
v0.5.8 · 22 stepsgrit history
Rewrite commits directly (reword, split, drop, move) without starting an interactive rebase, plus a full rebase command.
v0.5.12 · 23 stepsConflicts you can work through
Merge, pick and revert stop with a typed conflict state that both the CLI and the library can inspect, resolve and continue.
v0.5.18 · 11 stepsPluggable storage
The object database and ref stores are traits. Embedders can back a repository with their own storage, in memory or remote.
v0.5.5 · 22 stepsReachability bitmaps and parallelism
Bitmaps for fast counting and packing, and parallel status, checkout, index-pack and pack reads on large repositories.
v0.5.10 · 22 stepsA library you can embed
grit-lib has no globals, never prints and never exits. It exposes a typed Repository API with a checked public-API snapshot.
v0.5.4 · 24 stepsEvery release
| Release | Date | Commits | Summary |
|---|---|---|---|
| v0.5.1 | Oct 7 | 36 | grit v0.5.1 moves all SHA-1/SHA-256 hashing into one grit-lib module, fixes SHA-256 gaps, and adds hot-path benchmarks and a larger docs site. |
| v0.5.2 | Oct 8 | — | |
| v0.5.3 | Oct 8 | 203 | grit v0.5.3 mostly speeds up add, status, checkout and pack reads, and moves grit-lib away from globals and printing, with fixes for index, checkout and ref-name bugs. |
| v0.5.4 | Oct 9 | 121 | v0.5.4 fixes commit signing and two clone failures, and mostly reworks the object database into pluggable backends with much broader refs and config tests. |
| v0.5.5 | Oct 11 | 316 | v0.5.5 turns grit-lib into a pluggable library for refs, objects, bitmaps and network transfer, and adds many commands such as restore, stash, blame, revert, clean, rm, mv and bundle. |
| v0.5.6 | Oct 11 | 96 | grit v0.5.6 adds parallelism across pack, index, ODB and status code, speeds up blame and status, and fixes many clone, diff and Windows bugs. |
| v0.5.7 | Oct 12 | 220 | v0.5.7 adds parallel status, checkout and index-pack, clone/fetch/pull progress output, a typed grit-lib Repository API, and fixes for about twenty reported bugs. |
| v0.5.8 | Oct 13 | 163 | grit v0.5.8 adds gc, repack, fsck, notes, reflog and other commands, and fixes many CRLF, ssh, clone, merge and Windows switch problems. |
| v0.5.9 | Oct 14 | 75 | v0.5.9 adds a task-based `grit gc` and faster fsck, clone, commit, status and path-limited log, and fixes several push, diff, status and identity bugs. |
| v0.5.10 | Oct 16 | 122 | v0.5.10 is mainly a performance release speeding up status, diff, switch, blame, add and pack reads on large repos, plus new log, status and add options. |
| v0.5.11 | Oct 16 | 145 | v0.5.11 fixes several merge, diff, log and clone bugs and speeds up merge, blame and log, with large additions to the benchmark suite and history rewrite library. |
| v0.5.12 | Oct 17 | 94 | v0.5.12 adds a new `grit history` command group for rewriting commits and fixes many Windows, macOS, push, fetch, fsck and index bugs. |
| v0.5.13 | Oct 18 | 94 | v0.5.13 mostly fixes bugs in blame, gc, history and switch, redacts URL passwords in auth errors, and adds performance work on diff, commit and switch. |
| v0.5.14 | Oct 19 | 92 | grit v0.5.14 is mostly a performance release for diff, commit, switch, clone, gc and log, plus fixes for fsck, add, rm and credential leaks. |
| v0.5.15 | Oct 20 | 183 | v0.5.15 speeds up status, diff, commit, blame, merge and clone, fixes several path and config bugs, and adds many new grit diff options. |
| v0.5.16 | Oct 22 | 290 | grit v0.5.16 adds change ids on every commit and richer log, show, diff and status output, plus Windows fixes and speedups. |
| v0.5.17 | Oct 22 | 297 | v0.5.17 adds a library-first surface for branches, tags, fetch/pull/push, merge/pick/revert conflicts, history editing and tree-sha256, plus non-UTF-8 path, empty-tree and SHAttered fixes. |
| v0.5.18 | Oct 23 | 283 | grit v0.5.18 adds hunk and line-level staging, commit, restore and stash, a full rebase command, and many merge, pick, branch, tag and remote options, plus performance and bug fixes. |
| v0.5.19 | Oct 24 | 159 | v0.5.19 adds many options to blame, reflog, clone, config, worktree, stash, remote and resolve, and fixes Windows performance and several correctness bugs. |
| v0.5.20 | Oct 25 | 217 | v0.5.20 is mostly a performance and memory release for add, gc/repack, clone, status, blame and revwalks, plus fixes to diff, ignore, merge, fetch and push. |
| v0.5.21 | Oct 26 | 304 | v0.5.21 mostly cuts memory and time in clone, fetch, gc/repack, fsck and merge on large repos, and fixes many concurrency, Windows and Git-compatibility bugs. |
| v0.5.22 | Oct 26 | 172 | v0.5.22 mostly fixes correctness gaps against system Git and cuts memory and time on large blobs, big worktrees and push, fetch and clone. |