Tinklaraštis

Claude Code ištrina istoriją po 30 dienų: kaip ją išsaugoti

Markdown

Kur saugomos Claude Code sesijos, kaip sukonfigūruoti cleanupPeriodDays ir kaip tvarkyti išorinį archyvą naudojant rsync, launchd arba cron.

Skaityti visą straipsnį

Jei reikia pagalbos naudojantis paslauga, žr. Ailoot dokumentaciją.

Ar Claude Code tikrai ištrina jūsų sesijų istoriją?

Svarbiausios išvados

Taip. Kiekvieną kartą paleidus Claude Code, ištrinami senesni nei 30 dienų sesijų failai. Už tai atsakingas nustatymas cleanupPeriodDays faile ~/.claude/settings.json; numatytoji jo reikšmė yra 30. Failai ištrinami neįspėjus, neprašant sutikimo ir nesuteikiant galimybės jų atkurti.

Atidarote Claude Code, kad grįžtumėte prie prieš du mėnesius vykusios sesijos, bet jos nebėra. Failas visiškai ištrintas iš disko. Tai ne trikdis ir ne retas gedimas: taip veikia numatytasis valymo mechanizmas.

Valymą valdo vienas nustatymas: cleanupPeriodDays. Numatytoji jo reikšmė yra 30. Kiekvieną kartą paleidus Claude Code, jis peržiūri istorijos aplanką ir ištrina viską, kas senesnė už nurodytą laikotarpį. Mano faile ~/.claude/settings.json šio nustatymo apskritai nebuvo, vadinasi, galiojo numatytoji reikšmė, o kai kurios senesnės mano sesijos jau buvo dingusios.

Anthropic saugykloje yra atviros kelios su tuo susijusios klaidų ataskaitos, ir nė viena jų neištaisyta.

Kur Claude Code saugo sesijų istoriją?

Svarbiausios išvados

Kiekvienos sesijos istorija saugoma faile ~/.claude/projects/<project-path>/<session-id>.jsonl. Aplanko pavadinimas yra absoliutus darbinio katalogo, kuriame paleidote Claude Code, kelias, kuriame pasvirieji brūkšniai pakeisti brūkšneliais. .jsonl faile yra visas pokalbis, po vieną eilutę: jūsų užklausos, modelio atsakymai, įrankių iškvietimai ir failų pakeitimai. Būtent šią atmintį ištrina valymas.

Rasti istoriją paprasta. Atidarykite terminalą ir peržiūrėkite aplanko turinį:

ls ~/.claude/projects/

Kiekvienas poaplankis yra atskiras projektas. Jo pavadinime užkoduotas kelias: pavyzdžiui, projektas, esantis /Users/alex/dev/shop, tampa aplanku -Users-alex-dev-shop. Jame yra sesijų failai:

ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl   ← viena sesija = vienas failas
# a91b7d40-....jsonl

Kiekvienas .jsonl failas yra nuoseklus žurnalas: viena eilutė atitinka vieną sesijos įvykį. Jame yra daugiau nei vien pokalbio tekstas. Jis išsaugo jūsų sprendimų logiką: kodėl pasirinkote konkrečią duomenų bazės struktūrą, kokias parinktis atmetėte, kur Claude suklydo ir kaip ištaisėte jo klaidą.

Iš esmės tai yra projekto kūrimo dienoraštis. Todėl jo praradimas toks skaudus: prarandate ne „pokalbį“, o per kelias savaites sukauptą kontekstą. Šiame vadove „Claude Memory ir CLAUDE.md“ aprašiau, kaip šis kontekstas sudaromas.

Kodėl Anthropic ištrina transkriptus po 30 dienų?

Svarbiausias išvados

Anthropic tai grindžia privatumu ir saugumu. Sesijų failai diske saugomi paprastu tekstu ir juose gali būti šaltinio kodas, slaptažodžiai bei API raktai. Laikyti juos amžinai rizikinga: jei nešiojamasis kompiuteris būtų pavogtas arba kas nors gautų prieigą prie disko, šie asmenys pasiektų visus tuos jautrius duomenis. 30 dienų laikotarpis yra jų kompromisas tarp „galimybės tęsti neseniai pradėtą darbą“ ir „paslapčių nelaikymo diske ilgiau nei būtina“.

