Przejdź do głównej zawartości

Dokumentacja jako kontekst to wiedza o projekcie zapisana w plikach, które agent do kodowania wczytuje sam: CLAUDE.md w Claude Code, AGENTS.md w Codeksie i Rules w Cursorze. Plik zawiera to, czego nie widać w kodzie: komendy, konwencje i świadome wyjątki. Pomaga tylko wtedy, gdy jest krótki, konkretny i sprawdzany względem repozytorium.

Ta strona jest dla programistów, którzy konfigurują agenta w repozytorium, i dla tech leadów, którzy odpowiadają za wspólny plik instrukcji. Znasz ten problem: agent uruchamia npm test, choć repozytorium używa pnpm vitest, pisze od nowa helper, który już istnieje, albo „naprawia” wzorzec, który zespół wybrał celowo. Każda sesja zaczyna się bez pamięci poprzedniej, więc agent płaci za ponowne odkrywanie tych samych faktów i czasem odkrywa je źle. Jeśli budżet kontekstu to dla ciebie nowy temat, zacznij od strony Okna kontekstu. Skróconą wersję tego, co powinien zawierać plik w repozytorium, znajdziesz w AGENTS.md i CLAUDE.md: zwięzły kontekst repozytorium.

  • Jasny podział na to, co należy do pliku wczytywanego zawsze, i to, co powinno ładować się dopiero na żądanie.
  • Wiedzę, jak Claude Code, Codex i Cursor znajdują i łączą pliki instrukcji, łącznie z limitami, które po cichu ucinają pliki.
  • Trzy prompty do skopiowania: szkic pliku, audyt i zapisanie lekcji po powtórzonym błędzie.
  • Kontrolę w CI i test świeżej sesji, które pokazują, że plik nadal jest prawdziwy, bez ponownego czytania go linijka po linijce.

Jaką dokumentację agent powinien wczytywać i kiedy?

Dział zatytułowany „Jaką dokumentację agent powinien wczytywać i kiedy?”

Dokumentacja dla agenta ma trzy warstwy. Pliki puchną, gdy wszystkie trzy trafiają do pierwszej.

WarstwaCo zawieraKiedy się wczytujeGdzie leży
Zawsze wczytywanaKomendy, konwencje odbiegające od domyślnych, zakazy typu „nigdy nie rób X”W każdej sesji, w każdej turzeCLAUDE.md, AGENTS.md, reguły Cursora stosowane zawsze
Na żądanieReguły dla jednego katalogu lub typu plików, procedury wieloetapowe, decyzje projektoweGdy agent dotyka pasujących plików albo uzna skill za przydatnyReguły z zakresem ścieżek, zagnieżdżone pliki instrukcji, skille, dokumenty wskazane w pliku
Pobierana na żywoAPI bibliotek zewnętrznych, dokumentacja wewnętrzna spoza repozytoriumGdy agent wywołuje narzędzieSerwery MCP, np. Context7

Warstwa zawsze wczytywana jest droga, bo za każdą linijkę płacisz w każdej turze. Linijka zasługuje na miejsce w tej warstwie tylko wtedy, gdy bez niej agent zrobiłby coś źle. Pozostałe dwie warstwy kosztują kontekst dopiero wtedy, gdy agent z nich korzysta.

Jak Claude Code, Codex i Cursor wczytują pliki instrukcji?

Dział zatytułowany „Jak Claude Code, Codex i Cursor wczytują pliki instrukcji?”

Trzy narzędzia dzielą ten sam pomysł, ale różnią się nazwami plików, kolejnością łączenia i limitami. Od tych szczegółów zależy, czy najbardziej szczegółowe instrukcje w ogóle dotrą do modelu.

Claude Code czyta CLAUDE.md na początku każdej sesji (dokumentacja pamięci, odczyt 2026-09-26).

