Agent-authored code: merge share and rework band
Measured 2026-09-03 against local git history only. Read-only; no repo was modified.
Method
- Repo discovery:
find /code -maxdepth 3 -name .git -type d, excludingnode_modules,.explore,vendor. 21 repos found; 13 had >= 30 commits on their default branch in the last 180 days. - Agent classification: a commit is agent-authored if its subject or body contains any of
Co-Authored-By: Claude,Co-authored-by: Claude,Codex,Co-Authored-By: Cursor,Co-authored-by: Copilot,Generated with [Claude Code],🤖 Generated. Message-trailer only; no content inspection. - Rework window: commits between 180 and 30 days old (so every commit has a full 30-day forward window). Merge commits excluded. Capped at the 400 most recent qualifying commits per repo.
- Rework test: for commit
C, take added line ranges fromgit diff C^ C --unified=0(skipping lockfiles, minified assets, binaries, checksums; top 20 files by added lines). LetEbe the newest descendant ofCon the default branch within 30 days (git rev-list --ancestry-path --until=C+30d C..branch). Rungit blame --reverse --porcelain C..E -L <ranges> -- <file>. Reverse blame attributes each line to the last commit in which it survived; any attribution other thanEmeans the line was modified or deleted inside the window.Cis counted as reworked within 30d if any added line fails to survive toE. - Time-to-rework: hours between
Cand the earliest last-surviving commit. Because the actual edit happens at that commit's child, this is a lower bound. A value of 0 means the immediately following commit touched the lines. - Revert detection: later commits in the 180-day window whose subject contains
revertand that name an in-window short SHA or reproduce an in-window subject viaRevert "...". - Direct-to-default proxy: a commit counts as landing directly if it is on
git rev-list --first-parent <default-branch>and is not itself a merge. Commits reachable only off the first-parent chain arrived via a merge commit (PR-shaped).
1. Repos and agent share (last 180 days, default branch)
| Repo | Branch | Commits 180d | Agent commits | Agent % | Note |
|---|---|---|---|---|---|
/code/work/poe-app-platform | main | 8966 | 7581 | 84.6% | multi-author team repo |
/code/work/poe2 | main | 8403 | 7167 | 85.3% | multi-author team repo |
/code/work/work-brain | origin/main | 2488 | 16 | 0.6% | founder-authored |
/code/jones | origin/main | 2044 | 162 | 7.9% | founder-authored |
/code/poe-browser | origin/main | 1109 | 178 | 16.1% | founder-authored |
/code/dotfiles | origin/master | 554 | 150 | 27.1% | founder-authored |
/code/app-platform-feedback | origin/main | 198 | 0 | 0.0% | founder-authored |
/code/personal/dynorouter | origin/main | 193 | 110 | 57.0% | founder-authored |
/code/personal/cursor-plugins | origin/main | 182 | 1 | 0.5% | upstream OSS clone, not founder-authored |
/code/research/linear | origin/master | 109 | 4 | 3.7% | upstream OSS clone, not founder-authored |
/code/personal/dynorouter-gateway | origin/main | 71 | 45 | 63.4% | founder-authored |
/code/games/car-racer | origin/master | 54 | 23 | 42.6% | founder-authored |
/code/games/crossword | master | 46 | 3 | 6.5% | founder-authored |
| pooled | 24417 | 15440 | 63.2% |
Excluding the two upstream OSS clones (cursor-plugins, research/linear): 15435 / 24126 = 64.0% agent-authored.
Pattern breakdown on the two largest repos shows the markers are not double-counting artifacts: in poe2, 6,371 commits carry Generated with [Claude Code], 4,491 carry a Co-authored-by: Claude trailer, and 782 mention Codex (276 of which carry only the Codex marker). Spot-checking the Codex hits, most are 🤖 Generated with [Codex]; a minority are Reviewed by Codex, which is a review marker rather than an authorship marker and mildly inflates the count.
2. Rework within 30 days: agent vs human
| Repo | Sampled | Measured | Agent n | Agent reworked | Agent rate | Human n | Human reworked | Human rate |
|---|---|---|---|---|---|---|---|---|
/code/work/poe-app-platform | 400 | 396 | 323 | 222 | 68.7% | 73 | 63 | 86.3% |
/code/work/poe2 | 400 | 396 | 323 | 215 | 66.6% | 73 | 62 | 84.9% |
/code/work/work-brain | 400 | 400 | 1 | 0 | 0.0% | 399 | 294 | 73.7% |
/code/jones | 400 | 397 | 50 | 27 | 54.0% | 347 | 155 | 44.7% |
/code/poe-browser | 400 | 400 | 51 | 25 | 49.0% | 349 | 87 | 24.9% |
/code/dotfiles | 400 | 399 | 85 | 54 | 63.5% | 314 | 89 | 28.3% |
/code/app-platform-feedback | 0 | 0 | - | - | n/a | - | - | n/a |
/code/personal/dynorouter | 182 | 182 | 110 | 71 | 64.5% | 72 | 41 | 56.9% |
/code/personal/cursor-plugins | 107 | 102 | 1 | 0 | 0.0% | 101 | 71 | 70.3% |
/code/research/linear | 102 | 89 | 4 | 1 | 25.0% | 85 | 61 | 71.8% |
/code/personal/dynorouter-gateway | 69 | 68 | 44 | 24 | 54.5% | 24 | 11 | 45.8% |
/code/games/car-racer | 30 | 30 | 10 | 8 | 80.0% | 20 | 20 | 100.0% |
/code/games/crossword | 0 | 0 | - | - | n/a | - | - | n/a |
| pooled (all) | 2859 | 1002 | 647 | 64.6% | 1857 | 954 | 51.4% | |
| pooled (excl. OSS clones) | 2668 | 997 | 646 | 64.8% | 1671 | 822 | 49.2% |
Restricted to commits whose git author is the founder (gareth@garethpaul.com/gpj@local): agent 209/351 = 59.5% reworked, human 432/1142 = 37.8% reworked.
3. Time from commit to first rework (agent commits)
| Population | n reworked | p25 (h) | p50 (h) | p75 (h) | p90 (h) | mean (h) |
|---|---|---|---|---|---|---|
| Agent, all repos | 647 | 0.6 | 17.1 | 84.6 | 207.2 | 69.6 |
| Human, all repos | 954 | 0.0 | 1.2 | 21.3 | 168.8 | 52.4 |
| Agent, founder-authored only | 209 | 0.0 | 0.0 | 69.0 | 339.7 | 81.9 |
| Human, founder-authored only | 432 | 0.0 | 1.0 | 18.1 | 304.3 | 71.9 |
Of 647 reworked agent commits, 102 (15.8%) were reworked by the very next commit on the branch (lower-bound 0 hours).
4. Reverts
| Repo | In-window commits explicitly reverted |
|---|---|
/code/work/poe-app-platform | 16 |
/code/work/poe2 | 16 |
/code/work/work-brain | 0 |
/code/jones | 1 |
/code/poe-browser | 6 |
/code/dotfiles | 0 |
/code/app-platform-feedback | 0 |
/code/personal/dynorouter | 0 |
/code/personal/cursor-plugins | 1 |
/code/research/linear | 0 |
/code/personal/dynorouter-gateway | 0 |
/code/games/car-racer | 0 |
/code/games/crossword | 0 |
| total | 40 |
Explicit reverts are rare (40 across 24417 commits). Rework, not revert, is where correction shows up.
5. Landing path: direct-to-default vs merge commit
| Repo | Agent commits 180d | Direct on first-parent chain | Arrived via merge | Direct % |
|---|---|---|---|---|
/code/work/poe-app-platform | 7581 | 7581 | 0 | 100.0% |
/code/work/poe2 | 7167 | 7167 | 0 | 100.0% |
/code/work/work-brain | 16 | 16 | 0 | 100.0% |
/code/jones | 162 | 157 | 4 | 96.9% |
/code/poe-browser | 178 | 146 | 27 | 82.0% |
/code/dotfiles | 150 | 129 | 20 | 86.0% |
/code/app-platform-feedback | 0 | 0 | 0 | n/a |
/code/personal/dynorouter | 110 | 82 | 28 | 74.5% |
/code/personal/cursor-plugins | 1 | 1 | 0 | 100.0% |
/code/research/linear | 4 | 4 | 0 | 100.0% |
/code/personal/dynorouter-gateway | 45 | 45 | 0 | 100.0% |
/code/games/car-racer | 23 | 10 | 13 | 43.5% |
/code/games/crossword | 3 | 3 | 0 | 100.0% |
| pooled | 15440 | 15341 | 92 | 99.4% |
6. Session-store metadata (~/.claude/projects/)
| Metric | Count |
|---|---|
| Project directories present | 6 |
| Session JSONL files total | 8 |
| Session JSONL files modified in last 30 days | 8 |
| Distinct project directories with >=1 session in last 30d | 3 |
Of those, directories corresponding to a /code repo | 0 |
~/.claude/claude_request_* scratch dirs (all within last 30d) | 50 |
All eight sessions are dated 2026-08-30 and live under three /tmp/jones-agent-guidance/... project paths. The three project directories that do map to /code repos (-code-jones, -code-work-poe2, -code-quora-work-poe2) contain zero JSONL files. ~/.claude/sessions/ is empty. No prompt contents were read.
Implication for the measurement: the local session store has been pruned or rotated and cannot corroborate the git-trailer signal. The 180-day agent share above rests entirely on commit-message trailers.
Caveats
- Git-only baseline. Rework is a proxy for quality, not a measurement of it. A reworked line may have been correct and superseded by a new requirement; an un-reworked line may be dead code nobody has touched.
- Reverse-blame is line-identity, not semantics. Reformatting, a rename that
-Mdid not catch, or a whitespace change counts as rework. Conversely, a semantically wrong line left untouched for 30 days counts as survived. - Attribution is by commit trailer. A human who hand-wrote a patch inside an agent session still gets an agent trailer, and vice versa.
Reviewed by Codexinflates the Codex bucket. There is no way from git alone to separate 'agent wrote it' from 'agent was in the room'. - Not a single founder. The two largest repos (
poe2,poe-app-platform, together 17,369 of 24,417 pooled commits) are multi-author team repos where the founder is a minority committer. Pooled numbers are dominated by that team, not by one person. The founder-only slice is reported separately. - Two repos are upstream OSS clones (
cursor-plugins= Anysphere,research/linear= Linear) and reflect other organizations' practices entirely. - Sampling. Repos with more than 400 in-window non-merge commits were capped at the 400 most recent. Six repos hit the cap:
poe-app-platform(7,708 eligible),poe2(7,708),work-brain(2,258),jones(1,851),poe-browser(1,080),dotfiles(482). Their rework rates describe the most recent slice of the 150-day window, not all of it. The other seven repos were measured exhaustively. - Time-to-rework is a lower bound. Reverse blame names the last commit where a line survived; the edit lands at that commit's child. Reported hours therefore understate the true delay, and 0 means 'the next commit'.
- Files skipped. Lockfiles, minified bundles, binaries, and
.sha256files were excluded from the added-line set, and only the 20 highest-volume files per commit were checked. Commits touching only skipped files produced no measurement and are absent from the denominators (see 'Measured' vs 'Sampled'). - The direct-to-default figure is a weak proxy for review. A squash-merge from a reviewed PR lands as a single linear commit on the first-parent chain and is indistinguishable here from a direct push. Repos using squash-merge will show near-100% 'direct'. This number bounds review from below only in repos that use merge commits.
- Two repos produced no rework measurement.
app-platform-feedback(198 commits) andgames/crossword(46 commits) have zero commits older than 30 days inside the 180-day window: all their recent activity is younger than the 30-day exclusion, so no commit has a complete forward window. They contribute to Section 1 only.