Yra priežastis, kodėl failai ištrinami, ir prieš visiškai išjungiant valymą verta ją suprasti. Transkriptas yra paprastas tekstas. Jei per sesiją Claude perskaitė .env failą, įterpė raktą į komandą arba įklijavote slaptažodį į užklausą, visa tai .jsonl faile atsidūrė paprastu tekstu. Kuo ilgiau toks failas lieka diske, tuo didesnė tikimybė, kad vieną dieną duomenys nutekės.

Anthropic tai aiškiai įvardija: transkriptuose gali būti šaltinio kodo, prisijungimo duomenų ir kitos jautrios informacijos, o laikant juos diske ilgiau nei būtina kyla reali rizika privatumui. 30 dienų laikotarpis pasirinktas kaip kompromisas.

Bendruomenė prieštarauja dėl trijų dalykų: failai ištrinami tyliai (nustatant ar paleidžiant nėra įspėjimo), neprašoma sutikimo (jūsų neklausiama) ir nėra galimybės atkurti (failai neperkeliami į šiukšlinę ir nėra atšaukimo funkcijos). Issue #59248 kūrėjai prašo vieno dalyko: kad valymas būtų sąžiningas — pateiktų įspėjimą ir atkūrimo laikotarpį bei naudotų ne tokią griežtą numatytąją trukmę.

Kodėl atsarginių kopijų kūrimo scenarijus pats gali sukelti ištrynimą?

Svarbiausios išvados

Valymas sprendžia, ką ištrinti, pagal failo pakeitimo laiką (mtime). Jis netikrina, kada sesijoje iš tiesų paskutinį kartą buvo veikla. Bet kuris procesas, palietęs .jsonl failą — debesijos sinchronizavimas, rsync, redaktorius ar scenarijus — gali pakeisti jo mtime ir sudaryti įspūdį, kad nauja sesija yra pasenusi. Kitą kartą paleidus Claude Code, sesija bus laikoma sena ir ištrinta. Paradoksas toks: nerūpestingai bandydami kurti istorijos atsarginę kopiją valdomame aplanke, pagreitinate jos praradimą.

Tai kebliausia dalis, kuri dažnai suglumina žmones, patiems bandančius apsaugoti savo duomenis. Valymas tikrina mtime — paskutinio failo pakeitimo laiko žymą. Daroma prielaida, kad mtime rodo, kada paskutinį kartą dirbote sesijoje. Praktikoje jį gali pakeisti bet kas: „Dropbox“ ar „iCloud“ sinchronizavimo klientas, rsync, antivirusinė programa, indeksavimo įrankis ar jūsų atsarginių kopijų kūrimo scenarijus.

Štai kur slypi spąstai. Nusprendžiate išsaugoti istoriją ir nustatote debesijos sinchronizavimą aplankui ~/.claude/projects/. Tam tikru metu sinchronizavimo paslauga perrašo failą ir nustato jo mtime ankstesnę datą (taip gali nutikti atkuriant iš debesijos kopijos). Paleistas Claude Code pamato „seną“ failą ir jį ištrina. Norėjote jį išsaugoti, bet paspartinote jo ištrynimą.

Išvada viena: atsarginė kopija turi būti laikoma už ~/.claude/projects/ ribų. Valymas veikia tik šiame aplanke. Už jo ribų saugoma kopija valymui nepasiekiama. Sprendimą kursiu remdamasis šiuo principu.

Kaip galite iškart sustabdyti istorijos ištrynimą?

Svarbiausios išvados

Užtenka vieno nustatymo. Atidarykite ~/.claude/settings.json ir nustatykite didelę cleanupPeriodDays reikšmę, pavyzdžiui, 3650 (dešimt metų). Praktiškai tai išjungia automatinį ištrynimą: niekas nebus senesnis už nustatytą ribą. Svarbu: šis nustatymas apsaugo tik tai, kas dar neištrinta. Valymo jau ištrintos istorijos atkurti neįmanoma. Todėl pirmiausia imkitės veiksmų, kol nepraradote dar vienos sesijos.

Sustabdykite ištrynimą trimis veiksmais:

  1. Atidarykite nustatymų failą: ~/.claude/settings.json (jei failo nėra, sukurkite jį).
  2. Pridėkite nustatymą cleanupPeriodDays ir nurodykite didelę reikšmę:
{
  "cleanupPeriodDays": 3650
}
  1. Išsaugokite failą. Nustatymas įsigalios kitą kartą paleidus Claude Code.