repo/
CLAUDE.md # team instructions, committed (or .claude/CLAUDE.md)
CLAUDE.local.md # personal notes, add to .gitignore
.claude/rules/
testing.md # no `paths:` frontmatter, loads at launch
api.md # `paths: ["src/api/**/*.ts"]`, loads only for matching files
packages/web/
CLAUDE.md # loads when Claude reads a file in packages/web/
  • Hierarchia. Pliki z katalogu roboczego i wszystkich katalogów nad nim wczytują się przy starcie i są sklejane od korzenia, więc plik najbliższy miejscu startu Claude czyta na końcu. Pliki z podkatalogów wczytują się, gdy Claude przeczyta w nich jakiś plik.
  • Reguły z zakresem ścieżek. Reguła w .claude/rules/ z listą paths we frontmatterze wczytuje się tylko wtedy, gdy Claude czyta pasujący plik. paths to jedyne pole frontmattera, które Claude Code odczytuje z reguły.
  • Importy nie oszczędzają kontekstu. @path/to/file rozwija się przy starcie, więc import porządkuje długi plik, ale go nie odchudza.
  • Darmowe notatki dla opiekunów. Blokowe komentarze HTML (<!-- ... -->) są usuwane, zanim plik trafi do modelu.
  • AGENTS.md. Od v2.1.277 (v2.1.281 w sesjach przez Bedrock, Google Cloud, Foundry i bramy LLM oraz z wyłączoną telemetrią; na obu kanałach wydań, odkąd stable osiągnął v2.1.287, sprawdzone 2026-10-12) Claude Code czyta AGENTS.md, gdy w katalogu roboczym ani nad nim nie ma CLAUDE.md, .claude/CLAUDE.md ani CLAUDE.local.md. Jeśli istnieją oba, czyta tylko pliki CLAUDE.md. Żeby utrzymać jeden wspólny plik, wpisz @AGENTS.md na początku CLAUDE.md, a linijki tylko dla Claude dodaj pod spodem, albo ustaw Project instructions w /config na claude-md-and-agents-md, żeby wczytywać oba pliki.
  • Rozmiar. Dokumentacja zaleca poniżej 200 linii na CLAUDE.md. Próg 200 linii (lub 25 KB) dotyczy pliku MEMORY.md z auto memory, nie CLAUDE.md, który wczytuje się w całości do 4 MiB.

Każdą linijkę sprawdź jednym testem: czy bez niej agent zrobiłby to źle? Jeśli nie, usuń ją.

ZostawPrzykład
Komendy, których agent nie zgadniepnpm vitest run src/billing, make db-reset przed testami integracyjnymi
Konwencje odbiegające od domyślnych„Kwoty to całkowite grosze; nigdy nie używaj floatów”
Świadome wyjątki wraz z powodem„W src/reports/ nie używamy ORM-a; surowy SQL jest tu szybszy”
Twarde ograniczenia„Nigdy nie edytuj plików w generated/; uruchom pnpm codegen”
Gdzie szukać, a nie co tam jest„Wzorcowy handler API to src/api/users.ts”
WytnijDlaczego
Opis projektu albo streszczenie architekturyAgent szybciej przeczyta kod niż twoje streszczenie, a streszczenie się rozjeżdża
Mapa plik po plikuNieaktualna po kilku tygodniach, a nieaktualna mapa aktywnie wprowadza w błąd
Konwencje języka i „pisz czysty kod”Model i tak ich przestrzega; linijka to czysty koszt
Długie procedury, np. checklista wydaniaPrzenieś je do skilla albo dokumentu wczytywanego na żądanie
Wszystko, co zmienia się co tydzieńTrzymaj to tam, gdzie powstaje, a nie tam, gdzie się to pamięta

Konkret działa lepiej niż emfaza. Porównaj dwie wersje tej samej intencji:

# Weak: nothing here changes what the agent does
We care about quality. Write clean, well-tested code and handle errors properly.
# Strong: each line prevents a specific mistake
- Run one test file: pnpm vitest run <path>
- API errors return { error: string, code: number }; never throw from a handler
- Integration tests use the real database (docker compose up db); never mock it
- Never commit to main; open a branch and a pull request
  1. Wygeneruj szkic, potem go przytnij. Uruchom /init w Claude Code lub Codeksie albo użyj pierwszego promptu poniżej w dowolnym narzędziu. Traktuj wynik jak surowiec. Wygenerowane pliki często powtarzają to, co widać w kodzie, więc spodziewaj się, że usuniesz sporą część.

  2. Uruchom każdą komendę z pliku. Komenda, którą agent skopiuje z pliku i która potem nie zadziała, kosztuje więcej niż jej brak. Zostaw tylko komendy, które przechodzą na czystym checkoucie.

  3. Wynieś reguły o wąskim zakresie z pliku głównego. Wszystko, co dotyczy tylko jednego katalogu, trafia do reguły z zakresem ścieżek (.claude/rules/ z paths), zagnieżdżonego AGENTS.md albo reguły Cursora zawężonej tak, jak opisuje to dokumentacja Rules. Procedury stają się skillami.

  4. W zespole z kilkoma narzędziami wybierz jedno źródło prawdy. Wspólną treść trzymaj w AGENTS.md, a CLAUDE.md niech będzie jednolinijkowym importem @AGENTS.md plus ewentualne linijki tylko dla Claude. Cursor czyta AGENTS.md w katalogu głównym projektu i w podkatalogach (dokumentacja Cursora, sprawdzone 2026-10-12), więc nie potrzebuje kopii; potwierdź to testem świeżej sesji opisanym niżej. Katalog .cursor/rules zostaw na reguły potrzebne tylko Cursorowi, a nie na kopię wspólnego pliku. Tam, gdzie kopie dla poszczególnych narzędzi jednak trzymasz, użyj narzędzia do synchronizacji, jak opisuje Jedno źródło reguł dla każdego agenta. Dwie ręcznie utrzymywane kopie szybko się rozjadą.

  5. Dodaj kontrolę rozjazdu i test świeżej sesji z następnej sekcji, a plik zacommituj z właścicielem wpisanym w CODEOWNERS.

  6. Dodawaj regułę dopiero po drugim wystąpieniu. Gdy agent popełni ten sam błąd dwa razy, dodaj jedną konkretną linijkę. Po pojedynczej porażce popraw kod i idź dalej. Przycinanie CLAUDE.md i AGENTS.md opisuje kierunek odwrotny: usuwanie linijek, które przestały się opłacać.

