Przejdź do głównej zawartości

Pamięć Claude Code: CLAUDE.md, reguły i pamięć automatyczna

Pamięć Claude Code to dwa mechanizmy przenoszące wiedzę między sesjami: pliki CLAUDE.md i .claude/rules/, które piszą ludzie, oraz pamięć automatyczna, którą Claude prowadzi sam dla siebie. Wszystkie ładują się jako kontekst i sklejają, zamiast się nadpisywać, więc kierują Claude’em, ale niczego nie wymuszają. To, co musi zdarzyć się zawsze, należy do hooka albo reguły uprawnień.

Nowa osoba w zespole prosi Claude Code o „dodanie endpointu do zwrotów”. Claude pisze trasę w Expressie, w JavaScripcie, w src/routes/, a twój serwis stoi na Fastify, jest wyłącznie w TypeScripcie i trzyma handlery w src/api/v2/. Dwa tygodnie później sesja seniora robi to dobrze, bo jego prywatny ~/.claude/CLAUDE.md akurat o tym mówi, a zespół kłóci się, czy „AI” jest wiarygodne. Model w obu sesjach jest ten sam. Kontekst, który dostał, już nie.

Ta strona jest dla developera, który odpowiada za konfigurację agenta w repozytorium, i dla tech leada, który chce takiego samego zachowania w każdej sesji zespołu. Zakłada, że Claude Code jest zainstalowany i choć raz uruchomiony w repozytorium; jeśli nie, zacznij od inicjalizacji projektu.

  • Mapę wszystkich plików, które Claude Code ładuje: kiedy się ładują i kto jeszcze je widzi
  • Pięć kroków konfiguracji nowego lub istniejącego repozytorium, z promptem, który osadza wynik /init w tym, jak repo naprawdę działa
  • Tabelę decyzyjną: czy instrukcja trafia do CLAUDE.md, reguły ze ścieżkami, pliku lokalnego, skilla, hooka, czy donikąd
  • Cztery prompty do skopiowania: bootstrap, audyt, kompresja i przeniesienie pamięci automatycznej do CLAUDE.md
  • Procedurę weryfikacji, która dowodzi, że pliki się załadowały i są przestrzegane, bez czytania każdego diffa
  • Tryby awarii razem z poleceniem, które diagnozuje każdy z nich

Każdy plik poniżej jest czytany jako kontekst. Żaden nie nadpisuje innego: Claude Code skleja je od najszerszego zakresu do najbardziej szczegółowego, a w obrębie katalogu CLAUDE.local.md trafia za CLAUDE.md. Gdy dwie instrukcje są sprzeczne, Claude może zastosować dowolną z nich, więc konflikt naprawiasz, usuwając jedną, a nie licząc na kolejność.

ZakresLokalizacjaKiedy się ładujeKto widzi
Polityka zarządzanamacOS /Library/Application Support/ClaudeCode/CLAUDE.md, Linux i WSL /etc/claude-code/CLAUDE.md, Windows C:\Program Files\ClaudeCode\CLAUDE.md albo klucz claudeMd w ustawieniach zarządzanychPrzy starcie; nie da się jej wykluczyćWszyscy na tej maszynie
Użytkownik~/.claude/CLAUDE.md i ~/.claude/rules/*.mdPrzy starcieTy, w każdym projekcie
Projekt./CLAUDE.md lub ./.claude/CLAUDE.md oraz każdy CLAUDE.md w katalogach nad miejscem uruchomieniaPrzy starcieZespół, przez git
Reguły projektu.claude/rules/**/*.mdPrzy starcie albo, jeśli reguła ma frontmatter paths, dopiero gdy Claude czyta pasujący plikZespół, przez git
Lokalny./CLAUDE.local.mdPrzy starcie, zaraz po CLAUDE.md z tego samego kataloguTy, w tym checkoucie. Dopisz go do .gitignore sam
Podkatalogpackages/web/CLAUDE.md i podobne, poniżej katalogu uruchomieniaGdy Claude czyta plik w tym kataloguZespół, przez git
Pamięć automatyczna~/.claude/projects/<project>/memory/MEMORY.md i pliki tematycznePierwsze 200 linii lub 25 KB MEMORY.md przy starcie; pliki tematyczne na żądanieTy, na tej maszynie, we wszystkich worktree repozytorium

