Intervjuer u Tencentu: "Koristiš Claude Code već pola godine, kako održavaš CLAUDE.md?" Bez razmišljanja: "Samo pokrenem /init", i on je ostao bez reči.
Pre nekoliko dana jedan čitalac mi je poslao privatnu poruku, rekavši da su na drugom krugu intervjua u Tencentu dobili ovo pitanje: "Kako održavaš CLAUDE.md?" Jedino što je znao bio je "pokrenem /init", a sa tim se inače nije mnogo bavio.
To je kao kad intervjuer želi da čuje "kako optimizuješ bazu", a ti odgovoriš "samo instaliraj MySQL i to je to".
Rekao si nešto, a opet kao da nisi.

/init je samo polazna tačka.
Fajl CLAUDE.md, dobro napisan, je superpower — kvalitet tvog isporučenog koda će biti vrhunski.
Loše napisan, postaje samo token buka. Današnji tekst donosi hardkoranu analizu.
Vežite sigurnosne pojaseve, krećemo.
01. Šta je zapravo CLAUDE.md
Prvo da raščistimo pojam.
CLAUDE.md nije README, nije komentar, nije dokumentacija — to je perzistentni fajl sa instrukcijama koji Claude Code automatski čita pri svakom pokretanju.
Kada otvoriš novu sesiju, prva stvar koju Claude Code uradi jeste da ubaci sadržaj CLAUDE.md u context window. Svaka instrukcija zapisana u njemu Claude može da "vidi" tokom cele sesije.
Da pojednostavnim: CLAUDE.md je "knjižica za novog zaposlenog" koju pišeš za Claudea. Prvi radni dan novog radnika, ne možeš mu usmeno sve poslovne logike da objasniš, zar ne?
Moraš da napišeš dokument koji mu govori: koji tehnološki stek koristimo, kako zahtevamo stil koda, kako se pokreću testovi, koje greške nikako ne sme da napravi.
To je posao CLAUDE.md.

TIPS: zbog kompatibilnosti sa Codex-om, ja obično navodim CLAUDE.md da učita i AGENTS.md, da ne bih održavao dva seta pravila u jednom projektu.
A šta radi /init?
On skenira repo, analizira fajlove poput package.json, Makefile, README, a zatim automatski generiše CLAUDE.md. Ovaj automatski generisani fajl obično sadrži: komande za build, komande za testiranje, opis strukture projekta.
02. Četvoroslojni sistem učitavanja Claude Codea
Claude Code ima kompletan sistem učitavanja koji se može podeliti u četiri sloja. Tek kada ga razumeš, možeš stvarno da iskoristiš CLAUDE.md kako treba.

