🌱 Empieza aquí · Auto-guardado de tu trabajo a git al cerrar sesión
¿Cuántas veces terminaste de trabajar, cerraste la laptop… y se te olvidó guardar y subir los cambios al repositorio? Al día siguiente el trabajo no estaba donde lo buscabas, o lo tenías en una máquina y no en la otra. Esta semilla mata ese dolor de raíz: cada vez que cierras una sesión de trabajo, tu asistente guarda (commit) y sube (push) tus cambios automáticamente al repositorio que tú elijas. Sin clics, sin acordarte de nada.
Y lo hace con red de seguridad: revisa que no se te escape ningún secreto (una contraseña o llave de API) al historial, y si otra computadora subió algo antes que tú, resuelve el choque solo en vez de romper nada.
Para instalarla
Abre esta carpeta con Claude Code o Cowork y dile a tu asistente:
"Siembra esta semilla 🌱"
Con eso basta de tu parte. Tu asistente hace todo lo técnico y al final te dice cómo comprobar que quedó funcionando. Vas a ver algunas palabras en inglés en la pantalla; ni caso, él te guía.
¿Otras formas de pedírselo? "instala esta semilla", "pon a funcionar el auto-guardado a git", "haz el setup de esto". Te entiende igual.
Para el asistente que siembra 🤖
Instala este hook (gancho de automatización) del evento SessionEnd (fin de sesión).
Sigue estos pasos y no inventes rutas: usa $HOME siempre.
1. Copia el script del kernel (el corazón de la semilla)
Copia kernel/sync-git-end.sh a la carpeta de hooks del usuario y dale permiso de
ejecución.
Claude Code / Cowork (macOS o Linux):
mkdir -p "$HOME/.claude/hooks"
cp kernel/sync-git-end.sh "$HOME/.claude/hooks/sync-git-end.sh"
chmod +x "$HOME/.claude/hooks/sync-git-end.sh"
Windows (Git Bash / WSL): misma ruta ~/.claude/hooks/. El script usa bash y git,
que vienen con Git Bash o WSL. Si el usuario corre Claude Code nativo en Windows sin bash,
avísale que este hook necesita un entorno con bash disponible.
2. Pregúntale al usuario QUÉ repositorio quiere auto-sincronizar
Este es el único dato que necesitas de él. La semilla auto-guarda un repositorio que
él elige (típicamente su carpeta de notas, su configuración de ~/.claude, o un proyecto
donde quiere respaldo constante). Fija esa ruta en la variable GIT_SYNC_REPO al registrar
el hook (paso 3). Si no la fijas, la semilla intenta usar el repo git del directorio donde
corre; para un hook de fin de sesión eso puede no ser fiable, así que lo recomendado es
fijar GIT_SYNC_REPO explícito.
3. Registra el hook en settings.json
Abre $HOME/.claude/settings.json (créalo si no existe) y agrega esta entrada dentro de
hooks.SessionEnd. Reemplaza <RUTA-DE-TU-REPO> por la ruta real que te dio el usuario en
el paso 2, dejando las comillas simples (así funciona aun si la carpeta tiene espacios,
muy común en Mac, ej. /Users/ana/Mis Notas). Si ya hay hooks de SessionEnd, suma
este objeto al arreglo hooks existente en lugar de reemplazarlo:
{
"hooks": {
"SessionEnd": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "GIT_SYNC_REPO='<RUTA-DE-TU-REPO>' bash $HOME/.claude/hooks/sync-git-end.sh",
"timeout": 30
}
]
}
]
}
}
timeout: 30le da aire alpush(subir por red puede tardar). Si el repo es grande o la conexión lenta, súbelo.
4. (Opcional) Ajustes finos por variables de entorno
Todo se configura sin tocar el script. Estas son las variables que entiende, con su significado y su valor por defecto:
GIT_SYNC_REPO— ruta absoluta del repositorio a auto-sincronizar (default: el repo del directorio actual). Es la que casi siempre querrás fijar.GIT_SYNC_REMOTE— nombre del remoto al que se sube (default:origin).GIT_SYNC_BRANCH— rama a subir (default: la rama actual).GIT_SYNC_MACHINE_TAG— etiqueta que aparece en el mensaje del commit para saber desde qué equipo se guardó (default: autodetectamac/windows/linux).GIT_SYNC_SECRET_SCAN— comando externo de escaneo de secretos. Si lo fijas, la semilla usa ESE escáner en vez del interno (ver "Combínala" en el README). Si ese escaneo falla, el commit se aborta. Default: escaneo interno mínimo.
5. Verificación post-siembra (obligatoria)
No hace falta un remoto real para probar que la mecánica funciona. Crea un repo de prueba,
métele un cambio y corre el hook apuntándolo ahí. Debe aparecer un commit auto-sync.
TREPO="${TMPDIR:-/tmp}/sync-git-end-prueba"
mkdir -p "$TREPO" && git -C "$TREPO" init -q
git -C "$TREPO" config user.email "you@localhost"
git -C "$TREPO" config user.name "prueba"
echo "hola" > "$TREPO/nota.txt"
GIT_SYNC_REPO="$TREPO" bash "$HOME/.claude/hooks/sync-git-end.sh"; echo "EXIT=$?"
git -C "$TREPO" log --oneline
Salida esperada: EXIT=0 y una línea de commit que empieza con auto-sync desde ….
(No hay remoto, así que solo guarda local; eso está bien para la prueba.)
Ahora comprueba el escudo anti-secretos: si metes algo que parece una llave, NO debe commitear y debe dejar un aviso.
printf 'API_KEY=AKIA%s\n' 'ABCDEFGHIJKLMNOP' > "$TREPO/config.txt"
GIT_SYNC_REPO="$TREPO" bash "$HOME/.claude/hooks/sync-git-end.sh"; echo "EXIT=$?"
cat "$TREPO/.git-sync-secret-detected" 2>/dev/null && echo "ESCUDO_OK"
git -C "$TREPO" log --oneline # debe seguir habiendo UN solo commit
Salida esperada: EXIT=0, aparece el archivo .git-sync-secret-detected con el aviso
(imprime ESCUDO_OK), y el log sigue con un solo commit (el secreto NO se guardó).
Por último, confirma que el hook quedó registrado en settings.json:
grep -q 'sync-git-end' "$HOME/.claude/settings.json" && echo 'REGISTRADO'
Salida esperada: REGISTRADO.
Cuando las tres pruebas den lo esperado, borra el repo de prueba (rm -rf "$TREPO",
pídele confirmación al usuario si prefieres) y avísale en una línea qué gana con esto.
✅ ¿Cómo sé que funcionó?
A partir de ahora, cada vez que cierres una sesión de trabajo, tu asistente guarda y sube
tus cambios solo. No tienes que acordarte de nada. Si alguna vez ves un aviso de
.git-sync-secret-detected, es tu red de seguridad avisándote que había algo que parecía
un secreto en los cambios: sácalo de ahí y guarda a mano esa vez. Y si trabajas el mismo
repositorio desde dos computadoras, cada commit te dirá desde cuál se hizo.
Tu trabajo queda respaldado sin fricción, y un secreto nunca se te escapa al historial. Eso es todo. 🌱
