7. 8. 2026

LSP namiesto grepu: coding agent nemusí čítať repozitár naslepo

Realistický cover: vývojář naviguje velkou codebase pomocí symbolů a vztahů v LSP

Grep nie je zlý. Na textové hľadanie, logy, konfiguráciu alebo rýchle „kde sa tento reťazec vyskytuje?“ je presne správny nástroj. Pre coding agenta nad väčším repozitárom však často rieši nesprávny problém.

Agent zvyčajne nepotrebuje nájsť rovnaké znaky. Potrebuje vedieť, čo daný symbol znamená, kde je definovaný, kto ho používa a čo sa dá pri refaktore bezpečne zmeniť. To je rozdiel medzi textovým vyhľadávaním a sémantickou navigáciou cez Language Server Protocol (LSP).

V AI Mastermind 34 ukázal Jirka Herník dve vetvy rovnakej úlohy: premenovať jednu property a presne vypísať, čo treba zmeniť. V jeho konkrétnom deme sa vetva s grepom niekoľko minút prehryzávala súbormi, zatiaľ čo vetva s LSP dostala referencie priamo. Výsledok bol rovnaký. Číslo 81× z videa však neberiem ako univerzálny benchmark. Je to dobrá ukážka mechaniky: hlavná úspora nevzniká tým, že LSP „nahradí grep“, ale tým, že model nemusí míňať tokeny a čas na rekonštrukciu kontextu, ktorý už pozná IDE.

Čo presne ukázalo Jirkovo demo

Na snímke z rovnakého zadania „vypíš presne, čo sa musí zmeniť pri premenovaní JournalEntry.Amount“ sú vedľa seba dva celé agentné behy. Nejde teda o mikrobenchmark samotného grepu: grep našiel kandidátov rýchlo, ale agent potom musel čítať a vyhodnocovať súbory. LSP vrátilo symbolové referencie v jednom kroku.

Metrika z dema grep vetva LSP vetva
Čas od zadania k výsledku 7 min 20 s 5,4 s
Tool cally 54 1
Prečítané súbory 20+ 0
Tokeny spracované modelom 12 868 604 približne 2 000
Nové tokeny mimo cache 392 599 približne 250
Výsledok správne správne

Pomer času vychádza približne na 81×. Nie je to však prísľub výkonu Sereny, Claude Code ani LSP všeobecne. Je to jedno demo, kde bola úloha takmer ideálna pre referenčný dotaz nad symbolom. Pri zmene naprieč dynamickým kódom, šablónami, SQL, konfiguráciou alebo externým API bude rozdiel menší — a niekedy sa bez grepu vôbec nezaobídete.

Ako si tieto hodnoty overiť vo vlastnom repozitári

Pre férové porovnanie dajte obom behov rovnaké zadanie, rovnaký model, rovnaký limit contextu a rovnakú výchoziu vetvu. Zapisujte door-to-door čas, počet tool callov, prečítané súbory, cache a nové tokeny, diff a výsledok testov. Potom z „grep verzus LSP“ nerobte spor viery: pri každej triede úloh zmerajte median aspoň z piatich behov.

Pre firmu je najzaujímavejší posledný riadok s novými tokenmi. Cache tokeny majú tiež prevádzkovú cenu a latenciu, ale novo spracovaný kontext najlepšie ukáže, koľko zbytočného čítania repozitára agent skutočne odstránil.

Čo LSP agentovi reálne dáva

Language Server Protocol je štandard komunikácie editora s nástrojom, ktorý rozumie konkrétnemu programovaciemu jazyku. Jazykový server dokáže nájsť definíciu symbolu, jeho referencie, implementácie alebo diagnostiku.

To je vrstva, ktorá v IDE robí z kliknutia na názov funkcie prechod na definíciu a z premenovania symbolu riadený refaktor. Keď tú istú vrstvu dostane cez MCP coding agent, nemusí predstierať IDE pomocou grep, globov a postupného čítania súborov.