Reikšmė 3650 reiškia dešimt metų: praktiškai ištrynimas nebebus vykdomas. Jei norite palikti valymą, bet turėti daugiau laiko, nustatykite 365 (vieneri metai); tuomet dings tik senesnės nei vienerių metų sesijos. Ar nustatymas pritaikytas, galite patikrinti šia komanda:

grep cleanupPeriodDays ~/.claude/settings.json

Lengva pražiūrėti vieną svarbią išlygą: pratęsus laikotarpį, tai, kas jau ištrinta, NEBUS atkurta. Valymas vykdomas paleidžiant programą, o per ankstesnius paleidimus ištrinta informacija dingo visam laikui. Todėl pirmiausia nustatykite šią reikšmę — ji padės išvengti būsimų nuostolių, bet negrąžins to, kas jau ištrinta. Jei norite neprarasti Claude Code istorijos ir apsaugoti projektą nuo netyčinės komandos, žr. vadovą „Kaip sukonfigūruoti Claude Code, kad jis nesugadintų projekto“.

Sesijų istorija yra jūsų projekto antrojo proto dalis: joje užfiksuota sprendimų logika, kurios neužrašėte niekur kitur. cleanupPeriodDays išsaugo failus, bet nepaverčia jų sistema, kurioje po šešių mėnesių galėtumėte rasti tai, ko reikia.

Kaip automatiškai archyvuoti istoriją už valymo aplanko ribų?

Svarbiausios išvados

Kopijuokite sesijas į archyvą UŽ ~/.claude/projects/ ribų, kur valymas jų nepasiekia. Paprastos kasdienės komandos rsync -a į atskirą katalogą pakanka: nauji failai bus pridėti, o seni liks. Kadangi archyvas yra už šio aplanko ribų, jo nepaveiks nei cleanupPeriodDays, nei mtime klaida. Automatizuokite paleidimą naudodami launchd (macOS) arba cron (Linux), ir istorija kaupsis savaime.

Idėja paprasta: palikite Claude Code tvarkytis su savo aplanku kaip nori, o jūs saugokite atskirą archyvą už jo ribų. Jis apsaugotas nuo to valymo mechanizmo, tačiau vis tiek gali būti prarastas sugedus diskui, netyčia ištrynus ar nepavykus kopijavimui. Nustatykite taip:

  1. Sukurkite archyvavimo aplanką už valdomo katalogo ribų:
mkdir -p ~/claude-history-archive
  1. Nukopijuokite ten dabartinę istoriją. Žymė -a išsaugo struktūrą ir laiko žymas, o --ignore-existing palieka jau nukopijuotus failus nepakeistus:
rsync -a ~/.claude/projects/ ~/claude-history-archive/
  1. Automatizuokite paleidimą kasdien. macOS naudokite launchd. Sukurkite failą ~/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. Įkelkite agentą, kad jis veiktų fone:
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist

Linux sistemoje tą patį galima atlikti įrašius vieną eilutę į crontab (crontab -e):

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

Kodėl tai veikia, o ankstesniame skyriuje aprašytas sinchronizavimas — ne? Archyvas yra UŽ ~/.claude/projects/ ribų, todėl valymas jo visai nemato. Kopijuojama tik viena kryptimi (iš aktyvaus aplanko į archyvą), o aktyvių failų mtime nekeičiame — taigi mtime klaidos išvengiama. Net jei rytoj Claude Code ištrins sesiją iš savo aplanko, jos kopija archyve liks.

Kaip sesijų archyvą paversti ieškomu antruoju protu?

Svarbiausios išvados

Perkelkite archyvą į git valdymą ir gausite versijuojamą, visiškai ieškomą visų sesijų duomenų bazę. Archyvo aplanke paleiskite git init, o tada kasdien vykdykite git add -A && git commit — taip turėsite pakeitimų istoriją ir apsaugą nuo atsitiktinio perrašymo. Ankstesnių sesijų galite ieškoti įprasta komanda grep, o struktūruotą turinį išgauti su jq, nes .jsonl yra po eilutę atskirtas JSON. Taip archyvas tampa praktišku įrankiu.

