Przejdź do głównej zawartości

AGENTS.md i CLAUDE.md — zwięzły kontekst repozytorium

Kontekst repozytorium dla agentów kodujących to jeden krótki, wersjonowany plik AGENTS.md, który opisuje układ projektu, dokładne polecenia budowania i testów, granice oraz dowód wymagany, zanim praca zostanie uznana za skończoną. Claude Code, Codex i Cursor wyszukują pliki instrukcji na różne sposoby, więc działająca konfiguracja obejmuje też test pokazujący, co naprawdę wczytało każde narzędzie.

W zeszłym sprincie polecenie testów zmieniło się z npm test na pnpm test:unit. CLAUDE.md dostał poprawkę, AGENTS.md już nie, więc dziś sesja Codexa uruchomiła stare polecenie, zobaczyła błąd i „naprawiła” go, przepisując test. Nikt nie wie, który plik czytał który agent, bo nikt tego nigdy nie sprawdził.

Ta strona jest dla dewelopera, który odpowiada za konfigurację agentów w repozytorium, i dla tech leada, który ją ocenia. Odpowiada na pytanie 9 w Developer Scorecard. Zarządzaniem tymi samymi plikami w skali zespołu zajmuje się strona o wspólnych regułach agentów.

  • Główny AGENTS.md liczący około 40 linii, któremu może zaufać każdy agent i każda nowa osoba w zespole.
  • Jednolinijkowy adapter CLAUDE.md i awaryjną regułę Cursora, bez skopiowanych zasad, które się rozjadą.
  • Reguły zawężone do ścieżek dla dwóch lub trzech katalogów, które ich potrzebują, i nic więcej wczytywanego zawsze.
  • 20-linijkowy skrypt, który kończy się błędem, gdy Codex przestaje wczytywać twoje reguły, oraz widoki Claude Code, które pokazują to samo dla Claude’a.
  • Cztery prompty do skopiowania: szkic rdzenia na podstawie dowodów, sonda wykrywania, sonda reguły zawężonej i audyt rozjazdów.

Linia trafia do zawsze wczytywanego rdzenia tylko wtedy, gdy jest prawdziwa dla każdego zadania w repozytorium, a agent nie odkryje jej, czytając kod. Wszystko inne idzie do warstwy, która wczytuje się tylko wtedy, gdy jest potrzebna.

TreśćGdzie trafiaDlaczego
Układ, dokładne polecenia, granice, dowód ukończeniaGłówny AGENTS.mdPotrzebuje tego każda sesja
Konwencje jednego katalogu (src/billing/, infra/)Reguła zawężona do ścieżki albo zagnieżdżony AGENTS.mdWczytuje się tylko przy tym kodzie
Procedury wieloetapowe (wydanie, migracja, incydent)SkillWczytuje się na żądanie
Zakazy, które muszą obowiązywaćHooki, uprawnienia i sandboxing, CI, ochrona gałęziInstrukcje sterują, ale niczego nie wymuszają
Stan bieżącego zadaniaintent.md, spec.md, plan.md w łańcuchu artefaktówTraci ważność, gdy zadanie się kończy
Preferencje osobiste~/.claude/CLAUDE.md, CLAUDE.local.md albo twój plik użytkownika w CodexieDotyczy tylko ciebie, nie całego zespołu

Rdzeń zgodny z tą tabelą wygląda tak, dla monorepo TypeScript na pnpm:

AGENTS.md
# Repository contract
<!-- Owner: @platform-team · reviewed monthly · last review 2026-09-26 -->
## Layout
- Web app: `apps/web/` (Next.js). API: `apps/api/` (Fastify). Shared code: `packages/`.
- Database migrations: `apps/api/migrations/`, one file per change, never edited after merge.
## Commands (run from the repository root)
- Install: `pnpm install --frozen-lockfile`
- Unit tests: `pnpm test:unit` · one package: `pnpm --filter @acme/api test:unit`
- Types: `pnpm typecheck` · Lint: `pnpm lint` · E2E: `pnpm test:e2e` (needs `pnpm dev` running)
## Boundaries
- Do not run commands that reach production, and do not read `.env.production`.
- Ask before adding a dependency or changing an exported API in `packages/`.
## Done means
- `pnpm typecheck`, `pnpm lint` and `pnpm test:unit` pass; report the commands and their results.
- List changed files and anything you could not verify.

