# Claude Code usuwa historię po 30 dniach: jak ją zachować

> Gdzie przechowywane są sesje Claude Code, jak skonfigurować cleanupPeriodDays oraz jak zorganizować zewnętrzne archiwum za pomocą rsync, launchd lub cron.

Source: https://ailoot.ai/blog/pl/claude-code-history-30-days/
Canonical: https://ailoot.ai/blog/pl/claude-code-history-30-days/
Language: pl
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-056
Revision: sha256-39181c85e3a3fc3ae96fb9aea121f9c81f1c25d91210c6db739494d3ab7d64c8


Aby uzyskać pomoc w korzystaniu z usługi, zobacz [dokumentację Ailoot](https://ailoot.ai/docs/).



## Czy Claude Code naprawdę usuwa historię sesji?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Tak. Przy każdym uruchomieniu Claude Code usuwa pliki sesji starsze niż 30 dni. Odpowiada za to ustawienie `cleanupPeriodDays` w pliku `~/.claude/settings.json`; jego wartość domyślna to `30`. Usuwanie odbywa się bez ostrzeżenia, bez pytania o zgodę i bez możliwości odzyskania plików.

</div>

Otwierasz Claude Code, żeby wrócić do sesji sprzed dwóch miesięcy — a jej nie ma. Plik został całkowicie usunięty z dysku. To nie usterka ani rzadki błąd: tak działa domyślny mechanizm czyszczenia.

Za czyszczenie odpowiada jedno ustawienie: `cleanupPeriodDays`. Jego wartość domyślna to `30`. Przy każdym uruchomieniu Claude Code skanuje folder historii i usuwa wszystko, co jest starsze niż ten okres. W moim pliku `~/.claude/settings.json` w ogóle nie było tego ustawienia, więc obowiązywała wartość domyślna, a część moich starszych sesji już zniknęła.

W repozytorium Anthropic otwartych jest kilka zgłoszeń błędów dotyczących tej sprawy i żadne z nich nie zostało naprawione.

## Gdzie Claude Code przechowuje historię sesji?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Historia każdej sesji jest przechowywana w pliku `~/.claude/projects/<project-path>/<session-id>.jsonl`. Nazwą folderu jest bezwzględna ścieżka katalogu roboczego, w którym uruchomiono Claude Code, ze znakami ukośnika zastąpionymi łącznikami. Plik `.jsonl` zawiera całą rozmowę, linia po linii: Twoje prompty, odpowiedzi modelu, wywołania narzędzi i edycje plików. To właśnie te dane usuwa mechanizm czyszczenia.

</div>

Znalezienie historii jest proste. Otwórz terminal i wyświetl zawartość folderu:

```bash
ls ~/.claude/projects/
```

Każdy podfolder odpowiada osobnemu projektowi. Jego nazwa koduje ścieżkę: na przykład projekt w lokalizacji `/Users/alex/dev/shop` będzie miał folder `-Users-alex-dev-shop`. W środku znajdują się pliki sesji:

```bash
ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl   ← jedna sesja = jeden plik
# a91b7d40-....jsonl
```

Każdy plik `.jsonl` to dziennik zapisany linia po linii: jedna linia odpowiada jednemu zdarzeniu w sesji. Zawiera więcej niż sam tekst rozmowy. Przechowuje tok rozumowania stojący za Twoimi decyzjami: dlaczego wybrano określoną strukturę bazy danych, które opcje odrzucono, gdzie Claude popełnił błąd i jak go poprawiono.

W istocie jest to dziennik rozwoju projektu. Dlatego jego utrata boli: tracisz nie „czat”, lecz kontekst budowany przez wiele tygodni. O tym, jak jest zorganizowany, pisałem w poradniku [„Claude Memory a CLAUDE.md”](https://ailoot.ai/blog/pl/claude-memory-claude-md-auto-memory/).

## Dlaczego Anthropic usuwa transkrypcje po 30 dniach?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Stanowisko Anthropic dotyczy prywatności i bezpieczeństwa. Pliki sesji są przechowywane na dysku w postaci zwykłego tekstu i mogą zawierać kod źródłowy, hasła oraz klucze API. Bezterminowe przechowywanie stanowi ryzyko: jeśli laptop zostanie skradziony lub ktoś uzyska dostęp do dysku, otrzyma wszystkie te wrażliwe dane. Okres 30 dni ma równoważyć „możliwość wznowienia niedawnej pracy” z „nieprzechowywaniem tajemnic na dysku dłużej, niż to konieczne”.

</div>

Usuwanie ma swoje uzasadnienie i warto je zrozumieć, zanim całkowicie je wyłączysz. Transkrypcja to zwykły tekst. Jeśli Claude odczytał podczas sesji plik `.env`, wstawił klucz do polecenia albo wkleiłeś hasło do promptu, wszystko to znalazło się w pliku `.jsonl` w postaci zwykłego tekstu. Im dłużej taki plik pozostaje na dysku, tym większe ryzyko, że kiedyś wycieknie.

Anthropic jasno stwierdza, że transkrypcje mogą zawierać kod źródłowy, dane uwierzytelniające i inne wrażliwe materiały, a przechowywanie ich na dysku dłużej, niż to konieczne, stwarza realne zagrożenie dla prywatności. Okres 30 dni wybrano jako kompromis.

Zastrzeżenia społeczności dotyczą trzech kwestii: usuwanie odbywa się po cichu (podczas konfiguracji ani uruchamiania nie pojawia się ostrzeżenie), użytkownik nie wyraża zgody (nikt go o nią nie pyta), a plików nie można odzyskać (nie trafiają do Kosza i nie ma możliwości cofnięcia operacji). W issue \#59248 programiści proszą o jedną rzecz: sprawiedliwsze czyszczenie — ostrzeżenie, okres umożliwiający odzyskanie oraz mniej restrykcyjny domyślny czas przechowywania.

## Dlaczego skrypt kopii zapasowej może sam wywołać usuwanie?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Mechanizm czyszczenia decyduje, co usunąć, na podstawie czasu modyfikacji pliku (mtime). Nie sprawdza faktycznej ostatniej aktywności w sesji. Każdy proces, który dotknie pliku `.jsonl` — synchronizacja z chmurą, rsync, edytor czy skrypt — może zmienić jego mtime i sprawić, że świeża sesja będzie wyglądać na przestarzałą. Przy następnym uruchomieniu Claude Code uzna ją za starą i usunie. Paradoks polega na tym, że nieprzemyślana próba utworzenia kopii historii w zarządzanym folderze przyspiesza jej utratę.

</div>

To najbardziej podstępny problem i właśnie na nim potykają się osoby, które próbują samodzielnie chronić swoje dane. Mechanizm czyszczenia sprawdza mtime, czyli znacznik czasu ostatniej modyfikacji pliku. Zakłada, że mtime odzwierciedla czas ostatniej pracy w sesji. W praktyce może go zmienić niemal wszystko: klient synchronizacji Dropbox lub iCloud, `rsync`, oprogramowanie antywirusowe, indeksator albo własny skrypt kopii zapasowej.

Oto pułapka. Postanawiasz zachować historię i konfigurujesz synchronizację z chmurą dla `~/.claude/projects/`. W pewnym momencie usługa synchronizacji ponownie zapisuje plik i ustawia jego mtime na wcześniejszą datę (może się tak zdarzyć podczas przywracania z kopii w chmurze). Claude Code widzi przy uruchomieniu „stary” plik i go usuwa. Chcesz go zachować, ale przyspieszasz jego usunięcie.

Wniosek jest tylko jeden: **kopia zapasowa musi znajdować się poza `~/.claude/projects/`**. Mechanizm czyszczenia działa wyłącznie w tym folderze. Kopia przechowywana poza nim jest poza jego zasięgiem. Na tej zasadzie oprę rozwiązanie.

## Jak natychmiast zatrzymać usuwanie historii?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Wystarczy jedno ustawienie. Otwórz `~/.claude/settings.json` i ustaw `cleanupPeriodDays` na dużą wartość, na przykład `3650` (dziesięć lat). W praktyce wyłącza to automatyczne usuwanie: nic nie będzie starsze niż ten limit. Ważne: to ustawienie chroni tylko to, co nie zostało jeszcze usunięte. Historii skasowanej przez mechanizm czyszczenia nie da się przywrócić. Dlatego pierwszym krokiem jest działanie, zanim stracisz kolejną sesję.

</div>

Zatrzymaj usuwanie w trzech krokach:

1.  Otwórz plik ustawień: `~/.claude/settings.json` (jeśli plik nie istnieje, utwórz go).
2.  Dodaj ustawienie `cleanupPeriodDays` z dużą wartością:

```json
{
  "cleanupPeriodDays": 3650
}
```

3.  Zapisz plik. Ustawienie zacznie obowiązywać przy następnym uruchomieniu Claude Code.

Wartość `3650` oznacza dziesięć lat: w praktyce usuwanie przestanie się odbywać. Jeśli chcesz zachować czyszczenie, ale dać sobie więcej czasu, ustaw `365` (jeden rok); wtedy znikną tylko sesje starsze niż rok. Za pomocą tego polecenia możesz sprawdzić, czy ustawienie zostało odczytane:

```bash
grep cleanupPeriodDays ~/.claude/settings.json
```

Łatwo przeoczyć jedno zastrzeżenie: wydłużenie okresu NIE przywróci tego, co już usunięto. Czyszczenie uruchamia się przy starcie, a wszystko skasowane podczas wcześniejszych uruchomień przepadło na zawsze. Dlatego najpierw należy zmienić to ustawienie — zapobiega przyszłym stratom, ale nie przywraca tego, co już zostało usunięte. Jeśli chcesz chronić nie tylko historię Claude Code, lecz także projekt przed przypadkowym poleceniem, zobacz poradnik [„Jak skonfigurować Claude Code, żeby nie uszkodził projektu”](https://ailoot.ai/blog/pl/claude-code-safe-overnight-setup/).

Historia sesji to część drugiego mózgu projektu: zawiera tok rozumowania, którego nie zapisałeś nigdzie indziej. `cleanupPeriodDays` zachowuje pliki, ale nie zmienia ich w system, który pozwoli Ci odnaleźć potrzebne informacje za sześć miesięcy.



## Jak automatycznie archiwizować historię poza folderem czyszczenia?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Kopiuj sesje do archiwum znajdującego się POZA `~/.claude/projects/`, gdzie czyszczenie nie obowiązuje. Wystarczy raz dziennie skopiować pliki do osobnego katalogu za pomocą `rsync -a`: nowe pliki zostaną dodane, a stare pozostaną. Ponieważ archiwum znajduje się poza tym folderem, nie wpływają na nie ani `cleanupPeriodDays`, ani problem mtime. Zautomatyzuj działanie za pomocą launchd (macOS) lub cron (Linux), a historia będzie gromadzić się samoczynnie.

</div>

Pomysł jest prosty: pozwól Claude Code robić z jego folderem, co zechce, a sam przechowuj osobne archiwum poza nim. Chroni je to przed tym mechanizmem czyszczenia, lecz nadal można je utracić wskutek awarii dysku, przypadkowego usunięcia lub nieudanej kopii. Skonfiguruj je tak:

1.  Utwórz folder archiwum poza zarządzanym katalogiem:

```bash
mkdir -p ~/claude-history-archive
```

2.  Skopiuj tam bieżącą historię. Flaga `-a` zachowuje strukturę i znaczniki czasu; `--ignore-existing` pozostawia bez zmian pliki, które już skopiowano:

```bash
rsync -a ~/.claude/projects/ ~/claude-history-archive/
```

3.  Zautomatyzuj codzienne uruchamianie. W systemie macOS użyj launchd. Utwórz plik `~/Library/LaunchAgents/com.example.claudearchive.plist`:

```xml
<?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>
```

4.  Załaduj agenta, aby działał w tle:

```bash
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist
```

W systemie Linux to samo można zrobić, dodając jeden wiersz do crontab (`crontab -e`):

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

Dlaczego to działa, skoro synchronizacja opisana w poprzedniej sekcji zawodzi? Archiwum znajduje się POZA `~/.claude/projects/`, więc mechanizm czyszczenia w ogóle go nie widzi. Kopiowanie odbywa się w jednym kierunku (z aktywnego folderu do archiwum) i nie zmieniamy mtime aktywnych plików, więc problem mtime nie występuje. Nawet jeśli jutro Claude Code usunie sesję ze swojego folderu, jej kopia pozostanie w archiwum.

## Jak zmienić archiwum sesji w przeszukiwalny drugi mózg?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Umieść archiwum pod kontrolą git, a otrzymasz wersjonowaną, w pełni przeszukiwalną bazę danych wszystkich sesji. Uruchom `git init` w folderze archiwum, a następnie codziennie wykonuj `git add -A && git commit`, aby uzyskać historię zmian i ochronę przed przypadkowym nadpisaniem. Dawne sesje możesz przeszukiwać za pomocą zwykłego grep, a uporządkowane dane wyodrębniać przy użyciu jq, ponieważ `.jsonl` zawiera JSON rozdzielony na linie. Dzięki temu archiwum staje się praktycznym narzędziem.

</div>

Samo gromadzenie plików nie wystarczy — musisz mieć do nich dostęp. Dwa kroki zamienią archiwum w działające narzędzie.

Po pierwsze, zarządzaj jego wersjami za pomocą git. Zainicjuj repozytorium w folderze archiwum:

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

Dodaj `git add -A && git commit` do tego samego codziennego zadania co rsync. W ten sposób zyskasz historię wersji: zobaczysz, co i kiedy się pojawiło, a przypadkowe nadpisanie cofniesz jednym poleceniem.

Po drugie, przeszukuj archiwum. Pliki `.jsonl` zawierają JSON rozdzielony na linie, więc możesz użyć znanych narzędzi. Znajdź sesje, w których omawiano konkretny temat:

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

Wyodrębnij z sesji sam tekst promptów za pomocą jq, ponieważ plik zawiera dane JSON:

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

Na tym etapie historia sesji zaczyna działać jak drugi mózg projektu: baza danych, w której w kilka sekund odnajdziesz odpowiedź na pytanie „jak zdecydowaliśmy o tym w marcu”. Osobny opis tego, gdzie trafia kontekst podczas sesji i jak nim zarządzać, znajdziesz w poradniku [„Dokąd trafiają tokeny w Claude Code”](https://ailoot.ai/blog/pl/where-claude-code-tokens-go/).

## Czy można odzyskać sesje, które zostały już usunięte?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Nie ma wbudowanej metody. Claude Code nie przenosi usuniętych plików do Kosza ani nie przechowuje możliwości cofnięcia operacji; plik zostaje skasowany na zawsze. Jedyną szansą są zewnętrzne kopie utworzone PRZED usunięciem: migawka Time Machine w systemie macOS, historia wersji OneDrive lub Dropbox albo ręczna kopia zapasowa. Jeśli żadna z nich nie istnieje, sesja przepadła. Dlatego ochronę trzeba skonfigurować z wyprzedzeniem — zanim pojawi się coś, co można stracić.

</div>

Uczciwa odpowiedź brzmi: prawdopodobnie nie. Claude Code nie ma funkcji odzyskiwania, Kosza ani dziennika cofania usuniętych transkrypcji. Plik po prostu znika z dysku.

Jest jedna możliwość: kopie zapasowe systemu, jeśli zostały wcześniej włączone:

1.  **macOS Time Machine** — jeśli migawka wykonana przed usunięciem zawierała `~/.claude/projects/`, możesz pobrać plik z kopii zapasowej z wybranej daty.
2.  **Historia wersji OneDrive / Dropbox** — jeśli folder był synchronizowany z włączonym przechowywaniem wersji, poszukaj pliku w historii wersji chmury (pamiętaj jednak o pułapce mtime: synchronizacja mogła również wywołać usunięcie).
3.  **Kopie ręczne** — dowolne pliki skopiowane za pomocą ręcznie uruchomionego `rsync` lub `cp` poza zarządzany folder.

Jeśli żadna z tych kopii nie istniała, sesja przepadła. I wcale nie jest to rzadkie: autor jednego zgłoszenia błędu w repozytorium Anthropic stracił 26 z 38 zapisów, obejmujących miesiące pracy. Jedyną niezawodną ochroną jest ta, która działa PRZED utratą danych. Skonfiguruj dziś `cleanupPeriodDays` i automatyczne archiwizowanie, póki jest jeszcze co zachować.

## Jaką wartość wybrać dla cleanupPeriodDays?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Większości osób polecam `3650` (dziesięć lat, co praktycznie wyłącza usuwanie) oraz zewnętrzne automatyczne archiwum. Wartość domyślną `30` pozostaw tylko wtedy, gdy nie potrzebujesz historii i ważniejsze jest dla Ciebie nieprzechowywanie tajemnic na dysku. Wartość `365` to rozsądny kompromis z corocznym czyszczeniem. Możesz też w ogóle nie zapisywać historii: użyj zmiennej środowiskowej `CLAUDE_CODE_SKIP_PROMPT_HISTORY` lub flagi `--no-session-persistence`, ale służy to przeciwnemu celowi.

</div>

Jest jedno ustawienie, ale może oznaczać kilka różnych rzeczy. Porównaj opcje i wybierz odpowiednią do swojego zastosowania:

| Wartość | Działanie | Dla kogo |
|----|----|----|
| `30` (wartość domyślna) | Przy uruchomieniu usuwa sesje starsze niż 30 dni | Nie potrzebujesz historii; ważniejsze jest unikanie przechowywania wrażliwych danych na dysku |
| `365` | Zachowuje roczną historię, a potem czyści ją raz w roku | Potrzebujesz niedawnej historii, ale nie bezterminowego archiwum |
| `3650` | Praktycznie wyłącza usuwanie | Chcesz zachować wszystko i mieć zewnętrzne archiwum (zalecane) |
| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | W ogóle nie zapisuje historii na dysku | Maksymalna prywatność; nie potrzebujesz żadnej historii |

Ważne zastrzeżenie dotyczące bezpieczeństwa: ustawiając `3650` i zachowując wszystko, zgadzasz się na przechowywanie na dysku transkrypcji, które mogą zawierać klucze i kod. To świadomy kompromis między wygodą archiwum a ryzykiem. Ogranicz ryzyko: przechowuj archiwum na szyfrowanym dysku (FileVault w systemie macOS), nie umieszczaj go w publicznej chmurze i nie przesyłaj go do publicznego repozytorium git. Przygotowałem osobny poradnik o danych, które mogą wyciec przez Claude Code: [„Bezpieczeństwo danych w Claude Code”](https://ailoot.ai/blog/pl/claude-code-data-access-safety/).

## Co zrobić dziś: lista kontrolna

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

Najważniejsze informacje

Te kroki ograniczają utratę historii: wydłuż retencję przez `cleanupPeriodDays: 3650`, kopiuj sesje poza `~/.claude/projects/` i wersjonuj archiwum. Tylko poprawnie skopiowane pliki są chronione przed czyszczeniem Claude Code. Dzienny harmonogram pozostawia do jednego dnia nowych zmian poza archiwum, gdy kopie się udają; nieudane lub pominięte uruchomienia wydłużają tę lukę. Kopia na tym samym dysku nie chroni przed jego awarią.

</div>

Skonfiguruj ochronę krok po kroku:

1.  Ustaw `cleanupPeriodDays: 3650` w pliku `~/.claude/settings.json` — zatrzymasz usuwanie.
2.  Utwórz `~/claude-history-archive` poza zarządzanym folderem i uruchom pierwsze `rsync -a`.
3.  Zaplanuj codzienne uruchamianie za pomocą launchd (macOS) lub cron (Linux).
4.  Zainicjuj git w archiwum i dodaj `git add -A && git commit` do tego samego zadania.
5.  Sprawdź, czy archiwum znajduje się na szyfrowanym dysku i nie jest synchronizowane z publiczną chmurą.
6.  Przy każdym zaplanowanym uruchomieniu sprawdź udane kopiowanie, potem obejrzyj najnowszą sesję w archiwum i okresowo odtwórz próbkę w osobnym folderze tymczasowym, aby potwierdzić czytelność.
7.  Jeśli zakładasz utratę urządzenia lub dysku, zachowuj niezależnie przechowywaną kopię z właściwą kontrolą dostępu i również testuj odtwarzanie. Historia Git na tym samym dysku nie jest niezależną kopią.

Historia sesji to tylko jedna warstwa kontekstu, która sprawia, że Claude działa niezawodnie.

<div class="section" role="doc-bibliography" aria-label="Sources">

### Źródła

- [Claude Code Docs - ustawienia settings.json (cleanupPeriodDays)](https://code.claude.com/docs/en/settings)
- [Claude Code Docs - nowości](https://code.claude.com/docs/en/whats-new)

</div>





Poznaj [Ailoot](https://ailoot.ai/).

## Pytania i odpowiedzi

### Czy dzienne archiwum gwarantuje zachowanie każdej sesji?

Nie. Chroni poprawnie skopiowane pliki przed czyszczeniem folderu zarządzanego. Przy udanych dziennych kopiach może brakować do jednego dnia nowych zmian; błędy wydłużają lukę, a kopia na tym samym dysku może zginąć wraz z oryginałem.

### Jak sprawdzić użyteczność archiwum?

Potwierdzaj powodzenie zaplanowanych kopii, obejrzyj niedawno zarchiwizowaną sesję i okresowo odtwórz próbkę w osobnym folderze tymczasowym. Dla ochrony przed utratą urządzenia lub dysku przetestuj też kopię przechowywaną niezależnie od oryginału.


## Ailoot · Firma i jej portfel projektów

Ailoot opiera się na zgromadzonym doświadczeniu operacyjnym, szerokiej bazie klientów, stabilnej usłudze i stałej kontroli KPI.

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Ailoot wykorzystuje to doświadczenie operacyjne, zapewniając dostęp przez API do funkcji AI w produktach klientów, agentach, aplikacjach i automatyzacjach.
