Blogi

Claude Code poistaa historian 30 päivän jälkeen: näin tallennat sen

Markdown

Missä Claude Code -istunnot tallennetaan, miten cleanupPeriodDays määritetään ja miten järjestät ulkoisen arkiston rsyncin, launchd:n tai cronin avulla.

Lue koko artikkeli

Jos tarvitset apua palvelun käyttöön, katso Ailoot-dokumentaatiota.

Poistaako Claude Code todella istuntohistoriasi?

Tärkeimmät asiat

Kyllä. Aina kun Claude Code käynnistyy, se poistaa yli 30 päivää vanhat istuntotiedostot. Tästä vastaa cleanupPeriodDays-asetus tiedostossa ~/.claude/settings.json; sen oletusarvo on 30. Tiedostot poistetaan varoittamatta, kysymättä lupaa ja ilman mahdollisuutta palauttaa niitä.

Avaat Claude Coden palataksesi kahden kuukauden takaiseen istuntoon – mutta sitä ei enää ole. Tiedosto on poistettu kokonaan levyltä. Kyse ei ole häiriöstä tai harvinaisesta virheestä: näin oletusarvoinen siivousmekanismi toimii.

Siivousta ohjaa yksi asetus: cleanupPeriodDays. Sen oletusarvo on 30. Aina kun Claude Code käynnistyy, se käy historiakansion läpi ja poistaa kaiken, mikä on tätä ajanjaksoa vanhempaa. Minulla tätä asetusta ei ollut lainkaan tiedostossa ~/.claude/settings.json, joten oletusarvo oli käytössä ja osa vanhemmista istunnoistani oli jo kadonnut.

Anthropicin repositoriossa on avoinna useita tätä koskevia vikailmoituksia, eikä yhtäkään niistä ole korjattu.

Minne Claude Code tallentaa istuntohistorian?

Tärkeimmät asiat

Kunkin istunnon historia tallennetaan tiedostoon ~/.claude/projects/<project-path>/<session-id>.jsonl. Kansion nimi on sen työhakemiston absoluuttinen polku, jossa ajoit Claude Coden; vinoviivat korvataan yhdysmerkeillä. .jsonl-tiedosto sisältää koko keskustelun rivi riviltä: kehotteesi, mallin vastaukset, työkalukutsut ja tiedostomuutokset. Juuri tämän muistin siivous poistaa.

Historian löytäminen on helppoa. Avaa pääte ja tarkastele kansion sisältöä:

ls ~/.claude/projects/

Jokainen alikansio on eri projekti. Nimi koodaa polun: esimerkiksi hakemistossa /Users/alex/dev/shop oleva projekti tallennetaan kansioon -Users-alex-dev-shop. Sen sisältä löytyvät istuntotiedostot:

ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl   ← yksi istunto = yksi tiedosto
# a91b7d40-....jsonl

Jokainen .jsonl on rivi riviltä etenevä loki: yksi rivi vastaa yhtä istuntotapahtumaa. Se sisältää muutakin kuin keskustelutekstin. Tiedostossa on päätöstesi taustalla oleva logiikka: miksi valitsit tietyn tietokantarakenteen, mitkä vaihtoehdot hylkäsit, missä Claude teki virheen ja miten korjasit sen.

Pohjimmiltaan kyse on projektin kehityspäiväkirjasta. Siksi sen menettäminen tuntuu pahalta: et menetä ”chattia”, vaan viikkojen aikana kerryttämääsi kontekstia. Olen käsitellyt tämän kontekstin rakennetta oppaassa ”Claude Memory ja CLAUDE.md”.

Miksi Anthropic poistaa keskustelutallenteet 30 päivän jälkeen?

Tärkeimmät asiat

Anthropicin perusteluna ovat yksityisyys ja tietoturva. Istuntotiedostot tallennetaan levylle pelkkänä tekstinä, ja ne saattavat sisältää lähdekoodia, salasanoja ja API-avaimia. Niiden säilyttäminen ikuisesti on riski: jos kannettava tietokone varastetaan tai joku pääsee käsiksi levyyn, hän saa kaikki nämä arkaluonteiset tiedot. 30 päivän jakso on heidän kompromissinsa ”äskettäisen työn jatkamisen” ja sen välillä, ettei ”salaisuuksia säilytetä levyllä tarpeettoman pitkään”.