Trzy szczegóły z oficjalnej dokumentacji pamięci zmieniają sposób pisania tych plików:

  • Rozmiar. Anthropic zaleca poniżej 200 linii na CLAUDE.md. Claude Code ładuje w całości plik do 4 MiB, a większy pomija; ostrzega przy starcie (i w /status), gdy plik albo wszystkie pliki razem przekraczają zalecaną długość.
  • Sposób dostarczenia. Treść CLAUDE.md trafia jako wiadomość użytkownika po prompcie systemowym. To mechaniczny powód, dla którego jest tylko wskazówką.
  • Komentarze. Blokowe komentarze HTML (<!-- notatka dla opiekunów -->) są usuwane przed wstrzyknięciem. Zostawiaj w nich notatki dla ludzi, które nie kosztują tokenów.

AGENTS.md mieści się w tej samej tabeli. Od v2.1.277 Claude Code czyta AGENTS.md, gdy w katalogu uruchomienia ani wyżej nie ma CLAUDE.md, .claude/CLAUDE.md ani CLAUDE.local.md; sesje na Amazon Bedrock, Google Cloud, Microsoft Foundry, przez bramkę LLM albo z wyłączoną telemetrią potrzebują wersji v2.1.281. Obie wersje były 2026-09-26 dostępne tylko w kanale wydań latest (kanał stable był na v2.1.274), więc zespół na stable nadal potrzebuje importu @AGENTS.md pokazanego niżej. Domyślne zachowanie zmienia ustawienie Project instructions w /config, na przykład wartość claude-md-and-agents-md czyta oba pliki.

Większość problemów z pamięcią wynika z tego, że instrukcja trafiła w złe miejsce: linia w zawsze ładowanym pliku, która dotyczy jednego katalogu, albo „musi”, które zagwarantuje tylko hook.

Instrukcja to…Umieść ją wDlaczego
Fakt potrzebny w każdej sesji: polecenia build, test i lint, nieoczywista konwencja, decyzja podjęta wbrew oczywistemu wyborowiProjektowym CLAUDE.mdŁaduje się wszędzie i przechodzi review jak kod
Coś ważnego tylko w jednej części drzewa (handlery API, migracje, komponenty React).claude/rules/<temat>.md z pathsŁaduje się tylko, gdy Claude czyta pasujący plik
Wieloetapowa procedura używana od czasu do czasu (release, triaż incydentu)SkilluŁaduje się po wywołaniu lub gdy jest istotny, a nie w każdej sesji
Coś, co musi się dziać zawsze (formatowanie po edycji, blokada git push --force)Hooku lub regule permissions.denyWykonuje się niezależnie od decyzji Claude’a
Twój URL sandboksa, lokalny port, konto testoweCLAUDE.local.mdPrywatne i niecommitowane
Preferencja, którą masz w każdym repo~/.claude/CLAUDE.md lub ~/.claude/rules/Idzie za tobą, a nie za projektem
Przypomnienie o polityce firmyZarządzanym CLAUDE.mdKażdy użytkownik na maszynie, bez możliwości wykluczenia
Opis architektury, mapa katalogów, lista zależnościNigdzieClaude wywnioskuje je z kodu, a spisana kopia się starzeje

