Saltar al contenido

Claude Code · Principiante

Inicio y cierre de sesiónretoma cualquier proyecto en un mensaje y deja de pagar por el chat de ayer

Todos los que trabajamos varios proyectos con Claude Code caemos en lo mismo: abrir el chat de ayer para 'no perder el hilo', y terminar con conversaciones de 600 mil tokens que cobran todo su historial en cada mensaje. La alternativa —abrir un chat limpio— tiene el costo contrario: volver a explicar el proyecto desde cero. Este sistema junta lo mejor de las dos. El estado vive en un archivo dentro del repo, un comando lo lee al arrancar y otro lo escribe al cerrar. La conversación se tira; el contexto se queda.

Publicada 27 de agosto de 2026Actualizada 28 de agosto de 2026Lectura 21 minSin saber programar

De un vistazo

01

Al cerrar, un archivo guarda dónde quedaste

02

Al abrir, retomas en un mensaje en vez de reconstruir

03

Dejas de pagar el chat de ayer en cada mensaje de hoy

01 el punto de partida

Qué es y por qué existe

Claude Code ya tiene memoria propia (CLAUDE.md y su carpeta de memoria), pero está pensada para reglas estables: cómo te gusta el código, qué stack usas. No está pensada para el estado cambiante de un proyecto: qué hiciste el martes, qué decidiste el miércoles, qué falta para el viernes. Eso es lo que resuelve STATE.md.

STATE.md

Un archivo en la raíz del repo. La sesión más reciente siempre va arriba. Cada sesión tiene lo hecho, las decisiones, los bugs conocidos, los pendientes por prioridad y una frase de 'próximo paso'.

/iniciar-sesion

Lee STATE.md, lo cruza con git (últimos commits, cambios sin subir, cambios que llegaron de fuera), corre un health check y te presenta un resumen con formato fijo. Termina preguntando por dónde empezamos.

/cerrar-sesion

Escribe la sesión de hoy al inicio de STATE.md, hace commit, sube el repo y cierra la conversación con un bloque que te manda a /clear.

En una frase: el contexto de un proyecto debe vivir en el repo, no en la ventana del chat. La ventana se tira cada día; el repo se queda.

02 antes de instalar nada

Lo que Claude Code ya trae y por qué no alcanza

Claude Code guarda cada conversación en disco y te da varias formas de volver a ella. Conviene conocerlas porque el sistema de esta guía no las sustituye: las usa donde sirven y las evita donde cobran de más.

HerramientaQué haceCuándo la uso
/clearAbre una conversación vacía. La anterior queda guardada y se puede recuperar con /resume.Siempre después de /cerrar-sesion y entre tareas que no tienen nada que ver.
/compact [instrucciones]Reemplaza el historial por un resumen. Acepta un foco: /compact conserva la lista de archivos tocados.A media jornada, cuando la ventana se llenó pero la tarea sigue siendo la misma.
Esc Esc o /rewindRegresa código y conversación a un punto anterior, o resume solo un tramo (desde aquí / hasta aquí).Cuando Claude tomó un camino malo y no quiero cargar con los intentos fallidos.
claude --continue / --resumeReabre la conversación más reciente del directorio, o una elegida de la lista.Casi nunca. Es justo lo que este sistema evita: reabrir el chat de ayer con todo su historial.
/contextMuestra qué está ocupando la ventana: archivos de memoria, herramientas, historial.Cuando una sesión se siente lenta o cara y quiero saber por qué.
/btwPregunta al margen; la respuesta no entra al historial.Para dudas rápidas que no quiero arrastrar el resto del día.

El detalle que importa: si reabres una conversación grande después de más o menos una hora, Claude Code te ofrece retomarla desde un resumen o completa. Ninguna de las dos es gratis: la caché ya expiró y la primera petición reprocesa todo el historial. Por eso el estado vive en un archivo de unas cuantas líneas y no en el transcript de 600 mil tokens.

