Sari la conținut
Danube Labs

Istoric sesiuni Claude Code, transcripturi și cum le păstrezi

Claude Code păstrează istoricul sesiunilor ca fișiere JSONL și le șterge implicit după 30 de zile. Vezi unde sunt, cum schimbi cleanupPeriodDays, cum repari un resume stricat și cum arhivezi tot.

De Alexandru Secureanu8 min de citit
Un folder de transcripturi JSONL protejat de o arhivă append-only

Pentru istoric sesiuni Claude Code, uită-te la fișierele JSONL din ~/.claude/projects/<project>/<session-id>.jsonl. Claude Code le șterge după ce depășesc cleanupPeriodDays, care este implicit 30. Mărește valoarea în settings.json, oglindește folderul într-o arhivă append-only ca să nu pierzi nimic la curățare și repară transcripturile stricate, cu backup înainte, când claude --resume nu merge.

Unde își păstrează Claude Code istoricul sesiunilor?

Implicit, Claude Code scrie fiecare sesiune în propriul fișier JSONL. În calea de mai sus, <project> este calea directorului tău de lucru, cu fiecare caracter non-alfanumeric înlocuit cu o liniuță, iar ~ este folderul tău home. Fiecare linie este un obiect JSON pentru un mesaj, o folosire de unealtă sau o intrare de metadate. Tot ce trece printr-o unealtă ajunge în fișier ca text simplu: conținut de fișiere, ieșiri de comenzi, text lipit. Dacă vrei să muți tot arborele, variabila de mediu CLAUDE_CONFIG_DIR schimbă rădăcina.

Cale sub ~/.claude/ConțineSe șterge la curățarea după vârstă?
projects/<project>/<session>.jsonlTranscriptul complet al conversațieiDa
projects/<project>/<session>/subagents/Transcripturile subagențilorDa, odată cu sesiunea părinte
projects/<project>/<session>/tool-results/Ieșiri mari de unelte, salvate în fișiere separateDa
file-history/<session>/Copii ale fișierelor dinaintea editării, pentru checkpoint-uriDa
history.jsonlFiecare prompt scris de tine, cu oră și proiectNu

O avertizare înainte să construiești ceva pe aceste fișiere: Anthropic documentează formatul intrărilor ca intern pentru Claude Code și spune că se schimbă între versiuni, deci uneltele care citesc direct transcripturile se pot strica la o actualizare. Pentru acces stabil, documentația indică /export și câmpul de intrare transcript_path, pe care îl primește un hook SessionEnd. Detaliile sunt pe pagina Anthropic despre gestionarea sesiunilor.

De ce dispar sesiunile vechi din Claude Code?

Claude Code rulează o curățare de retenție. Șterge fișierele din tabelul de mai sus după ce depășesc cleanupPeriodDays. Valoarea implicită este 30 de zile, iar minimul este 1. Curățarea elimină și fișierele de plan, jurnalele de debug pe sesiune, cache-urile de conținut lipit și rapoartele scrise de /insights, iar lista completă e în referința directorului .claude. Nimic nu anunță ștergerea. Afli când încerci să reiei o sesiune din luna trecută, iar Claude Code răspunde This session's saved conversation is no longer on disk.

Curățarea este sărită în două cazuri: la o rulare claude -p --bare și când Claude Code nu poate stabili în siguranță perioada de retenție, de exemplu dacă un fișier de setări nu poate fi parsat. În afara acestor cazuri, consideră că tot ce e mai vechi decât setarea a dispărut.

Cum schimbi cleanupPeriodDays?

Adaugă cheia în fișierul tău de setări de utilizator, ~/.claude/settings.json, ca să se aplice tuturor proiectelor:

{
  "cleanupPeriodDays": 365
}

Alege un număr de zile care se potrivește cu cât istoric vrei. Valoarea 0 nu oprește curățarea: dă o eroare de validare. După salvare, rulează /status. Dacă setarea sau fișierul au o eroare, Claude Code afișează acolo un avertisment și pune curățarea în pauză până o repari.