Z ostatnim wierszem zespoły walczą najdłużej. Argument za usuwaniem zamiast dopisywania, wspólny dla wszystkich narzędzi, wraz z protokołem testowania każdego cięcia, znajdziesz w artykule Przycinanie CLAUDE.md i AGENTS.md.

  1. Wygeneruj szkic przez /init. W sesji w katalogu głównym repozytorium uruchom /init. Claude analizuje kod i pisze CLAUDE.md albo, jeśli plik już istnieje, proponuje poprawki. Wciąga też reguły Cursora (.cursor/rules/, .cursorrules) i .github/copilot-instructions.md. Przenosisz się z innego agenta w całości? /import codex|gemini|cursor (od v2.1.213; Cursor od v2.1.265; niedostępne na Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry i Claude Platform on AWS) dopisuje jednorazową kopię jego plików z instrukcjami, np. AGENTS.md, do odpowiedniego CLAUDE.md i przenosi serwery MCP, polecenia, subagenty i skille; na wyniku uruchom prompt audytowy z dalszej części strony.

    Żeby dostać tryb interaktywny, ustaw CLAUDE_CODE_NEW_INIT=1 w powłoce albo w bloku env pliku ustawień przed uruchomieniem /init. Wtedy /init pyta, co utworzyć (pliki CLAUDE.md, skille, hooki), bada kod subagentem, dopytuje i pokazuje propozycję przed zapisem. Z tą zmienną czyta też AGENTS.md, .windsurf/rules/, .devin/rules/ i .clinerules, a jego opcja osobista tworzy CLAUDE.local.md i dopisuje go do .gitignore.

  2. Osadź szkic w tym, co repo naprawdę robi. Wynik /init zwykle opisuje drzewo plików, które Claude i tak widzi. Zastąp go tym, czego Claude nie wywnioskuje, używając promptu bootstrap poniżej.

  3. Wynieś reguły dla konkretnych katalogów z pliku głównego. Wszystko, co dotyczy jednego obszaru, trafia do .claude/rules/ z listą paths (zobacz reguły ze ścieżkami).

  4. Dodaj warstwę osobistą. Szczegóły swojej maszyny wpisz do CLAUDE.local.md i dopisz CLAUDE.local.md do .gitignore. Jeśli pracujesz na kilku worktree gita, plik lokalny istnieje tylko w tym worktree, w którym go utworzyłeś, więc zamiast niego zaimportuj plik z katalogu domowego: @~/.claude/payments-api-personal.md.

  5. Sprawdź, co się załadowało. Uruchom /context i przejrzyj listę Memory files. Plik, którego tam nie ma, jest dla Claude’a niewidoczny, choćby był świetny.

Jak wygląda projektowy CLAUDE.md, który zasługuje na każdą linię

Dział zatytułowany „Jak wygląda projektowy CLAUDE.md, który zasługuje na każdą linię”

Tak wygląda wynik dla scenariusza ze zwrotami: 27 linii, z których każda dotyczy czegoś, co Claude inaczej zrobiłby źle.

# Payments API
<!-- Owner: platform team. Review changes to this file like code. -->
## Commands
- `pnpm dev` starts the API on port 3000; it needs Redis on localhost:6379
- `pnpm test` runs Vitest; run it before you say a change is done
- `pnpm typecheck` is the type gate; CI fails without it
- `pnpm db:migrate` applies Prisma migrations to the local database only
- `pnpm db:reset` DROPS the local database; never run it unless I ask
## Conventions
- Fastify + TypeScript only. No Express, no `.js` source files
- HTTP handlers live in `src/api/v2/<resource>/`, one file per route
- Validate every request and response with the Zod schemas in `src/schemas/`
- Errors are RFC 7807 problem details via `problem()` in `src/lib/errors.ts`
- Log with `logger` from `src/lib/logger.ts`, never `console.log`
## Decisions that look wrong but are deliberate
- Money is an integer number of cents (`amountCents`), never a float,
because the ledger reconciles to the cent
- We do not use Prisma transactions for refunds; `src/ledger/refund.ts`
uses an outbox table so the provider call can be retried idempotently
## Never
- Edit a migration file after it is merged; add a new migration
- Add a dependency without asking first