/compact es el punto medio. Sirve dentro del día; no sirve como cierre, porque lo que el resumen omitió ya no existe para Claude y nadie lo revisó. STATE.md lo escribe Claude pero lo lees tú antes de que se vaya a git.

03 el dato que lo justifica

Lo que cuesta no cerrar

Antes de escribir el sistema medí dos semanas de uso real. El resultado fue lo que decidió el diseño del comando de cierre:

  • 14 conversaciones que se estiraron más de 48 horas se llevaron el 83% del consumo semanal, con solo 2 a 7 horas de trabajo real cada una.
  • Retomar una conversación tras una pausa larga obliga a regrabar el contexto completo en caché: más de mil regrabaciones en el periodo, un 25% del ciclo.
  • Una conversación de 620 mil tokens retomada al día siguiente cuesta alrededor de 1.5 millones de unidades antes de leer la primera palabra nueva.

La conclusión fue incómoda pero simple: guardar el estado no sirve de nada si después sigues escribiendo en el mismo chat. Por eso /cerrar-sesion no solo guarda: termina su respuesta con un bloque que te dice, literal, que cierres la conversación.

04 el archivo

El formato de STATE.md

El formato es fijo a propósito. Si cada sesión se escribe igual, el comando de inicio siempre sabe dónde buscar 'lo hecho', 'pendientes' y 'próximo paso'. Este es el bloque que se prepende en cada cierre:

STATE.md — bloque de una sesión
## Última sesión — 2026-08-27 — Buscador del Lab con filtros

**Lab en producción con buscador, filtros por tipo y nivel y la primera guía publicada.**

### Lo hecho hoy
- Motor de búsqueda client-side sobre título, resumen, tags y herramientas
- Plantilla de guía con índice lateral, bloques de comando y FAQ
- Primera guía publicada: inicio y cierre de sesión

### Decisiones tomadas
- Guías como archivos TypeScript tipados, no markdown: la plantilla es fija y así el editor valida cada bloque

### Bugs conocidos
- El contador de resultados no se anuncia a lectores de pantalla (pendiente aria-live)

### Pendientes — orden de prioridad

#### 🔴 P0 — Bloqueante
- Publicar sitemap con las guías nuevas

#### 🟡 P1 — Esta semana
- Segunda y tercera guía

#### 🟢 P2 — Post-launch
- Negociación de contenido markdown para agentes

### Próximo paso para retomar
Escribir la guía del MCP de GHL con la plantilla ya validada.

---

Tres reglas que hacen que funcione: la sesión nueva siempre va arriba (lo primero que se lee es lo más reciente); los pendientes llevan prioridad explícita (P0 bloqueante, P1 esta semana, P2 después); y el 'próximo paso' es una sola frase accionable, no una lista.

05 para no confundirlas

Tres memorias que se parecen y no son la misma

Cuando la gente instala este sistema, la duda que más se repite es si STATE.md choca con la memoria que Claude Code ya lleva solo. No choca, pero hay que tener claro quién escribe cada una, dónde vive y si viaja con el repo:

MemoriaQuién la escribeDónde vive¿Viaja en git?Para qué sirve
CLAUDE.md y .claude/rules/Raíz del repo, ~/.claude/ o subcarpetasSí (la del repo)Reglas estables: stack, estilo, qué no hacer. Se carga en cada sesión.
Memoria automáticaClaude, por su cuenta~/.claude/projects/<proyecto>/memory/ con un MEMORY.md de índiceNo; es local a tu máquinaPreferencias y correcciones que Claude decide guardar. Prendida por defecto; se apaga desde /memory.
STATE.mdEl comando /cerrar-sesion, con tu revisiónRaíz del repoEstado cambiante: lo hecho, decisiones, pendientes con prioridad, próximo paso.
  • De la memoria automática solo se cargan las primeras 200 líneas (o 25 KB) del índice; el resto lo lee Claude bajo demanda. No es un lugar para pendientes ordenados.
  • La memoria automática es por repositorio y se comparte entre todos los worktrees del mismo repo, pero no entre computadoras. STATE.md sí llega a la otra máquina porque va en el push.
  • Los subagentes no ven la memoria automática de la conversación principal ni la conversación. Si un subagente necesita saber en qué va el proyecto, pásale la ruta de STATE.md en el prompt.
  • Un CLAUDE.md largo reduce la obediencia a sus propias reglas. Si un dato cambia cada semana, no es de CLAUDE.md: es de STATE.md.

