Todos los recursos

Un skill empaquetado de Claude Code lee el diff que tienes en stage y escribe un commit convencional cuyo cuerpo explica el razonamiento, no las líneas que cambiaron. Qué hace, cuándo debe activarse, cómo funciona por dentro, una corrida real con su salida, la config que importa y el único hábito que decide si tu git log vale la pena dentro de seis meses.

El skill de mensajes de commit: escribe el porqué, no el diff

En resumen

  • El skill convierte el diff que tienes en stage en un commit convencional: un asunto con tipo y scope dentro del límite de largo, más un cuerpo que dice el PORQUÉ.
  • Lee git diff --staged, no el repo entero. La corrida sale barata y el mensaje solo cubre lo que de verdad cambiaste.
  • La regla que carga todo el peso: explica la intención, no repitas el diff. El diff ya muestra qué cambió.
  • Escribe el mensaje. No hace el commit. Tú lo lees, lo editas si hace falta y haces el commit tú mismo.
  • Si el diff en stage mezcla dos cambios sin relación, divide el commit. No escribas un asunto vago que abarque los dos.

Dentro de seis meses, alguien corre git blame sobre una línea que no tiene sentido, cae en tu commit y lee "update auth logic". Eso no le dice nada. El historial de cambios es la única documentación que siempre está ahí y casi siempre resulta inútil, porque escribir un buen mensaje al hacer commit es aburrido y tú ya tienes la cabeza en la siguiente tarea. Un skill de mensajes de commit arregla el incentivo. Lee el diff que tienes en stage y redacta un commit convencional cuyo asunto se lee de una vez y cuyo cuerpo explica el porqué, así quien lo lea más adelante recibe el contexto que, si no, se pierde en un hilo de Slack. Aquí repaso qué hace el skill, cuándo debe activarse, cómo funciona por dentro, una corrida real con su salida, la config que importa y los detalles que separan un log útil del ruido.

Algo que conviene dejar claro de entrada. El skill no escribe mejor que tú. Escribe más parejo que tú. El mismo formato y la misma instrucción de "explica la intención" se aplican en cada commit, hasta en los que normalmente harías a la carrera. Y un log donde cada entrada tiene la misma forma es un log que de verdad puedes leer.

01 · Qué hace el skill realmente

Un skill de mensajes de commit es un escritor empaquetado que invocas a la hora del commit en vez de volver a teclear las mismas instrucciones. Quítale el empaque y hace tres cosas:

  1. Leer el cambio en stage. Corre git diff --staged y lee los hunks más el contexto suficiente para entender el cambio como una unidad. No archivo por archivo, sino como una sola edición lógica con una intención detrás.
  2. Escribir un asunto convencional. Una línea con tipo y scope opcional dentro del límite de largo: fix(auth): rechaza tokens emitidos antes del reset. En imperativo, sin punto final, con el tipo elegido según el cambio (fix, feat, refactor, docs, test, chore).
  3. Escribir un cuerpo que explique el porqué. Prosa con saltos de línea bajo el asunto que recoge el razonamiento: qué estaba mal, qué hace el cambio al respecto y cualquier concesión que valga la pena dejar anotada. El cuerpo es opcional en cambios triviales y es la razón de ser del ejercicio en todo lo demás.

El formato de commit convencional no es adorno. El prefijo de tipo permite que los generadores de changelog agrupen, y el scope le dice a quien lee qué subsistema se tocó. Pero el formato es la parte fácil. Eso te lo da cualquier plantilla. La parte difícil y valiosa es el cuerpo, y ahí es donde fallan la mayoría de los mensajes de commit.

Nota

El skill lee el diff, no el repositorio. Ve los hunks que cambiaron más el contexto mínimo de alrededor, lo que mantiene la corrida barata y deja el mensaje enfocado en lo que de verdad tocaste. Eso sí, implica que el skill no siempre puede saber tu intención solo con el diff, que es justo por lo que te quedas tú para corregirlo.

02 · Cuándo debe activarse