Działa dzięki dwóm cechom. Każda instrukcja jest na tyle konkretna, że da się ją sprawdzić („run pnpm test before you say a change is done”, a nie „test your changes”), a każde „dlaczego” stoi przy regule, którą uzasadnia, więc Claude potrafi zastosować regułę w przypadku, o którym plik nie wspomina.

Równie ważne jest to, czego tu nie ma. Mnożenie wyróżnień w rodzaju **ALWAYS**, MUST czy IMPORTANT nie sprawia, że reguła się trzyma; gdy Claude ją ignoruje, przyczyną jest zwykle długość, ogólnikowość albo sprzeczność gdzie indziej. Workflow gita, etykieta PR-ów czy checklista onboardingu, które są już w CONTRIBUTING.md, nie potrzebują drugiej kopii: zaimportuj je albo zostaw Claude’owi do przeczytania, gdy zadanie tego wymaga.

CLAUDE.md może wciągać inne pliki składnią @path w dowolnym miejscu tekstu:

See @README.md for the product overview and @package.json for scripts.
## Git workflow
- Follow @docs/git-workflow.md

Ścieżki względne liczą się od pliku, który zawiera import, importy mogą się zagnieżdżać do czterech poziomów, a ścieżki w code spanach i blokach kodu nie są importowane. Importy porządkują, ale nie oszczędzają kontekstu, bo każdy zaimportowany plik ładuje się przy starcie. Gdy projekt po raz pierwszy importuje plik spoza katalogu roboczego, Claude Code prosi o zgodę na importy zewnętrzne; odmowa wyłącza je dla tego projektu.

Jeśli repozytorium ma już AGENTS.md dla Codeksa lub innych agentów, zostaw go jako jeden wspólny plik, a dodatki specyficzne dla Claude’a umieść w małym CLAUDE.md obok:

@AGENTS.md
## Claude Code
- Use plan mode for any change under `src/ledger/`

Import działa na każdej wersji i u każdego dostawcy, także w sesjach, które nie potrafią czytać AGENTS.md bezpośrednio. Jak ten sam plik czyta Codex, opisuje artykuł AGENTS.md i skille w Codeksie.

Plik w .claude/rules/ bez frontmattera ładuje się w każdej sesji z tym samym priorytetem co .claude/CLAUDE.md. Dodaj listę paths, a załaduje się dopiero wtedy, gdy Claude przeczyta pasujący plik:

---
paths:
- "src/api/**/*.ts"
- "src/schemas/**/*.ts"
---
# API handler rules
- Every handler validates input and output with a Zod schema from `src/schemas/`
- Return `ApiResponse<T>`; never return a raw Prisma model
- Rate-limit public routes with the `rateLimit` plugin registered in `src/app.ts`

Co dokumentacja mówi o plikach reguł i na czym ludzie się potykają:

  • paths to jedyne pole frontmattera, które Claude Code czyta (sprawdzone na v2.1.283, 2026-09-26). Przyjmuje listę YAML albo ciąg rozdzielony przecinkami oraz rozwijanie nawiasów klamrowych (src/**/*.{ts,tsx}).
  • Jeśli YAML się nie parsuje, Claude Code ignoruje frontmatter i ładuje regułę wszędzie. Błąd parsowania zobaczysz po uruchomieniu claude --debug.
  • Reguła włącza się, gdy Claude czyta pasujący plik, a nie przy każdym wywołaniu narzędzia. Do tego momentu nie ma jej w kontekście.
  • .claude/rules/ jest przeszukiwany rekurencyjnie, więc podkatalogi frontend/ i backend/ działają.
  • W monorepo, w którym do twoich sesji ładują się pliki CLAUDE.md innych zespołów, ustaw claudeMdExcludes (listę globów dopasowywanych do ścieżek bezwzględnych) w .claude/settings.local.json. Pełny układ monorepo opisuje artykuł Claude Code w dużych bazach kodu.

