eugenemind.com
← Înapoi la blog

31 octombrie 2026 · 8 min. de citit

Code review local cu agenți AI, fără Pull Request sau Merge Request

#ai #code-review #developer-tools #git

Folosesc destul de des Claude Code și Codex, așa că ajung să verific schimbări destul de mari făcute de ele în proiect. Faptul că aplicația se compilează și testele trec nu înseamnă neapărat că sunt mulțumit de implementare.

Aș vrea să fac asta într-o interfață familiară, ca pe GitHub sau GitLab. Vreau să compar branch-ul curent cu dev, să parcurg fișierele, să las comentarii pe anumite linii și să trimit observațiile agentului, totul fără să creez încă un Pull Request sau Merge Request. Prefer să rezolv eu mai întâi problemele evidente, apoi să trimit codul colegilor la review.

Nici nu vreau să las tot review-ul în seama altui agent. Articolul Nobody Reviews Their Agent’s Code spune același lucru și descrie crit. Dezvoltatorul lasă comentarii pe modificările agentului, agentul le rezolvă, iar dezvoltatorul verifică din nou. Aici sunt de acord cu autorul. Review-ul făcut de AI poate fi o verificare în plus, iar eu prefer să citesc schimbările eu însumi.

crit: un fir de comentarii cu răspunsul agentului la liniile 52-65 crit: un fir de comentarii cu răspunsul agentului la liniile 52-65

De ce nu-mi ajung Xcode și git diff

Scriu aplicații iOS și de mult nu mai deschid Xcode decât dacă e nevoie. E mai simplu să compilez și să testez prin MCP, iar cu Xcode închis am mai puține bătăi de cap cu reconstruirea pachetelor. Așa că vizualizarea diff din Xcode nu e o opțiune pentru review.

Nici git diff în terminal nu rezolvă totul. Pot citi modificările, dar e mai greu să las comentarii precise și apoi să le transmit agentului.

Să presupunem că Codex adaugă o verificare făcută deja în CheckoutService. Aș vrea să selectez liniile respective și să scriu „Serviciul verifică deja cazul acesta. De ce mai avem nevoie de o verificare aici?”

Apoi deschid CheckoutView.swift și văd o componentă nouă, deși există deja una potrivită în MyAppUI. Mai las un comentariu și continui.

Pe GitHub aș scrie toate observațiile direct în diff. Local, ajung să schimb mereu fereastra între IDE și conversația cu agentul sau să notez separat fișierele și numerele liniilor.

Voiam aceeași comoditate ca la review-ul unui Pull Request, dar pe calculatorul meu. Din fericire, există deja câteva instrumente pentru asta.

Ce am încercat și ce am găsit

Primul care mi-a atras atenția a fost difit. Este un instrument open source mic, care deschide un Git diff local în browser, cu arbore de fișiere, evidențierea schimbărilor și comentarii pe linii.

De exemplu, pentru a compara branch-ul curent cu dev.

npx difit @ dev --merge-base

Cel mai mult mi-a plăcut funcția Copy All Prompt. Parcurg fișierele, las comentarii, apoi le copiez pe toate dintr-un singur click, împreună cu căile fișierelor și numerele liniilor.

difit: un comentariu la liniile 52-65 și butonul Copy All Prompt difit: un comentariu la liniile 52-65 și butonul Copy All Prompt

Textul exportat arată aproximativ așa.

CheckoutViewModel.swift:L84-L88
De ce repetăm verificarea aici?
CheckoutService tratează deja acest caz.

CheckoutView.swift:L42
Folosește componenta existentă din MyAppUI.

Îl lipesc în Claude Code sau Codex și cer agentului să parcurgă observațiile. Nu mai trebuie să explic de fiecare dată unde se află problema.

Mai târziu am găsit și un articol al autorului difit. Articolul pornește de la o problemă familiară. Un diff lung este incomod de citit în terminal, iar un Pull Request creat doar pentru propriul review înseamnă pași în plus. În fluxul descris acolo, agentul termină modificările, dezvoltatorul le verifică în browser, lasă comentarii și le trimite înapoi agentului.

Era foarte aproape de ce căutam. Mi-aș fi dorit însă să păstrez și răspunsurile agentului lângă comentarii, ca să pot vedea la următoarea trecere ce s-a discutat și de ce s-a ales o anumită soluție.

Apoi am încercat Plannotator. Se integrează cu Claude Code și Codex și poate transmite feedback-ul din browser fără să-l copiez manual.

Plannotator: review pentru diff față de dev, cu butonul Send Feedback Plannotator: review pentru diff față de dev, cu butonul Send Feedback

Ideea este bună, dar când l-am testat cu Codex, trimiterea comentariilor a deschis o sesiune nouă. E posibil să fi fost din cauza modului în care l-am lansat, însă pentru mine nu a fost convenabil.

