🌱 Empieza aquí
Dile a tu asistente: "siembra esta semilla 🌱"
Eso es todo de tu parte. Tu asistente hace lo técnico; tú solo conversas.
¿Otras formas de decírselo? "instala este hook", "activa el recordatorio de git", "pon esto a funcionar". Te entiende igual.
Cuando termine, salta a la sección "¿Cómo sé que funcionó?" al final.
Para el asistente que siembra
Estás instalando un hook (gancho de automatización) del evento Stop (fin de respuesta). Cada vez que termines de responder dentro de un repositorio git, este hook revisa si quedó trabajo sin guardar y te recuerda confirmarlo (commit) y subirlo (push). Sigue estos pasos con precisión.
Paso 1 · Copiar el archivo del kernel
Copia kernel/stop-hook-git-check.sh a la carpeta de hooks. Elige una ubicación:
- Recomendado — por proyecto (afecta solo a este repositorio): cópialo a
<TU-PROYECTO>/.claude/hooks/stop-hook-git-check.sh. Crea la carpeta.claude/hooks/si no existe. - Alternativa — global (afecta a todos tus proyectos): cópialo a
<TU-CARPETA-DE-CLAUDE>/hooks/stop-hook-git-check.sh, donde<TU-CARPETA-DE-CLAUDE>es la carpeta de configuración del asistente (en Claude Code y Cowork suele ser~/.claude).
Paso 2 · Dar permiso de ejecución
chmod +x "<RUTA-DONDE-LO-COPIASTE>/stop-hook-git-check.sh"
Paso 3 · Registrarlo en settings.json
Abre el settings.json que corresponde a la ubicación que elegiste en el Paso 1:
- Por proyecto →
<TU-PROYECTO>/.claude/settings.json - Global →
<TU-CARPETA-DE-CLAUDE>/settings.json
Agrega el hook bajo la clave hooks.Stop. Si ya existe un bloque hooks, fusiona: agrega este elemento al arreglo Stop, no lo sobrescribas.
Si lo instalaste por proyecto (usa $CLAUDE_PROJECT_DIR, así no dependes de rutas absolutas):
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-hook-git-check.sh"
}
]
}
]
}
}
Si lo instalaste global, usa la ruta absoluta real del archivo en command (settings.json no expande ~), por ejemplo "/ruta/absoluta/a/.claude/hooks/stop-hook-git-check.sh".
Paso 4 · Verificación post-siembra
Confirma que el archivo existe, es ejecutable y se comporta bien:
# a) Existe y es ejecutable
ls -l "<RUTA-DONDE-LO-COPIASTE>/stop-hook-git-check.sh"
# Esperado: los permisos empiezan con -rwx (la 'x' confirma que es ejecutable)
# b) Comportamiento real: dentro de un repositorio git con algo sin guardar
rm -f "${TMPDIR:-/tmp}/.claude-git-check-ts" # fuerza una revisión fresca (salta el anti-bucle)
cd "<UN-REPOSITORIO-GIT-CUALQUIERA>"
touch prueba-semilla.txt # crea un archivo sin seguimiento
bash "<RUTA-DONDE-LO-COPIASTE>/stop-hook-git-check.sh"; echo "código de salida: $?"
# Esperado: imprime un aviso de "archivos sin seguimiento" y luego "código de salida: 2"
rm -f prueba-semilla.txt # limpieza
Si en el paso (b) ves el aviso y el código de salida: 2, el hook quedó vivo. En un repositorio totalmente limpio, el mismo comando termina en silencio con código de salida: 0 (nada que recordar).
Placeholders que debes reemplazar por valores reales:
| Placeholder | Qué es |
|---|---|
| <TU-PROYECTO> | La carpeta raíz del proyecto/repositorio del usuario. |
| <TU-CARPETA-DE-CLAUDE> | La carpeta de configuración del asistente (normalmente ~/.claude). |
| <RUTA-DONDE-LO-COPIASTE> | La ubicación final del script tras el Paso 1. |
| <UN-REPOSITORIO-GIT-CUALQUIERA> | Cualquier carpeta que sea un repositorio git, para la prueba. |
¿Cómo sé que funcionó?
De ahora en adelante, cada vez que tu asistente termine de trabajar en un proyecto que sea un repositorio git y haya dejado cambios sin guardar, él mismo te lo va a decir: algo como "dejé cambios sin subir, ¿los subo?". No tienes que acordarte tú.
Es tu red de seguridad: ya no vas a cerrar la laptop con trabajo a medio guardar que nunca llegó a la nube. Si un día no ves ningún aviso, es porque todo tu trabajo ya quedó guardado y subido. 🫡