Regla rápida: lo que le dirías a un colaborador nuevo el primer día va en CLAUDE.md; lo que le dirías a tu yo de mañana va en STATE.md; lo que Claude quiera anotar para sí mismo lo deja en su memoria automática y tú lo revisas con /memory cuando quieras.

06 comando 1

/iniciar-sesion, paso a paso

Los slash-commands propios de Claude Code son archivos markdown en ~/.claude/commands/ (globales) o en .claude/commands/ del proyecto. El nombre del archivo es el nombre del comando. Crea el archivo y pega el contenido:

Atajo: instalar los dos comandos desde el repo (terminal)
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/davidiriza-lab/sesiones-claude-code/main/commands/iniciar-sesion.md -o ~/.claude/commands/iniciar-sesion.md && curl -fsSL https://raw.githubusercontent.com/davidiriza-lab/sesiones-claude-code/main/commands/cerrar-sesion.md -o ~/.claude/commands/cerrar-sesion.md
Repo público con los dos archivos y licencia MIT: github.com/davidiriza-lab/sesiones-claude-code. Si prefieres leer antes de instalar, abajo va cada archivo completo.
A mano: crear el archivo del comando (terminal)
mkdir -p ~/.claude/commands && touch ~/.claude/commands/iniciar-sesion.md
~/.claude/commands/iniciar-sesion.md
---
description: Carga el contexto de un proyecto (lee STATE.md) para retomar donde se dejó. Acepta el nombre del proyecto como argumento o lista los disponibles.
---

# /iniciar-sesion [proyecto]

## Paso 0 — Exigir conversación limpia
Este comando reconstruye el contexto DESDE STATE.md. Si esta conversación ya trae
trabajo previo (otro tema, otro proyecto, una sesión ya cerrada), NO cargues nada.
Responde solo esto y espera:

  ⛔ Esta conversación ya viene cargada.
  Escribe /clear y vuelve a lanzar /iniciar-sesion [proyecto].

Si el usuario responde que quiere continuar aquí, hazlo sin insistir.

## Paso 1 — Resolver el proyecto
- Con argumento: busca la carpeta en ~/proyectos/[argumento]; acepta coincidencia parcial;
  si hay ambigüedad muestra opciones.
- Sin argumento: si el directorio actual está dentro de ~/proyectos/, úsalo.
  Si no, lista las carpetas de ~/proyectos/ numeradas y pregunta cuál.

## Paso 2 — Cargar contexto
1. Lee STATE.md y extrae la sección "Última sesión" (la primera del archivo).
2. Complementa con git: últimos 3 commits y archivos con cambios sin commitear.
3. Revisa trabajo externo: `git fetch origin --quiet` y lee `git status -sb`.
   - behind N con copia local limpia → `git pull --ff-only` y resume qué llegó (por tema).
   - behind N con cambios propios → NO hagas pull; repórtalo en "Antes de empezar".
   - ahead N → hay commits sin subir; repórtalo.
4. Health check (reporta SOLO si algo falla):
   - package.json sin node_modules → "instalar deps con npm install"
   - .env.example sin .env.local → "faltan variables de entorno locales"
   - .next/ más viejo que el último commit → "build cache viejo"
   - requirements.txt sin venv → "instalar deps de Python"
5. Presenta el resumen con ESTE formato:

**Proyecto:** [nombre]
**Última sesión:** [fecha del STATE.md, o "primera sesión"]
**Cambios externos traídos:** [solo si hubo pull]
**Lo hecho:** [2-3 bullets de la última sesión]
**Pendientes:** 🔴 P0 / 🟡 P1 / 🟢 P2
**Próximo paso:** [frase exacta del campo "Próximo paso para retomar"]
**⚠️ Antes de empezar:** [solo si el health check detectó algo]
**¿Por dónde empezamos?**

