Founding Member: $499/mes de por vida
Micare
Trucos técnicos

Sincroniza tu configuración entre máquinas, seguro y sin pensarlo

Un script que confirma (commit) y sube (push) tu repositorio de configuración a la nube con guardas de seguridad: verifica que apunte al remoto correcto, escanea secretos antes de subir, y reintenta con rebase si el remoto avanzó. Úsalo bajo demanda o engánchalo al fin de cada sesión.

HookPremiumTrucos técnicosgit e infra

🌱 Empieza aquí · Sincroniza tu configuración entre máquinas

Abre esta carpeta con Claude Code o Cowork y dile a tu asistente:

"Siembra esta semilla 🌱"

Eso es todo de tu parte. Tu asistente hace lo técnico; tú solo conversas y, al final, le das dos datos: qué carpeta quieres sincronizar y cómo se llama tu repo en la nube.

¿Otras formas de decírselo? "instala esto", "pon a funcionar el auto-sync de mi config", "activa el respaldo automático de mi configuración". Te entiende igual.

Cuando termine, salta a la sección "¿Cómo sé que funcionó?" al final.


Qué resuelve (por qué → qué → cómo)

Por qué. Trabajas con tu asistente en dos o tres máquinas (tu laptop, tu compu de escritorio, quizá un servidor). Tu configuración —tus reglas, tus notas, tus ajustes— vive en una carpeta que llevas en git. El problema: se te olvida subirla. Llegas a la otra máquina y tu asistente está "desactualizado" porque los últimos cambios se quedaron en la otra compu. O peor: subes algo sin darte cuenta de que traía una contraseña adentro.

Qué. Esta semilla instala un pequeño ayudante que hace tres cosas por ti, en el orden correcto: (1) revisa que no estés a punto de subir un secreto, (2) confirma tus cambios con una etiqueta de qué máquina los hizo, y (3) los sube a la nube — y si el remoto avanzó mientras trabajabas, se reacomoda solo y reintenta.

Cómo. Es un script (auto-sync-config.sh). Lo puedes usar de dos maneras, y tú eliges: bajo demanda (tu asistente lo corre cuando se lo pides o cuando termina de tocar tu config) o automático (se dispara solo al terminar cada sesión de trabajo).


Para el asistente que siembra 🤖

Estás instalando un script de sincronización de git con guardas de seguridad. La pieza vive en kernel/auto-sync-config.sh y no depende de nada externo (trae su propio escáner de secretos básico). Sigue estos pasos con precisión.

Paso 1 · Colocar el archivo del kernel

Copia kernel/auto-sync-config.sh a la carpeta de scripts/hooks de la persona. Elige una ubicación:

  • Global (recomendado para sincronizar la carpeta de configuración del asistente): cópialo a <TU-CARPETA-DE-CLAUDE>/hooks/auto-sync-config.sh, donde <TU-CARPETA-DE-CLAUDE> es la carpeta de configuración (en Claude Code y Cowork suele ser ~/.claude). Crea hooks/ si no existe.
  • Por proyecto (si quieres sincronizar un repo específico): cópialo a <TU-PROYECTO>/.claude/hooks/auto-sync-config.sh.

Paso 2 · Dar permiso de ejecución

chmod +x "<RUTA-DONDE-LO-COPIASTE>/auto-sync-config.sh"

Paso 3 · Configurar los dos datos que importan

El script se controla con variables de entorno (no hay que editar el código). Los dos que de verdad importan:

| Variable | Qué es | Ejemplo | |---|---|---| | SYNC_REPO | Ruta del repo a sincronizar. Si la dejas vacía, usa el repo git de la carpeta actual. | $HOME/.claude o <TU-PROYECTO> | | SYNC_EXPECTED_REMOTE | El candado de seguridad. Un pedacito del nombre de tu repo en la nube que la URL del remoto DEBE contener. Si no coincide, el script se niega a subir (evita empujar al repo equivocado). | mi-config (si tu repo se llama usuario/mi-config) |

Opcionales (deja los defaults salvo que la persona los pida): SYNC_BRANCH (rama; vacío = rama actual), SYNC_LOG_DIR (carpeta del log; default = carpeta temporal del sistema), SYNC_SECRET_SCAN (ruta al escáner de secretos propio de la persona, si tiene uno; si no, se usa el integrado).

Pregúntale a la persona cómo se llama su repo de configuración en la nube y usa un fragmento único de ese nombre como SYNC_EXPECTED_REMOTE. Ese candado es lo que hace segura la herramienta: sin él, no la actives de forma automática.

Paso 4 · Elegir modo de uso

Modo A · Bajo demanda (el más simple, funciona en Claude Code, Cowork y Codex). No hay que registrar nada. Cuando la persona diga "sincroniza mi config" (o cuando tú termines de editar sus ajustes), córrelo así, con sus dos datos:

SYNC_REPO="<RUTA-DEL-REPO>" SYNC_EXPECTED_REMOTE="<FRAGMENTO-DEL-NOMBRE>" \
  bash "<RUTA-DONDE-LO-COPIASTE>/auto-sync-config.sh"