Užitočné otázky potom znejú:

  • Kde je deklarované toto pole?
  • Ktoré symboly naň odkazujú?
  • Je niektorý výskyt iba rovnaký text s iným významom?
  • Ktorá zmena je premenovanie a ktorá už mení API alebo databázový kontrakt?

V TypeScripte, Jave, C#, Pythone či PHP môže byť rovnaký reťazec v triede, DTO, validátore, SQL migrácii, teste, dokumentácii aj frontende. Grep ich nájde všetky. Sémantická navigácia dokáže odlíšiť, ktoré sú skutočné referencie na programový symbol.

Prečo grep stojí agenta viac než vývojára

Skúsený vývojár číta výsledky grepu rýchlo. Pozná architektúru, v editore preskakuje medzi definíciami a ľahko rozozná falošný zásah. Agent si tento mentálny model musí skladať z textu, po jednom tool calle.

To stojí tokeny, latenciu aj spoľahlivosť. Agent číta nerelevantné úseky, robí ďalšie kroky na hľadanie a rozhodovanie a textové nahradenie môže upraviť komentár, iný rovnako pomenovaný symbol alebo iba časť kontraktu.

Pri malom súbore je to zanedbateľné. V monorepe, pri dlhom taske alebo pri paralelných subagentoch sa z toho stáva prevádzkový náklad a zdroj chýb. LSP je preto dôležitejšie než ďalší prompt trik: mení vstup, z ktorého model rozhoduje.

Serena robí LSP praktickým pre agenta

Serena je open-source MCP toolkit pre coding agentov. Nad language servermi ponúka symbolové vyhľadávanie, prehľad súboru, referencie, definície a nástroje na editáciu či refaktoring. Možnosti stále závisia od kvality language servera pre konkrétny jazyk.

Serena nie je model a nenahrádza testy. Sprístupní modelu sémantické informácie, ktoré by inak musel pracne rekonštruovať. Agent stále plánuje zmenu, upravuje kód a spúšťa testy. Len nezačína naslepo.

To je užitočný vzor aj pre interné AI nástroje. Nedávajte modelu najprv celý repozitár. Dajte mu kontrolované nástroje, ktoré odpovedia na presné štrukturálne otázky: symbol, referencie, diagnostika, test, diff. A podľa citlivosti projektu rozhodnite, ktoré z nich smie používať automaticky.

Kde LSP nepomôže

LSP nie je univerzálna skratka. Grep zostáva lepší na text v Markdownu, dokumentácii, šablónach a konfiguráciách; logy a neznáme identifikátory; regulárne výrazy a ad-hoc prieskum; aj jazyky alebo buildy bez funkčného language servera.

Symbolová referencia tiež nerozhodne o produktovom dopade zmeny. Premenovanie entity môže vyžadovať databázovú migráciu, úpravu API, kontrolu analytiky, regeneráciu klienta alebo komunikáciu s iným tímom. LSP povie, kde v kóde. Nepovie, čo je správne pre produkt.

Malý pilot, ktorý má zmysel zmerať

Nedávajte hneď každému agentovi plný prístup k refaktorom. Urobte krátky pilot v jednom repozitári:

  • Vyberte opakované úlohy: premenovanie, dohľadanie call sites, úprava DTO, rozdelenie modulu.
  • Zmerajte tool cally, prečítané súbory, čas do prvého správneho plánu a čas do zelených testov.
  • Porovnajte beh iba so search nástrojmi a beh s LSP/MCP.
  • Pri väčších zmenách vyžadujte diff, testy a ľudské review.
  • Read-only navigáciu držte oddelene od nástrojov, ktoré môžu meniť kód alebo spúšťať shell.

Záver je jednoduchý: coding agent nemá hľadať význam kódu cez text, keď ho language server vie vrátiť ako štruktúrovaný fakt. LSP nenahrádza grep. Dáva agentovi navigáciu po symboloch a vzťahoch, čím znižuje náklad aj neistotu pri väčších zmenách.

Zdroje