6. Si no existe STATE.md, créalo con el encabezado y una "Sesión 1" vacía,
   y pregunta qué estamos construyendo.

El paso 0 es el que más discute la gente y el que más ahorra. Si lanzas el comando sobre una conversación usada, pagas la continuidad dos veces: una en el archivo, otra en la ventana.

Sobre el formato del archivo: Claude Code fusionó los comandos con las skills. Un archivo en ~/.claude/commands/nombre.md y una carpeta en ~/.claude/skills/nombre/SKILL.md producen el mismo /nombre y aceptan el mismo frontmatter. Los archivos de commands siguen funcionando; si algún día quieres adjuntar scripts o plantillas al comando, muévelo a skills. Dos campos de frontmatter que valen la pena aquí: argument-hint: [proyecto] para que el autocompletado te recuerde el argumento, y disable-model-invocation: true en el comando de cierre, para que solo lo dispares tú y Claude no decida cerrar por su cuenta.

07 comando 2

/cerrar-sesion, paso a paso

Crear el archivo del comando (terminal)
touch ~/.claude/commands/cerrar-sesion.md
~/.claude/commands/cerrar-sesion.md
---
description: Cierra la sesión guardando el resumen en STATE.md del proyecto activo, hace commit y push, y termina la conversación.
---

# /cerrar-sesion

1. Detecta el proyecto activo: el git root del directorio actual (o el directorio si no hay git).

2. Genera el resumen de la sesión y PREPÉNDELO en STATE.md (después del encabezado,
   antes de las sesiones anteriores) con esta estructura exacta:

   ## Última sesión — YYYY-MM-DD — [título corto del foco]
   **[Una frase en negrita con el logro principal o el estado al cerrar.]**
   ### Lo hecho hoy            (bullets concretos: qué archivo, qué endpoint, qué componente)
   ### Decisiones tomadas      (con su razón; omitir si no hubo)
   ### Bugs conocidos          (con workaround si existe; omitir si no hay)
   ### Pendientes — orden de prioridad
   #### 🔴 P0 — Bloqueante
   #### 🟡 P1 — Esta semana
   #### 🟢 P2 — Post-launch
   ### Próximo paso para retomar
   [Una frase que diga exactamente por dónde arrancar la próxima vez.]
   ---

3. Si STATE.md no existe, créalo con este encabezado antes del resumen:
   # STATE.md — [nombre del proyecto]
   > Bookmark técnico de continuidad. Léelo al inicio de cada sesión y actualízalo al cierre.
   ---

4. Commit: `git add STATE.md && git commit -m "chore: cerrar sesión YYYY-MM-DD"`

5. Push con conciliación:
   - `git fetch origin --quiet` y lee `git status -sb`.
   - Sin "behind" → `git push`.
   - Con "behind" → `git pull --rebase`; si no hay conflictos, push y menciona en una línea
     qué llegó de fuera. Si hay conflictos, `git rebase --abort`, NO fuerces nada,
     reporta los archivos y deja la conciliación para la próxima sesión.
   - Sin remote o push fallido → avisa en una línea y continúa. Nunca abortes el cierre por esto.

6. Confirma: fecha, foco de la sesión y el próximo paso guardado.

7. CIERRE REAL — no es opcional. Termina SIEMPRE tu respuesta con este bloque, literal
   y como último elemento:

   ───────────────────────────────
   ⛔ CIERRA ESTA CONVERSACIÓN AHORA
   El STATE.md ya está guardado y commiteado. Todo lo de hoy está a salvo.
   →  Escribe /clear (o abre un chat nuevo)
   Mañana: /iniciar-sesion [proyecto] reconstruye todo desde STATE.md.
   Seguir escribiendo aquí arrastra el contexto de hoy y lo cobra otra vez.
   ───────────────────────────────