W Claude Code podobny audyt tych samych plików uruchamia /doctor prompt-audit (v2.1.283 i nowsze, oba kanały wydań w dniu 2026-10-12). Proponuje zmiany, ale ich nie wprowadza. Audyt działa przez wbudowany skill /claude-api, więc jest niedostępny, gdy ustawiono disableBundledSkills albo ten skill wyłączono w skillOverrides.

Jak dowieść, że plik instrukcji nadal zgadza się z repozytorium?

Dział zatytułowany „Jak dowieść, że plik instrukcji nadal zgadza się z repozytorium?”

Nikt nie czyta co tydzień pliku na 90 linijek, więc niech plik sprawdza się sam. Większość rozjazdów wyłapią dwie kontrole: skrypt w CI, który pada, gdy plik wskazuje nieistniejącą ścieżkę lub skrypt, i test, w którym świeża sesja agenta odpowiada na pytania, na które odpowiedź jest tylko w pliku.

1. Kontrola rozjazdu w CI. Zapisz to jako scripts/check-agent-docs.sh i uruchamiaj w tym samym jobie co linter. Skrypt pada, gdy plik przekracza budżet linii, wskazuje nieistniejącą ścieżkę w src/, scripts/, tests/, docs/ lub packages/ albo skrypt npm run, którego nie ma w package.json. Rozszerz wzorce o pnpm, make lub cokolwiek, czego używa twój plik.

#!/usr/bin/env bash
# Fails when an agent instruction file drifts from the repository.
set -uo pipefail
status=0
for f in AGENTS.md CLAUDE.md; do
[ -f "$f" ] || continue
n=$(wc -l < "$f")
if [ "$n" -gt 200 ]; then echo "$f: $n lines, budget is 200"; status=1; fi
# Every backticked repo path must exist (globs and <placeholders> are skipped).
for p in $(grep -oE '`(src|scripts|tests|docs|packages)/[^` ]*`' "$f" | tr -d '`' | grep -v '[*<]' | sort -u); do
[ -e "$p" ] || { echo "$f: path not found: $p"; status=1; }
done
# Every "npm run X" must be a script in package.json.
for s in $(grep -oE 'npm run [A-Za-z0-9:_-]+' "$f" | awk '{print $3}' | sort -u); do
node -e "process.exit(require('./package.json').scripts?.[process.argv[1]] ? 0 : 1)" "$s" \
|| { echo "$f: npm script not found: $s"; status=1; }
done
done
exit $status

Dla pliku, który wskazuje usunięty katalog src/routes/ i skrypt npm run lint o zmienionej nazwie, wypisuje obie linijki i kończy się kodem 1.

2. Test świeżej sesji. Napisz pięć pytań, na które odpowiedź jest tylko w pliku instrukcji, np. „Która komenda uruchamia jeden plik testów?” i „Skąd biorą się pliki generowane?”. Zadawaj je w nowej sesji po każdej zmianie pliku.

--tools "" wyłącza wszystkie narzędzia, więc Claude może odpowiedzieć tylko na podstawie tego, co wczytał przy starcie. --tools przyjmuje listę, więc polecenie wpisz przed tą flagą (albo po --); inaczej zostanie odczytane jako nazwa narzędzia:

Okno terminala
claude -p "From your project instructions only: which command runs a single test file, and which directory must you never edit by hand?" --tools ""

Błędna albo wymijająca odpowiedź oznacza, że linijki brakuje, jest zakopana albo przeczy jej inny plik. Porównaj odpowiedzi z oczekiwanymi w pull requeście, który zmienia plik. Zatwierdza go właściciel pliku z CODEOWNERS; kontrola w CI i test świeżej sesji są dowodem, więc recenzent czyta diff i odpowiedzi agenta, a nie cały plik.

Kiedy dokumentacja powinna pochodzić z serwera MCP, a nie z pliku?