Modo B · Automático al cerrar sesión (Claude Code y Cowork). Regístralo como hook del evento de fin de sesión en el settings.json correspondiente a la ubicación del Paso 1 (global → <TU-CARPETA-DE-CLAUDE>/settings.json; por proyecto → <TU-PROYECTO>/.claude/settings.json). Si ya existe un bloque hooks, fusiona: no lo sobrescribas. Usa SessionEnd (y/o Stop si prefieres que corra al terminar cada respuesta):

{
  "hooks": {
    "SessionEnd": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "SYNC_REPO=\"<RUTA-DEL-REPO>\" SYNC_EXPECTED_REMOTE=\"<FRAGMENTO-DEL-NOMBRE>\" bash \"<RUTA-ABSOLUTA>/auto-sync-config.sh\""
          }
        ]
      }
    ]
  }
}

settings.json no expande ~: usa la ruta absoluta real del script en command. Codex no tiene este sistema de eventos; en Codex, usa el Modo A (bajo demanda).

Paso 5 · Verificación post-siembra (obligatoria)

a) El archivo quedó colocado y es ejecutable:

ls -l "<RUTA-DONDE-LO-COPIASTE>/auto-sync-config.sh"
# Esperado: los permisos empiezan con -rwx (la 'x' confirma que es ejecutable)

b) Prueba de comportamiento real (segura, en un repo de juguete). Esto NO toca el repo real de la persona: crea uno desechable con un "remoto" local y comprueba las tres guardas.

TMP="$(mktemp -d)"
git init --bare -q -b main "$TMP/remote.git"
git init -q -b main "$TMP/work"
( cd "$TMP/work" && git config user.email t@t.t && git config user.name t \
  && git remote add origin "$TMP/remote.git" && echo hola > a.txt )
S="<RUTA-DONDE-LO-COPIASTE>/auto-sync-config.sh"

# 1) Candado de remoto: con un nombre que NO coincide, debe negarse.
SYNC_REPO="$TMP/work" SYNC_EXPECTED_REMOTE="NO-COINCIDE" bash "$S"; echo "salida: $?"
#   Esperado: imprime WRONG_REMOTE y salida: 1

# 2) Con el nombre correcto, hace el primer commit y push.
SYNC_REPO="$TMP/work" SYNC_EXPECTED_REMOTE="remote.git" bash "$S"; echo "salida: $?"
#   Esperado: imprime PUSHED_new y salida: 0

# 3) Sin cambios nuevos, no hace nada.
SYNC_REPO="$TMP/work" SYNC_EXPECTED_REMOTE="remote.git" bash "$S"; echo "salida: $?"
#   Esperado: imprime UP_TO_DATE y salida: 0

# 4) Escáner de secretos: si aparece algo que huele a credencial, aborta.
#    Lo metemos en una carpeta NUEVA a propósito (el caso más traicionero:
#    un secreto en una carpeta recién creada). Debe atraparlo igual.
mkdir -p "$TMP/work/nueva-carpeta"
printf 'api_key = "AKIA1234567890ABCDEF"\n' > "$TMP/work/nueva-carpeta/secreto.txt"
SYNC_REPO="$TMP/work" SYNC_EXPECTED_REMOTE="remote.git" bash "$S"; echo "salida: $?"
#   Esperado: imprime SECRET_DETECTED y salida: 1

Si las cuatro pruebas dan lo esperado, la semilla quedó viva. Puedes borrar la carpeta $TMP al terminar. Ya con eso, configura el repo REAL de la persona (Paso 3) y avísale en una línea qué gana.

Placeholders que debes reemplazar por valores reales:

| Placeholder | Qué es | |---|---| | <TU-CARPETA-DE-CLAUDE> | La carpeta de configuración del asistente (normalmente ~/.claude). | | <TU-PROYECTO> | La carpeta raíz del proyecto/repo del usuario. | | <RUTA-DONDE-LO-COPIASTE> | La ubicación final del script tras el Paso 1. | | <RUTA-ABSOLUTA> | La ruta absoluta completa a ese mismo script (para settings.json). | | <RUTA-DEL-REPO> | La ruta del repo que la persona quiere sincronizar. | | <FRAGMENTO-DEL-NOMBRE> | Un pedazo único del nombre de su repo en la nube (el candado). |


✅ ¿Cómo sé que funcionó?

De ahora en adelante, tu configuración deja de quedarse "atrás" en una de tus máquinas. Cuando cambies algo, tu asistente lo sube a la nube por ti —con la etiqueta de en qué compu lo hiciste—, y cuando abras la otra máquina ya vas a tener lo último.

Y traes tres cinturones de seguridad puestos sin hacer nada:

  1. No sube al repo equivocado. Si por accidente apunta a otro lado, se niega.
  2. No sube secretos. Si detecta algo que huele a contraseña o llave, frena y avisa.
  3. No se atora si el remoto avanzó. Se reacomoda solo (rebase) y reintenta; solo te molesta si de verdad hay un choque que necesita tu ojo.

Si un día no ves ningún movimiento, es buena señal: todo ya estaba sincronizado. 🫡

¿Quieres implementarla con acompañamiento?

Agenda una asesoría directa con JP y aterrízala en tu caso · desde $600 MXN.

Agendar una asesoría