Gândește-te la compromis înainte să pui un număr foarte mare. Transcripturile sunt copii în text simplu ale tuturor lucrurilor pe care Claude Code le-a citit sau rulat, deci pot include secrete apărute în ieșirile comenzilor. O retenție mai lungă înseamnă că acele copii trăiesc mai mult. Rulează claude purge ca să ștergi transcripturile și starea unui proiect mai devreme decât ar face-o curățarea.

De ce eșuează claude --resume la unele sesiuni?

Când ți se pare că claude code resume nu merge, cauza este de obicei una dintre acestea:

Ce veziCauză probabilăCe faci
No conversation found with session IDID-ul nu corespunde niciunui transcript stocatVerifică ID-ul sau deschide claude --resume și apasă Ctrl+A ca să vezi toate proiectele
Failed to resume the conversationTranscript corupt sau lipsă, ori o problemă de sistem de fișiereConfirmă că fișierul .jsonl există și poate fi citit, apoi repară-l (mai jos)
Eroare EBADF pe WindowsAntivirus sau software de blocare a fișierelor care atinge transcriptulRepornește Claude Code și verifică dacă antivirusul scanează folderul ~/.claude
This session's saved conversation is no longer on diskCurățarea de retenție l-a ștersRestaurează-l dintr-o arhivă
API Error 400 despre blocuri de thinkingUn bloc de thinking gol în mesajele salvateRepară transcriptul

Ultimul rând vine din README-ul Claude Session Guard. Claude Code scrie un răspuns al asistentului ca mai multe linii de transcript care au același message.id și le îmbină la reluare. Dacă oricare dintre ele conține un bloc de thinking cu textul gol sau doar spații, reluarea sesiunii se oprește cu each thinking block must contain non-whitespace thinking. O a doua cauză este amestecarea copiilor: Anthropic notează că reluarea aceleiași sesiuni în două terminale, fără fork, întrețese mesajele ambelor în același transcript. Folosește /branch sau --fork-session când vrei o a doua linie de lucru.

Două trucuri de reluare ajută aici. claude --resume <session-id> merge din orice director, pentru că Claude Code caută întâi în proiectul curent, apoi în toate celelalte proiecte de pe mașină. Iar claude --resume acceptă și calea absolută a unui transcript .jsonl, așa deschizi o copie arhivată.

Cum păstrezi o arhivă permanentă a transcripturilor Claude Code?

Un cleanupPeriodDays mai mare doar amână pierderea. O arhivă o elimină. Claude Session Guard este un plugin Claude Code cu licență MIT, scris doar cu biblioteca standard Python 3, care ține o oglindă append-only a fiecărui transcript, inclusiv a celor de subagenți și workflow-uri. Îl pui la punct în trei pași:

  1. Instalează pluginul din Claude Code:
    /plugin marketplace add FiredMosquito831/claude-session-guard
    /plugin install claude-session-guard@claude-session-guard
  2. Construiește o dată arhiva inițială și baza de date de utilizare. README-ul spune că durează câteva minute pe un istoric mare:
    sh "$CLAUDE_PLUGIN_ROOT/scripts/run.sh" session_archive sync --full
    sh "$CLAUDE_PLUGIN_ROOT/scripts/run.sh" usage_db build
    sh "$CLAUDE_PLUGIN_ROOT/scripts/run.sh" usage_db export
  3. Lasă-l în pace. Hook-urile țin arhiva la zi. O verifici oricând cu session_archive verify, care răspunde dacă ceva îți mănâncă datele de sesiune, iar session_archive restore pune la loc sesiunile pierdute.

Arhiva stă în ~/.claude/session-archive/, cu arborele oglindit transcripts/, un fișier SQLite usage.db, un usage-ledger.jsonl append-only și un folder reports/ cu fișiere CSV. Este o copie reală, deci crește odată cu istoricul și poate ajunge la câțiva GB. Pluginul evită intenționat hardlink-urile, pentru că un hardlink împarte spațiul cu fișierul viu, iar o trunchiere ar distruge ambele copii.

Poți face o variantă proprie cu un hook SessionEnd sau cu o copiere programată a lui ~/.claude/projects. Atenție la două capcane. O suprascriere simplă înlocuiește un fișier bun din arhivă cu unul trunchiat din folderul viu, iar o copie doar a fișierelor .jsonl de la primul nivel pierde folderele subagents/.

