Claude Code elimina el historial después de 30 días: cómo guardarlo
MarkdownDónde se almacenan las sesiones de Claude Code, cómo configurar cleanupPeriodDays y cómo organizar un archivo externo con rsync, launchd o cron.
Leer el artículo completo
Si necesitas ayuda para usar el servicio, consulta la documentación de Ailoot.
¿Claude Code borra realmente el historial de tus sesiones?
Puntos clave
Sí. Cada vez que se inicia Claude Code, elimina los archivos de sesión que tienen más de 30 días. De ello se encarga el ajuste cleanupPeriodDays de ~/.claude/settings.json; su valor predeterminado es 30. Los archivos se eliminan sin previo aviso, sin pedir consentimiento y sin posibilidad de recuperarlos.
Abres Claude Code para volver a una sesión de hace dos meses y ya no está. El archivo se ha borrado por completo del disco. No es un fallo puntual ni un error excepcional: así funciona el mecanismo de limpieza predeterminado.
Un solo ajuste controla la limpieza: cleanupPeriodDays. Su valor predeterminado es 30. Cada vez que se inicia Claude Code, examina la carpeta del historial y elimina todo lo que supera ese periodo. Yo ni siquiera tenía este ajuste en mi archivo ~/.claude/settings.json, así que se aplicaba el valor predeterminado y algunas de mis sesiones antiguas ya habían desaparecido.
Hay varios informes de errores al respecto abiertos en el repositorio de Anthropic, y ninguno se ha corregido.
¿Dónde almacena Claude Code el historial de las sesiones?
Puntos clave
El historial de cada sesión se almacena en ~/.claude/projects/<project-path>/<session-id>.jsonl. El nombre de la carpeta es la ruta absoluta del directorio de trabajo desde el que ejecutaste Claude Code, con las barras sustituidas por guiones. El archivo .jsonl contiene toda la conversación, línea por línea: tus prompts, las respuestas del modelo, las llamadas a herramientas y las modificaciones de archivos. Es precisamente esta memoria la que elimina la limpieza.
Encontrar tu historial es fácil. Abre un terminal y consulta el contenido de la carpeta:
ls ~/.claude/projects/
Cada subcarpeta corresponde a un proyecto distinto. Su nombre codifica la ruta: por ejemplo, un proyecto en /Users/alex/dev/shop se convierte en la carpeta -Users-alex-dev-shop. Dentro están los archivos de sesión:
ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl ← una sesión = un archivo
# a91b7d40-....jsonl
Cada archivo .jsonl es un registro línea por línea: una línea equivale a un evento de la sesión. Contiene mucho más que el texto de la conversación. Guarda la lógica que hay detrás de tus decisiones: por qué elegiste una estructura de base de datos concreta, qué opciones descartaste, en qué se equivocó Claude y cómo lo corregiste.
En esencia, es un diario de desarrollo del proyecto. Por eso duele perderlo: no pierdes un «chat», sino el contexto que has ido construyendo durante semanas. En la guía «Claude Memory vs. CLAUDE.md» expliqué cómo se estructura ese contexto.
¿Por qué Anthropic elimina las transcripciones después de 30 días?
Puntos clave
La postura de Anthropic se basa en la privacidad y la seguridad. Los archivos de sesión se almacenan en texto sin formato en el disco y pueden contener código fuente, contraseñas y claves API. Conservarlos para siempre supone un riesgo: si roban un portátil o alguien obtiene acceso al disco, consigue todos esos datos confidenciales. El plazo de 30 días busca equilibrar «reanudar el trabajo reciente» con «no guardar secretos en el disco durante más tiempo del necesario».
La eliminación tiene una justificación, y conviene entenderla antes de desactivarla por completo. Una transcripción es texto sin formato. Si Claude leyó un archivo .env durante una sesión, insertó una clave en un comando o pegaste una contraseña en un prompt, todo acabó en el archivo .jsonl como texto sin formato. Cuanto más tiempo permanece un archivo así en el disco, mayor es la probabilidad de que algún día se filtre.
Anthropic lo explica claramente: las transcripciones pueden contener código fuente, credenciales y otros datos confidenciales, y conservarlas en el disco más tiempo del necesario genera un riesgo real para la privacidad. El plazo de 30 días se eligió como término medio.
Las objeciones de la comunidad se centran en tres aspectos: la eliminación es silenciosa (no hay ningún aviso durante la configuración ni al iniciar), no se pide consentimiento (no te preguntan) y no hay forma de recuperar los archivos (no se usa la Papelera ni existe una opción para revertirlo). En el issue #59248, los desarrolladores piden una sola cosa: que la limpieza sea justa, con un aviso, un plazo de recuperación y un periodo predeterminado menos agresivo.
¿Por qué puede un script de copia de seguridad provocar la eliminación?
Puntos clave
La limpieza decide qué eliminar en función de la fecha de modificación del archivo (mtime). No comprueba cuándo se produjo la última actividad real de una sesión. Cualquier proceso que toque un archivo .jsonl —sincronización en la nube, rsync, un editor o un script— puede cambiar su mtime y hacer que una sesión reciente parezca antigua. En el siguiente inicio de Claude Code, la considerará antigua y la eliminará. La paradoja: un intento ingenuo de hacer una copia del historial dentro de la carpeta administrada acelera su pérdida.
Esta es la parte más complicada y la que hace tropezar a quienes intentan proteger sus datos por su cuenta. La limpieza mira la mtime, la marca de tiempo de la última modificación del archivo. Supone que la mtime refleja cuándo trabajaste por última vez en la sesión. En la práctica, cualquier cosa puede cambiarla: un cliente de sincronización de Dropbox o iCloud, rsync, un antivirus, un indexador o tu propio script de copia de seguridad.
Esta es la trampa. Decides guardar tu historial y configuras la sincronización en la nube de ~/.claude/projects/. En algún momento, el servicio de sincronización vuelve a escribir un archivo y establece su mtime en una fecha anterior (puede pasar al restaurarlo desde una copia en la nube). Claude Code encuentra un archivo «antiguo» al iniciarse y lo elimina. Querías guardarlo, pero aceleraste su eliminación.
Solo hay una conclusión: la copia de seguridad debe estar fuera de ~/.claude/projects/. La limpieza solo actúa dentro de esta carpeta. Una copia almacenada fuera queda fuera de su alcance. Construiré la solución en torno a este principio.
¿Cómo evitar que Claude Code elimine automáticamente el historial?
Puntos clave
Un solo ajuste. Abre ~/.claude/settings.json y establece un valor alto para cleanupPeriodDays, por ejemplo, 3650 (diez años). En la práctica, esto desactiva la eliminación automática: nada superará ese límite. Importante: este ajuste solo protege lo que todavía no se ha eliminado. No se puede recuperar el historial que la limpieza ya borró. Por eso, el primer paso es actuar antes de perder otra sesión.
Detén la eliminación en tres pasos:
- Abre el archivo de configuración:
~/.claude/settings.json(si no existe, créalo). - Añade el ajuste
cleanupPeriodDayscon un valor alto:
{
"cleanupPeriodDays": 3650
}
- Guarda el archivo. El ajuste surtirá efecto la próxima vez que se inicie Claude Code.
El valor 3650 equivale a diez años: en la práctica, la eliminación dejará de producirse. Si quieres mantener la limpieza pero disponer de más tiempo, establece 365 (un año); entonces solo desaparecerán las sesiones que tengan más de un año. Puedes comprobar si se ha aplicado el ajuste con este comando:
grep cleanupPeriodDays ~/.claude/settings.json
Hay una salvedad fácil de pasar por alto: ampliar el periodo NO restaura lo que ya se ha eliminado. La limpieza se ejecuta al iniciar y todo lo que se borró en ejecuciones anteriores ha desaparecido para siempre. Por eso debes cambiar este ajuste primero: evita pérdidas futuras, pero no recupera lo que ya se ha borrado. Si quieres evitar perder tu historial de Claude Code y también tu proyecto por un comando accidental, consulta la guía «Cómo configurar Claude Code para que no estropee tu proyecto».
El historial de tus sesiones forma parte del segundo cerebro de tu proyecto: contiene una lógica de decisiones que no has registrado en ningún otro sitio. cleanupPeriodDays conserva los archivos, pero no los convierte en un sistema que te permita recuperar lo que necesitas dentro de seis meses.
¿Cómo archivar automáticamente el historial fuera de la carpeta de limpieza?
Puntos clave
Copia las sesiones a un archivo FUERA de ~/.claude/projects/, donde no se aplica la limpieza. Basta con ejecutar rsync -a a un directorio aparte una vez al día: se añaden los archivos nuevos y los antiguos se conservan. Como el archivo está fuera, no le afectan ni cleanupPeriodDays ni el error de mtime. Automatiza la ejecución con launchd (macOS) o cron (Linux) y tu historial se acumulará por sí solo.
La idea es sencilla: deja que Claude Code haga lo que quiera con su carpeta y conserva un archivo aparte fuera de ella. Queda protegido de ese mecanismo de limpieza, pero puede perderse por un fallo de disco, borrado accidental o copia fallida. Configúralo así:
- Crea una carpeta de archivo fuera del directorio administrado:
mkdir -p ~/claude-history-archive
- Copia allí tu historial actual. La opción
-aconserva la estructura y las marcas de tiempo;--ignore-existingdeja intactos los archivos que ya se copiaron:
rsync -a ~/.claude/projects/ ~/claude-history-archive/
- Automatiza la ejecución una vez al día. En macOS, utiliza launchd. Crea el archivo
~/Library/LaunchAgents/com.example.claudearchive.plist:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.claudearchive</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/rsync</string>
<string>-a</string>
<string>/Users/YOUR_NAME/.claude/projects/</string>
<string>/Users/YOUR_NAME/claude-history-archive/</string>
</array>
<key>StartInterval</key>
<integer>86400</integer>
</dict>
</plist>
- Carga el agente para que se ejecute en segundo plano:
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist
En Linux, se hace lo mismo con una línea en el crontab (crontab -e):
0 3 * * * rsync -a ~/.claude/projects/ ~/claude-history-archive/
¿Por qué funciona esto y falla la sincronización de la sección anterior? El archivo está FUERA de ~/.claude/projects/, así que la limpieza no puede verlo. La copia se realiza en una sola dirección (de la carpeta activa al archivo), y no tocamos la mtime de los archivos activos, por lo que no se produce el error de mtime. Aunque mañana Claude Code elimine una sesión de su propia carpeta, su copia seguirá en el archivo.
¿Cómo puedes convertir el archivo de tus sesiones en un segundo cerebro con búsquedas?
Puntos clave
Guarda el archivo en git y tendrás una base de datos versionada y totalmente consultable con todas tus sesiones. Ejecuta git init en la carpeta del archivo y, después, git add -A && git commit a diario para obtener un historial de cambios y protección contra sobrescrituras accidentales. Puedes buscar sesiones anteriores con grep y extraer contenido estructurado con jq, ya que .jsonl es JSON delimitado por líneas. Así, el archivo se convierte en una herramienta práctica.
No basta con acumular archivos: necesitas poder acceder a ellos. Dos pasos convierten el archivo en una herramienta funcional.
Primero, controla sus versiones con git. Inicializa un repositorio en la carpeta del archivo:
cd ~/claude-history-archive
git init
git add -A && git commit -m "Primera instantánea del historial de Claude Code"
Añade git add -A && git commit a la misma ejecución diaria que rsync. Ahora tienes un historial de versiones: puedes ver qué apareció y cuándo, y deshacer una sobrescritura accidental con un solo comando.
Segundo, busca. Los archivos .jsonl son JSON delimitado por líneas, así que puedes utilizar las herramientas habituales. Averigua qué sesión trató un tema concreto:
grep -rl "migración de base de datos" ~/claude-history-archive/
Extrae solo el texto de tus prompts de una sesión (con jq, ya que es JSON):
jq -r 'select(.type=="user") | .message.content' session.jsonl
A partir de aquí, el historial de tus sesiones empieza a funcionar como el segundo cerebro del proyecto: una base de datos en la que puedes recuperar en segundos «cómo decidimos esto en marzo». Para consultar una explicación aparte sobre cómo se distribuye el contexto en una sesión y cómo gestionarlo, visita «Adónde van los tokens en Claude Code».
¿Se pueden recuperar las sesiones que ya se han eliminado?
Puntos clave
No existe un método integrado. Claude Code no envía los archivos eliminados a la Papelera ni conserva una opción para revertirlo: el archivo se borra definitivamente. La única posibilidad son las copias externas realizadas ANTES de la eliminación: una instantánea de Time Machine en macOS, el historial de versiones de OneDrive o Dropbox, o una copia de seguridad manual. Si no existe ninguna, la sesión se ha perdido. Por eso hay que configurar la protección con antelación, antes de que haya algo que perder.
La respuesta sincera es: probablemente no. Claude Code no tiene una función de recuperación, una Papelera ni un registro para deshacer la eliminación de transcripciones. El archivo desaparece del disco sin más.
Hay una opción: las copias de seguridad del sistema, si estaban activadas de antemano:
- macOS Time Machine: si una instantánea guardó
~/.claude/projects/antes de la eliminación, puedes recuperar el archivo de la copia de seguridad de la fecha necesaria. - Historial de versiones de OneDrive / Dropbox: si la carpeta se sincronizaba con el control de versiones activado, busca el archivo en el historial de versiones de la nube (pero recuerda la trampa de mtime: la sincronización también pudo haber provocado la eliminación).
- Copias manuales: cualquier
rsync/cpque ejecutaras manualmente para copiar archivos a algún lugar fuera de la carpeta administrada.
Si no había ninguna de estas opciones, la sesión se ha perdido. Y no es algo excepcional: el autor de un bug en el repositorio de Anthropic perdió 26 de 38 registros por corrupción, lo que representaba meses de trabajo. La única protección fiable es la que se pone en marcha ANTES de la pérdida. Configura hoy cleanupPeriodDays y el archivado automático, mientras todavía quede algo que guardar.
¿Qué valor deberías elegir para cleanupPeriodDays?
Puntos clave
Para la mayoría de la gente, lo recomendable es usar 3650 (diez años, lo que prácticamente desactiva la eliminación) y un archivo externo automático. Conserva el valor predeterminado 30 solo si no necesitas el historial y te importa más no guardar secretos en el disco. El valor 365 es un término medio razonable, con limpieza anual. Otra opción es no guardar ningún historial: utiliza la variable de entorno CLAUDE_CODE_SKIP_PROMPT_HISTORY o la opción --no-session-persistence, aunque eso sirve para el propósito contrario.
Hay un solo ajuste, pero puede tener varios significados. Compara las opciones y elige la que se adapte a tu caso:
| Valor | Qué hace | Para quién es |
|---|---|---|
30 (predeterminado) | Elimina al iniciarse las sesiones de más de 30 días | No necesitas el historial; te importa más evitar guardar datos confidenciales en el disco |
365 | Conserva un año de historial y luego lo limpia una vez al año | Necesitas un historial reciente, pero no un archivo indefinido |
3650 | Desactiva la eliminación en la práctica | Quieres conservarlo todo + un archivo externo (recomendado) |
CLAUDE_CODE_SKIP_PROMPT_HISTORY | No escribe ningún historial en el disco | Máxima privacidad; no necesitas ningún historial |
Una advertencia importante de seguridad: si estableces 3650 y lo conservas todo, aceptas guardar en el disco transcripciones que pueden contener claves y código. Es una concesión deliberada entre la comodidad del archivo y el riesgo. Reduce el riesgo: guarda el archivo en un disco cifrado (FileVault en macOS), no lo pongas en una nube pública y no lo subas a un repositorio git público. He preparado una guía aparte sobre los datos que pueden filtrarse a través de Claude Code: «Seguridad de los datos en Claude Code».
Qué hacer hoy: lista de comprobación
Puntos clave
Estas acciones reducen la pérdida de historial: amplía la conservación con cleanupPeriodDays: 3650, copia las sesiones fuera de ~/.claude/projects/ y versiona el archivo. Solo los archivos copiados correctamente quedan protegidos de la limpieza. Si las ejecuciones diarias funcionan, puede quedar hasta un día de cambios sin archivar; los fallos o ejecuciones omitidas amplían el intervalo. Una copia en el mismo disco no protege frente a su fallo.
Configura la protección paso a paso:
- Establece
cleanupPeriodDays: 3650en~/.claude/settings.json: habrás detenido la eliminación. - Crea
~/claude-history-archivefuera de la carpeta administrada y ejecuta el primerrsync -a. - Programa una ejecución diaria con launchd (macOS) o cron (Linux).
- Inicializa git en el archivo y añade
git add -A && git commita la misma ejecución. - Comprueba que el archivo está en un disco cifrado y que no se sincroniza con una nube pública.
- Comprueba que cada ejecución programada copie correctamente, inspecciona una sesión reciente archivada y restaura periódicamente una muestra en otra carpeta temporal para verificar que se pueda leer.
- Si debes protegerte de perder el equipo o disco, conserva una copia independiente con controles de acceso adecuados y prueba también su restauración. El historial Git en el mismo disco no es un respaldo independiente.
El historial de las sesiones es solo una capa del contexto que hace que Claude sea fiable.
Fuentes
Conoce Ailoot.
Más detalles
Preguntas sobre Claude Code
¿Un archivo diario garantiza que no se pierda ninguna sesión?
No. Protege de la limpieza los archivos copiados correctamente. Con ejecuciones diarias correctas puede faltar hasta un día de cambios recientes; los fallos amplían ese intervalo y una copia en el mismo disco puede perderse con el original.
¿Cómo compruebo que el archivo es utilizable?
Confirma que las copias programadas terminen correctamente, inspecciona una sesión reciente y restaura periódicamente una muestra en una carpeta temporal separada. Para proteger frente a pérdida de equipo o disco, prueba también una copia almacenada de forma independiente.