Każda linia wskazuje ścieżkę, polecenie albo warunek, który da się sprawdzić. „Pisz czysty kod” i „testuj dokładnie” nie przechodzą tego testu: ani recenzent, ani agent nie ustali, czy zostały spełnione. Dokumentacja pamięci Anthropic radzi to samo („Run npm test before committing” zamiast „Test your changes”) i podaje cel poniżej 200 linii na plik CLAUDE.md (dokumentacja pamięci Claude Code, sprawdzone 2026-09-26).

Te trzy narzędzia wyszukują pliki instrukcji inaczej, więc adapter zależy od narzędzia. Trzymaj zasady w AGENTS.md i daj każdemu narzędziu najcieńszy adapter, dzięki któremu wczyta ten plik.

Claude Code przy starcie czyta CLAUDE.md albo .claude/CLAUDE.md z katalogu roboczego i każdego katalogu nad nim, a zagnieżdżone pliki CLAUDE.md wtedy, gdy czyta pliki w ich katalogu. Od v2.1.277 czyta też AGENTS.md bezpośrednio, ale tylko wtedy, gdy w katalogu roboczym ani wyżej nie ma CLAUDE.md, .claude/CLAUDE.md ani CLAUDE.local.md. Kanał stable w npm doszedł do v2.1.280 dopiero 30 września 2026, więc kolega na starszej wersji ze stable jeszcze tego bezpośredniego odczytu nie ma.

Użyj importu, który działa w obu kanałach i nigdy nie wczytuje pliku dwa razy:

CLAUDE.md
@AGENTS.md
## Claude Code only
- Use plan mode before changing anything under `apps/api/migrations/`.