Prvi sloj: globalna konfiguracija
Putanja je ~/.claude/CLAUDE.md i učitava se za sve projekte. Ovde idu lične preference u kodiranju, na primer "volim uvlačenje od 2 razmaka", "commit poruke na engleskom", "nemoj mi pisati komentare, kod treba da bude samoopisujući".
# ~/.claude/CLAUDE.md
- Koristi uvlačenje od 2 razmaka
- commit poruke na engleskom, poštuju Conventional Commits
- Ne piši komentare, koristi smislena imena promenljivih i funkcijaDrugi sloj: projektna konfiguracija
Putanja je CLAUDE.md u root direktorijumu projekta ili .claude/CLAUDE.md, commit-uje se u git i deli ga tim. Ovo je sloj koji se najviše koristi — tu se pišu komande za build, konvencije koda, arhitektonska dogovaranja.
Treći sloj: lokalni override
Putanja je CLAUDE.local.md ili .claude/CLAUDE.local.md, dodaje se u .gitignore i važi samo lokalno. Ovde idu lični env parametri, preference za debug, ili nova pravila koja trenutno testiraš.
Na primer, radiš na novoj funkciji i želiš da Claude u tom periodu piše više logova radi lakšeg debug-ovanja — ubaci to privremeno u local fajl, bez uticaja na ostatak tima.
Četvrti sloj: konfiguracija poddirektorijuma
I poddirektorijumi mogu imati svoj CLAUDE.md, ali ovaj sloj se učitava po potrebi — samo kada Claude čita fajlove iz tog direktorijuma, odgovarajući CLAUDE.md se ubacuje u kontekst.
Ovaj dizajn je posebno zgodan za monorepo. Frontend direktorijum može imati svoja pravila, backend drugačija, međusobno se ne mešaju.
my-monorepo/
├── CLAUDE.md # Globalna pravila projekta
├── frontend/
│ └── CLAUDE.md # React pravila, učitavanje po potrebi
├── backend/
│ └── CLAUDE.md # Java/Spring pravila, učitavanje po potrebi
└── infra/
└── CLAUDE.md # Pravila za deploy, učitavanje po potrebiRedosled učitavanja ide od root fajl sistema pa do radnog direktorijuma u kom je pokrenut Claude Code. Sadržaj svih fajlova se nadovezuje. Ako instrukcije dva fajla uđu u konflikt, onaj bliži radnom direktorijumu ima veći prioritet jer se "poslednji čita".
Izvukao sam izvor Claude Codea da vam pokažem.
Ključna logika je u funkciji getMemoryFiles() u src/utils/claudemd.ts:
// Prvi korak: učitavanje Managed (sistemskog) i User (korisničkog) CLAUDE.md + rules
const managedClaudeMd = getMemoryPath('Managed')
result.push(...(await processMemoryFile(managedClaudeMd, 'Managed', ...)))
const userClaudeMd = getMemoryPath('User')
result.push(...(await processMemoryFile(userClaudeMd, 'User', ...)))
// Drugi korak: od trenutnog direktorijuma penjemo se do root-a, sakupljamo sve putanje
const dirs: string[] = []
let currentDir = getOriginalCwd()
while (currentDir !== parse(currentDir).root) {
dirs.push(currentDir)
currentDir = dirname(currentDir)
}
// Treći korak: obrnuto! Od root-a idemo nadole, redom učitavamo CLAUDE.md svakog direktorijuma
for (const dir of dirs.reverse()) {
// Učitavanje CLAUDE.md (tip Project)
const projectPath = join(dir, 'CLAUDE.md')
result.push(...(await processMemoryFile(projectPath, 'Project', ...)))
// Učitavanje .claude/CLAUDE.md (takođe tip Project)
const dotClaudePath = join(dir, '.claude', 'CLAUDE.md')
result.push(...(await processMemoryFile(dotClaudePath, 'Project', ...)))
// Učitavanje .claude/rules/*.md
const rulesDir = join(dir, '.claude', 'rules')
result.push(...(await processMdRules({ rulesDir, type: 'Project', ... })))
// Učitavanje CLAUDE.local.md (tip Local)
const localPath = join(dir, 'CLAUDE.local.md')
result.push(...(await processMemoryFile(localPath, 'Local', ...)))
}Prvo sakupi putanje, zatim ih dirs.reverse() obrne i kreće od root-a ka radnom direktorijumu. Što je fajl bliži radnom direktorijumu, to se kasnije učita, pa je prioritet viši. Project i Local se obrađuju u istoj petlji, a CLAUDE.local.md se učitava nakon CLAUDE.md, pa prirodno može da pregazi projektna pravila.
Važno: nemoj dozvoliti da CLAUDE.md fajlovi na različitim nivoima budu međusobno protivrečni. To je prvi princip održavanja.
03. Budžet instrukcija LLM-a
Šta se desi ako je CLAUDE.md predug? Originalan citat iz Anthropic dokumentacije:
If your CLAUDE.md is too long, Claude ignores half of it because important rules get lost in the noise.
U prevodu: ako je CLAUDE.md predug, Claude će ignorisati polovinu, jer važna pravila nestaju u buci.

Koliko je "predug"?
Ovde moramo da razjasnimo jedan pojam: šta je "instrukcija"?
Svako pravilo zapisano u CLAUDE.md je jedna instrukcija. Na primer "koristi SLF4J za logove, ne System.out" je jedna, "promena komandnog ulaza zahteva sinhronizaciju Main.java + CliCommandParser + test + dokumentacija" je takođe jedna. Svaka instrukcija je obično jedna do dve rečenice, oko 10-30 tokena.
Na arXiv-u postoji rad "How Many Instructions Can LLMs Follow at Once?" (autor Daniel Jaroslawicz i saradnici, broj rada 2507.11538) koji ispituje koliko instrukcija model može istovremeno da prati.

Metod testiranja: model dobija zadatak pisanja izveštaja, uz N dodatih ograničenja, poput "mora sadržati ključnu reč X", "ne koristi pasiv", "pasus ne sme imati više od 5 rečenica", a zatim se meri koliko ih model zaista ispoštuje.
Zaključak: čak i najjači frontijer model, pri gustini od 500 instrukcija postiže tačnost od samo 68%.
Što je više instrukcija, to je niža stopa praćenja, i model sistematski favorizuje instrukcije na početku, dok se one na kraju lakše ignorišu.
Važno: ovde usko grlo nije kapacitet context window-a — nego to što pažnja modela ne može da se raspodeli. Kao kad čovek pokušava da zapamti 500 pravila odjednom, problem nije u papiru, nego u mozgu.

