Ship It With AI Mihai Cvasnievschi

AGENTS.md și contextul

11 min de citit

La finalul capitolului poți scrie un AGENTS.md în care fiecare linie își merită locul și poți rula sesiuni de agent care rămân ascuțite.

TL;DR


Ce este AGENTS.md?

AGENTS.md este acordul echipei cu agentul, versionat în git.

E un fișier Markdown cu instrucțiunile proiectului. Un client compatibil îl încarcă după propriile reguli de descoperire și configurare; unii clienți cer încărcare explicită. Textul consemnează ce vrea echipa să urmeze agentul și poate trece prin review într-un pull request. E stratul Memory deținut manual din Capitolul 1, nu o politică de permisiuni aplicată efectiv.

AGENTS.md vs CLAUDE.md: care e diferența?

Același rol, dar regulile de încărcare depind de harness și de versiune.

Un nume de fișier comun nu înseamnă reguli identice de încărcare. Rezumatul de compatibilitate de mai jos a fost verificat pe 23 octombrie 2026; verifică versiunea instalată și contextul efectiv.

Client Nume de fișier și configurare Arie și precedență Cum verifici ce s-a încărcat
Codex CLI AGENTS.md; AGENTS.override.md are prioritate în același director; numele de fallback sunt configurabile Instrucțiuni globale, apoi din rădăcina repository-ului spre directorul de lucru; instrucțiunile mai apropiate le suprascriu pe cele anterioare; limita totală de dimensiune e configurabilă Cere sursele active și inspectează logurile de sesiune/TUI la audit
Claude Code CLAUDE.md implicit; AGENTS.md direct din v2.1.277 Fallback-ul AGENTS implicit se aplică doar dacă directorul de lucru și părinții nu conțin CLAUDE.md, .claude/CLAUDE.md sau CLAUDE.local.md; un fișier CLAUDE poate importa @AGENTS.md; numele AGENTS override/local nu au semantica din Codex /memory; afișarea fișierelor AGENTS încărcate direct cere v2.1.280+, cu excepții timpurii rezolvate în v2.1.281
Gemini CLI GEMINI.md implicit; configurează context.fileName să includă AGENTS.md Context global, de workspace/directoare părinte și de director relevant, cu reguli de trusted root; nu modelul de precedență din Codex /memory show, apoi /memory reload după schimbări
Aider Explicit aider --read AGENTS.md; păstrează read: AGENTS.md în .aider.conf.yml Context de chat inclus read-only; fără o ierarhie implicită de descoperire AGENTS în directoarele părinte Confirmarea de pornire și /ls

Documentația primară și limitele de versiune sunt în Anexa C. Testează o instrucțiune distinctivă într-o sesiune nouă, în loc să presupui că fișierul a fost descoperit sau că are aceeași autoritate în fiecare client.


Povestea: o convenție, trei forme de sprijin

O echipă cu care am lucrat folosea un coding agent de șase luni când un senior engineer a venit la mine cu o nemulțumire. „De fiecare dată când generăm un endpoint de API, trebuie să repar validarea. Mereu aceeași corecție. Agentul pune validarea în stratul greșit.”

„De ce nu e regula scrisă undeva?”

„N-am scris-o niciodată. Doar o tot reparăm.”

Seniorul corecta repetat aceeași amplasare a validării la review-urile de endpoint-uri. Relatarea inițială includea numere de endpoint-uri și o estimare de timp, dar înregistrările review-urilor nu sunt disponibile aici, așa că ediția aceasta nu susține o economie lunară precisă.

Am documentat convenția în AGENTS.md, am adăugat un reminder în template-ul de PR și am identificat endpoint-uri corecte ca exemple de referință. Potrivit relatării, review-urile ulterioare au cerut mai puține corecții de acest fel. Intervenția a fost combinația celor trei; relatarea nu izolează contribuția instrucțiunii.

Fișă de caz Ce stabilește relatarea
Proveniență Engagement anonimizat, relatat de autor
Dovezi O problemă recurentă de review și o îmbunătățire raportată; înregistrările de review/timp nu sunt publicate
Comparație Observații înainte/după schimbarea combinată de instrucțiune, reminder și exemple de referință
Limitări Fără efect izolat al instrucțiunii, mix controlat de task-uri sau economie lunară de timp demonstrabilă
Lecție transferabilă Scrie o convenție delimitată, susține reviewerii și exemplele, apoi măsoară corecțiile recurente

Șase reguli pentru fișier

Șase reguli, fiecare cu un test pe care îl poți aplica oricărei linii.