Co zapisuje pamięć automatyczna i jak trzymać ją w ryzach

Dział zatytułowany „Co zapisuje pamięć automatyczna i jak trzymać ją w ryzach”

Pamięć automatyczna jest domyślnie włączona. W trakcie pracy Claude zapisuje notatki czterech typów (w polu type frontmattera każdego pliku): user (twoja rola i preferencje), feedback (poprawki, które dajesz, i podejścia, które potwierdzasz), project (bieżąca praca, terminy i decyzje, których nie wywnioskuje z kodu ani historii gita) oraz reference (gdzie są informacje spoza projektu, np. tracker czy dashboard). Pomija to, co da się wywnioskować z kodu, i to, co już mówi twój CLAUDE.md. Komunikaty „Saved 2 memories” lub „Recalled 2 memories” w interfejsie oznaczają, że czyta lub zapisuje ten katalog.

MEMORY.md to indeks, jedna linia na wspomnienie. Przy starcie ładuje się tylko jego pierwsze 200 linii lub 25 KB, zależnie od tego, co nastąpi wcześniej; blisko limitu Claude Code każe Claude’owi go skrócić, a gdy zapis go przekroczy, zwraca błąd. Pliki tematyczne ładują się dopiero, gdy Claude je otworzy. Od v2.1.214 każdy plik pamięci z frontmatterem ma znacznik modified, więc widać, jak stary jest dany fakt.

Trzy rozróżnienia decydują o tym, czy pamięć automatyczna pomaga, czy po cichu wprowadza w błąd:

  • „Remember X” trafia do pamięci automatycznej, nie do CLAUDE.md. Zdanie „remember that the API tests need a local Redis” zapisuje prywatną notatkę na twojej maszynie. Żeby zmienić plik zespołu, powiedz „add this to CLAUDE.md” albo otwórz go przez /memory.
  • Jest lokalna dla maszyny. Twoi koledzy, runnery CI i sesje w chmurze nigdy jej nie widzą. Poprawkę ważną dla wszystkich trzeba przenieść do CLAUDE.md albo reguły.
  • Subagenty jej nie dziedziczą. Pamięć automatyczna głównej rozmowy nie ładuje się do subagentów (wyjątkiem jest fork). Subagent może mieć własną dzięki polu memory; zobacz własne subagenty.

Żeby ją wyłączyć, użyj przełącznika w /memory (zapisuje autoMemoryEnabled w twoich ustawieniach użytkownika), ustaw "autoMemoryEnabled": false w ustawieniach jednego projektu albo wyeksportuj CLAUDE_CODE_DISABLE_AUTO_MEMORY=1.

Najtaniej pisze się regułę zaraz po tym, jak Claude po raz drugi zrobi coś źle albo review wyłapie coś, co Claude powinien był wiedzieć. Miejsce docelowe wybierasz według tego, kto potrzebuje reguły:

add to CLAUDE.md: we use pnpm, never npm or yarn
remember that my local Postgres runs on port 5433

Pierwsza linia zmienia wspólny plik, który przejdzie review razem z resztą twojego diffa. Druga zostaje w twojej pamięci automatycznej. Formułuj regułę tak konkretnie jak prompt: „we use pnpm, never npm or yarn” da się sprawdzić, „remember our package manager” już nie.

Konfiguracja pamięci jest warta tyle, ile jej wpływ na wynik, a nie powinieneś musieć czytać każdego diffa, żeby wiedzieć, że działa. Sprawdź trzy rzeczy, od najtańszej do najmocniejszej.

1. Plik się załadował. Uruchom /context i przeczytaj Memory files. Reguły ze ścieżkami i pliki w podkatalogach ładują się później, więc zapisuj każde ładowanie hookiem InstructionsLoaded. Dodaj to do .claude/settings.local.json; potrzebny jest jq:

