/close-new-session — cierre + traspaso
Dos entregables: la memoria de largo plazo (lo que importa dentro de meses) y el traspaso (lo que importa dentro de cinco minutos, en la sesión nueva). Son cosas distintas. No las mezcles.
- Memoria = hechos duraderos, sin ruido de sesión.
- Traspaso = estado volátil: qué estaba a medio editar, qué comando estaba corriendo, qué se probó y falló.
Paso 1 — Estado real
git status --short
git diff --stat
git log --oneline -8
git stash list
ls -t docs/handoffs/*.md 2>/dev/null | head -3
Si docs/handoffs/ no existe, créalo. Si el repo no tiene docs/, usa .claude/handoffs/.
Paso 2 — Encadenar
Mira el último traspaso listado. Si trata del mismo hilo de trabajo, este es su continuación:
hereda el slug y sube el número de secuencia. Si es tema nuevo, empieza en 01.
Nombre: docs/handoffs/YYYY-MM-DD-<slug>-<NN>.md
Ejemplo: docs/handoffs/2026-08-25-auth-rewrite-03.md
Paso 3 — Memoria
Sigue memory-triage.md (en esta misma carpeta de skill). Léelo antes de escribir.
Mismo filtro que /close: solo lo que no se deduce leyendo el repo. Busca duplicados. Actualiza MEMORY.md.
Hazlo antes del traspaso: así el traspaso puede apuntar a las memorias por su slug en vez de repetirlas.
Paso 4 — Escribir el traspaso
Plantilla completa. Rellena todo; si una sección está vacía, escribe "—" en vez de borrarla.
# Traspaso — <título del hilo de trabajo>
**Fecha:** YYYY-MM-DD · **Secuencia:** NN · **Anterior:** <fichero previo o "—">
**Rama:** <rama> · **Último commit:** <sha corto> <asunto>
## Objetivo
<Una frase: qué se intenta conseguir en este hilo. No lo de hoy — lo del hilo entero.>
## Dónde estamos
<10-20 bullets. Estado concreto, no narrativa. Qué funciona, qué no, qué está a medio hacer.>
## Qué se probó y NO funcionó
<Lo más valioso del fichero. Cada intento con su motivo de fallo, para no repetirlo.>
- <enfoque> → falló porque <motivo>
## Decisiones tomadas
- <decisión> — porque <motivo> — <fecha>
## Ficheros tocados
<Rutas relativas + una línea de qué cambió en cada uno. Marca los que están sin commitear.>
## Sin commitear
<Salida de git status --short, o "limpio">
## Contexto que no está en el repo
<IDs, URLs, credenciales por ubicación (NUNCA el valor), qué VPN hace falta, qué está caído.>
## Memorias escritas en este cierre
- [[slug_de_memoria]] — <qué cubre>
## Siguiente paso
1. <acción concreta>
2. <acción concreta>
3. <acción concreta>
## Arranque rápido
```bash
<comandos exactos para dejar el entorno como estaba: cd, VPN, servidor, tests>
```
Reglas del contenido:
- Rutas y comandos exactos. "el fichero de config" no sirve;
src/config/database.tssí. - Nunca un valor de token o secreto. Solo dónde vive.
- Fechas absolutas.
- Si algo no se verificó, escríbelo como no verificado. Un traspaso que miente cuesta más que uno vacío.
Paso 5 — Devolver el prompt de arranque
Termina con esto, en un bloque de código para copiar de una:
## Sesión cerrada — traspaso listo
Memoria:
+ <fichero>.md — nueva: <hook>
~ <fichero>.md — actualizada: <qué cambió>
Traspaso: docs/handoffs/<fichero>.md (secuencia NN)
**Pega esto en la sesión nueva:**
```
Lee docs/handoffs/<fichero>.md y continúa desde "Siguiente paso".
```
Qué NO hacer
- No commitear ni pushear salvo petición explícita. El traspaso sí se escribe a disco (ese es el punto), pero se queda sin commitear salvo que el usuario diga otra cosa.
- No duplicar en el traspaso lo que ya fue a memoria — enlázalo por slug.
- No escribir un traspaso genérico. Si no puedes nombrar el siguiente paso concreto, el traspaso no vale.