# Regula Ai respectat-o când
1 O linie, o constrângere verificabilă Numește stratul, mecanismul și un exemplu
2 Un motiv local și verificabil Poți numi eșecul prevenit sau constrângerea neintuitivă și de ce contează
3 Context stabil, cu scop clar Constrângeri locale, convenții, comenzi, glosar și pointeri utili
4 Scurt și verificat în practică Fiecare instrucțiune își justifică locul; circa 200 de linii e un reper, nu o limită dovedită
5 Tratează-l ca pe cod Git, review în PR, un singur champion care se rotește
6 Citește înainte să citezi Fiecare nume a fost citit în sesiunea asta sau găsit cu grep

Regula 1: scrie reguli pe care agentul le poate verifica

O regulă pe care agentul n-o poate verifica e decor.

Regula
Prost „Respectă întotdeauna standardele noastre de cod. Ai grijă la validare. Folosește arhitectura corectă.”
Bine, pentru intrarea HTTP a acestui proiect „DTO-urile controller-ului stabilesc garanțiile de formă ale request-ului prin Bean Validation înainte de apelul de service; urmează UserCreateController. Alte puncte de intrare stabilesc aceleași garanții. Codul de service/domain impune în continuare invariantele de business; folosește validarea metodelor de service unde acea graniță o cere.”

Varianta proastă nu specifică arhitectura. Varianta delimitată identifică o graniță de intrare, garanția ei, un mecanism și un exemplu fără să declare că serviciile pot avea încredere universală în orice input. Spring suportă și validarea metodelor de service. Un pattern portabil este: „În [scope], [granița de intrare] stabilește [garanția de input] prin [mecanism]; urmează [referința]. Alte intrări stabilesc aceeași garanție; [responsabilul] păstrează invariantele de domeniu.” Anexa B.2 e un punct de pornire specific unui proiect.

Regulile 2 și 5: motivate de context, tratate ca cod

O regulă își câștigă locul prin utilitate locală, iar un champion ține fișierul în formă.

Regulile 3 și 4: context relevant, lungime justificată

Păstrează constrângerile locale, comenzile și pointerii care scutesc agentul de ghicit.

O hartă voluminoasă se citește mai bine la cerere, în docs/architecture.md; un pointer sau o scurtă informație de orientare poate rămâne dacă ajută task-urile reale. Studiul revizuit despre AGENTS.md nu a găsit o îmbunătățire generală a succesului pentru fișierele de context generate și a măsurat un cost de inferență cu peste 20% mai mare în setup-urile testate. Fișierele scrise de developeri au adus un câștig mediu modest, fără semnificație statistică. Studiul nu dovedește că orice fișier de instrucțiuni dăunează sau că fiecare categorie de context trebuie eliminată.

Folosește circa 200 de linii ca reper de întreținere. Nu există o prăpastie demonstrată la linia 201. Elimină redundanțele și regulile generice, mută detaliile la locul lor și păstrează regulile rare care încă previn un eșec real. Un studiu despre numărul de reguli din prompturi nu stabilește o conversie universală între reguli și linii de AGENTS.md. Verifică dacă fișierul tău ajută, pentru modelul și task-urile folosite.

Fișierul unei echipe de banking a crescut în șase luni până pe la nouă sute de linii, iar agentul a început să ignore regulile cele mai noi. L-am tăiat la nouăzeci, mutând convențiile în skill-uri care se încarcă la detecție și istoricul greșelilor din trecut în documentul de arhitectură, iar rata de conformare a sărit în sus într-o săptămână. Cazul arată utilitatea selecției și a structurii, nu validează un plafon universal de linii.

Regula 6: când agentul minte cu încredere

Agentul inventează fișiere, funcții și opțiuni, așa că obligă-l să demonstreze ce citează.

Va cita un fișier care nu există, o funcție pe care biblioteca n-a expus-o niciodată, o opțiune scoasă din uz acum trei versiuni. Output-ul arată plauzibil și e greșit; agentul potrivește pattern-uri din cod similar și nu știe că ghicește. Trei tactici mecanice:


Igiena contextului

Fereastra e memoria de lucru a agentului, așa că încarcă ce cere task-ul și nimic în plus.

Tot ce e în fereastră concurează pentru aceeași atenție mărginită. Contextul învechit sau contradictoriu e una dintre cauzele pentru care o sesiune lungă poate pierde firul task-ului. Patru obiceiuri te ajută să păstrezi contextul util.

Clientul stabilește ce rezumă, ce păstrează și ce reîncarcă; documentația Claude Code despre compactare descrie aceste diferențe. Verifică comportamentul clientului și al versiunii pe care le folosești.


Când se strică


De făcut luni


Mai departe