Przejdź do głównej zawartości

Wzorce długookresowego zachowywania kontekstu

Długookresowe zachowywanie kontekstu przez agenty kodujące polega na zapisaniu każdej lekcji w warstwie, która ją ponownie ładuje: pliki instrukcji (CLAUDE.md, AGENTS.md, reguły projektu Cursora) na fakty zespołowe, auto memory Claude Code lub memories w Codeksie na notatki osobiste, plik przekazania na niedokończoną pracę. Wszystko, co musi obowiązywać zawsze, należy do testu lub hooka: pamięć to tylko rada.

Jest czwartek. W poniedziałek przez 40 minut uczyłeś agenta, że usługa wyszukiwania potrzebuje wywołania rozgrzewającego, zanim zwróci dokładne wyniki, że testy integracyjne muszą najpierw zasilić indeks i że stagingowe API korzysta z osobnej bazy. Dziś nowa sesja pisze test wyszukiwania bez rozgrzewki: przechodzi lokalnie na ciepłym cache’u i pada w CI. Ta strona jest dla programistów, którzy pracują z agentem przez wiele sesji, i dla tech leadów, którzy chcą, żeby lekcja okupiona czyimś popołudniem trafiła do całego zespołu.

  • Mapę tego, co Claude Code, Codex i Cursor ładują na starcie każdej sesji, a czego nie ładują nigdy.
  • Tabelę decyzyjną, gdzie trafia nowy fakt: rozmowa, plik przekazania, pamięć osobista, plik zespołowy, reguła o ograniczonym zakresie albo kontrola.
  • Cztery prompty do skopiowania: naucz faktu, udowodnij, że się załadował, przekaż zadanie i zrób audyt pamięci, zanim się zestarzeje.
  • Listę awarii — pamięć nieaktualna, sprzeczna, ucięta i zatruta — z krokami naprawy.

Jakie warstwy pamięci ładują Claude Code, Codex i Cursor?

Dział zatytułowany „Jakie warstwy pamięci ładują Claude Code, Codex i Cursor?”

Każde narzędzie ładuje inny zestaw plików. Poznaj go, zanim zdecydujesz, gdzie zapisać fakt: fakt zapisany w warstwie, która się nie ładuje, to fakt, którego agent nie ma.