{
"hooks": {
"InstructionsLoaded": [
{
"hooks": [
{
"type": "command",
"command": "jq -c '{file: .file_path, scope: .memory_type, why: .load_reason, via: .trigger_file_path}' >> ~/.claude/instructions-loaded.log"
}
]
}
]
}
}

load_reason przyjmuje wartości session_start, nested_traversal, path_glob_match, include lub compact, a trigger_file_path wskazuje plik, którego odczyt wywołał leniwe ładowanie, więc log pokazuje dokładnie, kiedy i dlaczego reguła weszła do kontekstu. Hook służy tylko do obserwacji: nie może zablokować ani zmienić ładowania. Nie uruchamia się też dla AGENTS.md czytanego bezpośrednio przez Project instructions (sprawdzone na v2.1.283, 2026-09-26); uruchamia się, gdy CLAUDE.md importuje AGENTS.md, co jest kolejnym powodem, żeby import zostawić.

2. Model widzi instrukcję. Sonda w trybie headless prosi Claude’a o zacytowanie tego, co dostał, i odróżnia regułę, której Claude nigdy nie dostał, od takiej, którą dostał, ale jej nie zastosował. Uruchom ją w terminalu z katalogu, którego reguły testujesz:

Okno terminala
claude -p "Without reading any files, quote word for word every instruction you were given about database migrations. If there is none, answer NONE."

Sonda widzi tylko to, co ładuje się przy starcie; żeby przetestować regułę ograniczoną do ścieżek, każ jej najpierw przeczytać plik, do którego reguła pasuje (na przykład Read prisma/migrations/<latest>/migration.sql, then quote…).

3. Zachowanie się zmieniło. Trzymaj dla repozytorium trzy reprezentatywne zadania (na przykład: dodaj endpoint, dodaj migrację, napraw padający test). Po każdej zmianie pamięci uruchom każde w świeżej sesji i niech wynik ocenią istniejące bramki: typecheck, lint, testy i każdy hook, który pilnuje konwencji. Reguła, której nie sprawdza żadna bramka i której sonda nie potrafi zacytować, jest kandydatką do usunięcia.

Traktuj CLAUDE.md i .claude/rules/ jak kod: zmiany idą przez pull request, autor wkleja do opisu wynik sondy i bramek, a zatwierdza je tech lead odpowiedzialny za konfigurację agenta. To, co wymusza już bramka, nie potrzebuje zdania w pamięci; to, co nie może się zdarzyć nigdy, należy do hooka albo reguły uprawnień, gdzie jest wymuszane, a nie tylko proszone.

Jak zrobić audyt i skompresować rozrośnięty CLAUDE.md?

Dział zatytułowany „Jak zrobić audyt i skompresować rozrośnięty CLAUDE.md?”

Pliki psują się wszędzie tak samo: reguły sobie przeczą, instrukcje przeżywają kod, który opisywały, a plik przekracza długość, przy której Claude trzyma się go niezawodnie. Zacznij świeżą sesję (/clear), żeby wcześniejsza rozmowa nie wpływała na przegląd, i uruchom audyt.

Wbudowany przegląd /doctor (alias /checkup; przycinanie CLAUDE.md wymaga wersji v2.1.206 lub nowszej) proponuje podobne cięcie dla commitowanego CLAUDE.md: usuwa to, co Claude wywnioskuje z kodu, zostawia pułapki, uzasadnienia i konwencje odbiegające od domyślnych ustawień narzędzi, a zawsze ładowane wskazówki potrafi przenieść do skilli lub zagnieżdżonych plików CLAUDE.md. Najpierw raportuje, a przed każdą zmianą pyta. Po każdej z tych dróg powtórz trzy powyższe testy.

