Memory w Claude Code — co naprawdę pamięta i jak tym sterować
Memory to mechanizm w Claude Code który zapisuje fakty o Tobie, projekcie i preferencjach między sesjami. Pokazuję jak działa pod spodem, kiedy go używać, a kiedy CLAUDE.md jest lepszy.

Claude Code wita Cię świeżą sesją za każdym razem. Bez memory zapominałby kim jesteś, jaki masz stack, dlaczego ostatnio prosiłeś go o coś specyficznego. Memory to system plików w ~/.claude/projects/{slug}/memory/ który zachowuje to między sesjami.
Po 4 miesiącach z aktywnym memory mam ~30 zapisanych faktów. Pokazuję jak to działa.
4 rodzaje memory
System rozróżnia 4 typy pamięci:
| Typ | Co tam idzie | Przykład |
|---|---|---|
user | Kim jest user, jakie ma preferencje | "kkaletka prefiers terse responses" |
feedback | Reguły i korekty od użytkownika | "Always commit immediately, no asking" |
project | Stan projektu, decyzje, deadline'y | "Auth refactor due 2026-04-15" |
reference | Pointery do zewnętrznych zasobów | "Linear project INGEST tracks pipeline bugs" |
Każdy fakt to osobny plik markdown z frontmatterem. Plus MEMORY.md jako index.
Jak agent decyduje co zapisać
Reguła w systemie: zapisuj gdy fakt jest nieoczywisty z kodu. Czyli:
✅ Zapisz: "User prefers PR-per-feature, not bundled refactors"
✅ Zapisz: "Background agent jobs use Telegram chat 5094102576"
✅ Zapisz: "Bath thermostat reports temp ×10 (parse / 10)"
❌ Nie zapisuj: "Project uses Next.js 16", widać w package.json
❌ Nie zapisuj: "src/auth/ contains login flow", widać po grepu
❌ Nie zapisuj: "Last commit was about...", git log ma to
Kiedy memory > CLAUDE.md
CLAUDE.md to instrukcje globalne, ładowane do każdej sesji. Memory to fakty, dostępne na żądanie.
CLAUDE.md dla rzeczy ZAWSZE ważnych:
- Tożsamość ("Jestem Claw, agent kkaletki")
- Reguły bezpieczeństwa ("Nigdy nie wysyłaj maili bez potwierdzenia")
- Globalne preferencje ("Odpowiadaj zwięźle, bez fluffu")
Memory dla rzeczy KONTEKSTOWYCH:
- Stan konkretnego projektu
- Reguły dla konkretnego workflow
- Fakty o zewnętrznych systemach
Gdy CLAUDE.md zaczyna mieć 200+ linii, czas przenieść część do memory. Memory nie ładuje się "siłowo", agent czyta gdy potrzebuje.
Antipatterny
1. Zapisywanie streszczeń sesji. "Dzisiaj zrobiliśmy refactor X, dodaliśmy Y", to git log, nie memory. Memory to TRWAŁE fakty, nie kronika.
2. Duplikowanie z CLAUDE.md. Jeśli CLAUDE.md mówi "user prefers terse" i memory mówi to samo, masz dwa źródła prawdy. Aktualizujesz tylko jedno → drift.
3. Zapisywanie tymczasowego stanu. "User testuje feature flag X", to ephemeral, nie memory. Tasks albo plan.
4. Memory jako TODO list. Memory służy do "co już wiesz". TaskCreate służy do "co masz zrobić". Nie miksuj.
Mój workflow
Co zapisuję: fakty z kategorii "agent powinien o tym wiedzieć w przyszłej sesji". Po 4 miesiącach to:
- 4 pliki
user_*.md(kim jestem, telefon, email, preferencje stylu) - 7 plików
feedback_*.md(commit policy, rebuild policy, jak parsuje termostat HA) - 15 plików
project_*.md(stan każdego aktywnego projektu, devops gotchas) - 3 pliki
reference_*.md(pointery do BetterUptime, Vikunja, Gmail attachments workaround)
Co usuwam: jak fakt staje się nieaktualny (projekt zamknięty, preferencja zmieniona), agent powinien wymazać memory. Mam regułę: jak agent mówi mi coś "z memory", a wiem że to nieaktualne, proszę go żeby zaktualizował.
Przykład: jak fakt staje się memory
Sesja:
> Claude, freaky-trade-alert.sh nie odpalił, sprawdź co jest
[agent debuguje]
Agent: Skrypt jest w /home/kkaletka/docker/scripts/freaky-trade-alert.sh.
Lista profili w SQL i lokalnej tablicy ACTIVE musi się zgadzać.
Dodanie nowego profilu wymaga update'u OBYDWU. Zapisać do memory?
> Tak, zapiszMemory wpis (project_freaky_trade_alert.md):
---
name: Freakyprofit Report
description: Freaky trade alert pipeline na mini PC
type: project
---
`/home/kkaletka/docker/scripts/freaky-trade-alert.sh` na mini PC. Add new profiles to SQL + active list (obydwa miejsca, inaczej brak alertów).Następna sesja, 2 tygodnie później: pytam o dodanie nowego profilu, agent od razu wie gdzie i jak.
Co warto wiedzieć
1. Memory jest projekt-specyficzne. Każdy projekt (folder roboczy) ma swój memory store. Cross-projekt nie działa, jeśli nie skopiujesz.
2. Może być duże. Index MEMORY.md jest ładowany do kontekstu zawsze. Pliki indywidualne, na żądanie. Nie boj się trzymać wielu, ale index niech ma jednolinijkowe pointery.
3. Wersjonuj. Memory to też kod. Trzymam ~/.claude/projects/ w git. Jak agent zapisze coś dziwnego, git diff pokazuje.
Memory to nie magia ani prawdziwa pamięć. To system plików z konwencją. Ale dobrze używane robi z agenta kogoś kto Cię realnie zna, a nie Stack Overflow z lepszym promptem.