WarstwaLokalizacjaJak współdzielonaKiedy się ładuje
Polityka zarządzanamacOS /Library/Application Support/ClaudeCode/CLAUDE.md, Linux i WSL /etc/claude-code/CLAUDE.mdWdraża ją IT; użytkownik nie może jej wykluczyćKażda sesja
Instrukcje projektu./CLAUDE.md lub ./.claude/CLAUDE.mdGitKażda sesja
Reguły projektu.claude/rules/*.mdGitKażda sesja albo tylko dla pasujących plików, gdy reguła ma frontmatter paths:
Instrukcje użytkownika~/.claude/CLAUDE.md, ~/.claude/rules/Tylko twoja maszynaKażda sesja, każdy projekt
Instrukcje lokalne./CLAUDE.local.md (dodaj do .gitignore)Tylko twoja maszynaKażda sesja w tym projekcie
Auto memory~/.claude/projects/<project>/memory/Tylko twoja maszynaPierwsze 200 linii lub 25 KB pliku MEMORY.md, co nastąpi wcześniej; pliki tematyczne na żądanie
Pamięć subagenta.claude/agent-memory/<agent>/ (memory: project)GitGdy ten subagent działa

Auto memory jest domyślnie włączona. Claude zapisuje notatki czterech typów (user, feedback, project, reference) i pomija to, co da się wyczytać z kodu albo co już mówi CLAUDE.md. Klucz <project> wynika z repozytorium git, więc wszystkie worktree jednego repozytorium dzielą jeden katalog pamięci; nigdy nie opuszcza on twojej maszyny. Wyłączysz ją dla projektu przez "autoMemoryEnabled": false w .claude/settings.json, a wszędzie przez CLAUDE_CODE_DISABLE_AUTO_MEMORY=1.

Gdy na ścieżce nie ma CLAUDE.md ani CLAUDE.local.md, Claude Code czyta zamiast nich AGENTS.md od v2.1.277 (kanał latest; v2.1.281 na Bedrocku, Google Cloud, Foundry, bramach LLM i przy wyłączonej telemetrii). Źródło: dokumentacja pamięci Claude Code, sprawdzone 2026-09-26 na v2.1.283.

Dwie rzeczy są wspólne dla wszystkich trzech narzędzi. Po pierwsze, nic z wczorajszej rozmowy nie wraca samo; wracają tylko pliki. Po drugie, każda załadowana linia kosztuje kontekst w każdej sesji, więc nieprzycinana warstwa pamięci powoli wypiera samo zadanie. Ten koszt opisuje strona okna kontekstu.

Większość problemów z pamięcią to problemy z umiejscowieniem. Zadaj o fakcie dwa pytania: kto go potrzebuje i co się stanie, gdy agent go zignoruje.

FaktGdzie go zapisaćDlaczego
Dotyczy tylko bieżącego zadaniaRozmowaZnika z sesją i tak ma być
Ważny, dopóki funkcja nie trafi na produkcjęPlik przekazania w repozytorium, np. docs/tasks/search-warmup.mdPrzetrwa /clear, kompaktowanie i zmianę narzędzia; usuwasz go po scaleniu
Twoja preferencja („przeglądam diffy w małych commitach”)Auto memory, ~/.claude/CLAUDE.md lub ~/.codex/AGENTS.mdNikt inny nie powinien jej dziedziczyć
Potrzebuje go agent każdego członka zespołuCLAUDE.md, AGENTS.md albo zawsze stosowana reguła CursoraPrzechodzi przegląd w pull requeście i ładuje się u wszystkich
Dotyczy tylko jednej części koduReguła o zakresie ścieżek (.claude/rules/ z paths:, reguła Cursora z globs) albo zagnieżdżony AGENTS.mdŁaduje się tylko tam, gdzie obowiązuje
Złamanie go wypuszcza błądTest, reguła lintera albo hook plus jedna linia w pliku instrukcji, która wskazuje tę kontrolęPamięć to rada; kontrola to egzekwowanie

Ostatni wiersz sprawia, że jakość da się udowodnić. Zdanie „Testy wyszukiwania muszą wywołać endpoint rozgrzewający” w CLAUDE.md zwiększa szansę, że agent się dostosuje. Wspólna fikstura testowa, która wykonuje rozgrzewkę, i reguła lintera, która oznacza test wyszukiwania bez niej, sprawiają, że test bez rozgrzewki nie przejdzie w CI, niezależnie od tego, co agent zapamiętał. Linię w pamięci i tak zapisz: mówi agentowi, po co jest kontrola, więc naprawi przyczynę, zamiast obchodzić błąd. Jak zrobić to hookiem, pokazuje artykuł hooki jako deterministyczne zabezpieczenia.

Do żadnej warstwy nie wpisuj: tego, co agent odczyta z kodu (układ katalogów, listy zależności, skrypty z package.json), tymczasowych obejść ani niczego tajnego. Wytyczne samego Claude Code mówią o mniej niż 200 liniach na CLAUDE.md; strona przycinanie plików kontekstu pokazuje, jak sprawdzić, które linie są warte swojego miejsca.

Gdy sesja odkryje coś nieoczywistego, zapisz to przed zamknięciem sesji, póki dowód jest jeszcze w kontekście. Nazwij warstwę wprost. Samo „zapamiętaj to” zostawia wybór narzędziu, a każde wybiera inaczej.

Prośba o „zapamiętanie” zapisuje fakt w auto memory, którą widzisz tylko ty. Żeby dać go zespołowi, napisz „dodaj to do CLAUDE.md” albo wskaż plik reguł:

Add a path-scoped rule at .claude/rules/search.md with paths: ["src/search/**", "tests/search/**"]:
integration tests for the search service must call POST /search/warm-up before
asserting on results, because a cold index returns partial matches.

Uruchom /memory, żeby przejrzeć pliki pamięci i otworzyć folder auto memory; /context pokazuje, które z nich załadowały się w tej sesji. Komunikaty w rodzaju „Saved 2 memories” pokazują, kiedy Claude tam zapisuje.

Udowodnij, że pamięć się załadowała i zmienia zachowanie

Dział zatytułowany „Udowodnij, że pamięć się załadowała i zmienia zachowanie”

Wpis w pamięci to nieprzetestowana instrukcja. Sprawdź dwie rzeczy: że plik załadował się w tej sesji i że agent działa zgodnie z nim, gdy zadanie o nim nie wspomina.

  1. Sprawdź ładowanie. W Claude Code uruchom /context i zajrzyj do sekcji Memory files; hook InstructionsLoaded może logować każdy plik i regułę w chwili ładowania (nie uruchamia się dla AGENTS.md czytanego bezpośrednio, bez CLAUDE.md; w takim przypadku sprawdź /context). W Codeksie i Cursorze poproś agenta, żeby zacytował wpis bez otwierania plików (prompt poniżej). Reguła o zakresie ścieżek ładuje się dopiero, gdy agent dotknie pasującego pliku, więc testuj ją na pasującym zadaniu.
  2. Uruchom zadanie-sondę. Poproś o pracę, w której fakt ma znaczenie, ale nie pada wprost: „Dodaj test integracyjny wyszukiwania po tagu”. Nie podpowiadaj rozgrzewki.
  3. Niech rozstrzygnie polecenie. Uruchom test albo regułę lintera, która koduje fakt. Sprawdzasz wynik jednego polecenia, a nie cały diff.
  4. Zapisz wynik. Jeśli sonda nie przeszła, wpis jest zbyt ogólny, w złej warstwie albo zakopany. Popraw go i powtórz sondę w nowej sesji.

Jeśli cytatu brak, plik się nie załadował: porównaj jego lokalizację z tabelą powyżej. Jeśli cytat jest, a krok 2 pomija rozgrzewkę, wpis się załadował, ale nie pokierował agentem; przesuń go wyżej, skonkretyzuj albo zamień go w kontrolę (test, lint, hook).

Przenieś zadanie między sesjami przez plik przekazania

Dział zatytułowany „Przenieś zadanie między sesjami przez plik przekazania”

Historia rozmowy to najmniej trwała pamięć. Kompaktowanie ją streszcza, /clear ją usuwa, a inne narzędzie nigdy jej nie widzi. Przy pracy na kilka dni trzymaj stan w pliku, który należy do repozytorium.

  1. Sesja 1: plan. Zapisz plan w docs/tasks/<feature>.md z checklistą, kryteriami akceptacji i sekcją „Decisions”. Nazwij sesję, żeby ją potem znaleźć: claude -n search-warmup w Claude Code; w Codeksie uruchom w sesji /rename search-warmup.
  2. Każda sesja: pracuj z pliku. Odhaczaj punkty, gdy przejdą swoje kontrole, i dopisuj każdą decyzję z uzasadnieniem („odrzucone retry-on-read: ukrywa opóźnienie indeksu”).
  3. Koniec sesji: przekazanie. Uruchom prompt przekazania poniżej, żeby stan trzymał plik, a nie twoja głowa.
  4. Następna sesja: wznowienie. Zacznij od nowa i wskaż agentowi plik. Wznowienie starej sesji też działa, ale długa historia kosztuje kontekst; plik daje agentowi ten sam stan w kilkuset tokenach.
  5. Scalenie: sprzątanie. Trwałe decyzje przenieś do ADR albo pliku instrukcji, a plik przekazania usuń.

Polecenia wznawiania, sprawdzone na Claude Code v2.1.283 i codex-cli 0.157.1:

Okno terminala
claude -c # kontynuuj ostatnią rozmowę w tym katalogu
claude -r search-warmup # otwórz listę sesji przefiltrowaną tym hasłem

Nazwa działa jak hasło wyszukiwania, więc wybierz sesję z listy; podaj ID sesji, żeby wznowić ją bezpośrednio. W trakcie sesji /rename zmienia nazwę bieżącej.

Do przywoływania wiedzy z wielu tygodni, poza jednym plikiem zadania, strona wtyczki pamięci trwałej porównuje planning-with-files, claude-mem i serwery pamięci MCP. Sam plik planu opisuje strona Łańcuch artefaktów.

Pamięć osobista pomaga jednej osobie. Lekcja, która kosztowała cię popołudnie, powinna trafić do agenta każdego członka zespołu — i powinna trafić tam przez przegląd.

  • Traktuj pliki instrukcji jak kod. Zmiany w CLAUDE.md, AGENTS.md, .claude/rules/ i .cursor/rules/ przechodzą przez pull requesty z właścicielem wskazanym w CODEOWNERS. OWASP GenAI LLM Top 10 2026 wymienia „Treat agent memory writes as privileged operations” wśród zabezpieczeń przed prompt injection (LLM01, sprawdzone 2026-09-26); przeglądany pull request to sposób, w jaki robi to zespół.
  • Regularnie przenoś pamięć osobistą do plików zespołu. Auto memory i memories w Codeksie zostają na jednej maszynie i nikt ich nie przegląda. Raz na dwa tygodnie uruchom prompt audytu poniżej i przenieś to, co ważne dla zespołu, do wspólnego pliku przez pull request.
  • Daj pamięć recenzentom. Subagent Claude Code z memory: project trzyma notatki w .claude/agent-memory/<agent>/, które można zacommitować. Subagent przeglądający kod gromadzi wtedy powtarzające się uwagi zespołu tam, gdzie każdy może je przeczytać i poprawić.
  • Trzymaj politykę organizacji osobno. Zarządzany CLAUDE.md niesie zachowania obowiązujące w całej firmie, których użytkownik nie może wykluczyć; zobacz politykę zarządzaną. Egzekwowanie techniczne, np. zabronione polecenia, należy do ustawień zarządzanych, a nie do prozy.

Od v2.1.283 (kanał latest) polecenie /doctor prompt-audit w Claude Code wykonuje podobną kontrolę plików instrukcji, skilli i subagentów i proponuje zmiany, nie wprowadzając ich.

Agent trzyma się reguły, która przestała być prawdziwa. Notatka z marca mówi „migracje uruchamiaj przez db:push”, a w czerwcu zespół przeszedł na migracje wersjonowane. Naprawa: uruchom prompt audytu, usuń nieaktualny wpis i dodaj polecenie, które dowodzi obecnej reguły. Pliki auto memory mają znacznik czasu modified (Claude Code od v2.1.214), który pomaga wyłapać stare notatki.

Dwa wpisy sobie przeczą. Dokumentacja Claude Code ostrzega, że Claude „may pick one arbitrarily”. Naprawa: status CONTRADICTS w prompcie audytu je znajduje; zostaw jeden i umieść regułę jak najbliżej kodu, którego dotyczy.

MEMORY.md przerósł limit ładowania. Ładuje się tylko pierwsze 200 linii lub 25 KB; gdy zapis przekroczy limit, Claude Code zwraca błąd, który każe Claude’owi przepisać indeks. Naprawa: jedna linia na wpis w MEMORY.md, szczegóły w plikach tematycznych, które ładują się na żądanie.

Codex po cichu gubi koniec instrukcji. Sklejony łańcuch AGENTS.md kończy się domyślnie na 32 KiB. Naprawa: przenieś sekcje dotyczące poszczególnych usług do zagnieżdżonych AGENTS.md i przytnij plik główny; project_doc_max_bytes podnoś dopiero po przycięciu.

Plik lokalny zasłania plik zespołowy. W Codeksie AGENTS.override.md zastępuje AGENTS.md obok siebie. W Claude Code dodanie CLAUDE.local.md do projektu opartego na AGENTS.md sprawia, że Claude przestaje czytać AGENTS.md. Naprawa: usuń zapomniane nadpisania; w Claude Code ustaw Project instructions na claude-md-and-agents-md w /config.

Pamięci brak w worktree, w chmurze lub w CI. CLAUDE.local.md z .gitignore istnieje tylko w worktree, w którym go utworzyłeś, a auto memory nigdy nie opuszcza twojej maszyny, więc agent w chmurze czy w CI nie ma z tego nic. Naprawa: wszystko, czego potrzebuje zdalny agent, trafia do zacommitowanego pliku.

Niezaufane repozytorium pisze do pamięci agenta. Pliki instrukcji i pamięć są czytane jako wskazówki, więc złośliwy AGENTS.md albo zatruta notatka sterują agentem. Codex od 0.150.0 ignoruje projektowy AGENTS.md w niezaufanych projektach. Naprawa: przeglądaj zmiany w plikach instrukcji jak kod, nigdy nie uruchamiaj agenta z sekretami w środowisku na nieprzejrzanym refie i zajrzyj do modelu zagrożeń dla agentów.

Osobista preferencja wycieka do każdego projektu. Coś specyficznego dla projektu trafiło do ~/.claude/CLAUDE.md albo ~/.codex/AGENTS.md. Naprawa: w plikach użytkownika trzymaj tylko preferencje prawdziwe w każdym repozytorium, a resztę przenieś do plików danego projektu.