Poistamiseen on peruste, ja se kannattaa ymmärtää ennen kuin poistat toiminnon kokonaan käytöstä. Keskustelutallenne on pelkkää tekstiä. Jos Claude luki istunnon aikana .env-tiedoston, lisäsi avaimen komentoon tai liitit salasanan kehotteeseen, kaikki päätyi .jsonl-tiedostoon pelkkänä tekstinä. Mitä kauemmin tällainen tiedosto säilyy levyllä, sitä suurempi on riski, että se vuotaa jonain päivänä.

Anthropic sanoo asian suoraan: keskustelutallenteet voivat sisältää lähdekoodia, tunnistetietoja ja muuta arkaluonteista aineistoa, ja niiden säilyttäminen levyllä tarpeettoman pitkään aiheuttaa todellisen yksityisyysriskin. 30 päivän jakso valittiin kompromissiksi.

Yhteisön vastalauseet koskevat kolmea asiaa: poistaminen tapahtuu hiljaisesti (asennuksen tai käynnistyksen yhteydessä ei varoiteta), suostumusta ei kysytä (sinulta ei pyydetä lupaa), eikä tiedostoja voi palauttaa (roskakoria ei käytetä eikä muutoksia voi perua). Issue-raportissa #59248 kehittäjät pyytävät yhtä asiaa: tehkää siivouksesta reilu – antakaa varoitus, palautusaika ja vähemmän aggressiivinen oletusaika.

Miksi varmuuskopiointiohjelma voi itse laukaista poistamisen?

Tärkeimmät asiat

Siivous päättää poistettavat tiedostot niiden muokkausajan (mtime) perusteella. Se ei tarkista istunnon todellista viimeisintä aktiivisuutta. Mikä tahansa .jsonl-tiedostoon koskeva prosessi – pilvisynkronointi, rsync, tekstieditori tai komentosarja – voi muuttaa sen mtime-arvoa niin, että tuore istunto näyttää vanhentuneelta. Claude Code pitää istuntoa seuraavalla käynnistyskerralla vanhana ja poistaa sen. Paradoksaalisesti huolimaton yritys varmuuskopioida historiaa hallitun kansion sisällä nopeuttaa sen katoamista.

Tämä on hankalin kohta, ja se aiheuttaa ongelmia ihmisille, jotka yrittävät suojata tietonsa itse. Siivous tarkistaa mtime-arvon eli tiedoston viimeisimmän muokkauksen aikaleiman. Se olettaa, että mtime kertoo, milloin työskentelit istunnossa viimeksi. Käytännössä mikä tahansa voi muuttaa mtime-arvoa: Dropboxin tai iCloudin synkronointiohjelma, rsync, virustorjuntaohjelmisto, indeksoija tai oma varmuuskopiointiohjelmasi.

Tässä piilee ansa. Päätät tallentaa historiasi ja otat käyttöön kansion ~/.claude/projects/ pilvisynkronoinnin. Jossain vaiheessa synkronointipalvelu kirjoittaa tiedoston uudelleen ja asettaa sen mtime-arvoksi aiemman päivämäärän (näin voi käydä, kun tiedosto palautetaan pilvikopiosta). Claude Code näkee käynnistyessään ”vanhan” tiedoston ja poistaa sen. Yritit tallentaa tiedoston, mutta nopeutit sen poistamista.

Tästä seuraa vain yksi johtopäätös: varmuuskopion on oltava kansion ~/.claude/projects/ ulkopuolella. Siivous toimii vain tässä kansiossa. Sen ulkopuolella oleva kopio on siivouksen ulottumattomissa. Rakennan ratkaisun tämän periaatteen varaan.

Miten voit estää historian poistamisen heti?

Tärkeimmät asiat

Yksi asetus. Avaa ~/.claude/settings.json ja määritä cleanupPeriodDays-arvoksi suuri luku – esimerkiksi 3650 (kymmenen vuotta). Käytännössä tämä poistaa automaattisen poistamisen käytöstä: mikään ei ole rajaa vanhempaa. Tärkeää: asetus suojaa vain sellaista sisältöä, jota ei ole vielä poistettu. Siivouksen jo poistamaa historiaa ei voi palauttaa. Siksi ensimmäinen askel on toimia ennen kuin menetät vielä yhden istunnon.

Estä poistaminen kolmessa vaiheessa:

  1. Avaa asetustiedosto: ~/.claude/settings.json (luo tiedosto, jos sitä ei ole).
  2. Lisää cleanupPeriodDays-asetus suurella arvolla:
{
  "cleanupPeriodDays": 3650
}
  1. Tallenna tiedosto. Asetus tulee voimaan, kun Claude Code käynnistyy seuraavan kerran.

