Claude Code maže historii po 30 dnech: jak si ji uložit
MarkdownKde jsou uloženy relace Claude Code, jak nastavit cleanupPeriodDays a jak uspořádat externí archiv pomocí rsync, launchd nebo cron.
Přečíst celý článek
Nápovědu k používání služby najdete v dokumentaci Ailoot.
Maže Claude Code opravdu historii relací?
Hlavní poznatek
Ano. Při každém spuštění Claude Code smaže soubory relací starší než 30 dní. Odpovídá za to nastavení cleanupPeriodDays v ~/.claude/settings.json; jeho výchozí hodnota je 30. Mazání probíhá bez varování, bez žádosti o souhlas a bez možnosti soubory obnovit.
Otevřete Claude Code, abyste se vrátili k relaci z doby před dvěma měsíci — a ona je pryč. Soubor byl z disku úplně smazán. Nejde o závadu ani o vzácnou chybu: tak funguje výchozí mechanismus čištění.
Čištění řídí jedno nastavení: cleanupPeriodDays. Jeho výchozí hodnota je 30. Při každém spuštění Claude Code prohledá složku s historií a smaže vše, co je starší než toto období. Toto nastavení jsem ve svém ~/.claude/settings.json vůbec neměl, takže platila výchozí hodnota a některé mé starší relace už byly pryč.
V repozitáři Anthropic je otevřeno několik hlášení chyb týkajících se tohoto problému a žádné z nich nebylo vyřešeno.
Kam Claude Code ukládá historii relací?
Hlavní poznatek
Historie každé relace se ukládá do ~/.claude/projects/<project-path>/<session-id>.jsonl. Název složky tvoří absolutní cesta pracovního adresáře, ve kterém jste spustili Claude Code, přičemž lomítka jsou nahrazena pomlčkami. Soubor .jsonl obsahuje celou konverzaci, řádek po řádku: vaše zadání, odpovědi modelu, volání nástrojů a úpravy souborů. Právě tyto vzpomínky čištění maže.
Najít historii je snadné. Otevřete terminál a podívejte se na obsah složky:
ls ~/.claude/projects/
Každá podsložka představuje samostatný projekt. Její název zakóduje cestu: například projekt v /Users/alex/dev/shop bude mít složku -Users-alex-dev-shop. Uvnitř jsou soubory relací:
ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl ← jedna relace = jeden soubor
# a91b7d40-....jsonl
Každý soubor .jsonl je řádkový záznam: jeden řádek odpovídá jedné události relace. Obsahuje víc než jen text konverzace. Uchovává logiku vašich rozhodnutí: proč jste zvolili určitou strukturu databáze, které možnosti jste zavrhli, kde Claude udělal chybu a jak jste ji napravili.
V podstatě jde o deník vývoje projektu. Proto je jeho ztráta tak bolestivá: nepřijdete o „chat“, ale o kontext, který jste budovali celé týdny. Strukturu tohoto kontextu popisuji v návodu „Claude Memory vs. CLAUDE.md“.
Proč Anthropic maže přepisy po 30 dnech?
Hlavní poznatek
Postoj Anthropic se opírá o soukromí a bezpečnost. Soubory relací se ukládají na disk v prostém textu a mohou obsahovat zdrojový kód, hesla i klíče API. Uchovávat je navždy představuje riziko: pokud vám někdo ukradne notebook nebo získá přístup k disku, dostane se ke všem těmto citlivým údajům. Třicetidenní lhůta má představovat kompromis mezi „navázáním na nedávnou práci“ a „neuchováváním tajemství na disku déle, než je nutné“.
Mazání má své opodstatnění a než ho úplně vypnete, stojí za to mu porozumět. Přepis je prostý text. Pokud Claude během relace četl soubor .env, vložil klíč do příkazu nebo jste zadali heslo do promptu, všechno se uložilo do .jsonl jako prostý text. Čím déle takový soubor zůstává na disku, tím větší je šance, že jednou unikne.
Anthropic to říká jasně: přepisy mohou obsahovat zdrojový kód, přihlašovací údaje a další citlivý materiál a jejich uchovávání na disku déle, než je nutné, představuje skutečné riziko pro soukromí. Třicetidenní lhůta byla zvolena jako kompromis.
Námitky komunity se týkají tří věcí: mazání probíhá potichu (při nastavení ani spuštění se nezobrazí žádné varování), chybí souhlas (nikdo se vás nezeptá) a soubory nelze obnovit (nepoužívá se Koš a neexistuje možnost vrácení změn). V issue #59248 vývojáři žádají jediné: nastavit férové čištění — přidat varování a lhůtu pro obnovu a použít méně agresivní výchozí dobu.
Proč může zálohovací skript sám spustit mazání?
Hlavní poznatek
Čištění určuje, co smazat, podle času poslední změny souboru (mtime). Nekontroluje skutečnou poslední aktivitu v relaci. Každý proces, který se dotkne souboru .jsonl — synchronizace s cloudem, rsync, editor nebo skript — může změnit jeho mtime, takže nová relace začne vypadat zastarale. Při příštím spuštění Claude Code relaci vyhodnotí jako starou a smaže ji. Paradox je v tom, že naivní pokus zálohovat historii uvnitř spravované složky urychlí její ztrátu.
Tohle je nejzáludnější část a nachytá lidi, kteří se snaží svá data chránit sami. Čištění sleduje mtime, tedy čas poslední změny souboru. Předpokládá, že mtime odpovídá době, kdy jste v relaci naposledy pracovali. V praxi ho může změnit cokoli: synchronizační klient Dropboxu nebo iCloudu, rsync, antivirový software, indexovací služba nebo váš vlastní zálohovací skript.
Tady je háček. Rozhodnete se uložit historii a nastavíte synchronizaci složky ~/.claude/projects/ s cloudem. Synchronizační služba někdy přepíše soubor a nastaví jeho mtime na dřívější datum (k tomu může dojít při obnovení z cloudové kopie). Claude Code při spuštění uvidí „starý“ soubor a smaže ho. Chtěli jste ho uchovat, ale urychlili jste jeho smazání.
Z toho plyne jediný závěr: záloha musí být mimo ~/.claude/projects/. Čištění probíhá pouze uvnitř této složky. Kopie uložená mimo ni je mimo dosah čištění. Na tomto principu postavím řešení.
Jak můžete okamžitě zastavit mazání historie?
Hlavní poznatek
Stačí jedno nastavení. Otevřete ~/.claude/settings.json a nastavte cleanupPeriodDays na vysoké číslo — například 3650 (deset let). V praxi se tím automatické mazání vypne: nic nebude starší než stanovený limit. Důležité: toto nastavení chrání pouze to, co ještě nebylo smazáno. Historii, kterou už čištění vymazalo, nelze obnovit. Prvním krokem je tedy jednat dřív, než přijdete o další relaci.
Mazání zastavíte ve třech krocích:
- Otevřete soubor s nastavením:
~/.claude/settings.json(pokud soubor neexistuje, vytvořte ho). - Přidejte nastavení
cleanupPeriodDayss vysokou hodnotou:
{
"cleanupPeriodDays": 3650
}
- Soubor uložte. Nastavení se uplatní při příštím spuštění Claude Code.
Hodnota 3650 znamená deset let: v praxi už k mazání nebude docházet. Pokud chcete čištění zachovat, ale dopřát si více času, nastavte 365 (jeden rok); pak budou mizet jen relace starší než rok. Zda se nastavení načetlo, můžete ověřit tímto příkazem:
grep cleanupPeriodDays ~/.claude/settings.json
Snadno přehlédnutelná výhrada: prodloužení období NEOBNOVÍ to, co už bylo smazáno. Čištění se spouští při startu a vše vymazané při předchozích spuštěních je nenávratně pryč. Proto byste toto nastavení měli provést jako první — zabrání budoucím ztrátám, ale nevrátí to, co už bylo smazáno. Pokud se chcete vyhnout ztrátě historie Claude Code i svého projektu kvůli nechtěnému příkazu, podívejte se na návod „Jak nastavit Claude Code, aby nepoškodil váš projekt“.
Historie relací je součástí druhého mozku vašeho projektu: obsahuje logiku rozhodnutí, kterou jste nikde jinde nezaznamenali. cleanupPeriodDays soubory zachová, ale nevytvoří z nich systém, který vám umožní najít potřebné informace i za šest měsíců.
Jak automaticky archivovat historii mimo čištěnou složku?
Hlavní poznatek
Kopírujte relace do archivu MIMO ~/.claude/projects/, kde se na ně čištění nevztahuje. Jednoduché denní spuštění rsync -a do samostatné složky stačí: nové soubory se přidají a staré zůstanou. Protože je archiv mimo spravovanou složku, neovlivní ho ani cleanupPeriodDays, ani chyba s mtime. Spouštění automatizujte pomocí launchd (macOS) nebo cron (Linux) a vaše historie se bude postupně hromadit sama.
Princip je jednoduchý: nechte Claude Code, ať si se svou složkou dělá, co chce, a vy si udržujte samostatný archiv mimo ni. Chrání ho to před tímto čištěním, stále ale může zaniknout při selhání disku, náhodném smazání nebo neúspěšném kopírování. Nastavte ho takto:
- Vytvořte složku archivu mimo spravovaný adresář:
mkdir -p ~/claude-history-archive
- Zkopírujte do ní aktuální historii. Příznak
-azachová strukturu a časová razítka;--ignore-existingponechá již zkopírované soubory beze změny:
rsync -a ~/.claude/projects/ ~/claude-history-archive/
- Automatizujte denní spuštění. V macOS použijte launchd. Vytvořte soubor
~/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>
- Načtěte agenta, aby běžel na pozadí:
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist
V Linuxu se totéž provede jedním řádkem v crontabu (crontab -e):
0 3 * * * rsync -a ~/.claude/projects/ ~/claude-history-archive/
Proč to funguje, když synchronizace z předchozí části selhává? Archiv je MIMO ~/.claude/projects/, takže ho čištění vůbec nevidí. Kopírování probíhá jedním směrem (z živé složky do archivu) a mtime živých souborů se nemění — k chybě s mtime tedy nedochází. I kdyby Claude Code zítra smazal relaci ze své složky, její kopie zůstane v archivu.
Jak proměnit archiv relací ve vyhledatelný druhý mozek?
Hlavní poznatek
Uložte archiv pod git a získáte verzovanou, plně prohledávatelnou databázi všech svých relací. Spusťte git init ve složce archivu a každý den použijte git add -A && git commit, abyste získali historii změn a ochranu před náhodným přepsáním. Minulé relace můžete prohledávat běžným grepem a pomocí jq z nich vytahovat strukturovaný obsah, protože .jsonl je JSON oddělený po řádcích. Díky tomu se z archivu stane praktický nástroj.
Pouhé hromadění souborů nestačí — potřebujete se k nim dostat. Dva kroky promění archiv ve funkční nástroj.
Nejprve ho spravujte ve verzích pomocí git. Inicializujte repozitář ve složce archivu:
cd ~/claude-history-archive
git init
git add -A && git commit -m "First snapshot of Claude Code history"
Přidejte git add -A && git commit do stejného denního běhu jako rsync. Získáte historii verzí: uvidíte, co se objevilo a kdy, a náhodné přepsání vrátíte jediným příkazem.
Druhým krokem je vyhledávání. Soubory .jsonl obsahují JSON oddělený po řádcích, takže s nimi můžete pracovat pomocí známých nástrojů. Zjistěte, ve které relaci se mluvilo o určitém tématu:
grep -rl "database migration" ~/claude-history-archive/
Ze relace vytáhněte pouze text svých zadání (pomocí jq, protože jde o JSON):
jq -r 'select(.type=="user") | .message.content' session.jsonl
V tomto okamžiku začne historie relací sloužit jako druhý mozek projektu: databáze, ve které během několika sekund najdete „jak jsme o tom rozhodli v březnu“. Samostatný rozbor toho, kam v relaci míří kontext a jak ho spravovat, najdete v návodu „Kam mizí tokeny v Claude Code“.
Lze obnovit relace, které už byly smazány?
Hlavní poznatek
Vestavěný způsob neexistuje. Claude Code přesunuté soubory do Koše nedává a neuchovává možnost vrácení změn; soubor je nenávratně smazán. Jedinou šancí jsou externí kopie pořízené PŘED smazáním: snímek Time Machine v macOS, historie verzí OneDrive nebo Dropboxu, případně ruční záloha. Pokud nic z toho nemáte, relace je ztracena. Proto je třeba ochranu nastavit předem — dřív, než bude co ztratit.
Upřímná odpověď: pravděpodobně ne. Claude Code nemá funkci obnovy, Koš ani protokol vrácení smazaných přepisů. Soubor jednoduše zmizí z disku.
Existuje jedna možnost: systémové zálohy, pokud byly zapnuté předem:
- macOS Time Machine — pokud snímek zachytil
~/.claude/projects/před smazáním, můžete soubor obnovit ze zálohy k požadovanému datu. - Historie verzí OneDrive / Dropboxu — pokud byla složka synchronizovaná se zapnutou historií verzí, vyhledejte soubor v cloudové historii verzí (ale nezapomeňte na háček s mtime: synchronizace také mohla spustit smazání).
- Ruční kopie — jakýkoli příkaz
rsync/cp, kterým jste soubory ručně zkopírovali někam mimo spravovanou složku.
Pokud nic z toho nebylo k dispozici, relace je pryč. A nejde o vzácný případ: jednomu autorovi chyby v repozitáři Anthropic se poškodilo 26 z 38 záznamů, což představovalo měsíce práce. Jedinou spolehlivou ochranou je ta, která je na místě PŘED ztrátou. Nastavte cleanupPeriodDays a automatické archivování už dnes, dokud je ještě co zachránit.
Jakou hodnotu zvolit pro cleanupPeriodDays?
Hlavní poznatek
Pro většinu lidí je vhodné použít 3650 (deset let, což mazání prakticky vypne) a k tomu externí automatický archiv. Výchozí hodnotu 30 ponechte jen tehdy, pokud historii nepotřebujete a je pro vás důležitější neuchovávat tajemství na disku. Hodnota 365 je rozumný kompromis s každoročním čištěním. Další možností je historii vůbec nezapisovat: použijte proměnnou prostředí CLAUDE_CODE_SKIP_PROMPT_HISTORY nebo příznak --no-session-persistence, ale to slouží opačnému účelu.
Jedno nastavení může znamenat několik různých věcí. Porovnejte možnosti a zvolte tu, která odpovídá vašemu použití:
| Hodnota | Co dělá | Pro koho se hodí |
|---|---|---|
30 (výchozí) | Při spuštění smaže relace starší než 30 dní | Historii nepotřebujete a záleží vám víc na tom, aby citlivá data nezůstávala uložená na disku |
365 | Uchová rok historie a poté ji jednou ročně smaže | Potřebujete nedávnou historii, ale ne trvalý archiv |
3650 | Prakticky vypne mazání | Chcete uchovat vše + externí archiv (doporučeno) |
CLAUDE_CODE_SKIP_PROMPT_HISTORY | Vůbec nezapisuje historii na disk | Maximální soukromí; historii vůbec nepotřebujete |
Důležité bezpečnostní upozornění: pokud nastavíte 3650 a uchováte vše, souhlasíte s tím, že budete na disku ukládat přepisy, které mohou obsahovat klíče a kód. Jde o vědomý kompromis: pohodlí archivu versus riziko. Riziko omezíte takto: uchovávejte archiv na šifrovaném disku (FileVault v macOS), nedávejte ho do veřejného cloudu a neodesílejte ho do veřejného repozitáře git. Připravil jsem samostatný návod o tom, jaká data mohou uniknout přes Claude Code: „Zabezpečení dat v Claude Code“.
Co udělat dnes: kontrolní seznam
Hlavní poznatek
Tyto kroky snižují riziko ztráty historie: prodlužte uchovávání přes cleanupPeriodDays: 3650, kopírujte relace mimo ~/.claude/projects/ a archiv verzujte. Před čištěním Claude Code jsou chráněny pouze úspěšně zkopírované soubory. Při úspěšných denních bězích zůstává až den posledních změn bez archivu; selhání či vynechání běhu mezeru prodlužuje. Kopie na stejném disku nechrání před jeho selháním.
Ochranu nastavte krok za krokem:
- Nastavte
cleanupPeriodDays: 3650v~/.claude/settings.json— tím zastavíte mazání. - Vytvořte
~/claude-history-archivemimo spravovanou složku a poprvé spusťtersync -a. - Naplánujte každodenní spuštění pomocí launchd (macOS) nebo cron (Linux).
- Inicializujte git v archivu a do stejného běhu přidejte
git add -A && git commit. - Zkontrolujte, že je archiv na šifrovaném disku a nesynchronizuje se do veřejného cloudu.
- U každého plánovaného běhu ověřte úspěšné kopírování, prohlédněte nedávnou archivovanou relaci a pravidelně obnovte vzorek do oddělené dočasné složky, abyste ověřili čitelnost.
- Má-li ochrana zahrnovat ztrátu zařízení či disku, uchovávejte nezávisle uloženou zálohu s odpovídajícím řízením přístupu a testujte i její obnovu. Historie Git na stejném disku není nezávislá záloha.
Historie relací je jen jednou vrstvou kontextu, díky které je Claude spolehlivý.
Zdroje
Poznejte Ailoot.
Další podrobnosti
Časté otázky
Zaručuje denní archiv, že se žádná relace neztratí?
Ne. Chrání úspěšně zkopírované soubory před čištěním spravované složky. I při úspěšných denních bězích může chybět den posledních změn; selhání mezeru prodlužuje a kopie na stejném disku může zaniknout s originálem.
Jak ověřit použitelnost archivu?
Ověřujte úspěšnost plánovaných kopií, prohlédněte nedávno archivovanou relaci a pravidelně obnovte vzorek do oddělené dočasné složky. Pro ztrátu zařízení či disku otestujte i zálohu uloženou nezávisle na originálu.