8. Si el usuario sigue escribiendo en esta conversación después del cierre, recuérdaselo
   en UNA línea antes de responder. Una vez por mensaje, sin bloquear. Si pide continuar
   aquí explícitamente, deja de avisar.

Fíjate en el paso 5: el cierre nunca se aborta por un problema de git. Si el push falla, se avisa en una línea y se sigue. El estado ya está en el archivo; subirlo es deseable, no bloqueante.

08 el día a día

Cómo se ve un día con el sistema

  1. Abres Claude Code en un chat limpio y escribes /iniciar-sesion nombre-del-proyecto.
  2. Lees el resumen: lo hecho, pendientes por prioridad, próximo paso y, si aplica, qué llegó de fuera o qué hay que instalar.
  3. Trabajas normal. Todo lo que decidas o descubras, el comando de cierre lo va a capturar de la conversación.
  4. Al terminar escribes /cerrar-sesion. Revisas que el resumen sea fiel (dos segundos) y ves el bloque de cierre.
  5. Escribes /clear. Mañana repites desde el paso 1 con cero contexto arrastrado.

El único hábito nuevo es el paso 5. Todo lo demás lo hacen los comandos.

09 cuando no trabajas solo

Dos máquinas, dos personas o dos asistentes

El sistema asume que el repo puede cambiar fuera de tu sesión: desde otra computadora tuya, desde un colaborador, o desde otro asistente de IA que trabaje el mismo proyecto. Tres reglas lo mantienen sano:

  • Al arrancar, siempre fetch. Si hay commits nuevos y tu copia está limpia, se traen solos y el resumen te dice qué llegó. Si tu copia tiene cambios propios, no se hace pull automático: se te avisa y decides.
  • Al cerrar, siempre rebase antes de push. Si hay conflicto, se aborta el rebase y se reporta. Nunca un push forzado.
  • Cada asistente escribe solo en su bitácora. Si además de Claude usas otro asistente, dale su propio archivo de estado (por ejemplo OTRO_STATE.md) y pon en ambos comandos la regla de leerlo como contexto secundario y nunca escribirlo.

10 la trampa nueva

Worktrees y la app de escritorio

Hay un caso donde el sistema falla en silencio si no lo sabes: los worktrees. Claude Code puede abrir cada sesión en una copia aparte del repo (claude --worktree nombre, o pidiéndoselo en el chat), y la app de escritorio lo hace sola: cada sesión nueva del sidebar es su propio worktree. Esa copia vive en .claude/worktrees/<nombre>/ y trabaja sobre una rama nueva llamada worktree-<nombre>.

  • Si corres /cerrar-sesion dentro de un worktree, el commit de STATE.md cae en la rama worktree-<nombre>, no en main. Mañana, desde la copia principal, /iniciar-sesion va a leer un STATE.md viejo.
  • Dos sesiones en paralelo son dos copias del mismo STATE.md. La segunda que cierre no ve lo que escribió la primera hasta que alguien fusione las ramas.
  • El worktree arranca sin los archivos ignorados por git. Tu .env.local no está ahí, y el health check lo va a marcar. Para que se copie solo, crea un archivo .worktreeinclude en la raíz con la lista de esos archivos.
  • Al salir, Claude Code borra el worktree si está limpio; si tiene cambios te pregunta. Si eliges borrar, se va también la rama con el cierre.
.worktreeinclude (raíz del repo)
.env
.env.local

Mi regla: cierro sesión desde la copia principal, o mergeo la rama del worktree antes de cerrar. Y en el comando de cierre conviene una línea que detecte si el directorio está dentro de .claude/worktrees/ y lo avise en el mensaje final. Agrega .claude/worktrees/ al .gitignore para que no te aparezca como carpeta sin rastrear.

11 dentro del día

Gastar menos ventana mientras trabajas

Cerrar bien resuelve el costo entre días. El costo dentro del día lo resuelven cuatro hábitos que no requieren instalar nada, y una herramienta que sí:

Investigar con subagentes

Pedir que un subagente lea los archivos y te regrese una conclusión. Los archivos se quedan en su ventana, no en la tuya.

