
Commits without a Co-Authored-By trailer: the agent made 26 of the 29 we could check
Do not report a Co-Authored-By count as the share of AI-written code. Of 29 commits without the trailer that we could check against session logs, the agent made 26. Have it add the trailer to merges and reverts too.
In the repository of our Korean spell-checker app, 26 commits whose times match git commands the agent ran (25 merge commits, 1 revert) carry no Co-Authored-By: Claude trailer. The window is the one covered by Claude Code session logs, from the evening of September 13 to October 24, 2026; of the 29 trailer-less commits in it, only 3 have no matching command in the logs. Since August 2025 there are 89 commits without the trailer, and sorted by subject line and date, 52 of them are merge commits or stash entries. If the agent runs your merges and reverts, tell it in the instruction file to pass -m with the trailer.
Sources: git history of four repositories (recounted on October 25, 2026 with the cutoff fixed at the end of October 24, KST), Claude Code session logs kept on this PC, and the GitHub pull request list. Author names and session IDs are left out.
Contents (9)
- After September 13, 26 of the 29 commits without a trailer match an agent git command
- The 89 trailer-less commits since August 2025: 50 merges, 2 stash entries, 7 early commits, 30 others
- The mining memo counted about 40 merges and called the rest hand commits
- In the utilities app (7) and the puzzle game (10), every trailer-less commit matches an agent command
- Two pull requests labeled codex never appear in git log --all
- Six git log lines with --exclude=refs/stash
- Periods without session logs and squash merges cannot be settled
- What we will check next
- Frequently asked questions
After September 13, 26 of the 29 commits without a trailer match an agent git command
A missing trailer says nothing about who made the commit. So we went through the Claude Code session logs (JSONL files) and collected every shell command the agent ran that contained git commit, merge, revert, stash, tag and the like, and that mentioned this repository in its working directory or command. A commit counted as "agent command found" when such a command ran between ten minutes before and 30 seconds after the commit time.
The agent's first git write command for this repository ran at 20:41 on September 13, 2026. From then to October 24 there are 282 commits, and all 253 with a trailer matched an agent command, so the method found every trailer commit in that window.

In this window 89.7% of commits carry the trailer, while 279 commits, 98.9%, match a git command the agent ran (on the trailer-less side, 25 merge commits and 1 revert). The revert d378829, at 10:47 on September 30, sits in the log as git revert --no-edit aa2d224. The commit it reverted had gone in 28 minutes earlier with a trailer; the revert has none. The merge 2b9d3a1 on October 17 was git merge --no-edit main. On the same day the agent wrote its own -m message for merge b356c72 and still left the trailer line out.
The remaining three are a version commit (16d9917) and the two v16024 release merges, made at 20:07 and 20:08 on September 26. No matching command is in the logs, so we left them undecided.
Matching on time alone could produce coincidences, so we shifted every commit time by three hours in each direction and ran the same match. Only 17 and 15 of the 253 trailer commits matched (6 to 7%), and 0 and 1 of the 29 without a trailer.
All three merges in the same period that do carry a trailer (857326b, 08b1f7a, 0458820) have an agent command in the logs that put the trailer in. For 08b1f7a and 0458820 it was git merge … -m "… Co-Authored-By: Claude Opus 5.5 …"; for 857326b the agent resolved a merge conflict and then added the same line with git commit -m.
The 89 trailer-less commits since August 2025: 50 merges, 2 stash entries, 7 early commits, 30 others
We matched Co-Authored-By: Claude at the start of a message line, then recounted with git's own trailer parser (%(trailers:key=Co-authored-by)); the two counts were identical in all four repositories. Up to October 24, 2026, git log --all on the spell checker lists 725 commits, and 345 of the 434 since August 1, 2025 (79.5%) carry the trailer. The 701 commits in our note on 701 commit messages were counted on the develop branch only, up to October 19, minus one submodule commit, which is why the totals differ.
| Group | Count | How we sorted it |
|---|---|---|
| git-flow release merges | 37 | Subject Merge branch 'release/…', 'hotfix/…' or Merge tag … |
| Feature, sync and PR merges | 13 | 9 feature branches, 3 syncs between develop and main, 1 pull request |
| Stash entries | 2 | On main: … and its index on main: … |
| Before the first trailer | 7 | August 3 to the morning of August 7 (the first trailer is 02cbb15, August 7 at 22:01) |
| Other single-parent commits | 30 | 24 code, 5 data or config, 1 revert |

