Commit workflow adds "Co-Authored-By: Claude" trailer even after explicit user instruction to stop

Status Open
Maintainer reply ✓ Yes — bcherny
Activity 3 comments · opened Jul 21, 2026
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

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

  1. In any git repo, ask Claude Code to create a commit.
  2. Observe the commit message includes a "Co-Authored-By: Claude

<noreply@anthropic.com>" trailer by default.

  1. Tell Claude explicitly: "don't add the Co-Authored-By line to commits."
  2. Later in the same project (same or a new session), ask Claude to create

another commit.

  1. 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.

View original on GitHub ↗

3 Comments

KXIZA-K · 1 month ago

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:

  1. Paid tools don't usually carry vendor attribution. Across commercial software, the norm is that free tiers carry a watermark and paid tiers don't. Claude Code is a paid product, and this behavior runs opposite to that convention. Framing it as "attribution" borrows a norm from academic credit and open-source contribution, but the relevant norm here is the watermark one.
  1. Anthropic is a closed model provider. Users can't inspect weights, training data, or system prompts. The only thing we can evaluate is observable product behavior. That makes small visible decisions carry disproportionate weight — they're the sample we use to reason about everything we can't see. A company whose entire value proposition rests on trust should be unusually careful with the parts users can verify.

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.

KXIZA-K · 1 month ago

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.

bcherny collaborator · 14 days ago

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):

{ "attribution": { "commit": "" } }

An empty commit string removes the Co-Authored-By trailer from every commit Claude creates. ("pr": "" does the same for PR bodies, and the older "includeCoAuthoredBy": false still works too.) Docs: https://code.claude.com/docs/en/settings#attribution-settings

I 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; with attribution.commit set 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 doctor output and the settings file so we can dig in.

🤖 Generated with Claude Code