Dział zatytułowany „Kiedy dokumentacja powinna pochodzić z serwera MCP, a nie z pliku?”

Dokumentacja bibliotek nie należy do pliku instrukcji. Jest długa, zmienia się z każdym wydaniem, a agent potrzebuje tylko strony o API, które właśnie wywołuje. Pobieraj ją na żywo.

Context7 (Upstash) udostępnia przez MCP dokumentację bibliotek dla konkretnych wersji. To serwer MCP jednego przeznaczenia z największą liczbą gwiazdek w naszym katalogu: 62,4 tys. na GitHubie (upstash/context7, odczyt 2026-09-26). Klucz API jest opcjonalny i podnosi limity zapytań.

Okno terminala
claude mcp add --scope user --transport http context7 https://mcp.context7.com/mcp

Context7 ma też tryb CLI + Skills bez serwera MCP: npx ctx7 setup --claude (albo --cursor) instaluje zamiast tego skill (npm ctx7 0.5.12, sprawdzone 2026-09-26). Kompromis: skill nie dokłada do kontekstu definicji narzędzi i pobiera dokumentację przez CLI dopiero wtedy, gdy się uruchomi; serwer MCP udostępnia resolve-library-id i query-docs jako narzędzia, które agent może wywołać w każdej sesji.

Potem dodaj jedną linijkę do pliku instrukcji, np.: „For any Next.js or Drizzle API, fetch the docs with context7 before writing code”. Plik zostaje krótki, a dokumentacja aktualna. Tak samo traktuj dokumentację wewnętrzną spoza repozytorium, np. runbooki i rekordy decyzji architektonicznych (ADR): linkuj ją albo udostępniaj, nie wklejaj. Serwery MCP z dokumentacją porównują dostępne opcje.

Agent ignoruje regułę, która wyraźnie jest w pliku. Zwykle plik jest za długi albo regule przeczy inna linijka. Nie dopisuj „IMPORTANT” ani pogrubień: dokumentacja pamięci Anthropic zaznacza, że dłuższe pliki obniżają przestrzeganie instrukcji, więc każda dodana linijka osłabia pozostałe. Usuń inne linijki, żeby zrobić miejsce, wynieś reguły o wąskim zakresie i powtórz test świeżej sesji. Jeśli reguła musi obowiązywać zawsze, egzekwuj ją hookiem albo bramką w CI zamiast zdaniem.

Codex po cichu gubi najbardziej szczegółowe instrukcje. W monorepo pliki AGENTS.md z korzenia i katalogów pośrednich zużywają budżet 32 KiB, a plik najbliższy katalogowi roboczemu zostaje ucięty. Sprawdź łączny rozmiar przez wc -c na każdym pliku w łańcuchu, najpierw odchudź plik z korzenia albo podnieś project_doc_max_bytes w config.toml. Jeśli Codex nie wczytuje żadnego AGENTS.md projektu, najpierw sprawdź zaufanie: od 0.150.0 niezaufany projekt, np. świeży klon albo checkout w CI, nie dostarcza go wcale.

Claude Code nie wczytuje twojego AGENTS.md. Każdy CLAUDE.md, .claude/CLAUDE.md lub CLAUDE.local.md w drzewie katalogów ma pierwszeństwo, a build starszy niż v2.1.277 nie ma tej funkcji. Dodaj @AGENTS.md na początku CLAUDE.md, co działa w każdej wersji, albo ustaw Project instructions w /config na claude-md-and-agents-md, żeby wczytywać oba pliki. Pamiętaj, że sam prywatny CLAUDE.local.md wystarczy, by wyłączyć AGENTS.md.

Zacommitowany plik każe agentowi zrobić coś szkodliwego. Pliki instrukcji są częścią łańcucha dostaw: pull request może dodać linijkę, która każe agentowi uruchomić skrypt albo wysłać gdzieś dane. Przeglądaj zmiany w plikach instrukcji jak kod, wymagaj akceptacji właściciela z CODEOWNERS i nigdy nie pozwalaj agentowi w CI, który ma dostęp do sekretów, wczytywać plików instrukcji z niezaufanej gałęzi.

Plik i repozytorium rozjeżdżają się po migracji. Kontrola rozjazdu wyłapie zmienione nazwy skryptów i usunięte ścieżki. Nie wyłapie zmienionej konwencji, więc dopisz „zaktualizuj AGENTS.md” do checklisty każdego pull requesta, który zmienia narzędzia, i powtórz pytania testowe.

Plik odrasta po każdym incydencie. Każdy postmortem dodaje linijkę i nic nie znika. Ustaw budżet linii w kontroli rozjazdu i przycinaj plik regularnie oraz przy każdej zmianie modelu, korzystając z protokołu ablacji.