The two stash entries are not commits anyone meant to count. git log --all follows refs/stash as well, so of the five stashes in this repository, the newest one (September 10, 2026) and its index commit show up. Put --exclude=refs/stash before --all and the numbers become 345 of 432 (79.9%), with 87 lacking the trailer.
Drop merges and start the window at the first trailer, and the share rises to 342 of 372 single-parent commits (91.9%).
Of the 30 single-parent commits, the five data or config ones are 9 image and PSD files (94773fa), 4 image and PSD files plus a few string and DB-version lines (417259d, 9 files, +8/−8), collapsing eight .gitignore lines into one (3c1bdca), a two-line version bump in build.gradle (36a6c23), and 906 lines of quiz data plus a two-line version bump (16d9917). All 24 code commits fall between August 9 and September 13, 2025. One of them, f43dada, is the operator reverting source the AI had changed wrongly; its Korean message roughly reads "restore the existing source that was edited wrongly (Claude Code…)", and the story is in our note on 701 commit messages.
The mining memo counted about 40 merges and called the rest hand commits
This topic came from a mining memo an agent wrote while scanning the repository. It said about 40 of the 89 were git-flow merges and the rest were hand commits. The recount found 51 merge-shaped commits (one of them a stash) and 7 commits from before the first trailer inside the window. Of the 29 commits we could check against the logs, the agent's own commands made 26.
The memo's totals (728 and 348) had no cutoff either. Five new commits arrived in this repository on the morning of October 25 alone, and the same command then returned 730. Every number in this note uses --until=2026-10-25T00:00:00. The memo also said our peer-to-peer chat app repository started in September 2026; its first commit is from August 21, 2025 (8 commits that month, 95 in September 2026).
In the utilities app (7) and the puzzle game (10), every trailer-less commit matches an agent command
| Repository | First commit | Commits | Trailer | Share | No trailer (merges) |
|---|---|---|---|---|---|
| Spell checker, all history | 2020-12-16 | 725 | 345 | 47.6% | 380 (205) |
| Spell checker, since Aug 2025 | 434 | 345 | 79.5% | 89 (51) | |
| Utilities app | 2026-09-20 | 87 | 80 | 92.0% | 7 (6) |
| Puzzle game | 2026-09-30 | 170 | 160 | 94.1% | 10 (10) |
| P2P chat app | 2025-08-21 | 103 | 102 | 99.0% | 1 (0) |
Even in repositories built with the agent from day one, the gaps are mostly merges. All 10 trailer-less commits in the puzzle game are merges, and all 10 line up with an agent git command in the session logs. The same repository has 9 merges that do carry the trailer.
In the utilities app, 5 of the 6 merges are Merge branch 'worktree-agent-<id>'. All five are in the session logs as git merge --no-edit worktree-agent-<id> commands the agent ran, and the git worktree list output in the first of those commands shows the branches sitting in .claude/worktrees/agent-<id>, the worktree folders Claude Code created for its subagents. The one single-parent commit, 1171dee, is the agent's own git commit -m "Ignore local upload keystores", written without the trailer line. The single gap in the P2P chat app is its root commit, "first commit", three minutes before the first trailer commit.
Two pull requests labeled codex never appear in git log --all
The author field is no help. All 89 trailer-less commits since August 2025 in the spell checker come from one account, which also authored 338 trailer commits.
Pull request labels live only on GitHub. The spell checker has three pull requests. #1 and #2, from June 29, 2025, have a codex label and codex/… branches, and both were closed without merging. Their commits (09cb9b5, d318e22) are on no branch, so git log --all never shows them, and their messages have no trailer either. #3, merged with 20 commits, has no label.
Branch names such as worktree-agent- and codex/ survive a merge only in the merge commit's subject. Wording differs too: between the night of August 7 and September 13, 2025, the median subject length was 38 characters for trailer commits and 20 for the rest; we did not use it to decide who made a commit.
Session logs matched 253 of 253 trailer commits in the checked window, which makes them the strongest signal we have. They exist only on this PC, and for the spell checker they start on the evening of September 13, 2026.
Six git log lines with --exclude=refs/stash
These run as-is in Git Bash or a macOS or Linux shell. Change the cutoff and the trailer text to match your repository.
U=2026-10-25T00:00:00; S=2025-08-01T00:00:00
P='^Co-Authored-By: Claude'
# 1. total and trailer commits (stash excluded)
git log --exclude=refs/stash --all --since=$S --until=$U --format=%h | wc -l
git log --exclude=refs/stash --all --since=$S --until=$U -i -E --grep="$P" --format=%h | wc -l
# 2. commits without the trailer, merges among them
git log --exclude=refs/stash --all --since=$S --until=$U -i -E --grep="$P" --invert-grep --format=%h | wc -l
git log --exclude=refs/stash --all --merges --since=$S --until=$U -i -E --grep="$P" --invert-grep --format='%h %s'
# 3. cross-check with git's trailer parser
git log --exclude=refs/stash --all --until=$U --format='%(trailers:key=Co-authored-by,valueonly)' | grep -ci claude
# 4. single-parent commits without the trailer, with size
git log --exclude=refs/stash --all --no-merges --since=$S --until=$U -i -E --grep="$P" --invert-grep --stat --format='%h %ad %s' --date=short
- Fix the cutoff with
--until. In a repository that gets commits every day, the totals change within hours. - Find the date of the first trailer (first line with
--reverse) and start the window there. - Sort the commits without a trailer into merges, stash entries, data or config, and code.
- If you have session logs, match commit times against the times of the agent's git commands, and shift the times by a few hours to measure how often they match by chance.
- If the agent runs your merges and reverts, add a rule to its instruction file to pass
-mwith the trailer.
Periods without session logs and squash merges cannot be settled
In the spell checker, the 51 trailer-less commits made after the first trailer but before the session logs start (23 merges, 28 single-parent commits) stay undecided. The 24 code commits among them added 5,749 lines of Kotlin and Java, while the 39 trailer commits of the same weeks (the night of August 7 to September 13) added 14,762. Why a trailer is not a share of code lines is covered in the 701-commit note.
Some repositories will not fit this method. With squash merges, one pull request becomes one commit, and the trailer depends on the tool of whoever presses the merge button. In repositories with many contributors, each person's commit habits make the ratio harder to read. Tools that keep no session logs, or setups that delete them, rule out the cross-check entirely. In a GitLab survey of 1,528 developers and technology buyers in six countries, released on June 23, 2026, 43% said they cannot reliably distinguish AI-generated code from human-written code, and 39% pointed to systems that don't track code origin (GitLab press release).
What we will check next
Neither the spell checker's instruction file nor the global instructions say anything about trailers (checked October 25). Once a rule for merges and reverts is written down, the trailer-less merges have to be counted again to see whether it worked.
Frequently asked questions
Does a commit without a Co-Authored-By trailer mean a person wrote it?
No. When the agent runs git merge or git revert --no-edit with git's default message, or passes -m without the trailer line, the commit it makes has no trailer.
What extra commits does git log --all count?
Besides every branch and tag, it follows refs/stash, so the newest stash and its index commit count as two commits. git log --exclude=refs/stash --all leaves them out.
Can a merge commit carry a Co-Authored-By trailer?
It can if you pass the message yourself with git merge --no-ff -m "message" and put the trailer on its last line. After a merge conflict, add the same line to the git commit -m that concludes the merge.
This note is written from values SugarMount measured itself; an AI coding agent was used to draft it.
More AX notes
- Several Claude Code sessions, one repo: the file owner table, checked against 13 merges
- Three agent designs, three judges: the market judge alone would have picked the one that crashed on every KakaoTalk file
- Running an AI marketer on a schedule four times a day: the permission table that leaves money, accounts and policy to a person
- 84 agents reviewed a release: three refuters per finding, and only the 20 survivors got fixed
- Pre-gzipping Android assets, measured: zero APK savings, and .pack.gz became .pack with a FileNotFoundException
- A market:// link opens a store chooser on SKT-sold Samsung phones: set the Play package first