Cum repari în siguranță un transcript corupt?

Rescrierea unui transcript e riscantă, pentru că Claude Code poate adăuga în același fișier chiar atunci. Orice unealtă de reparare ar trebui să respecte aceste reguli. Ele corespund proprietăților de siguranță pe care README-ul Claude Session Guard le listează pentru pasul jsonl_repair:

  1. Fă mai întâi un backup complet. Pluginul nu oferă nicio cale de a-l sări.
  2. Oferă un dry run care raportează problemele și nu scrie nimic.
  3. Sari peste transcripturile active sau scrise recent, pentru că rescrierea unui fișier sub ochii celui care scrie în el îl trunchiază.
  4. Oprește rescrierea dacă fișierul s-a schimbat între scanare și scriere.
  5. Înlocuiește fișierul atomic: scrie un fișier temporar, fă fsync, apoi redenumește-l peste original.
  6. Arhivează fiecare linie eliminată înainte de rescriere și renunță la rescriere dacă arhivarea eșuează.
R="sh $CLAUDE_PLUGIN_ROOT/scripts/run.sh"
$R jsonl_repair --all --dry-run      # JSONL malformat, doar raport
$R api_repair scan                   # transcripturi respinse de API la reluare, doar raport
$R api_repair fix <session-id>        # repară o sesiune
$R api_repair fix --all              # repară tot ce se poate

jsonl_repair păstrează liniile neparsabile exact cum sunt și elimină doar duplicatele exacte și liniile formate numai din caractere de control, toate recuperabile din backups/sessions/removed-lines-archive.jsonl. api_repair țintește blocul de thinking gol: îl elimină (sau întreaga linie, dacă blocul era tot ce conținea), reface lanțul parentUuid și arhivează ce a scos. Rulează la SessionEnd, singurul moment în care se știe sigur că nimeni nu scrie în transcript, iar o trecere la SessionStart prinde ce a scăpat.

Cum analizezi consumul de tokenuri Claude Code pe model, în timp?

Analiza consumului de tokenuri Claude Code are nevoie de un depozit care supraviețuiește curățării. Claude Session Guard citește arhiva sa în SQLite, un rând per eveniment de utilizare, și exportă agregări CSV pe oră, zi, săptămână și lună, fiecare cu detaliu pe model, plus sessions.csv, models.csv și un fișier cu ferestrele rulante de 5 ore ale Claude.

$R usage_db stats            # totaluri generale
$R usage_db daily 30         # ultimele 30 de zile
$R usage_db models           # tokeni și cost pe model
$R usage_db sessions 40      # cronologia sesiunilor
$R usage_db sql "SELECT name FROM sqlite_master WHERE type='view'"   # listează view-urile

La numărat greșesc cele mai multe scripturi. Claude Code împarte un răspuns al asistentului pe mai multe linii (thinking, text, fiecare apel de unealtă) și repetă același obiect usage pe fiecare, deci suma pe linii numără în plus. În reconcilierea din README, 729.912 linii de transcript s-au redus la 339.927 de mesaje logice, iar o sumă naivă pe linii a ieșit de 2,03 ori totalul real. Pluginul deduplică de două ori, pe linie și pe mesaj, și păstrează rândul cu cel mai mare total de tokeni, pentru că obiectul de utilizare crește pe măsură ce răspunsul curge.

Costul cere încă un pas, pentru că Claude Code nu înregistrează o sumă în dolari în transcripturi. Pluginul o calculează din numărul de tokeni și din tarifele din tabelul model_pricing, în USD per milion de tokeni, cu coloane separate pentru scrieri în cache de 5 minute și de 1 oră și pentru citiri din cache. Un model fără rând costă 0. Asta semnalează lipsa unui tarif: modelele din planuri gratuite și cele de la terți trecute printr-un proxy apar așa până adaugi tarife. Coloanele de cache contează aici, cum arată ghidul nostru despre prompt caching. În interiorul unei sesiuni, /usage dă o estimare la preț de listă doar pentru acea sesiune. Unealta open source ccusage este un bun însoțitor. Conform README-ului Session Guard, citește folderul viu ~/.claude/projects, deci ce a șters curățarea lipsește din rapoartele ei. Folosește-le pe amândouă. Dacă treci Claude Code printr-un gateway precum My Claude Code, jurnalul lui de cereri înregistrează costul fiecărei cereri, pe partea gateway-ului.