Arvo 3650 tarkoittaa kymmentä vuotta: käytännössä poistamista ei enää tapahdu. Jos haluat säilyttää siivouksen mutta antaa tiedostoille enemmän aikaa, aseta arvoksi 365 (yksi vuosi); silloin katoavat vain yli vuoden vanhat istunnot. Voit tarkistaa, että asetus on otettu käyttöön, tällä komennolla:

grep cleanupPeriodDays ~/.claude/settings.json

Yksi helposti unohtuva asia: ajanjakson pidentäminen EI palauta aiemmin poistettua sisältöä. Siivous suoritetaan käynnistyksen yhteydessä, ja aiempien suorituskertojen aikana poistetut tiedostot ovat lopullisesti poissa. Siksi tämä kannattaa tehdä ensin – se estää tulevat menetykset, mutta ei palauta jo poistettua sisältöä. Jos haluat välttää Claude Code -historiasi ja projektisi menettämisen vahingossa suoritetun komennon vuoksi, katso opas ”Claude Coden määrittäminen niin, ettei se riko projektiasi”.

Istuntohistoriasi on osa projektisi toisia aivoja: se sisältää päätöksenteon logiikkaa, jota et ole kirjannut muualle. cleanupPeriodDays säilyttää tiedostot, mutta ei muuta niitä järjestelmäksi, josta löydät tarvitsemasi vielä kuuden kuukauden päästä.

Miten arkistoit historian automaattisesti siivouskansion ulkopuolelle?

Tärkeimmät asiat

Kopioi istunnot arkistoon, joka sijaitsee kansion ~/.claude/projects/ ULKOPUOLELLA ja jota siivous ei koske. Yksinkertainen päivittäinen rsync -a erilliseen kansioon riittää: uudet tiedostot lisätään ja vanhat säilyvät. Koska arkisto on ulkopuolella, cleanupPeriodDays eikä mtime-virhe vaikuta siihen. Automatisoi suoritus launchd:llä (macOS) tai cronilla (Linux), niin historia kertyy itsestään.

Ajatus on yksinkertainen: anna Claude Coden tehdä kansiollaan mitä haluaa ja säilytä erillinen arkisto sen ulkopuolella. Arkisto on suojassa tältä siivousmekanismilta, mutta se voi edelleen kadota levyrikossa, vahinkopoistossa tai epäonnistuneessa kopioinnissa. Määritä se näin:

  1. Luo arkistokansio hallitun hakemiston ulkopuolelle:
mkdir -p ~/claude-history-archive
  1. Kopioi nykyinen historiasi sinne. -a-valitsin säilyttää rakenteen ja aikaleimat; --ignore-existing jättää jo kopioidut tiedostot koskemattomiksi:
rsync -a ~/.claude/projects/ ~/claude-history-archive/
  1. Automatisoi suoritus kerran päivässä. Käytä macOS:ssä launchd:tä. Luo tiedosto ~/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>
  1. Lataa agentti, jotta se toimii taustalla:
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist

Linuxissa teet saman lisäämällä yhden rivin crontabiin (crontab -e):

0 3 * * * rsync -a ~/.claude/projects/ ~/claude-history-archive/

Miksi tämä toimii, vaikka edellisen osion synkronointi ei toimi? Arkisto sijaitsee kansion ~/.claude/projects/ ULKOPUOLELLA, joten siivous ei näe sitä lainkaan. Kopiointi tapahtuu yhteen suuntaan (aktiivisesta kansiosta arkistoon), emmekä muuta aktiivisten tiedostojen mtime-arvoja – siksi mtime-virhettä ei tapahdu. Vaikka Claude Code poistaisi istunnon omasta kansiostaan huomenna, sen kopio säilyy arkistossa.

Miten muutat istuntoarkistosi haettavaksi toiseksi aivoksi?

Tärkeimmät asiat

Laita arkisto git-versionhallintaan, niin saat kaikista istunnoistasi versioidun ja täysin haettavan tietokannan. Suorita git init arkistokansiossa ja sen jälkeen päivittäin git add -A && git commit, niin saat muutoshistorian ja suojaa vahingossa ylikirjoittamiselta. Voit hakea aiemmista istunnoista tavallisella grepillä ja poimia rakenteista sisältöä jq:lla, koska .jsonl on rivinvaihdoin erotettua JSON-dataa. Näin arkistosta tulee käytännöllinen työkalu.