Szczegóły zawężone idą do .claude/rules/*.md. Reguła z frontmatterem paths wczytuje się tylko wtedy, gdy Claude czyta pasujący plik; paths to jedyny klucz frontmattera, który Claude Code tam odczytuje (sprawdzone w Claude Code v2.1.285, 30.09.2026).

.claude/rules/billing.md
---
paths:
- "apps/api/src/billing/**"
---
- Money is integer cents (`number`), never floats. Use `formatCents()` for display.
- Every billing change needs a test in `apps/api/test/billing/`.

.claude/rules/ działa tylko w Claude Code: Codex nigdy go nie czyta. A przy imporcie @AGENTS.md Claude Code nie wczytuje też zagnieżdżonego AGENTS.md, bo jego domyślny tryb „Project instructions” (claude-md-or-agents-md) sięga po AGENTS.md tylko w projekcie bez własnego CLAUDE.md. Dlatego regułę zawężoną, której mają przestrzegać oba narzędzia, zapisz w zagnieżdżonym AGENTS.md, a obok daj Claude’owi zagnieżdżony CLAUDE.md zawierający wyłącznie @AGENTS.md. Claude wczyta go, gdy przeczyta plik w tym katalogu:

apps/api/src/billing/CLAUDE.md
@AGENTS.md

Alternatywa to ustawienie „Project instructions” w /config na claude-md-and-agents-md: pliki AGENTS.md wczytują się wtedy obok CLAUDE.md, a plik, który CLAUDE.md już importuje, nie wczytuje się drugi raz (sprawdzone w Claude Code v2.1.285, 30.09.2026). .claude/rules/*.md zostaw na szczegóły zawężone potrzebne tylko Claude’owi.

Dwa szczegóły z dokumentacji pamięci mają tu znaczenie. Importy porządkują długi plik, ale nie zmniejszają jego kosztu w kontekście, bo importowane pliki wczytują się przy starcie. Blokowe komentarze HTML są usuwane, zanim treść trafi do modelu, więc linia z właścicielem w szablonie powyżej nie kosztuje tokenów.

  1. Szkicuj z dowodów, nie z pamięci. Uruchom /init w Claude Code albo w Codexie, żeby dostać pierwszy szkic, albo wklej prompt szkicujący poniżej. W Claude Code /init czyta też istniejące .cursor/rules/, .cursorrules i .github/copilot-instructions.md i przenosi do szkicu najważniejsze fragmenty, a gdy CLAUDE.md już istnieje, proponuje poprawki zamiast go nadpisywać.

  2. Wytnij każdą linię, która nie przechodzi tabeli powyżej. Usuń wszystko, co agent odczyta z package.json, drzewa katalogów albo konfiguracji lintera. Usuń przymiotniki. Zostaw polecenia, ścieżki i granice.

  3. Uruchom każde polecenie z pliku w czystym checkoucie. Polecenie, które nie przeszło, nie trafia do rdzenia. To także moment, w którym wychodzi na jaw, że pnpm test:e2e po cichu wymaga działającego serwera deweloperskiego.

  4. Wynieś szczegóły zawężone. Dla każdego katalogu, który ma realne lokalne konwencje, napisz jeden zagnieżdżony AGENTS.md i obok jednolinijkowy CLAUDE.md, który go importuje, jak w zakładce Claude Code. .claude/rules/<temat>.md z paths stosuj tylko do szczegółów potrzebnych wyłącznie Claude’owi. Typowo są to dwa lub trzy zawężone pliki; dwadzieścia oznacza, że rdzeń jest dzielony zamiast przycinany.

  5. Podepnij adaptery z zakładek powyżej: CLAUDE.md z @AGENTS.md, nic dla Codexa, sonda i ewentualnie reguła-wskaźnik dla Cursora.

  6. Wyznacz właściciela i bramkę. Dodaj AGENTS.md, CLAUDE.md, .claude/rules/ i .cursor/rules/ do CODEOWNERS i uruchamiaj w CI test wczytywania z następnej sekcji (przypięte CLI, patrz zakładka Codex). Właściciel zatwierdza każdą zmianę rdzenia tak samo jak zmianę konfiguracji CI.

Dwa rodzaje dowodu działają bez czytania plików linia po linii: test wczytywania, który pokazuje, jakie pliki dotarły do modelu, oraz sonda zachowania, która pokazuje, że agent potrafi te reguły podać i zastosować.

Test wczytywania w każdym narzędziu.

Uruchom /context w nowej sesji i sprawdź listę pod Memory files; /memory pokazuje te same pliki i je otwiera. Jeśli chcesz mieć zapis do późniejszego sprawdzenia, loguj każde wczytanie hookiem InstructionsLoaded w swoim osobistym .claude/settings.local.json (polecenie wymaga jq):

.claude/settings.local.json
{
"hooks": {
"InstructionsLoaded": [
{
"hooks": [
{
"type": "command",
"command": "jq -c '{file_path, load_reason}' >> \"$CLAUDE_PROJECT_DIR/.claude/instructions-loaded.log\""
}
]
}
]
}
}

Otwórz plik w apps/api/src/billing/, a w logu pojawi się linia path_glob_match dla billing.md. Hook działa dla CLAUDE.md, reguł i importów (load_reason: "include"). Log może nie pokazać AGENTS.md, który Claude czyta bezpośrednio bez CLAUDE.md, bo ta ścieżka przechodzi przez wbudowany plugin agents-md; import sprawia, że wczytanie jest widoczne. Hook służy tylko do obserwacji i nie może zablokować wczytania. Dodaj plik logu do .gitignore.

/doctor prompt-audit (sprawdzone w Claude Code v2.1.285, 30.09.2026) audytuje pliki instrukcji wczytywane w tym projekcie. Działa przez wbudowany skill claude-api, więc jest niedostępne, gdy wbudowane skille są wyłączone w ustawieniach. Przejrzyj jego ustalenia, zanim zaakceptujesz jakąkolwiek poprawkę.

Sonda zachowania w każdym narzędziu. Wklej te prompty do świeżej sesji po każdej zmianie plików instrukcji. Oczekiwane odpowiedzi trafiają do opisu pull requesta; błędna odpowiedź blokuje merge.

Najwięcej mówi drugie pytanie: agent, który odpowiada „integer cents, 1999”, zastosował regułę, a nie tylko ją wymienił.

Dodawaj linię dopiero wtedy, gdy ten sam błąd zdarzy się dwa razy w osobnych sesjach, i tylko jeśli poprawkę da się zapisać jako coś sprawdzalnego. To właśnie zasada „błąd powtórzony dwa razy trafia do reguł” z najlepszej odpowiedzi w Scorecardzie. Druga połowa to usuwanie: reguła, której od miesięcy nie potrzebowała żadna sonda ani żaden błąd, to kontekst opłacany w każdej sesji. Protokół ablacji do przycinania plików kontekstu usuwa linie pojedynczo i przywraca tylko to, co się psuje.

Co psuje się w AGENTS.md i CLAUDE.md i jak to naprawić?

Dział zatytułowany „Co psuje się w AGENTS.md i CLAUDE.md i jak to naprawić?”
ObjawPrzyczynaNaprawa
Claude Code ignoruje AGENTS.md po dodaniu osobistego CLAUDE.local.mdKażdy CLAUDE.md, .claude/CLAUDE.md lub CLAUDE.local.md wyłącza bezpośrednie czytanie AGENTS.mdDodaj @AGENTS.md do CLAUDE.md albo ustaw Project instructions w /config na claude-md-and-agents-md
Claude Code u kolegi nigdy nie widzi AGENTS.mdKolega ma wersję sprzed v2.1.277 (kanał stable doszedł do v2.1.280 30.09.2026), jest w sesji Bedrock, Google Cloud, Microsoft Foundry, przez bramkę LLM lub z wyłączoną telemetrią sprzed v2.1.281 albo ma wyłączony wbudowany plugin agents-mdImport @AGENTS.md działa w każdej wersji
Codex stosuje reguły z katalogu głównego, ale nie te z końca zagnieżdżonego plikuPliki łącznie przekraczają project_doc_max_bytes (32 KiB); późniejsze pliki są obcinane jako pierwszeSkróć rdzeń albo przenieś procedury do skilli; podniesienie limitu to tylko doraźne obejście
Codex ignoruje twoje zmiany w AGENTS.md w jednym kataloguAGENTS.override.md w tym samym katalogu go zastępujeUsuń override albo scal go; skrypt testu wczytywania pokazuje, który plik dotarł do modelu
Codex nie wczytuje żadnych instrukcji projektuProjekt jest niezaufanyOznacz projekt jako zaufany, gdy Codex o to zapyta; potwierdź przez codex debug prompt-input
W klonie na Windowsie CLAUDE.md zawiera tylko tekst AGENTS.mdZacommitowany symlink jest wypakowywany jako plik tekstowy, jeśli core.symlinks jest wyłączoneZastąp symlink importem @AGENTS.md
Agent stosuje regułę niekonsekwentnieDwa pliki sobie przeczą, a model może wybrać dowolnyUruchom prompt audytu rozjazdów albo /doctor prompt-audit w Claude Code i zostaw jedno źródło
Agent uruchomił polecenie, którego plik zabraniaPliki instrukcji sterują modelem; nie są granicą bezpieczeństwaPrzenieś granicę do reguły deny, hooka albo CI, a zdanie w pliku zostaw tylko jako wyjaśnienie
W pliku reguł pojawił się token dostępuKtoś zacommitował osobistą notatkęNajpierw unieważnij token, potem usuń go z historii; sekrety trzymaj w zmiennych środowiskowych