Vien kaupti failus nepakanka — reikia turėti galimybę juos pasiekti. Du veiksmai paverčia archyvą veikiančiu įrankiu.

Pirmiausia įveskite versijų kontrolę su git. Archyvo aplanke inicijuokite saugyklą:

cd ~/claude-history-archive
git init
git add -A && git commit -m "Pirmasis Claude Code istorijos momentinis vaizdas"

Pridėkite git add -A && git commit prie to paties kasdienio paleidimo kaip rsync. Dabar turite versijų istoriją: galite matyti, kas ir kada atsirado, o atsitiktinį perrašymą atšaukti viena komanda.

Antra, atlikite paiešką. .jsonl failuose JSON atskirtas eilutėmis, todėl galite naudoti įprastus įrankius. Raskite, kurioje sesijoje aptarta konkreti tema:

grep -rl "duomenų bazės perkėlimas" ~/claude-history-archive/

Iš sesijos ištraukite tik savo užklausų tekstą (naudodami jq, nes tai JSON):

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

Tuomet sesijų istorija pradeda veikti kaip antrasis projekto protas: duomenų bazė, kurioje per kelias sekundes galite rasti, „kaip dėl to nusprendėme kovą“. Atskirą paaiškinimą, kur sesijoje keliauja kontekstas ir kaip jį valdyti, rasite vadove „Kur keliauja tokenai Claude Code“.

Ar galima atkurti jau ištrintas sesijas?

Svarbiausios išvados

Įtaisyto būdo nėra. Claude Code neperkelia ištrintų failų į šiukšlinę ir nesaugo ankstesnės būsenos; failas ištrinamas visam laikui. Vienintelė galimybė — išorinės kopijos, sukurtos PRIEŠ ištrinant: „Time Machine“ momentinė kopija macOS sistemoje, „OneDrive“ ar „Dropbox“ versijų istorija arba rankinė atsarginė kopija. Jei tokių kopijų nėra, sesija prarasta. Todėl apsaugą reikia nustatyti iš anksto — kol dar yra ką prarasti.

Sąžiningas atsakymas: greičiausiai ne. Claude Code neturi atkūrimo funkcijos, šiukšlinės ar ištrintų transkriptų atšaukimo žurnalo. Failas tiesiog dingsta iš disko.

Yra viena galimybė: sistemos atsarginės kopijos, jei jos buvo iš anksto įjungtos:

  1. macOS „Time Machine“ — jei momentinėje kopijoje prieš ištrynimą buvo ~/.claude/projects/, failą galite atkurti iš reikiamos datos atsarginės kopijos.
  2. „OneDrive“ / „Dropbox“ versijų istorija — jei aplankas buvo sinchronizuojamas ir įjungta versijų istorija, ieškokite failo debesijos versijų istorijoje (tačiau nepamirškite mtime spąstų: sinchronizavimas galėjo ir sukelti ištrynimą).
  3. Rankinės kopijos — bet kokie rsync/cp veiksmai, kuriuos atlikote rankiniu būdu ir išsaugojote vietoje už valdomo aplanko ribų.

Jei nė vienos iš šių kopijų nebuvo, sesija prarasta. Ir tai nėra retas atvejis: vienas klaidos ataskaitos Anthropic saugykloje autorius prarado 26 iš 38 sugadintų įrašų, apimančių kelis darbo mėnesius. Vienintelė patikima apsauga yra ta, kuri įdiegta PRIEŠ praradimą. Nustatykite cleanupPeriodDays ir automatinį archyvavimą šiandien, kol dar yra ką išsaugoti.

Kokią cleanupPeriodDays reikšmę pasirinkti?

Svarbiausios išvados

Daugumai žmonių rekomenduojama naudoti 3650 (dešimt metų, praktiškai išjungiant ištrynimą) ir papildomai sukurti išorinį automatinį archyvą. Palikite numatytąją reikšmę 30 tik tuo atveju, jei jums nereikia istorijos ir svarbiau nelaikyti paslapčių diske. 365 yra tinkamas vidurio kelias su kasmetiniu valymu. Dar viena galimybė — visai nerašyti istorijos: naudokite aplinkos kintamąjį CLAUDE_CODE_SKIP_PROMPT_HISTORY arba vėliavą --no-session-persistence, tačiau tai skirta priešingam tikslui.