Pelkkä tiedostojen kerääminen ei riitä – sinun on päästävä niihin käsiksi. Kahdella vaiheella arkistosta tulee toimiva työkalu.

Ensimmäiseksi ota se git-versionhallintaan. Alusta arkistokansioon repository:

cd ~/claude-history-archive
git init
git add -A && git commit -m "First snapshot of Claude Code history"

Lisää git add -A && git commit samaan päivittäiseen ajoon rsyncin kanssa. Nyt sinulla on versiohistoria: näet, mitä ilmestyi ja milloin, ja voit kumota vahingossa tehdyn ylikirjoituksen yhdellä komennolla.

Toiseksi käytä hakua. .jsonl-tiedostot ovat rivinvaihdoin erotettua JSON-dataa, joten voit käyttää niihin tuttuja työkaluja. Etsi istunto, jossa käsiteltiin tiettyä aihetta:

grep -rl "database migration" ~/claude-history-archive/

Poimi istunnosta vain omien kehotteidesi teksti (jq:lla, koska tiedosto on JSON-muodossa):

jq -r 'select(.type=="user") | .message.content' session.jsonl

Tässä vaiheessa istuntohistoriasi alkaa toimia projektin toisina aivoina: tietokantana, josta löydät sekunneissa ”miten teimme tämän päätöksen maaliskuussa”. Katso oppaasta ”Mihin tokenit menevät Claude Codessa?” erillinen katsaus siihen, minne konteksti istunnossa päätyy ja miten sitä hallitaan.

Voiko jo poistettuja istuntoja palauttaa?

Tärkeimmät asiat

Sisäänrakennettua menetelmää ei ole. Claude Code ei siirrä poistettuja tiedostoja roskakoriin eikä säilytä palautuspistettä; tiedosto poistetaan lopullisesti. Ainoa mahdollisuus ovat ulkoiset kopiot, jotka tehtiin ENNEN poistamista: Time Machine -tilannevedos macOS:ssä, OneDriven tai Dropboxin versiohistoria tai manuaalinen varmuuskopio. Jos mitään näistä ei ole, istunto on menetetty. Siksi suojaus on otettava käyttöön etukäteen – ennen kuin on mitään menetettävää.

Rehellinen vastaus on: luultavasti ei. Claude Codessa ei ole palautustoimintoa, roskakoria eikä poistettujen keskustelutallenteiden kumoamislokia. Tiedosto vain katoaa levyltä.

Yksi mahdollisuus on järjestelmän varmuuskopiot, jos ne oli otettu käyttöön etukäteen:

  1. macOS Time Machine – jos tilannevedos sisälsi kansion ~/.claude/projects/ ennen poistamista, voit hakea tiedoston kyseisen päivämäärän varmuuskopiosta.
  2. OneDriven / Dropboxin versiohistoria – jos kansio synkronoitiin versiohistoria käytössä, etsi tiedostoa pilvipalvelun versiohistoriasta (mutta muista mtime-ansa: synkronointi on saattanut myös laukaista poistamisen).
  3. Manuaaliset kopiot – mikä tahansa rsync/cp, jonka ajoit manuaalisesti johonkin hallitun kansion ulkopuolelle.

Jos mitään näistä ei ollut, istunto on poissa. Tämä ei ole harvinaista: yksi Anthropicin repositoriossa olevan virheen ilmoittaja menetti 26 tietuetta 38:sta, mikä vastasi kuukausien työtä. Ainoa luotettava suoja on sellainen, joka on käytössä ENNEN menetystä. Määritä cleanupPeriodDays ja automaattinen arkistointi jo tänään, kun tallennettavaa on vielä jäljellä.

Minkä arvon cleanupPeriodDays-asetukselle kannattaa valita?

Tärkeimmät asiat

Useimmille sopiva valinta on 3650 (kymmenen vuotta, mikä käytännössä poistaa automaattisen poistamisen käytöstä) sekä ulkoinen automaattinen arkisto. Pidä oletusarvo 30 vain, jos et tarvitse historiaa ja on tärkeämpää olla säilyttämättä salaisuuksia levyllä. 365 on kohtuullinen keskitie, jossa siivous tehdään vuosittain. Voit myös jättää historian kokonaan tallentamatta: käytä ympäristömuuttujaa CLAUDE_CODE_SKIP_PROMPT_HISTORY tai valitsinta --no-session-persistence, mutta se palvelee päinvastaista tarkoitusta.

Asetuksia on vain yksi, mutta sillä voi olla useita merkityksiä. Vertaa vaihtoehtoja ja valitse käyttötarkoitukseesi sopiva:

