El 39% de sus commits llevan firma de IA: contarlos en git no es trivial
Un desarrollador rastrea las líneas Co-Authored-By de 26.251 commits propios: 10.261 son de Claude, un 39%. El proceso destapa un calificador de búsqueda que GitHub no documenta.

Contar cuánto código de un repositorio sale de un agente no tiene misterio: la línea Co-Authored-By viaja en el mensaje de commit y git la conserva. Un desarrollador ha lanzado esa consulta sobre su propio historial —26.251 commits— y le sale que 10.261 llevan la firma de Claude, un 39%. En un repositorio concreto la proporción sube a 960 de 1.107. La herramienta que convierte el dato en una tarjeta SVG para el perfil de GitHub es la parte aburrida; lo que apareció al construirla es lo que importa.
Un calificador que GitHub no documenta
La API de búsqueda de commits acepta un calificador co-authored-by:. Funciona. Y no aparece en la documentación de búsqueda de commits. Como que «parece que va» no es prueba, el autor levantó un control: co-authored-by:copilot@github.com devuelve 29, un calificador inventado devuelve 0 y sin calificador salen los 26.251. El analizador lo reconoce, pero lo que no está documentado puede desaparecer sin avisar. El fallo peligroso no es que devuelva cero: si GitHub deja de interpretarlo, cae en modo texto libre, que casa con todo, y la tarjeta presumiría de un 100% de código con IA. De ahí la doble comprobación: un recuento igual a cero o igual al total no sirve.
El nombre no es la identidad
El primer intento buscaba por nombre visible, co-authored-by:claude. Da un número plausible y está mal. Con Cursor se cae solo: co-authored-by:cursor devuelve 10.033.042, demasiado redondo. La línea real es Co-authored-by: Cursor <cursoragent@cursor.com>. Buscar por nombre engancha a cualquier coautor que lo comparta. En sus cifras de Claude la deriva era de siete commits: 10.262 por nombre frente a 10.255 por dirección, y los que bailaban llevaban un segundo Co-Authored-By que nombraba a un humano, contado como IA. Aider mete el modelo en el nombre —aider (anthropic/claude-sonnet-5) <aider@aider.chat>—, así que la dirección es lo único estable. Por dirección, Claude acumula 89.025.757 commits públicos, Cursor 8.374.584, Copilot 4.046.637 y Codex 1.812.065.
Lo que deja pasar camo
El repositorio renderiza SVG, así que hay que pelear con camo, el proxy de imágenes de GitHub. Las cabeceras lo zanjan: default-src 'none'; img-src data:; style-src 'unsafe-inline'. JavaScript bloqueado, fuentes web bloqueadas, imágenes externas bloqueadas; animación CSS permitida. La primera versión animaba las barras desde height="0", y cualquier rasterizador que ignore SMIL pinta barras invisibles. La corrección es declarar la geometría final en reposo y dejar que la animación solo aporte el arranque: height="28" con un from="0" to="28".
Queda la razón por la que esto no puede ser un servicio alojado tipo github-readme-stats: el dato bueno vive en repositorios privados. Con ellos dentro, 10.261 de 26.251; solo con públicos, 126 de 5.688, un 2%. Un servicio externo jamás vería el número que importa. Para quien quiera medir lo suyo, el aviso es el mismo: la dirección de la línea Co-Authored-By es la identidad, y el calificador que la busca puede cambiar sin avisar.