În plus, schimb destul de des agenții. Dacă ajung la limita Codex, pot continua în Claude Code. Uneori vreau doar să încerc o abordare diferită. Nu vreau ca istoricul review-ului să depindă de o singură sesiune AI. Codex ar putea rezolva câteva observații, iar Claude Code să continue de acolo.

Am analizat și diffx. Are diff în browser, comentarii pe linii și un API local prin care agentul poate citi observațiile și publica răspunsuri. Comentariile pot fi marcate ca rezolvate, iar interfața arată care sunt deschise, au primit răspuns sau sunt rezolvate.

diffx: o întrebare cu răspunsul agentului și contorul 1 open, 1 replied diffx: o întrebare cu răspunsul agentului și contorul 1 open, 1 replied

Dintre cele trei, acesta este cel mai apropiat de ce-mi trebuie. Dar versiunea pe care am examinat-o păstra comentariile în memoria serverului. Eu aș vrea să rămână și după repornire. În plus, prefer să închid personal o discuție după ce verific modificarea, chiar dacă agentul spune că a reparat problema.

Fiecare instrument rezolvă o parte din problemă, dar niciunul nu se potrivește complet cu felul în care vreau să lucrez.

De ce am renunțat la ideea unui chat permanent

Inițial mă gândeam la un fel de GitLab local complet. Scriu un comentariu în browser, agentul îl primește imediat și răspunde sub linia respectivă. Întreb din nou, el răspunde, iar discuția se actualizează în timp real.

Când am început să mă gândesc la implementare, ideea nu mi s-a mai părut atât de utilă. Nu e suficient să pornești un server local. Trebuie să trimiți mesajele într-o sesiune Codex sau Claude Code deja activă, să preiei răspunsurile și să sincronizezi discuțiile.

Ce se întâmplă când schimb agentul? Cine primește următorul comentariu? Ar trebui agentul să-și întrerupă activitatea de fiecare dată când mai scriu o observație?

Mai apar și interacțiuni suplimentare cu modelul, deci posibil mai multe cereri și mai mulți tokeni consumați. Dacă reacționează separat la fiecare comentariu, agentul poate reciti codul și reconstrui contextul de mai multe ori. Procesarea în lot nu este automat mai ieftină, dar poate evita multe schimburi inutile de mesaje.

De fapt, în timpul review-ului nici nu am nevoie de răspunsuri instantanee. Prefer să termin de citit diff-ul, să las toate observațiile și abia apoi să-i cer agentului să le proceseze.

Așa am ajuns la un proces pe iterații.

  1. Agentul termină sarcina. Deschid diff-ul local și las comentarii.
  2. Trimit toate observațiile către Codex sau Claude Code printr-o singură comandă.
  3. Agentul răspunde la întrebări, modifică codul și păstrează rezultatele.
  4. Actualizez diff-ul, verific schimbările și încep încă o rundă dacă este nevoie.

Dacă nu sunt de acord cu o decizie, pot continua discuția la următoarea trecere. Nu am nevoie de un chat conectat permanent.

Un flux apropiat există și în crit, menționat mai sus. Observațiile se păstrează între runde, iar dezvoltatorul verifică din nou codul după corecții.

Pentru mine, acest compromis are mai mult sens decât să construiesc încă o interfață de chat cu AI.

Un fork al instrumentului ca variantă

Până la urmă cerințele sunt simple. Am nevoie de un diff local în browser față de un branch de bază, comentarii pe linii, transmiterea lor către agent dintr-o singură acțiune și un istoric care rămâne între iterații și nu depinde de o sesiune Codex sau Claude Code. Discuțiile le închid eu, după ce verific corecturile.

E mai simplu să fac un fork și să-l adaptez singur decât să deschid un Pull Request și să aștept jumătate de an. În plus, autorul instrumentului poate avea o viziune puțin diferită. Îmi place să-mi adaptez instrumentele, iar cu Codex și Claude Code o modificare mică nu durează mult. Așa că o variantă este să iau diffx ca bază. Pe lângă asta, toate sunt instrumente terțe, iar în propriul fork e mai ușor să controlez ce se întâmplă de fapt. Versiunea e fixată, dependențele sunt cunoscute și nu există nimic în plus.

Concluzii

Până la urmă prefer review-ul în mai multe runde, nu un dialog permanent cu agentul. Deschid diff-ul, las comentarii, cer corecții, verific rezultatul și repet dacă este nevoie.

Codul vreau în continuare să-l verific personal. AI poate găsi erori și poate rezolva observațiile, dar nu vreau să accept schimbările fără să le înțeleg.

Dintre instrumentele analizate, diffx este cel mai apropiat de cerințele mele, așa că acesta poate fi extins. Scopul este modest. Vreau un review local comod înainte de a crea un Merge Request, fără să mut manual comentarii între instrumente.


Linkuri

Articole similare