Claude ignoruje instrukcję. Uruchom /context i sprawdź, czy plik się załadował. Jeśli tak, szukaj długości, ogólnikowości lub sprzeczności w innym pliku: przy dwóch sprzecznych regułach Claude może wybrać dowolną. Doprecyzuj regułę i usuń jej rywalkę. Jeśli instrukcja musi się wykonać w ustalonym momencie, np. przed każdym commitem, przenieś ją do hooka.

Instrukcja znika po /compact. Główny CLAUDE.md projektu jest po kompakcji czytany z dysku od nowa. Pliki CLAUDE.md w podkatalogach i reguły ze ścieżkami wracają dopiero, gdy Claude znowu przeczyta pasujący plik, a instrukcje podane tylko w czacie przepadają. Wszystko, co ma przetrwać, zapisz w pliku.

Reguła ze ścieżkami działa wszędzie albo nigdzie. „Wszędzie” to zwykle frontmatter, który się nie sparsował (więc reguła załadowała się bezwarunkowo), albo brak pola paths; uruchom claude --debug. „Nigdzie” to zwykle glob, który nic nie dopasowuje, albo [ we wzorcu, który nie jest poprawnym wyrażeniem w nawiasach. Zacznij od prostego wzorca, np. src/**/*.ts.

AGENTS.md nie jest czytany. Każdy CLAUDE.md, .claude/CLAUDE.md lub CLAUDE.local.md w katalogu uruchomienia lub wyżej ma pierwszeństwo, także plik lokalny założony na własne notatki. Sprawdź claude --version: wersja v2.1.277 lub nowsza, a na Bedrock, Google Cloud, Foundry, przez bramkę albo z wyłączoną telemetrią wersja v2.1.281. Instalacja z kanału stable może być za obiema. Jeśli w /config nie ma Project instructions, wbudowana wtyczka agents-md jest wyłączona albo wersja jest za stara, a pierwsza sesja po aktualizacji może jeszcze pominąć plik. Poprawka działająca na każdej wersji to CLAUDE.md z linią @AGENTS.md.

Twój CLAUDE.local.md trafił do commita. Claude Code nie dopisuje go do .gitignore za ciebie (sprawdzone na v2.1.283, 2026-09-26; robi to tylko opcja osobista przy CLAUDE_CODE_NEW_INIT=1). Dopisz go do .gitignore, usuń z indeksu przez git rm --cached CLAUDE.local.md i przenieś z niego wszystko, co poufne.

Koledzy dostają różne zachowanie z tego samego repo. Porównajcie listy Memory files z /context. Pliki i reguły użytkownika ładują się obok plików projektu, a reguła użytkownika sprzeczna z regułą projektu jest stosowana nieprzewidywalnie. Poproś wszystkich, żeby konwencje projektu nie lądowały w ~/.claude/.

Pamięć automatyczna zawiera coś błędnego. Uruchom /memory, otwórz folder pamięci automatycznej i popraw lub usuń plik. Nieaktualne wspomnienie jest gorsze niż żadne, bo Claude mu ufa. Jeśli MEMORY.md przekroczył 200 linii, wpisy za tym punktem w ogóle się nie ładują; poproś Claude’a o scalenie indeksu.

Przebieg w CI lub skrypcie ignoruje pamięć projektu. claude --bare z założenia pomija wykrywanie CLAUDE.md i pamięć automatyczną. W zadaniach, które pobierają niezaufany kod, uruchamiaj claude --bare --setting-sources "" --strict-mcp-config, żeby nie załadowały się żadne instrukcje, ustawienia, hooki ani serwery MCP projektu; w zaufanych zadaniach, które potrzebują konwencji, zrezygnuj z --bare albo przekaż reguły jawnie przez --append-system-prompt. Kiedy co wybrać, opisuje przewodnik po CI/CD.

Plik opisuje cele, nie fakty. „100% pokrycia testami” w repo z pokryciem 40% sprawia, że Claude albo marudzi przy każdej zmianie, albo ignoruje regułę. Pisz to, co jest prawdą dziś, a cele śledź gdzie indziej.