Actívalo en un solo momento: después de poner un cambio en stage y justo antes de hacer commit. Esa ventana es donde rinde, porque el diff ya está listo, tu intención sigue fresca y el costo de un buen mensaje es casi cero. De todos modos ya estás detenido en el paso del commit.

En concreto, úsalo cuando:

  • Pusiste en stage un cambio real y vas a hacer git commit. Deja que el skill redacte el mensaje para que estés editando prosa, no mirando un editor en blanco.
  • Estás haciendo squash de una rama desordenada en un solo commit limpio y necesitas un asunto y un cuerpo que describan el conjunto, no el último fixup.
  • Tocaste algo delicado (auth, una migración, manejo de dinero) donde el porqué de verdad le importa a quien lo lea después.

No lo actives para:

  • Un commit donde el mensaje de verdad es trivial, como subir una versión o arreglar un typo obvio. chore: sube la versión a 1.4.2 no necesita un cuerpo generado, y forzar uno solo produce relleno.
  • Un diff que mezcla dos cambios sin relación. El skill, obediente, escribirá un asunto que abarque los dos, que es justo el resultado equivocado. Lo correcto es dividir antes el cambio en stage en dos commits. Un skill de mensajes de commit no sustituye la disciplina al armar el stage.
  • Un diff vacío o de solo espacios en blanco. No hay nada que explicar.

El encuadre honesto: el skill redacta, tú decides. Es un punto de partida, no una autoridad sobre lo que significa tu cambio. Cuando adivine mal tu intención, y en un cambio no obvio a veces lo hará, tú eres quien lo arregla antes de hacer commit.

03 · Cómo funciona por dentro

Un skill de Claude Code es un directorio con un archivo markdown: un frontmatter (un nombre y una descripción) más un cuerpo que le dice al modelo qué hacer. La descripción es lo que decide si se activa. Es lo que Claude lee para decidir si el skill viene al caso, así que tiene que decir con claridad cuándo usarlo, no solo qué es.

Aquí va una definición completa y funcional:

---
name: commit-message
description: >
  Escribe un mensaje de commit convencional desde el diff en stage.
  Úsalo justo antes de hacer commit, cuando el usuario pida "escribe
  el mensaje de commit", "redacta el commit" o "haz commit de esto".
  Devuelve solo el mensaje; el commit lo corre el usuario.
---

Estás escribiendo un mensaje de commit para un diff en STAGE. Sigue
estos pasos al pie de la letra.

1. Corre **git diff --staged** y lee el cambio como una unidad
   lógica. Si el diff en stage mezcla dos cambios sin relación,
   dilo y sugiere dividirlo en vez de escribir un solo mensaje.

2. ASUNTO: una línea convencional, en imperativo, sin punto final,
   bajo 72 chars: type(scope): resumen. Elige el tipo según el
   cambio (fix, feat, refactor, docs, test, chore).

3. CUERPO (sáltalo en cambios triviales): con saltos cada ~72
   chars. Explica el PORQUÉ del cambio: el problema y el
   razonamiento. NO repitas el diff. "Cambié la función de auth"
   está prohibido; el diff ya muestra eso.

4. Devuelve el mensaje en un bloque cercado SOLAMENTE. No corras
   git commit. El commit lo hace el usuario.

Por dentro, el flujo es mecánico. Cuando tu pedido coincide con la descripción, Claude carga el cuerpo del skill en contexto, corre git diff --staged, lee los hunks y produce un mensaje con la forma de los pasos numerados. Como el cuerpo fija el formato y las restricciones, dos corridas sobre el mismo diff terminan más o menos igual. El modelo sigue haciendo la escritura. El skill se asegura de que escriba lo correcto y con la forma correcta cada vez.

Un refinamiento útil: haz que el skill tome la convención de commits que ya tengas en un CLAUDE.md o un archivo de reglas, así se ajusta a tu lista de tipos y a tu límite de largo de asunto en vez de inventar los suyos. Casi todos los equipos ya tienen alguna convención escrita en algún lado. Apunta el skill hacia ella.

