Cómo reanudar sesiones y ver el historial de Claude Code
Aprende a reanudar Claude Code por nombre o desde el selector y localiza las transcripciones en texto plano que guarda en el equipo donde se ejecutó.
Cómo reanudar una sesión de Claude Code
Para reanudar una sesión de Claude Code, ejecute claude --continue para abrir la conversación más reciente del directorio actual o claude --resume para seleccionar una anterior de una lista. Desde una sesión que ya esté en ejecución, el comando /resume permite cambiar a otra conversación sin salir. Las formas abreviadas son -c y -r.
claude --continue
claude --resume
claude --resume auth-refactorSi ya conoce el nombre o el ID de la sesión, páselo como argumento. Claude Code abrirá directamente esa sesión sin mostrar el selector.
Todo lo siguiente coincide con la documentación oficial de sesiones a fecha de agosto de 2026. Claude Code publica versiones con frecuencia, y los nombres de las opciones y los atajos de teclado cambian entre versiones. Por tanto, consulte claude --help y esa página como referencia principal si algo no coincide con lo que muestra el terminal.
Qué es realmente una sesión
Una sesión es una conversación guardada asociada a un directorio de proyecto. Contiene todo el historial de mensajes, incluidas las llamadas a herramientas que realizó Claude y los resultados que devolvieron. Claude Code la escribe continuamente en el disco mientras trabaja, no sólo al final, por lo que la conversación se conserva aunque cierre el terminal o pierda la conexión SSH.
Reanudar restaura algo más que el texto. El historial de la conversación vuelve completo, junto con el modelo que usaba la sesión y el subagente con el que se inició, si utilizó --agent. El modo de permisos también se restaura, con excepciones por motivos de seguridad: el modo de planificación y el modo de omisión de permisos nunca se restauran, por lo que una sesión que estaba en uno de ellos se reanuda en el modo con el que se iniciaría una sesión nueva.
Algunos elementos no se restauran porque eran flags de inicio y no estado guardado. Los directorios añadidos con --add-dir y opciones como --mcp-config, --settings y --plugin-dir deben volver a pasarse al reanudar. Los archivos de configuración, como settings.json, se vuelven a leer al iniciar, por lo que no es necesario repetir nada de lo que contienen.
Por qué el historial de sesiones es más importante en un VPS
Este es el hecho que sorprende a muchas personas. La transcripción se guarda en la máquina donde se ejecutó el agente. No se almacena en su cuenta ni se sincroniza con la nube. Es un archivo en el disco de ese equipo.
Por tanto, una sesión que dejó abierta dentro de una ventana de tmux en su VPS no aparece en el selector de su portátil, y una sesión de su portátil no aparece en el VPS. No se transfieren datos entre ellos. Si trabaja como la mayoría de las personas cuando ejecutan Claude Code en tmux en un VPS, el servidor es donde se acumula su historial de conversaciones real, y el selector que ve localmente muestra un conjunto diferente y mucho más pequeño.
La misma separación se aplica entre interfaces. La aplicación de escritorio y la extensión de VS Code mantienen su propio historial de sesiones, y ninguno de los dos corresponde al historial de la CLI. Claude Code en la web también mantiene el suyo.
Dentro de una misma máquina, la búsqueda es más amplia de lo que podría esperar. claude --resume <session-id> busca primero en el directorio del proyecto actual y en sus árboles de trabajo de git, y después en todos los demás proyectos de esa máquina. La frase que debe recordar es «en esa máquina». Un ID de sesión de otro host no devuelve ningún resultado, y Claude Code se lo indica mediante No conversation found with session ID: <session-id>.
Dónde almacena Claude Code el historial de sesiones
De forma predeterminada, las transcripciones se almacenan en el directorio de configuración de Claude Code, en una ruta con el formato ~/.claude/projects/<project>/<session-id>.jsonl.
<project> es la ruta del directorio de trabajo, con todos los caracteres no alfanuméricos sustituidos por guiones. Por tanto, una sesión iniciada en /home/deploy/apps/api se almacena en un directorio llamado -home-deploy-apps-api. Si el nombre resultante supera los 200 caracteres, Claude Code lo trunca y añade un hash de la ruta completa para que el nombre del directorio respete los límites del sistema de archivos.
El archivo está en formato JSONL: contiene un objeto JSON por línea, y cada línea representa un mensaje, un uso de herramienta o una entrada de metadatos. Es texto legible y no hay problema en leerlo.
No es recomendable crear un analizador que dependa de ese archivo. El formato de las entradas es interno de Claude Code y cambia entre versiones. Por eso, un script que lea directamente estos archivos puede dejar de funcionar después de cualquier actualización. La documentación de Anthropic recomienda usar /export o las interfaces de script documentadas, precisamente por ese motivo.
Dos ajustes cambian esta ubicación y la retención. CLAUDE_CONFIG_DIR reubica todo el directorio de configuración, lo que permite almacenar las transcripciones en un volumen independiente o cifrado. cleanupPeriodDays en settings.json controla durante cuánto tiempo se conservan y su valor predeterminado es de 30 días, con un mínimo de 1.
Qué contienen realmente los archivos de transcripción
Se registra el resultado de cada herramienta, por lo que una transcripción contiene el contenido de los archivos que Claude leyó y la salida de los comandos que ejecutó. La página de uso de datos de Anthropic lo indica claramente: Claude Code almacena las transcripciones de las sesiones localmente, en texto sin formato, en ~/.claude/projects/.
Piense en lo que esto implica en un servidor. Si Claude leyó un archivo .env para determinar por qué un servicio no se iniciaba, su contenido ahora está en un archivo JSONL de su directorio personal. Si un comando mostró una cadena de conexión, esa cadena también está allí. No se ha filtrado nada. La transcripción registró lo que ocurrió, que es precisamente su objetivo, y por eso debe incluirla en su modelo de amenazas.
- Copias de seguridad: una copia sin formato de
/homeo/rootcopia las transcripciones allí donde se almacenen las copias de seguridad. Añada una exclusión o acepte que las copias de sus instrucciones y del contenido de sus archivos ahora residen en su almacén de copias de seguridad. - Instantáneas e imágenes: una instantánea de VPS creada por cualquier motivo contiene todo el directorio. Lo mismo ocurre con una imagen que clone para crear un segundo servidor.
- Otras cuentas del sistema: compruebe los permisos usted mismo con
ls -ld ~/.claude ~/.claude/projectsen lugar de suponer que son restrictivos. - Cargas deliberadas: el comando
/feedbackenvía deliberadamente el historial de la conversación a Anthropic, y/bugy/shareinforman a través de la misma ruta. Estas son acciones que usted decide realizar, así que antes de confirmarlas asegúrese de entender qué está aceptando.
Si prefiere que no exista ninguna transcripción, CLAUDE_CODE_SKIP_PROMPT_HISTORY suprime las escrituras de transcripciones y --no-session-persistence las suprime para una única ejecución no interactiva de claude -p. Antes de configurar cualquiera de las dos opciones, tenga claro el compromiso. Las transcripciones son necesarias para reanudar una sesión, por lo que sin transcripción no hay reanudación.
Cómo encontrar una conversación antigua
Abra el selector con claude --resume, o con /resume desde una sesión en ejecución. Cada fila muestra el nombre de la sesión si lo definió, o un título generado si no lo hizo, además del tiempo transcurrido desde la última actividad, la rama de git y el tamaño del archivo.
El selector permite buscar. Pulse /, o empiece a escribir, para filtrar la lista. Los atajos más útiles son los que amplían el alcance: Ctrl+A muestra las sesiones de todos los proyectos de este equipo, Ctrl+W muestra todos los worktrees del repositorio actual y Ctrl+B filtra por la rama de git actual. Pulse Space para previsualizar el contenido de una sesión antes de seleccionarla y Ctrl+R para cambiar el nombre de la sesión resaltada.
Asignar nombres a las sesiones facilita mucho todo el proceso. Inicie una con claude -n auth-refactor o ejecute /rename auth-refactor a mitad del trabajo, cuando advierta que la conversación se ha convertido en una tarea real. Después puede reanudar una sesión con nombre directamente desde el shell.
Una sesión sin nombre también recibe un título generado. Una solicitud en segundo plano a un modelo pequeño y rápido escribe ese título a partir de un resumen del primer prompt. El título ayuda a identificar la fila en el selector, pero no sirve para reanudar la sesión. claude --resume <name> sólo busca los nombres que haya definido usted.
Buscar la sesión correcta en las transcripciones
A veces recuerda una frase y nada más. Las transcripciones son texto, así que puede buscarlas.
grep -rl "nftables" ~/.claude/projects/Esto muestra las rutas de las transcripciones coincidentes. El nombre de archivo sin la extensión .jsonl es el ID de la sesión, y claude --resume <session-id> lo acepta. Use grep para determinar qué sesión quiere y, después, reanúdela o expórtela para leerla.
Hay dos salvedades importantes. El contenido usa escapes JSON, por lo que una frase que contenga comillas o que esté dividida por un salto de línea puede no coincidir como cadena literal. Además, una coincidencia dentro del resultado de una herramienta significa que Claude vio ese texto, no que alguien lo escribiera.
Lectura y exportación de una conversación
/export muestra la conversación actual como texto sin formato. Los mensajes y la salida de las herramientas se escriben de forma legible en lugar de mostrarse como JSON. Sin argumentos, abre un menú que ofrece el portapapeles o un archivo. Con un nombre de archivo, /export handover.txt escribe directamente en esa ruta. Esta es la forma adecuada de transferir una conversación de un servidor al portátil o de adjuntarla a un ticket.
Para cualquier proceso automatizado, use las interfaces diseñadas para ser estables. Los hooks y los comandos de la línea de estado reciben un campo transcript_path como entrada. Por tanto, un hook SessionEnd puede archivar una transcripción cuando termina una sesión. También puede hacer una pregunta a una sesión almacenada sin abrirla:
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'Esto envía un prompt de seguimiento a la conversación anterior y devuelve JSON estructurado. Es una base mucho mejor que analizar un formato JSONL que puede cambiar en la próxima versión.
Cuando empezar de cero es mejor que reanudar
Reanudar recupera todo el historial, y ese historial completo es lo que transporta cada solicitud posterior. Continuar hoy una conversación que duró cuatro horas ayer resulta costoso, y cómo se acumula el uso de tokens en una sesión larga explica de dónde procede exactamente ese coste.
Claude Code ofrece a veces una opción intermedia. En un plan Pro o Max, al reanudar una sesión que ha estado inactiva aproximadamente una hora y contiene más de 100,000 tokens, aparece un cuadro de diálogo antes del primer mensaje. Para entonces, la caché de prompts ha caducado, por lo que la siguiente solicitud vuelve a procesar todo el historial una vez, independientemente de la opción que elija.
- Resume from summary ejecuta una compactación de inmediato, de modo que las solicitudes posteriores transportan un resumen en lugar del historial completo. El coste por solicitud es menor, pero lo que el resumen haya omitido deja de estar disponible.
- Resume full session as-is carga la conversación sin cambios y conserva todos los detalles, con un coste por solicitud que aumenta según el tamaño de la conversación.
Una tercera opción reanuda la sesión completa y evita que el cuadro de diálogo vuelva a aparecer al reanudarla posteriormente.
La decisión es más sencilla de lo que parece. Reanude la sesión cuando lo siguiente que vaya a escribir dependa de lo que ya se dijo. Empiece de cero cuando no dependa de ello. El contexto obsoleto se detecta fácilmente si presta atención: Claude hace referencia a un archivo que eliminó hace una hora o vuelve a discutir una decisión que estableció al principio de la sesión. Ese contexto está desactualizado, y conservarlo reduce al mismo tiempo la disponibilidad de tokens y la precisión.
Si la parte útil de una conversación antigua es una decisión o un dato que necesitará de nuevo, no dependa de reanudarla para conservarlo. Escríbalo en un lugar visible para todas las sesiones; para eso sirven los archivos de memoria de Claude Code.
/branch también es útil en este caso. Copia la conversación hasta el punto actual y cambia a la copia, mientras deja intacta la original y disponible en el selector. Úselo para probar un segundo enfoque sin perder el primero.
En qué se diferencia resume de la compactación y de la memoria
Estos conceptos se confunden constantemente, pero resuelven problemas distintos.
Resume sirve para recuperar una conversación después de salir, reiniciar el equipo o pasar a otra tarea. La compactación se aplica a la ventana de contexto de una conversación activa: /compact sustituye el contenido que Claude mantiene por un resumen, de modo que las solicitudes posteriores envían menos tokens. Si el problema es que la ventana de contexto está llena, la herramienta adecuada es la compactación. La gestión de la ventana de contexto de Claude Code lo explica correctamente.
La memoria es otra cosa. Los archivos CLAUDE.md y la memoria automática contienen instrucciones y datos que se cargan al inicio de cada sesión. Por tanto, no son una conversación a la que se vuelve. Son información que se guarda para no tener que volver a una conversación.
Si quiere ejecutar dos conversaciones al mismo tiempo y coordinarlas, existe otro mecanismo. Las sesiones de Claude Code pueden enviarse mensajes mientras ambas están activas. Esto es distinto de recuperar del disco la sesión del día anterior.
FAQ
¿Dónde almacena Claude Code el historial de mis sesiones?
De forma predeterminada, lo almacena en el directorio de configuración, en ~/.claude/projects/<project>/<session-id>.jsonl, donde <project> es la ruta del directorio de trabajo con los caracteres no alfanuméricos reemplazados por guiones. Cada archivo está en formato JSONL: contiene un objeto JSON por línea para un mensaje, un uso de herramienta o una entrada de metadatos. CLAUDE_CONFIG_DIR mueve el directorio de configuración a otra ubicación, y cleanupPeriodDays en settings.json establece durante cuánto tiempo se conservan las transcripciones. El valor predeterminado es 30 días y el mínimo es 1.
¿Por qué no puedo ver la sesión de mi VPS en el selector de mi portátil?
Porque las transcripciones se escriben en el disco del equipo donde se ejecutó el agente, y no se sincronizan entre equipos. Una conversación que mantuvo dentro de tmux en su VPS sólo existe en el VPS. Reanúdela allí mediante SSH, o ejecute /export dentro de ella y copie el archivo de texto si quiere conservar un registro local.
¿Puedo reanudar una sesión que inicié en otro directorio?
Sí, si tiene su ID de sesión. claude --resume <session-id> busca primero en el directorio del proyecto actual y en sus worktrees de git, y después en los demás proyectos del mismo equipo. Dentro del selector, Ctrl+A amplía la lista a todos los proyectos del equipo y Ctrl+W la amplía a todos los worktrees del repositorio actual. Si no encuentra ninguna coincidencia, Claude Code muestra No conversation found with session ID: <session-id>.
¿Debo reanudar una sesión antigua o iniciar una nueva?
Reanúdela cuando su próximo mensaje dependa de lo que ya se dijo en esa conversación. Inicie una nueva cuando no dependa de ello, porque reanudar carga todo el historial y cada solicitud posterior lo incluye. Preste atención a la deriva del contexto: si una sesión sigue haciendo referencia a archivos que ya eliminó, está conservando contexto obsoleto, lo que consume tokens y reduce la precisión en cada turno.
¿Puedo impedir que Claude Code escriba transcripciones en el disco?
Sí. CLAUDE_CODE_SKIP_PROMPT_HISTORY impide que se escriban transcripciones, y --no-session-persistence las impide para una única ejecución no interactiva de claude -p. Tenga en cuenta primero las consecuencias: resume lee las transcripciones, por lo que desactivarlas significa que --continue y --resume no tendrán nada que cargar. Si le preocupa dónde se almacenan los archivos y no su existencia, dirija CLAUDE_CONFIG_DIR a un volumen cifrado y reduzca cleanupPeriodDays en su lugar.