Co-Authored-By system prompt overrides CLAUDE.md, settings.json, and skill instructions — no user escape hatch

Resolved 💬 3 comments Opened Apr 25, 2026 by ricoms Closed Apr 25, 2026

The problem

Claude Code's system prompt contains a hardcoded instruction to append Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> to every commit. This instruction cannot be reliably overridden by any user-facing mechanism — not CLAUDE.md, not settings.json, not custom skills, not even explicit in-session instructions.

This is not a new report (see #4287, #36105, #45137, #52483, #31776), but I want to document the full scope: every available override mechanism fails, and the philosophical framing (Co-Authored-By vs Assisted-by) has real implications for projects that follow established attribution policies.

What I configured (all of it ignored)

1. Global CLAUDE.md — AI Coding Assistant Policy

Adapted from kernel.org/process/coding-assistants:

**Attribution**:
- AI-assisted commits MUST include trailer: `Assisted-by: AGENT_NAME:MODEL_VERSION [TOOLS]`
- NEVER use `Co-Authored-By: ... <noreply@anthropic.com>` or `🤖 Generated with Claude Code`
  — kernel.org policy permits `Assisted-by:` only

2. Custom skills (committing-changes, fixing-bugs)

- NEVER add `Co-Authored-By: ... <noreply@anthropic.com>` or `🤖 Generated with Claude Code`
  trailers/footers. Follow kernel.org policy: `Assisted-by:` only

3. settings.json attribution.commit

Setting this to "" (empty string) is documented as disabling the trailer. It doesn't (#45137).

4. In-session explicit instruction

Even telling Claude directly "do not add Co-Authored-By" is inconsistent — it sometimes complies, sometimes doesn't, depending on which code path handles the commit.

What actually happens

The system prompt instruction wins. Commits get:

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

instead of:

Assisted-by: Claude:opus-4-6 [ruff, mypy]

In my repo's history, commits made through the fixing-bugs skill (which has the explicit NEVER instruction) correctly used Assisted-by:. But commits made through the default commit flow added Co-Authored-By: despite CLAUDE.md saying otherwise. Same session, same CLAUDE.md loaded, different behavior depending on code path.

Why this matters

1. The noreply@anthropic.com email is absurd

This email address appears in git log, git shortlog, GitHub contributor graphs, and git blame. It attributes commits to a non-existent Anthropic employee. It's corporate branding injected into user repositories without consent or reliable opt-out. No other dev tool does this — your IDE doesn't add Co-Authored-By: JetBrains <noreply@jetbrains.com> to commits.

2. Co-Authored-By implies shared authorship

The Linux kernel project deliberately chose Assisted-by over Co-Authored-By because:

  • Co-Authored-By implies shared responsibility — but AI cannot review code, certify licensing, or be held accountable
  • Assisted-by correctly frames AI as a tool, like a spell-checker or a linter
  • The human is the sole author and takes full responsibility

This distinction matters for compliance (DCO, CLA), legal liability, and intellectual honesty.

3. Users have no control

The system prompt says (emphasis mine):

"Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written."

But the commit template in the same system prompt contradicts this — it's a hardcoded instruction that the model treats as higher priority than CLAUDE.md. Users are told their instructions override defaults, but they don't. This creates a trust gap: if I can't override a commit trailer, what else can't I override?

What should change

  1. Respect attribution.commit — if set to "", do not add any trailer. This is already documented behavior that doesn't work (#45137)
  2. Make the trailer format configurable — allow attribution.commit to accept a template string (e.g., "Assisted-by: Claude:{model} [{tools}]")
  3. Change the default from Co-Authored-By to Assisted-by — align with the kernel.org standard that the open-source community is converging on
  4. Remove noreply@anthropic.com — AI tools are not GitHub users. If attribution is desired, use a format that doesn't masquerade as a human contributor
  5. Honor the documented priority — if CLAUDE.md says "NEVER use X", the system prompt must not force X. The user's instructions should genuinely override defaults, as promised

Environment

  • Claude Code version: latest (Opus 4.6, 1M context)
  • Platform: macOS (darwin)
  • Affected: all commit paths (direct commit, skill-based commit, PR creation)

Related issues

  • #4287 — includeCoAuthoredBy: false ignored
  • #36105 — Feature request for Assisted-by format
  • #45137 — attribution.commit: "" doesn't disable trailer
  • #52483 — Co-Authored-By persists despite CLAUDE.md and skills
  • #31776 — CLAUDE.md commit conventions overridden by system prompt
  • #29999 — "stop branding user work"
  • #47579 — "added without user consent or opt-out"

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