/compact con foco

No lo dejes decidir solo qué conservar. Dile qué importa: los archivos tocados, los comandos de prueba, la decisión que tomaron a las 11.

Dos correcciones y a /clear

Si corregiste lo mismo dos veces, la ventana está llena de intentos fallidos. Limpia y escribe un prompt mejor con lo que aprendiste.

CLI antes que MCP

Un comando de terminal devuelve lo que pediste; una herramienta MCP a veces devuelve 50 KB de JSON. Si existe el CLI, úsalo.

La herramienta es context-mode, un plugin para Claude Code que corre los comandos pesados en un sandbox e indexa los resultados para que Claude busque en ellos en vez de cargarlos completos. Lo instalé y probé su diagnóstico: registra hooks de SessionStart, PreCompact y Stop, más una decena de herramientas MCP. Su autor promete reducciones muy altas de contexto; yo no medí ese número, así que tómalo como promesa del proyecto y no como dato mío. Licencia Elastic 2.0, no MIT: gratis para uso normal, con restricciones si quieres revenderlo como servicio.

Instalar context-mode (dentro de Claude Code)
/plugin marketplace add mksglu/context-mode
/plugin install context-mode@context-mode
Reinicia Claude Code o corre /reload-plugins. Verifica con /context-mode:ctx-doctor. No sustituye el cierre: su continuidad entre sesiones depende de que reabras con --continue, que es justo lo que este sistema evita.

12 para exprimirlo

Ajustes que valen la pena

Sección 'IDs críticos'

Si el proyecto habla con servicios externos, agrega una sección con los identificadores que siempre necesitas (proyecto de base de datos, cuenta de despliegue). Nunca secretos: esos van en .env.local.

Protocolo de proyecto nuevo

Extiende /iniciar-sesion: si no hay STATE.md, que pregunte qué estás construyendo y a partir de eso cree carpeta, git init, repo remoto, STATE.md y primer push. Un proyecto nuevo queda listo en un mensaje.

Un registro global

Un archivo fuera de los proyectos (por ejemplo STACK.md) donde cada cierre anota qué se instaló o conectó. Es el mapa de tu infraestructura, escrito por los propios comandos.

Sesiones cortas

El sistema hace barato cerrar. Aprovéchalo: cierra al cambiar de proyecto, no solo al final del día. Cada cierre es un punto de guardado.

Hook SessionStart: que el estado llegue solo

Los hooks son scripts que Claude Code ejecuta en momentos fijos, y a diferencia de una instrucción en CLAUDE.md no dependen de que Claude decida obedecer. El de SessionStart tiene una propiedad que aquí es oro: lo que el script imprime se agrega al contexto de Claude. Con esto, el encabezado de STATE.md y el estado de git entran a la conversación antes de tu primer mensaje, sin gastar un turno en leerlos:

.claude/settings.json (en el repo) o ~/.claude/settings.json
{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "startup|clear",
        "hooks": [
          {
            "type": "command",
            "command": "cd \"$CLAUDE_PROJECT_DIR\" && [ -f STATE.md ] && { echo '## STATE.md (última sesión)'; sed -n '1,40p' STATE.md; echo; echo '## git'; git status -sb 2>/dev/null | head -5; }"
          }
        ]
      }
    ]
  }
}
  • El matcher startup|clear lo dispara al abrir Claude Code y después de cada /clear, que es exactamente cuando arrancas limpio. No lo pongas en resume ni en compact: ahí ya hay contexto.
  • No reemplaza a /iniciar-sesion. El hook mete el texto crudo; el comando hace el fetch, el health check y te presenta el resumen con formato. Con el hook, el comando arranca con la mitad del trabajo hecho.
  • Si el hook vive en .claude/settings.json del repo, quien clone el proyecto lo hereda. Si prefieres que sea solo tuyo, va en ~/.claude/settings.json.
  • Dentro de un worktree, $CLAUDE_PROJECT_DIR sigue apuntando a la copia principal. Si quieres el STATE.md del worktree, lee el campo cwd del JSON que el hook recibe por stdin.

