← Claude Code Hub
✦ Tip #135 Jul 15, 2026

Attribution en Claude Code: borra la firma 'Co-Authored-By: Claude' de tus commits

Claude Code firma cada commit que toca, a menos que se lo prohíbas dos veces: una para el modelo, otra para la propia CLI.

Comparación: commit por defecto con la línea Co-Authored-By: Claude frente a un commit limpio con attribution configurado en settings.json, y las dos capas (CLAUDE.md como guía, settings.json aplicado por la CLI)

TL;DR El ajuste que de verdad lo quita es attribution en tu settings.json ({"commit": "", "pr": ""}): actúa a nivel de CLI, así que da igual lo que decida escribir el modelo. Yo además tengo una regla en mi CLAUDE.md global que lo prohíbe explícitamente. No es redundancia inútil: la plantilla de commit que trae Claude Code por defecto incluye esa línea como ejemplo, y sin una instrucción que la anule, el modelo puede acabar escribiéndola él mismo, sin pasar por el ajuste. Dos capas, no una.

Cada commit que hace Claude Code por ti lleva de fábrica una línea de más: Co-Authored-By: Claude <noreply@anthropic.com>, a veces con un 🤖 Generated with Claude Code encima. No es un bug, es la convención de atribución por defecto. Y a bastante gente le molesta: hay un feature request abierto en el repo de Claude Code pidiendo justo poder quitarlo, un hilo entero en Hacker News, y varios TIL de desarrolladores explicando cómo hacerlo. Yo lo tengo prohibido en mi CLAUDE.md global desde el primer día: nunca, bajo ningún concepto, añadir "By Claude Code" o similar al tocar Git o GitHub. Durante un tiempo pensé que con eso bastaba.

Por qué el CLAUDE.md solo no basta

Un CLAUDE.md le dice al modelo qué hacer, no se lo impone. Claude Code trae de fábrica una plantilla de ejemplo para crear commits que incluye esa línea de atribución como parte del mensaje. Si tu CLAUDE.md no la anula explícitamente, el modelo tira de esa plantilla y la escribe como texto normal dentro del mensaje, no como algo que añade la CLI aparte. El resultado en tu historial es el mismo, pero el mecanismo es distinto, y eso importa: si confías solo en la instrucción, basta con una sesión larga donde el contexto se diluye, un CLAUDE.md mal redactado, o un commit hecho fuera del flujo normal, para que la línea vuelva a colarse.

El ajuste que sí lo impone: attribution

// ~/.claude/settings.json (todos tus proyectos) o .claude/settings.json (solo este)
{
  "attribution": {
    "commit": "",
    "pr": ""
  }
}

commit controla la línea que se añade a los mensajes de commit. pr controla la nota que se añade a las descripciones de pull request que crea gh pr create. Poner las dos en vacío las quita del todo: no solo el Co-Authored-By, también el Generated with Claude Code que suele acompañarlo.

A diferencia del CLAUDE.md, esto no depende de que el modelo se acuerde de nada: es la propia CLI la que decide qué añadir al mensaje final, así que da igual si el modelo "olvida" la regla a mitad de sesión.

Si vienes de una versión antigua: puede que tengas includeCoAuthoredBy: false en tu settings.json. Sigue funcionando, pero está deprecado a favor de attribution, que separa commit y PR en vez de un interruptor único todo-o-nada.

// antes
{ "includeCoAuthoredBy": false }

// ahora
{ "attribution": { "commit": "", "pr": "" } }

Antes y después

$ git log -1
commit a1b2c3d
Author: Juan <juan@example.com>

    Fix retry logic in payment handler

    🤖 Generated with Claude Code

    Co-Authored-By: Claude <noreply@anthropic.com>

Con attribution en vacío:

$ git log -1
commit a1b2c3d
Author: Juan <juan@example.com>

    Fix retry logic in payment handler

Las dos capas que yo uso

  1. attribution en el settings.json global (~/.claude/settings.json), para que ningún proyecto lo herede por defecto sin que yo lo pida.
  2. Una línea en mi CLAUDE.md global: "nunca, bajo ningún concepto, añadas 'By Claude Code' o similar al interactuar con Git o GitHub." No es decoración: cubre los sitios donde attribution no llega, como un mensaje que Claude escribe a mano dentro de un script, o una nota que se le escapa fuera del flujo normal de commit.

Ni el ajuste ni la instrucción solos son perfectos. Juntos, sí. Y ya que estás decidiendo qué va en cada archivo, aquí tienes el mapa completo: CLAUDE.md se lee como guía, settings.json se aplica lo quiera Claude o no. Esto de aquí es exactamente ese principio, aplicado a un caso real.

Referencia

Ajuste Dónde vive Qué cubre Nivel
attribution.commit settings.json (usuario, proyecto o local) Línea añadida a mensajes de commit CLI, determinista
attribution.pr settings.json (usuario, proyecto o local) Nota añadida a descripciones de PR vía gh pr create CLI, determinista
includeCoAuthoredBy settings.json (deprecado) Interruptor todo-o-nada, antecesor de attribution CLI, determinista
Regla en CLAUDE.md CLAUDE.md (cualquier nivel) Cualquier mensaje que el modelo escriba fuera del flujo normal Instrucción, no forzada

Documentación oficial: Claude Code settings

Guía gratuita

51 tips para dominar Claude Code.

Una página por tip. Cinco capítulos. Lo que de verdad uso a diario en producción — sin teoría, sin humo.

  • I. Empieza bien 10 tips
  • II. Conciencia 3 tips
  • III. Maestría 22 tips
  • IV. Autonomía 10 tips
  • V. Comparativa 6 tips
¿Eres desarrollador/a Web profesional?

Recibirás la guía por email · Te unes a la newsletter Gravitas · Cancela cuando quieras

de 51
#

Wmedia · 51 Tips
Guía gratuita · 51 tips · 5 capítulos

51 tips para dominar Claude Code.

¿Eres desarrollador/a Web profesional? · Cancela cuando quieras