04 · Una corrida concreta y su salida

Pones un fix en stage y le pides a Claude: "Escribe el mensaje de commit." La descripción coincide, el skill corre git diff --staged y te devuelve algo así:

fix(auth): rechaza tokens emitidos antes del reset de contraseña

Los tokens creados antes de un reset de contraseña seguían válidos
después, así que un token robado sobrevivía al mismo reset que
debía revocarlo. Compara el issued-at de cada token contra el
timestamp del último reset de la cuenta y rechaza lo más viejo.

El chequeo vive en el camino de verify para que cubra también el
refresh, no solo el login inicial.

Esa es la salida que quieres. El asunto se lee de una vez en git log --oneline y le dice a quien lo lee el tipo, el scope y la idea general. El cuerpo responde la pregunta que git blame terminará haciendo tarde o temprano, ¿por qué está esto aquí?, con el razonamiento real de seguridad, más una nota sobre la concesión de dónde vive el chequeo. Nadie que lea esto en seis meses tendrá que reconstruir el razonamiento a partir del diff.

Compáralo con el modo de falla que el skill existe para evitar:

update auth

cambié la función validateToken para agregar un chequeo nuevo en
el campo issued-at y actualicé los tests

Mismo diff, sin skill. El asunto no tiene tipo y es vago, y el cuerpo solo narra lo que el diff ya muestra. Repite el qué y nunca toca el porqué. Quien lo lea todavía tiene que abrir el diff y deducir el razonamiento a la inversa. Esa es la diferencia que hace un skill con restricciones: obliga al cuerpo a cargar la intención en vez de repetir el cambio.

Consejo

Después de que el skill redacte un mensaje, lee el cuerpo y pregúntate: ¿un compañero podría sacar esto solo con el diff? Si la respuesta es sí, el cuerpo está repitiendo el diff, así que haz que explique la decisión en su lugar. El cuerpo se gana su lugar solo cuando dice algo que el código no puede.

05 · Configuración y las perillas que importan

Casi todo el ajuste vive en el cuerpo del skill, no en flags. Las perillas que vale la pena configurar:

  • Fuente de la convención. Apunta el skill a tu convención de commits ya existente (la lista de tipos, el vocabulario de scopes, el tope de largo del asunto) en vez de dejar que use una genérica. La consistencia con el historial de tu repo importa más que cualquier estilo en particular.
  • Largo del asunto. Define el tope duro. 50 o 72 chars son los comunes. Que el skill lo haga cumplir. Un asunto que se corta en git log --oneline echa a perder el formato.
  • Umbral del cuerpo. Dile cuándo saltarse el cuerpo. Un typo de una línea o subir la versión no debería llevar un párrafo fabricado. Un cambio de lógica no obvio siempre debería llevar uno.
  • Soporte de footers. Si tu flujo usa trailers (referencias a issues, líneas de co-autor, marcadores de breaking change), decláralos para que el skill los ponga en el lugar correcto en vez de meterlos a la fuerza en el cuerpo.
  • Alcance del diff. Por defecto, el stage. Permite apuntar a git diff (sin stage) o a un rango cuando estés redactando un mensaje para un squash, pero deja el stage como default porque ahí es donde de verdad pasan los commits.

El no-objetivo, a propósito: el skill escribe el mensaje, no hace el commit. Mantenlo solo de salida. Lees el borrador, arreglas cualquier cosa que haya malinterpretado de tu intención y corres git commit tú mismo. Un skill que hace el commit solo elimina el único chequeo humano que atrapa un mensaje con intención equivocada antes de que quede fijo en el historial. Y el historial es lo único que no puedes corregir después sin que se note.

Atención

No dejes que el skill haga el commit por ti. El mensaje es una suposición de tu intención. En un cambio no obvio a veces va a adivinar mal, y un mensaje ya guardado en el commit es permanente de una forma que un borrador no. Los treinta segundos que pasas leyendo el borrador antes de hacer commit son toda la idea.

06 · Cuidados