Da pređemo na situaciju sa Claude Codeom. Sam system prompt već nosi mnogo ugrađenih instrukcija (kontrola dozvola, pravila korišćenja alata, bezbednosna ograničenja, zahtevi za stil koda), koje već zauzimaju prilično prostora.
Sadržaj CLAUDE.md se nadleže na ovo. Zato efektivan prostor preostao za CLAUDE.md zaista nije onoliko veliki koliko ljudi misle.
Izvor rada: https://arxiv.org/abs/2507.11538
Kao da pišeš knjižicu za novog zaposlenog.
Napišeš 10 pravila, zapamti 8. Napišeš 50, zapamti 20. Napišeš 200, neće ni da ih lista, zapamti možda manje od 10.
Kako oceniti da li jedna instrukcija treba da ide u CLAUDE.md?
Postavi dva pitanja.
Prvo: ako je ne napišem, da li će Claude napraviti grešku? Ako Claude može da zaključi čitanjem koda, nemoj je pisati.
Drugo: da li je ova instrukcija potrebna u svakoj sesiji? Ako treba samo u specifičnom scenariju, stavi je u rules/ direktorijum sa path ograničenjem (o tome kasnije), nemoj trošiti budžet u CLAUDE.md.

Anthropic daje jedan vrlo praktičan savet: održavaj CLAUDE.md kao što održavaš kod.
Redovno radi review, instrukcije koje Claude nije ispunio naglasi sa "važno" ili "obavezno izvršiti"; instrukcije koje Claude ionako dobro radi, odlučno obriši.

Izvor: https://www.anthropic.com/engineering/claude-code-best-practices
04. Kakva pravila zaista deluju?
Budžet instrukcija nam govori da CLAUDE.md mora biti koncizan, pa moramo razdvojiti koja pravila koriste, a koja su buka.

Uzmimo projekat PaiCLI kao primer. PaiCLI je Agent CLI napisan čistom Javom. Izvadiću pravila iz njegovog AGENTS.md da osetite kako izgledaju zaista efikasna pravila:
- Build: mvn clean package (podrazumevano preskače testove)
- Brza regresija: mvn test -Pquick
- Specificiran test: mvn test -Dtest=ToolRegistryTest
- search_code je RAG pomoć, nije glavni način lociranja koda, prvo koristi glob_files → grep_code → read_file
- Promena ponašanja → sinhronizuj AGENTS.md + README.md + ROADMAP.md
- Promena ulaza komande → Main.java + CliCommandParser.java + test + dokumentacija
- Zabranjeno commit-ovanje .env, pravih API Key-eva, target/ artefakataSvako od njih ako se jasno ne kaže, sigurno će se pogrešiti.
Claude ne može iz koda da pogodi da mvn clean package podrazumevano preskače testove. Ne može ni da zna da promena jedne slash komande zahteva sinhronizaciju četiri mesta. Još manje može da zna da search_code u ovom projektu samo pomaže, a da se pravo lociranje koda radi glob + grep + read trio.
To je izgled efikasnog pravila: jedna rečenica kaže sve, bez objašnjavanja i bez suvišnih reči, ali je gustina informacija visoka.
Pogledajmo i kontra primer:
- Koristi Java 17 za pisanje koda
- Poštuj slojevitu arhitekturu
- Održavaj kod čistimClaude kada vidi <java.version>17</java.version> u pom.xml već zna da treba Java 17. Kada vidi direktorijume agent/tool/cli/memory zna kako da slojevi. "Održavaj kod čistim" je još besmislenije.

Da sumiramo, dobra pravila imaju tri osobine.
Prvo, mogu se stati u jednu rečenicu. Ako jedno pravilo zahteva tri reda da se objasni, ili ga podeli u tri, ili je to znak da je suviše kompleksno i treba preći u komentar koda ili dokumentaciju.
Drugo, Claude ne može sam da ga zaključi. Šta se može izvesti iz pom.xml, strukture koda i konfiguracionih fajlova, ne treba pisati.
Treće, ima jasno akciono uputstvo. "Pazi na bezbednost" je prazna reč, "PathGuard ograničava na root projekta, zabranjuje apsolutne putanje i symlink traverse" je pravilo.
05. kako A-kompanija piše CLAUDE.md?
Pogledajmo kako Anthropic to radi u svojim projektima.
Njihov repozitorijum claude-code-action (projekat koji pokreće Claude Code unutar GitHub Actions) ima CLAUDE.md koji sam prelistao:
- Commands: konkretne komande za build, test, lint
- What This Is: šta je projekat, u jednoj rečenici
- How It Runs: mehanizam rada, ne uvod u stilu dokumentacije, nego "šta moraš da znaš pre nego što promeniš kod"
- Key Concepts: ključni koncepti, 3-5 tačaka
- Things That Will Bite You: lista zamki, detalji na koje se može nagaziti
- Code Conventions: konvencije koda, samo ono što se razlikuje od podrazumevanog