Yra vienas nustatymas, bet jis gali reikšti kelis dalykus. Palyginkite parinktis ir pasirinkite tą, kuri tinka jūsų naudojimo atvejui:

ReikšmėKą ji daroKam tinka
30 (numatytoji)Paleidžiant ištrina senesnes nei 30 dienų sesijasJums nereikia istorijos; svarbiau nesaugoti jautrių duomenų diske
365Saugo vienų metų istoriją, tada valo ją kartą per metusJums reikia nesenos istorijos, bet ne neriboto archyvo
3650Praktiškai išjungia ištrynimąNorite išsaugoti viską ir turėti išorinį archyvą (rekomenduojama)
CLAUDE_CODE_SKIP_PROMPT_HISTORYVisai nerašo istorijos į diskąMaksimalus privatumas; jums visai nereikia istorijos

Svarbi saugumo išlyga: nustatę 3650 ir saugodami viską, sutinkate diske laikyti transkriptus, kuriuose gali būti raktų ir kodo. Tai sąmoningas kompromisas: archyvavimo patogumas ir rizika. Riziką sumažinsite archyvą laikydami šifruotame diske („FileVault“ macOS sistemoje), nedėdami jo į viešą debesiją ir neįkeldami į viešą git saugyklą. Parengiau atskirą vadovą apie tai, kokie duomenys gali nutekėti per Claude Code: „Duomenų saugumas Claude Code“.

Ką padaryti šiandien: kontrolinis sąrašas

Svarbiausios išvados

Šie žingsniai mažina istorijos praradimą: pratęskite saugojimą su cleanupPeriodDays: 3650, kopijuokite sesijas už ~/.claude/projects/ ribų ir versijuokite archyvą. Nuo Claude Code valymo apsaugoti tik sėkmingai nukopijuoti failai. Sėkmingas kasdienis tvarkaraštis gali palikti iki paros naujausių pakeitimų nearchyvuotų; nepavykę ar praleisti paleidimai tarpą ilgina. Kopija tame pačiame diske neapsaugo nuo disko gedimo.

Apsaugą nustatykite žingsnis po žingsnio:

  1. Nustatykite cleanupPeriodDays: 3650 faile ~/.claude/settings.json — ištrynimas sustabdytas.
  2. Už valdomo aplanko ribų sukurkite ~/claude-history-archive ir pirmą kartą paleiskite rsync -a.
  3. Suplanuokite kasdienį paleidimą naudodami launchd (macOS) arba cron (Linux).
  4. Archyve inicijuokite git ir įtraukite git add -A && git commit į tą patį paleidimą.
  5. Patikrinkite, ar archyvas laikomas šifruotame diske ir nėra sinchronizuojamas su vieša debesija.
  6. Kiekviename suplanuotame paleidime patikrinkite sėkmingą kopijavimą, tada apžiūrėkite naują archyvuotą sesiją ir periodiškai atkurkite pavyzdį į atskirą laikiną aplanką, kad patvirtintumėte skaitomumą.
  7. Jei svarbi apsauga nuo įrenginio ar disko praradimo, laikykite nepriklausomai saugomą atsarginę kopiją su tinkamais prieigos valdikliais ir išbandykite jos atkūrimą. Git istorija tame pačiame diske nėra nepriklausoma atsarginė kopija.

Sesijų istorija tėra vienas konteksto sluoksnis, padedantis Claude veikti patikimai.

Susipažinkite su Ailoot.

Išsamiau

Klausimai ir atsakymai

Ar kasdienis archyvas garantuoja, kad neprarasiu jokios sesijos?

Ne. Jis nuo valymo valdomame aplanke apsaugo sėkmingai nukopijuotus failus. Net sėkmingai kopijuojant kasdien gali trūkti iki paros naujausių pakeitimų; nepavykę paleidimai tarpą didina, o kopija tame pačiame diske gali žūti kartu su originalu.

Kaip patikrinti, kad archyvas tinkamas naudoti?

Patvirtinkite sėkmingą suplanuotų kopijavimų vykdymą, peržiūrėkite naują archyvuotą sesiją ir periodiškai atkurkite pavyzdį į atskirą laikiną aplanką. Apsaugai nuo įrenginio ar disko praradimo taip pat išbandykite nepriklausomai nuo originalo saugomą atsarginę kopiją.

Visi straipsniai