Commit workflow adds "Co-Authored-By: Claude" trailer even after explicit user instruction to stop
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Code's default git-commit workflow automatically appends a
"Co-Authored-By: Claude <noreply@anthropic.com>" trailer to every commit
message it creates. There is no reliable, persistent way to opt out of this.
Even after explicitly telling Claude not to add this trailer, the same
default behavior recurred later in the same project when creating another
commit — Claude appears to rely on its own conversational memory to avoid
this, not a real enforced setting.
In my case, a commit with this trailer was already pushed to a private
GitHub organization repo before I noticed it, requiring a manual
"git commit --amend" + "git push --force-with-lease" to remove it.
What Should Happen?
Claude Code should provide a real, persisted setting (e.g. in
.claude/settings.json, such as "includeCoAuthoredBy": false) that the
commit workflow always honors — instead of relying on the model to
remember a one-off conversational instruction not to add the trailer.
Once a user disables this, no future commit in that project (or globally,
if set at the user level) should include the Co-Authored-By trailer,
regardless of session or memory state.
Error Messages/Logs
N/A — this is not a crash or error, it's a default-behavior issue. No error
output is produced; the commit succeeds, but with an unwanted trailer added
to the message.
Steps to Reproduce
- In any git repo, ask Claude Code to create a commit.
- Observe the commit message includes a "Co-Authored-By: Claude
<noreply@anthropic.com>" trailer by default.
- Tell Claude explicitly: "don't add the Co-Authored-By line to commits."
- Later in the same project (same or a new session), ask Claude to create
another commit.
- The trailer is added again, despite step 3.
Claude Model
Other
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
all
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Related: I found an existing issue that appears to cover this exact
problem — #79240 "Remove/allow disabling the forced Co-Authored-By...".
My specific case: even after explicitly telling Claude in-conversation not
to add the "Co-Authored-By: Claude" trailer, it recurred on a later commit
within the same project. The commit had already been pushed to a private
GitHub organization repo before I noticed, requiring a manual
"git commit --amend" + "git push --force-with-lease" to remove it. This
suggests the current workaround (asking Claude to remember the preference)
is not reliable enough — a persisted, enforced setting is needed instead.
3 Comments
I want to add a perspective that I think matters more than the trailer itself.
The current behavior isn't hidden — it's fully visible in the commit message. The problem is that it can't be reliably turned off. That distinction matters, but it doesn't make it fine: a default you can't disable isn't a default, it's a requirement.
Two things make this land harder than it otherwise would:
I don't think this was designed as marketing. If it were, it's a poor trade — limited exposure in exchange for a recurring complaint thread. The more likely story is that no one prioritized the opt-out. But at this point that's a decision too, made with full knowledge that users want it.
The ask is small: a persisted setting (includeCoAuthoredBy: false in .claude/settings.json, honored at both project and user level) that the commit workflow always respects, independent of conversational memory. Shipping that would close this cleanly.
This is written in good faith — I use the tool and want it to be better.
Users tolerate a lot from LLM tools, including outright wrong output, because those are understood limitations that everyone builds process around. This is different in kind: it's a deliberate product decision, working exactly as designed, where the party who benefits and the party who bears the cost aren't the same. That's why it draws a reaction disproportionate to its size.
Thanks for the report. There is a persisted, enforced setting for this — it isn't tied to conversational memory.
Add to
.claude/settings.json(project) or~/.claude/settings.json(user):An empty
commitstring removes theCo-Authored-Bytrailer from every commit Claude creates. ("pr": ""does the same for PR bodies, and the older"includeCoAuthoredBy": falsestill works too.) Docs: https://code.claude.com/docs/en/settings#attribution-settingsI verified this on 2.1.233 (macOS): with no setting, a commit made by Claude got the
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>trailer; withattribution.commitset to""in the project's.claude/settings.json, the same request produced a commit with no trailer.You're right that a one-off in-chat instruction isn't guaranteed to persist across sessions — the setting above is the supported way to make it stick. If you have that setting in place and still see the trailer, please share your
claude doctoroutput and the settings file so we can dig in.🤖 Generated with Claude Code