06. rules/ direktorijum
CLAUDE.md je jedan fajl; kada projekat postane kompleksan, lako postane napuhan. Tu uskače .claude/rules/ direktorijum.
Svaki .md fajl u rules direktorijumu je nezavisan set instrukcija. Rules fajl bez paths polja učitava se pri pokretanju, isto kao CLAUDE.md. Fajl sa paths poljem učitaće se samo kada Claude radi sa fajlovima koji odgovaraju toj putanji.
# .claude/rules/react-conventions.md
---
paths:
- "src/components/\*_/_.tsx"
- "src/hooks/\*_/_.ts"
---
- Komponente se pišu funkcionalno, bez class
- props se dekonstruiše u potpisu funkcije
- custom hook počinje sa use
- Stanje se upravlja zustand-om, ne redux-omOvo pravilo se učita samo kada Claude čita ili piše fajlove iz src/components/ ili src/hooks/. Pri pisanju backend Java koda ova frontend pravila ne zauzimaju context window, ne troše budžet instrukcija.
.claude/
├── CLAUDE.md # Ključna pravila, držati ispod 80 redova
└── rules/
├── code-style.md # Opšti stil koda, bez path ograničenja
├── testing.md # Test konvencije, bez path ograničenja
├── security.md # Bezbednosna pravila, bez path ograničenja
├── frontend.md # Frontend pravila, paths: ["src/**/*.tsx"]
└── api.md # API pravila, paths: ["src/api/**/*.ts"]U CLAUDE.md stavi samo 5-10 ključnih pravila i neophodne komande, ostalo podeli po temama u rules direktorijum. Tako svako pravilo dobija precizno ciljanje, bez rasipanja ni jednog tokena konteksta.
Još jedan napredan trik: uvoz eksternih fajlova @path sintaksom.
# CLAUDE.md
@README.md
@docs/architecture.md
## Pravila projekta
- Svi API rezultati se uvijaju u Result wrapper
- Za logove koristi SLF4J, ne System.out@README.md se pri pokretanju razvija, ubacivanjem sadržaja README direktno u kontekst. Ovo je zgodno za projekte sa naročito dobrim README-om, koji ne žele da ga prepisuju u CLAUDE.md.
07. /init i /memory
/init radi cold start.
Prvog dana novog projekta, pokreni /init; Claude će skenirati strukturu repozitorijuma, analizirati zavisnosti, pročitati README i generisati osnovni CLAUDE.md. Sadrži komande za build, komande za test, osnovni opis projekta.
/memory radi hot update.
Claude Code poseduje sistem automatskog pamćenja. Svaki projekat u direktorijumu ~/.claude/projects/ ima fajl MEMORY.md u koji Claude automatski upisuje informacije koje treba zapamtiti kroz sesije. Pri sledećem pokretanju, prvih 200 redova MEMORY.md se automatski učitava u kontekst.

Ključno pitanje: šta ide u CLAUDE.md, a šta u memory?
CLAUDE.md nosi timski deljena, dugoročno stabilna pravila. Ovaj sadržaj se commit-uje u git, svi ga vide i poštuju. Na primer komande za build, konvencije koda, arhitektonske dogovore.
memory nosi lična, promenljiva iskustva nakupljena u svakodnevnoj saradnji.