La línea que decide todo es explica el porqué, no el qué. Sin ella, el skill cae en narrar el diff en prosa, como "cambié la función para agregar un chequeo", que no vale nada porque el diff ya muestra eso. Pon la prohibición de repetir el diff en el cuerpo tal cual y le cambia el carácter a cada mensaje que el skill escribe.

Otros que muerden:

  • La trampa del commit mezclado. Si pones en stage un feature y un bug fix sin relación juntos, el skill escribirá un asunto que, con toda honestidad, abarca los dos, y eso en sí es la señal de alarma. Un asunto que necesita una "y" casi siempre son dos commits. Haz que el skill marque la mezcla y sugiera dividir en vez de taparla con un resumen vago. Un historial limpio vale el minuto extra al armar el stage.
  • Intención inventada. El skill solo ve el diff, así que puede adivinar por qué hiciste un cambio y adivinar mal, como atribuir un refactor a un motivo de rendimiento cuando lo hiciste por legibilidad. Trata el cuerpo como un borrador de tu razonamiento, no como una transcripción. Tú eres quien sabe por qué. El skill solo te ahorra el tecleo.
  • Cuerpos demasiado entusiastas. Sin restricción, escribe un párrafo para arreglar un typo de una línea. Dale un umbral explícito para saltarse el cuerpo, o tu log se llena de ceremonia alrededor de cambios triviales y las explicaciones reales se pierden en el ruido.
  • Deriva de la convención. Los defaults genéricos producen commits que no encajan con el historial existente de tu repo, con otra lista de tipos u otro estilo de scope. Aliméntalo con tu convención real y versiona el skill junto a ella, para que los mensajes que escribe parezcan que pertenecen ahí.

Un skill de mensajes de commit no va a hacer mejores tus cambios, pero sí va a hacer que su historial valga la pena leerse. Y en ese historial es donde se apoya un compañero, o tu yo del futuro, cuando algo se rompe y la única pista es una línea de git blame. Constrúyelo una vez, restríngelo para que explique la intención y quédate tú entre el borrador y el commit. El día que un compañero lea uno de tus mensajes y entienda el cambio sin abrir el diff, el skill habrá hecho su trabajo.

Puntos clave

  • Un skill de mensajes de commit empaqueta tu formato y tu regla de 'explica el porqué' una sola vez, así cada commit recibe el mismo mensaje disciplinado. La consistencia es el producto.
  • Lee git diff --staged y escribe el mensaje. No hace el commit. Tú te quedas a cargo para atrapar una suposición de intención equivocada antes de que quede permanente.
  • La regla que carga el peso es 'explica el porqué, no el qué'. El cuerpo debe llevar el razonamiento que el diff no puede mostrar, o es puro ruido.
  • Sáltate el cuerpo en cambios triviales y no juntes dos cambios sin relación en un solo mensaje. Mejor divide el commit.
  • Apúntalo a la convención existente de tu repo y versiónalo junto a ella, así su salida parece que pertenece a tu historial.

Preguntas frecuentes

¿Por qué leer el diff en stage en vez de describirle el cambio al modelo?

Porque el diff en stage es la verdad de lo que estás subiendo al repo, y describirlo tú mismo anula el propósito: estarías haciendo el trabajo que se supone que hace el skill. Leer git diff --staged mantiene el mensaje anclado al cambio real, atrapa cosas que olvidarías mencionar y deja la corrida barata porque solo carga lo que tocaste. Tú sigues aportando el porqué cuando el diff no lo puede mostrar.

¿El skill puede hacer el commit por mí una vez que escribe el mensaje?

Mantenlo solo de salida. El mensaje es una suposición de tu intención, y en un cambio no obvio a veces va a adivinar mal, como atribuir un refactor a rendimiento cuando lo hiciste por legibilidad. Un mensaje ya guardado en el commit es permanente de una forma que un borrador no, así que los treinta segundos que pasas leyéndolo antes de correr git commit tú mismo son todo el chequeo de seguridad. Que haga el commit solo elimina la única revisión humana que atrapa un mensaje con intención equivocada.