Cum se leagă Danube Labs de asta?

Danube Labs este un studio de software și AI condus de fondator, în București. A construit Claude Session Guard și l-a publicat ca open source, iar codul e pe GitHub. Aceleași obiceiuri, backup înainte de rescriere, scrieri atomice și cifre care se reconciliază, intră în automatizările pe care le facem pentru clienți. Dacă ai un flux de lucru care merită o asemenea grijă, programează un apel introductiv gratuit.

Întrebări frecvente

Unde stochează Claude Code istoricul conversațiilor?
În fișiere JSONL la ~/.claude/projects/<project>/<session-id>.jsonl, câte unul pe sesiune, unde <project> este calea directorului tău de lucru cu caracterele non-alfanumerice înlocuite prin liniuțe. Transcripturile subagenților stau într-un subfolder numit după sesiune. Prompturile scrise de tine sunt logate și în ~/.claude/history.jsonl, pe care curățarea după vârstă nu îl șterge.
Cât timp păstrează Claude Code sesiunile?
Implicit 30 de zile. Claude Code șterge transcripturile și fișierele de sesiune asociate după ce depășesc cleanupPeriodDays, care este implicit 30 și are minimul 1. Valoarea 0 dă o eroare de validare. Schimbă setarea în settings.json și folosește o arhivă, de exemplu Claude Session Guard, dacă vrei ca istoricul să depășească acea setare.
Cum opresc Claude Code să șteargă sesiunile vechi?
Mărește cleanupPeriodDays în ~/.claude/settings.json, de exemplu la 365, apoi verifică /status pentru avertismente de setări. Pentru o copie permanentă, ține o oglindă append-only a lui ~/.claude/projects, exact ce face Claude Session Guard. Transcripturile sunt text simplu și pot conține secrete din ieșirile comenzilor, deci o retenție mai lungă înseamnă și o expunere mai lungă.
De ce nu merge claude --resume?
Cauzele frecvente sunt un transcript șters, un ID de sesiune greșit, un fișier de transcript corupt, un antivirus care încurcă fișierul pe Windows și un bloc de thinking gol care face API-ul să întoarcă eroarea 400 la reluare. Verifică dacă fișierul .jsonl există, apasă Ctrl+A în selector ca să lărgești lista și repară transcriptul, cu backup, înainte să încerci din nou.
Pot relua o sesiune Claude Code dintr-un alt folder?
Da. claude --resume <session-id> merge din orice director: Claude Code caută întâi în proiectul curent și în worktree-urile lui, apoi în toate celelalte proiecte de pe mașină. Îi poți da lui claude --resume și calea absolută a unui fișier de transcript, de exemplu o copie arhivată. Opțiunea claude --continue este cea legată de directorul curent.
Cum văd consumul de tokenuri Claude Code pe model?
În interiorul unei sesiuni, /usage arată tokenii și un cost estimat la preț de listă, pe model, pentru acea sesiune. Pentru istoric, construiește un depozit din transcripturile tale. Claude Session Guard ține o bază SQLite și scrie agregări CSV pe oră, zi, săptămână și lună, cu detaliu pe model, deduplicate astfel încât fiecare răspuns să fie numărat o singură dată.
Distribuie

Articole similare

  • 7 min de citit

    Cele mai bune modele open source pentru programare în 2026

    Cele mai bune modele open source pentru programare la 4 octombrie 2026: scoruri datate, licențe, cerințe hardware și setup pentru Claude Code, local sau găzduit.

    • Modele deschise
    • Unelte pentru dezvoltatori
    • Open source
  • 7 min de citit

    Claude Code gratis: ce merge fără abonament și ce nu

    Claude Code se instalează gratis, dar modelul este cel care costă. Iată rutele gratuite reale, modele locale, niveluri gratuite și gateway-uri, și la ce renunți.

    • Claude Code
    • Optimizarea costurilor
    • Open source