Ritam stvarnog održavanja izgleda ovako:
Prve nedelje pokreni /init da generišeš osnovnu verziju CLAUDE.md. U svakodnevnom radu Claude automatski akumulira iskustvo u memory.
Od druge nedelje, redovno odraditi review memory sadržaja. Ako primetiš da je neko iskustvo zapravo univerzalno pravilo, prebaci ga u CLAUDE.md. Zastarele stavke u memory aktivno očisti.
08. Konfiguracioni sistem Claude Codea
CLAUDE.md ne stoji sam. Citav konfiguracioni sistem Claude Codea ima četiri uloge i važno je razdvojiti njihove granice.
CLAUDE.md upravlja "preporukama".
settings.json upravlja "forsiranjem". Kontrola dozvola, env promenljive, konfiguracija MCP servera idu u .claude/settings.json. Nema pregovaranja, tvrdo ograničenje.
{
"permissions": {
"allow": ["Bash(npm run *)", "Bash(git *)"],
"deny": ["Bash(rm -rf *)", "Bash(git push --force)"]
}
}hooks upravljaju "automatizacijom". Ako nešto mora da se izvrši svaki put, nemoj pisati u CLAUDE.md "ne zaboravi da formatiraš kod" — konfiguriši hook koji posle svake izmene fajla automatski pokrene Prettier. Hooks izvršava harness, ne zavisi od Claudeovog "pamćenja".
rules/ upravlja "preciznim ciljanjem". Detaljno objašnjeno ranije: ograničavanje učitavanja pravila po putanjama, štedi budžet instrukcija.

U jednoj rečenici: CLAUDE.md za preporuke, settings.json za forsiranje, hooks za automatizaciju, rules/ za precizno ciljanje.
09. Šablon spreman za upotrebu
Posle svega ovoga, evo praktičnog šablona — prekopiraj ga u projekat, prilagodi i može da se koristi:
# CLAUDE.md
## Commands
- Build: mvn clean package -DskipTests
- Test: mvn test
- Pojedinačni test: mvn test -Dtest=XxxTest
- Provera koda: mvn spotbugs:check
- Formatiranje: mvn spotless:apply
## What This Is
Jednom rečenicom šta je projekat.
Na primer: PaiCLI je Agent CLI u čistoj Javi, 28K redova koda, bez zavisnosti od Spring AI/LangGraph4J.
## Architecture
- Ulaz: Main.java → CliCommandParser raspodeljuje komande
- Agent petlja: AgentLoop.java, registracija alata u ToolRegistry
- Sistem pamćenja: MemoryManager, perzistencija zasnovana na fajlovima
- Nemoj dirati definicije interfejsa u agent/core/, svi alati ispod zavise od njih
## Things That Will Bite You
- search_code je RAG pomoć, nije glavni način lociranja koda, prvo koristi glob → grep → read
- Promena ulaza komande → obavezno sinhronizuj Main.java + CliCommandParser + test + dokumentaciju
- FileUtils već ima sandbox ograničenje za putanje, nemoj to da zaobilaziš i sam sastavljaš putanje
- API Key u testovima obavezno mock-ovati, zabranjeno commit-ovanje pravih ključeva
## Code Conventions
- Za logove koristi SLF4J, ne System.out
- Ne gutaj izuzetke, bar log.warn
- Sve public API povratne vrednosti uvij u Result wrapper klasu
- Novi alat mora implementirati Tool interfejs i registrovati se u ToolRegistry
## Don't
- Nemoj u poslovnom kodu direktno new Thread, koristi ExecutorService
- Nemoj menjati format .env.example, CI zavisi od njega
- Nemoj u CLAUDE.md dodavati "održavaj kod čistim" i slične prazne rečeniceCitav fajl ispod 50 redova, a pokriva sve što treba.
Commands daje Claude-u informaciju o build i test, Architecture gde se šta nalazi, Things That Will Bite You štiti od zamki, Don't povlači crvene linije.
Nijedna suvišna reč.
10. kako odgovoriti na intervjuu?
Vratimo se pitanju sa početka: "Kako održavaš CLAUDE.md?"
Ako intervjuer ovo pita, tri rečenice su dovoljne.
Prva rečenica o mehanizmu: CLAUDE.md je perzistentni fajl instrukcija Claude Codea, automatski se učitava pri pokretanju. Ima četvoroslojni sistem učitavanja, od sistemskog do poddirektorijumskog nivoa, sa većim prioritetom za fajlove bliže radnom direktorijumu.
Druga rečenica o principu: Rad na arXiv-u je izmerio da pri gustini od 500 instrukcija najjači model postiže 68%; što više instrukcija, to manja stopa praćenja. Zato ključna pravila idu u CLAUDE.md, ograničeno na 80 redova; pravila specifična za scenario idu u .claude/rules/ direktorijum sa paths poljem za path ograničenje, učitavanje po potrebi, izbegavajući mešanje svih pravila u jednom fajlu.
Treća rečenica o praksi: svakodnevno održavanje se oslanja na dve komande — /init za cold start i osnovnu verziju, /memory za automatsko akumuliranje iskustva kroz sesije. Dobra pravila pišu samo ono što Claude ne može sam da zaključi; redovno review, održavaj CLAUDE.md kao što održavaš kod.
To je to za danas.
Vidimo se u sledećem.