ArvoMitä se tekeeKenelle se sopii
30 (oletus)Poistaa käynnistyksen yhteydessä yli 30 päivää vanhat istunnotEt tarvitse historiaa; arkaluonteisten tietojen tallentamisen välttäminen levyllä on tärkeämpää
365Säilyttää vuoden historian ja siivoaa sen sitten kerran vuodessaTarvitset tuoretta historiaa, mutta et rajatonta arkistoa
3650Poistaa käytännössä automaattisen poistamisen käytöstäHaluat säilyttää kaiken + ulkoisen arkiston (suositeltu)
CLAUDE_CODE_SKIP_PROMPT_HISTORYEi tallenna historiaa levylle lainkaanMahdollisimman hyvä yksityisyys; et tarvitse historiaa ollenkaan

Tärkeä tietoturvahuomautus: jos asetat arvon 3650 ja säilytät kaiken, sitoudut tallentamaan levylle keskustelutallenteita, jotka saattavat sisältää avaimia ja koodia. Kyseessä on tietoinen kompromissi: arkiston helppous suhteessa riskiin. Pienennä riskiä: säilytä arkisto salatulla levyllä (FileVault macOS:ssä), älä laita sitä julkiseen pilveen äläkä committoi sitä julkiseen git-repositoryyn. Olen koonnut erillisen oppaan siitä, mitä tietoja Claude Coden kautta voi vuotaa: ”Claude Coden tietoturva”.

Mitä tehdä tänään: tarkistuslista

Tärkeimmät asiat

Nämä vaiheet vähentävät historian menettämistä: pidennä säilytystä asetuksella cleanupPeriodDays: 3650, kopioi istunnot kansion ~/.claude/projects/ ulkopuolelle ja versioi arkisto. Vain onnistuneesti kopioidut tiedostot ovat suojassa Claude Coden siivoukselta. Onnistuva päivittäinen ajo jättää enintään päivän uusimmat muutokset arkistoimatta. Epäonnistuneet tai väliin jääneet ajot pidentävät aukkoa. Samalla levyllä oleva kopio ei suojaa levyrikolta.

Määritä suojaus vaihe vaiheelta:

  1. Aseta cleanupPeriodDays: 3650 tiedostossa ~/.claude/settings.json – olet pidentänyt säilytysaikaa.
  2. Luo ~/claude-history-archive hallitun kansion ulkopuolelle ja suorita ensimmäinen rsync -a.
  3. Ajasta päivittäinen suoritus launchd:llä (macOS) tai cronilla (Linux).
  4. Alusta arkistoon git ja lisää git add -A && git commit samaan suoritukseen.
  5. Varmista, että arkisto on salatulla levyllä eikä sitä synkronoida julkiseen pilveen.
  6. Tarkista jokaisesta ajastetusta ajosta kopioinnin onnistuminen. Tarkista sitten äskettäinen arkistoitu istunto ja palauta säännöllisesti näyte erilliseen väliaikaiseen kansioon varmistaaksesi sen luettavuuden.
  7. Jos myös laitteen tai levyn menetys kuuluu suojattaviin riskeihin, pidä erikseen tallennettu varmuuskopio asianmukaisilla pääsyoikeuksilla ja testaa senkin palautus. Samalla levyllä oleva Git-historia ei ole riippumaton varmuuskopio.

Istuntohistoria on vain yksi kerros kontekstia, joka tekee Claudesta luotettavan.

Tutustu Ailootiin.

Lisätietoja

Kysymyksiä tästä oppaasta: Claude Code poistaa historian 30 päivän jälkeen: näin tallennat sen

Takaako päivittäinen arkisto, ettei yhtään istuntoa voi kadota?

Ei. Se suojaa onnistuneesti kopioidut tiedostot hallitun kansion siivoukselta. Onnistuvissakin päivittäisissä ajoissa jopa päivän uusimmat muutokset voivat puuttua. Epäonnistuneet ajot kasvattavat aukkoa, ja saman levyn kopio voi kadota alkuperäisen mukana.

Miten tarkistan arkiston käyttökelpoisuuden?

Varmista ajastettujen kopioiden onnistuminen, tarkista äskettäinen arkistoitu istunto ja palauta säännöllisesti näyte erilliseen väliaikaiseen kansioon. Testaa laitteen tai levyn menetykseltä suojautumiseen myös alkuperäisestä erillään säilytetty varmuuskopio.

Kaikki artikkelit