¿Cuál es la regla más importante del cuerpo del skill?

Explica el porqué, no el qué. Sin esa prohibición, el skill narra el diff en prosa, como 'cambié la función para agregar un chequeo', que no vale nada porque el diff ya muestra eso. Con ella, el cuerpo carga el razonamiento que quien lee no puede sacar del código: qué estaba roto, por qué esto lo arregla y cualquier concesión que valga la pena anotar. Esa sola restricción es la diferencia entre un log útil y puro ruido.

¿Qué pasa si mi diff en stage mezcla dos cambios sin relación?

Ese es un problema de stage que el skill no puede tapar por ti. Dile que marque la mezcla y sugiera dividir el commit en vez de escribir un asunto que abarque los dos. Un asunto que necesita una 'y' casi siempre son dos commits. El skill no sustituye la disciplina al armar el stage. Lo correcto es sacar del stage, dividir en dos commits lógicos y darle su mensaje a cada uno. Un historial limpio vale el minuto extra.

¿Todo commit necesita un cuerpo generado?

No, y forzarlo hace daño. Subir la versión o arreglar un typo obvio queda completamente descrito por su asunto (chore: sube la versión a 1.4.2) y un párrafo fabricado alrededor es pura ceremonia que entierra tus explicaciones reales en el ruido. Dale al skill un umbral explícito para saltarse el cuerpo, así escribe uno solo cuando el cambio es no obvio y el porqué de verdad necesita quedar anotado.

¿Cómo hago que los mensajes coincidan con el estilo existente de mi repo?

Apunta el skill a tu convención en vez de dejarlo usar un default genérico. Casi todos los equipos ya tienen la lista de tipos, el vocabulario de scopes y el tope de largo del asunto escritos en un CLAUDE.md o un archivo de reglas. Mete eso en el cuerpo del skill para que su salida parezca que pertenece a tu historial. Después versiona el skill junto a la convención, así cuando esta cambia el skill cambia con ella.

¿Prefieres que lo hagamos por ti?

Esto mismo lo construimos para negocios como el tuyo. La primera conversación es gratis y sin compromiso.

Escríbenos por WhatsApp

Escríbenos por WhatsApp

Escanéalo con tu teléfono para escribirnos por WhatsApp.

Escanéalo con tu teléfono para escribirnos por WhatsApp.

¿Estás desde el teléfono y no puedes escanear? Escríbenos a info@ilustrari.com

Primera conversación gratis. Te responde el fundador.

Recursos relacionados

PromptClaude Code

Un prompt para mensajes de commit que escribe el porqué, no el qué

La mayoría de los mensajes de commit solo repiten el diff, que es justo lo que git ya sabe. Este es un prompt para copiar y pegar que toma un diff en staging y lo convierte en un mensaje de Conventional Commit que explica la intención, se niega a mezclar cambios sin relación y es lo bastante mecánico para usarlo en cada commit. Te llevas la plantilla completa, las variables que puedes ajustar, cuatro variantes y las formas en que puede fallar para que estés pendiente.

18 abr 202610 min de lectura
SkillClaude Code

El skill que describe PRs: convierte un diff en una descripción que el revisor sí va a leer

Un skill empaquetado de Claude Code lee el diff contra tu rama base y redacta la descripción del pull request: qué cambió, por qué y cómo probarlo paso a paso. Así tu revisor deja de adivinar tu intención a partir del código pelado. Qué hace, cuándo debe dispararse, cómo funciona por dentro y lo único que jamás va a saber y que te toca poner a ti.

24 may 202611 min de lectura
SkillClaude Code

El skill de revisión de código: un revisor que lee el diff, no el repo

Un revisor empaquetado de Claude Code que invocas antes de cada commit en lugar de repegar las mismas instrucciones. Lee el diff en stage, primero marca los bugs reales de corrección, luego lista aparte las limpiezas opcionales y no opina sobre detalles de estilo que el linter ya cubre. Aquí te explico cómo armarlo, conectarlo y evitar que te reescriba la función completa.

1 jun 202611 min de lectura