FAQ lo que suelen preguntar

Preguntas frecuentes

¿Por qué no usar solo CLAUDE.md o la memoria automática de Claude Code?

CLAUDE.md es para reglas estables (cómo quieres el código, qué stack, qué no hacer). La memoria automática guarda hechos sueltos. Ninguna de las dos está pensada para 'lo hecho hoy / lo que falta / por dónde sigo', que cambia cada día y necesita orden y prioridad. STATE.md complementa, no sustituye.

¿Funciona con proyectos que no son de código?

Sí. Basta que la carpeta sea un repo de git. Se usa igual para carpetas de contenido, de investigación o de un cliente. Los health checks de dependencias simplemente no encuentran nada que revisar.

¿Y si se me olvida cerrar?

Al día siguiente lanzas /cerrar-sesion en esa misma conversación antes de cualquier otra cosa. Guarda lo que hubo, y luego /clear. Lo que pierdes es el ahorro de tokens de ese día, no el contexto.

¿Puedo tener los comandos por proyecto en vez de globales?

Sí: ponlos en .claude/commands/ dentro del repo. Es útil si el proyecto tiene pasos propios de cierre (correr tests, regenerar algo) que quieres agregar al comando.

¿Cuánto crece STATE.md?

Unas 30 a 60 líneas por sesión. Como el comando de inicio solo lee la sección de arriba, el tamaño del archivo no afecta el costo de arrancar. Si quieres, archiva las sesiones de más de tres meses en un STATE-ARCHIVO.md.

¿Por qué no usar claude --continue y ya?

Porque --continue reabre la conversación completa, con todo lo que leyó y todo lo que probó ayer. Si es grande y pasó más de una hora, la caché expiró y la primera petición reprocesa el historial entero. STATE.md te da lo mismo que necesitas de ayer (qué se hizo, qué se decidió, qué falta) en unas cuarenta líneas que además pasaron por tu revisión.

¿No basta con /compact al final del día?

Compactar deja la conversación viva y la vuelve más barata, pero el resumen lo decide Claude y nadie lo lee. STATE.md lo escribe Claude y lo revisas tú en dos segundos antes del commit. Dentro del día, /compact con instrucciones es útil; como cierre, no.

Los comandos ahora se llaman skills. ¿Sigue funcionando ~/.claude/commands/?

Sí. Claude Code fusionó ambos: un archivo en commands/ y una carpeta en skills/ con SKILL.md producen el mismo slash-command y aceptan el mismo frontmatter. Si un día tienes una skill y un comando con el mismo nombre, gana la skill. Cámbialos a skills solo si quieres adjuntarles scripts o archivos de apoyo.

Trabajo en la app de escritorio. ¿Cambia algo?

Sí: cada sesión nueva de la app abre su propio worktree en .claude/worktrees/, sobre una rama aparte. Si cierras sesión ahí, el STATE.md queda en esa rama. Cierra desde la copia principal o fusiona la rama antes de cerrar. La sección de worktrees de esta guía tiene el detalle.

¿Puedo hacer que Claude no cierre la sesión por su cuenta?

Sí. Pon disable-model-invocation: true en el frontmatter de cerrar-sesion.md. Con eso el comando solo corre cuando tú escribes /cerrar-sesion; Claude no puede dispararlo aunque el description parezca aplicar a lo que dijiste.

Cierre de la guía

El sistema no es sofisticado y esa es la gracia: un archivo con formato fijo y dos comandos que lo leen y lo escriben. Lo que cambia es el hábito: cerrar cada día y arrancar limpio cada mañana. Instálalo en un proyecto, úsalo una semana y mide cuánto contexto dejaste de arrastrar. Esta guía vive en el Lab de David Iriza.

Fuentes oficiales9

Sigue con estas guías

Guía escrita con la información oficial disponible al 27 de agosto de 2026. Esta página no está afiliada a Anthropic. Las herramientas cambian; ante la duda, revisa la documentación oficial de Claude Code.