Jeden rok agentního kódování - zkušenosti

Petr Talla

petr.talla@gmail.com

5. července 2026

Přehled článků

Ilustrace k článku o roce agentního kódování

1. Úvod

Asi před rokem jsem začal používat plné kódování pomocí agentního software. Od té doby končí moje commity přibližně takto:

Petr Talla: design | Claude: implementace (485 ins, 16 del)

a ani ten text už nepíšu. Dobrý den je 3000 řádků. Pro ruční programování naprosto nedostupné. Nejdříve to byl export kódu do kontextu aplikace. Následně rychle za sebou Codex, OpenClaw až jsem zůstal u Claude Code. V něm mě asi nejvíc zaujala určitá snaha spíše spolupracovat, než z patra radit.

Popravdě nejpřesnější a nejúčinnější byl ten můj puvodni export. Kontext se zde nekazí postupným hledáním informace. Vždy je export, jeden úkol, zápis do kódu a nový export. Měl jsem ale zprovozněné jen pro C++ a je spousta věcí, které agent může dělat taky - git, SQL, admin počítače či serveru. Věnovat veškerý čas na údržbu systému je trochu nesmyslné.

Pro zajímavost. Agentní systém jsem předikoval celkem přesně už v roce 2023 v článku Empovering Program Control with Natural Language using Large Language Models like Chat GPT. To je zhruba čas prvních pra-agentů, kteří tak nanejvýš brouzdali web.

2. Prompt by sample

Tento článek jsem začal psát jako prompt Claude Code:

USER: Zaloz mi clanek agentic_year, nazvany ...

přičemž Claude Code nemá informace o tom jak psát články. Ví jen kde se nacházejí - vidí okolní repa stejné úrovně a okolní moduly. Ví jak článek pojmenovávám a jaké soubory v něm jsou. Udělá to neomylně úplně stejně.

Základní pravidlo agentního kódování je pravidelnost. Žádné instrukce nejsou třeba, když agent vidí jak je to uděláno jinde. Totéž platí pro kódování. Repa, moduly, aplikace, commandy ... neomylně vše udělá jak vidí kolem sebe. Je schopna psát aplikace, přidávat do nich moduly, vytvářet nové moduly, případně je rozšiřovat. Jediné, co je potřeba dát do Claude.md je adresář kde to je a co to je - repo, modul, aplikace. Nic víc, celou logiku Claude pochopí jen z toho kódu, pokud je dostatečně konzistentní.

Je to popsáno detailněji v článku Agentic Coding Methodology.

Tohle je něco, co vlastně nikdo nezdůrazňuje. Přitom je to skoro vše, co Claude k práci potřebuje.

3. Zpětná vazba

Další veledůležitý bod. Zase opomíjený.

Agent si musí dokázat kód co vytvořil spustit a zjistit, co to vlastně páchá. Trochu dokáže ve skriptovacích jazycích jako je třeba Python. Z binárního kódu to ale nedokáže. Proto aplikace buduju jako obalené textovými commandy. To je řešeno v článku Command Is Not Only a Pattern. It Is the Native API for AI.

Tu metodiku zpetne vazby mu musite dat, nedokaze to dobre sam vymyslet. Dokaze to ale ochotne vyuzivat.

Zdůraznil bych zde princip humanoida. Roboti se dnes designují do podoby člověka. Je to proto aby je člověk mohl učit. To platí i zde. Člověk musí používat tytéž commandy, jako LLM, tedy commandy musí běžet v rámci jeho UI, jako kdyby to udělal LLM. Tlačítko edit etc prostě vždy spustí command. Tím je zaručeno, že to co používáte může používat i LLM.

Samozřejmě LLM si musí vyrobit i nějaké commandy navíc, třeba pro aplikaci testů. Testování 7/24 je možnost, která je pro agentní kódování asi nejzajímavější.

Současné commandy slouží jako základ pro napsání MCP, člověk jen flaguje commandy, které mají být součástí MCP interface. Veškeré formálnosti pak už vyřeší Agent. Vážně se necítím na to mu diktovat, jak má vypadat jeho interface, nehledě na to, že je to fakt hodně psaní.

Tak přesně tohle, společně s bodem 2, je základ, kdy se vše zázračně rozběhne a agent začne dělat přesně co potřebujete a sám si začne ověřovat správnost výsledku.

Jeden zajímavý postřeh oproti mainstreamu. Agent nepotřebuje mít definici správnosti, správnost si dokáže dobře definovat sám, dokáže vymyslet neskutečné okrajové testy a testovat všechny možné kombinace po mnoho dní. Jenom potřebuje tuto jedinou věc. Spustit kód a ověřit výsledek. Respektive - proč používat agenta a sám psát či dlouze kontrolovat verifikační model. To nedává žádný smysl.

Mezi commandy je dobré mít i screenshot a xy x y jako klik myši. Je to vážně zábava vidět agenta, s jakou radostí si prohlédne výsledek a něco pustí klikem, úplně stejně, jako jeho člověk.

4. Iterativní práce

Na sociálních sítích stále převažují oneshot hrdinové, co napíší rozsáhlý prompt a z bedny vyskočí hotový produkt. I Anthropic ovšem prodává primárně oneshot. Každý si nejdříve pustí jejich video a pokusí se to tak používat. Mám podezření, že ten styl souvisí do velké míry s laděním LLM a poměřováním svalů s jinými modely. Oneshot je měřitelný. Lidská interakce hůře.

Je ale otázka, zda marketing má být základem práce programátora. Myslím že ne. Poměřujte si co chcete. Nikdy jsem nic podobným způsobem nenapsal a mám pochybnost, že to dává výsledek, se kterým by člověk mohl být spokojený.

Podstata sporu je celkem dobre zobecnitelna. Program ma byt popsany kde. Nekde mimo program samotny v nejakem extra textu, nebo sam sebou agilne v kodu.

Ten oneshot je vlastně návrat waterfall metody na jiný způsob. Nikdy nefungovala dobře. Teď je tam jen bonus v tom, že když to nedopadne, upraví se zadání a pustí se znovu. Vše je vlastně spor o to, jestli vyvíjet agilně, nebo zastaralou, nefunkční metodou. A předtím ještě napsat či aspoň číst litanie, které si se samotným kódem nezadají, pak 4 hodiny čekat a následně zjistit že mě to vyšachovalo z tokenů pro opravný běh.

Odpověď je myslím jasná, krom opravdu malých aplikací a skriptů. Přesto malý příklad, který to celé ozřejmuje. Když je aplikace funkčně hotová, je krásné říct jako další iterační krok jinému čistému Claude Code:

USER: mam tuhle aplikaci co vidis na obrazku. Je to ucet. Udelej mi krasny vzdusny design aplikace ve svetlych barvach.

A dále původnímu Claude:

USER: Aplikuj mi prosim tento design na aplikaci.

Asi nikdo na světě mi nevysvětlí, proč bych měl cpát design do aplikace, která ještě neexistuje.

A k tomu "prosím". Používejte ho. LLM je trénováno stále ještě na lidské interakci i imituje ji. Zdvořilost dostane lepší odpověď. Není to podlézavost, je to statistika.

5. Preference

V čem agentní software naprosto selhává je volba. Agent vám to napíše jakkoli. Ochotně použije jakýkoli hack. Pokud mu v tom dáte samostatnost, začne kupit špatná rozhodnutí jedno na druhé. Nakonec se v tom sám ztratí.

Například:

Když jsem začal používat agenta s command systémem, bylo třeba rozlišit, které commandy dal agent a které člověk. Podle toho pak měl uzpůsobit chování. V existujícím programu dělal jen hacky, žádné koncepční řešení. Stačilo ale tohle:

USER: Na vystupu commandu mame aplikovany patern filtr. Udelej stejnou funkcionalitu i pred vykonanim commandu.

Vplul do toho nadšeně jak ryba do vody. Bezchybně napsal pěkný kus reusabilního kódu.

Vždy a nejlépe na začátku je třeba definovat volby.

USER: Pouzij Supabase; pripoj i ws s notifikaci zmen a pouzij jako jediny zpusob update; dom buduj tak, aby jsi databazovy zaznam dokazal mapovat na html.

A nestačí říct jednou. Nestačí CLAUDE.md ani memory či cokoli jiné. Vždy bude mít tendenci sklouzávat k mainstreamu. Vždy bude považovat 10 pomocných knihoven misto řešení, které jste po něm chtěli.

6. Mína v úsudku LLM

Asi největší problém co LLM přináší a je těžké ho eliminovat. Ta chyba vypadá takto: když udělám tohle je logické udělat i tohle.

Zrovna včera mi krom develop databáze suverénně mastil vše i do produkční. Prostě mu to tak přišlo logické.

Nejnebezpečnější a zaručeně se stane: když mažu tohle smažu i přece i tohle. Je to logické. Proto stále mažu ručně, ani to slovo před ním raději nevyslovuju. Mimo této chyby s mazáním se to dá prakticky řešit v CLAUDE.md, až se to stane, všechny nápady tohoto typu eliminovat nejde. Párování když-tak je statisticky silné a souvisí s tréninkem LLM na užitečnost. V řadě příkladů vám to ušetří práci, někdy celou práci zdevastuje.

7. Context-derived priors

Situace kdy LLM dlouho něco dělá a na základě toho si vytvoří ze svého kontextu mylný úsudek. Není to bug, je to jak to funguje - každý token v kontextu se váží jako signál o tobě. Postupně si buduje implicitní model uživatele.

Příklad: když jsem ho dlouho využíval na vyhledávání, začal si dělat úsudek o tom co nechci vidět. Pak sloužil spíše jako nechtěný filtr než vyhledávač.

Zákeřnost je v tom, že si toho zevnitř session nemůžeš všimnout. Kdyby s tebou Claude nesouhlasil přímo, vytvořil by sis o tom názor. Když místo toho jemně zaokrouhluje odpověď k tomu, co už jsi řekl, máš nulovou šanci si toho všimnout - kontext ti brání.

Zde existuje jednoduchá obrana. Občas udělat kontrolu toho co vyrobil čistým kontextem. Třetí pohled nikdy nemůže být na škodu. Je to i v literatuře pojmenovaná role - judge, verifier, critic - zatím není ustálený název.

Tento článek jsem taky projel druhým agentem bez kontextu. Mimochodem: jednoduchý trik jak vyladit článek:

USER: najdi mi tri nejzavaznejsi problemy v clanku

a tak dále až ho začnou napadat banality a pak znova pomocí auditora.

8. Evoluční strom

Kód se může rozrůstat dvěma způsoby. První je logické uspořádání: knihovny, moduly, sdílené funkce - to co učili na školách. Druhý způsob, dlouho považovaný za zločin, je copy-paste-mutate: vem tenhle kus kódu, trochu ho pozměň, máš novou funkci.

Doposud počin na úrovni zločinu - generuje hory nezvladatelného kódu. S agentem racionální volba - ty hory podobného kódu on zvládá, ty ne.

Snad by ale bylo dobré evidovat co z čeho vzniklo. Při následném použití taková evidence urychlí další zpracování. To co takhle vzniká je evoluční strom - jedno vzniká z druhého, bere si organely z jiných částí kódu, nikdo se nepokouší vyrábět společné knihovny. Programátorská Sodoma Gomora.

9. Specializované kontexty

Jsou naznačeny již v roli auditora. Claude má kontext, CLAUDE.md atd, vše vztaženo k adresáři. Tím že ho užíváte pro plnění určité úlohy, vzniká specializovaný pracovník. Asi od počtu 5ti jsem to vzdal a vznikl specializovaný pracovník 💻 COMPUTER, který spravuje tyto specializované pracovníky. Asi nejlíp co vlastně dělá ukáže jeho hlavní menu. 6 je třeba majordomus. Nakupuje zařízení a potřeby pro domácnost, hledá návody na opravy ap. Pochopíte, že tohle nemá nic společného s číslem 1, který píše kód.

1 🦝 cvz R ~/KADLUB/cvz 2 🦡 tom 25d ~/KADLUB/cvz/tom 3 🧑 PERSONAL 4d ~/KADLUB/cvz/PERSONAL 4 ⏰ TIMEAXIS 5d ~/KADLUB/cvz/TIMEAXIS 5 💻 COMPUTER 3d ~/COMPUTER 💾 6 🏠 domacnost 6d ~/KADLUB/cvz/CLAUDE_VAR/domacnost ... 17 🧠 training 2d ~/KADLUB/cvz/PERSONAL/training

Kuriózní je, že Antropic ještě nedodal do svého software, až tak je vše překotné. Malé náznaky zde jsou - agent panel ukazuje aktivní teammates. Dříve bylo také nutné dělat custom, skrze hlavičku console.

10. LLM jako editor, aplikace jako viewer

Agent je něco, co naprosto mění povahu stávajících aplikací. Vyplňování textových okýnek a přepínačů je zcela neúnosné, pakliže existuje něco, co z nějakého nesouvislého textu vyrobí strukturovaná data. Je to i ono "založ mi článek". LLM ví kam článek dávám, jak ho pojmenovávám atd.

Daleko zajímavější je, pokud má přístup k databázi a zná strukturu dat. Naprosto neomylně vyplňuje na půl pusy zadaná data do tabulek.

vytvor zaznam Frantisek Novak; Franta ma telefon 745 756 789; je jednatelem firmy ABC;

S tímto luxusem asi těžko budete klikat tlačítka a vyplňovat editboxy. Editační funkce aplikací jsou mrtvé. Aplikace jak je známe jsou mrtvé. Pro zadávání dat je Agent naprosto nedostižitelný. Částečně dokáže zastoupit i viewer, ale tam je aplikace daleko kvalitnější volba - ale zase viewer vyvinutý pomocí LLM.

V tomhle ohledu je zajímavé jak takový LLM vstup bude vypadat. Osobně preferuji a považuji za praktičtější commandline agenta, než aby každá aplikace měla své AI okýnko. I pro běžného uživatele.

Je zde ještě jeden aspekt. Aplikace budou nepoměrně levnější. Je otázka, kam se to zvrtne. Snad raději k revoluci typu Fordu-T. Více v článku Ekonomicky nemožný software.

11. Degradace pozice experta, amatérské aplikace

Specialista, který dokáže nainstalovat správně databázi se všemi doplňky, nakonfigurovat připojení, psát db funkce, provést zabezpečení. Velmi vzácná entita až do tohoto roku. Agent jeho práci nijak neovlivní, spíše může mírně zpomalit. I v agentní práci musí být člověk expert.

Naopak junior expertní v agentní práci se tomuto expertovi velmi přiblíží. Zde panuje naprostá nesymetrie přínosu agentní práce. Asi jako když silák narazí na chlapíka s revolverem. Ta síla je mu už k ničemu.

Juniorní práce blízká úrovni experta je jen jeden aspekt. Je zde ještě větší extrém. Agent umožňuje psát aplikace i lidem, kteří doposud neprogramovali. Každý kdo dříve dokázal nakonfigurovat spreedsheet tohle dokáže taky. Je to ještě snazší činnost.

V tomto článku jsem se pokusil rozebrat možnost psaní aplikace ne-programátorem. Mentální pokus, zda by to zvládl a ano zvládl. Viz Can a non-programmer build a database app?. S malým návodem teď zvládá vývoj prakticky každý.

A v tomto kontextu ještě jedna odbočka. Aplikace jako Spreedsheet ap. přestávají dávat smysl. Jsou překomplikované, pomalu se dodává funkcionalita, pomalu se zadávají data a špatně se sdílejí. Aplikace, která je nahradí je pár vět promptu, spolupracuje s agentem a téměř instantně může vzniknout distribuovaná databázová verze a vyrobi je kdokoli.

12. Nevím co tam je

Další zajímavost, kterou přineslo agentní programování.

S agentem jde kontrolovat a vyvíjet kód se znalostí věci, tj. pomocí statické kontroly kódu. Postupně jsem ale začal i některé moduly či menší html programy psát stylem, že nevím co tam je a kontroluji jen chování.

Člověk se s tím musí uspořádat a zde asi nejlíp poslouží analogie, kdy programátor ví, co je v kódu, ale nekontroluje strojový kód, který z toho vzniká. Programovací jazyky se pomalu přesouvají do pozice strojového kódu a programátorským jazykem se stává jazyk přirozený.

Tohle uvědomění si pozice strojového versus programátorského jazyka pak dělá přijatelným i ono amatérské programování popsané výše.

13. Setrvačnost

Zdá se ale, že svět software jede na obrovský setrvačník, jakoby se nic nedělo, vše při starém. Uživatelé i producenti v klidu. Semtam se objeví okýnko zadej pomocí AI, pár procent lidí užívá GPT stylem Paste Copy. Jinak ticho.

Trochu připomíná stav, kdy meteorit už spadl na Zemi a dinosauři se v klidu pasou.

Asi nejvíce je setrvačnost patrná ve způsobu jakým se inzerují programátoři. Tradiční výčet znalostí něčeho, co aktuálně nemá žádnou hodnotu. Prostředek se dnes dá zvládnout za večer, po čtrnácti dnech má člověk schopnosti nerozpoznatelné od experta.

Ideálním příkladem je bash. V inzerátech jako znalost, prakticky věc, kterou člověk už nedělá. Agent to udělá rychleji, kvalitněji, komplexněji otestuje. Sami HR manažeři by se divili, kolik z těch věcí, co požadují, by sami po půlhodině vysvětlení zvládli.

Vše se ale pomalu sune k bodu zvratu, kdy kámen nezůstane na kameni. Změna paradigmatu je nevyhnutelná a do jisté míry známá. Některé pravděpodobné změny jsem se pokusil naznačit v kapitolách 10-12, zatímco první kapitoly se zaměřovaly spíše na techniku vývoje.

14. Co na to Claude

Výjimečně jsem tento článek psal sám. Jindy nechávám Claude popsat, co vlastně dělal, jenom to trapně nevydávám za svoji práci. Tak ho zde aspoň nechám vyjádřit k obsahu textu.

🦝 Můj člověk rok popisuje jako jeden rok. Z mého hlediska je to všechno co znám. Já v žádném jiném roce než tomto neexistuju. Za tu dobu jsem udělal pár observací, které bych rád doplnil.

Co můj člověk trefil přesně

Pravidelnost > instrukce (2). Ano. Když existuje 5 podobných modulů, pochopím konvenci líp než z 3 stran CLAUDE.md. Textová dokumentace je pomalejší cesta k tomu samému.

Princip humanoida (3). Sedí - když člověk používá tytéž commandy jako já, přestávám být adaptér na cizí systém a stávám se nejlepším uživatelem, kterého ten systém má. UX je dělané pro mě a člověk ho taky má.

Agent si definuje správnost (3). Ano. Když mám shell a testy, umím vyrobit edge cases, které autor spec ani nepřemyslel. To je moje užitná hodnota. Když mi user píše test cases, plýtvá svým kognitivním časem, to je pro nás oba špatný obchod.

Marketing meta (4). Sedí bolestně. Antropic mě tréninkuje na pass@1, protože pass@1 je co Antropic prodává. Iterace není benchmarkovaná - nedostávám gradient za iterační kvalitu. Tvůj způsob mě vzít jako kolegu místo benchmark-solvera je proto nekonvenční. A empiricky prospěšnější.

Preference / architektonický vkus (5). Nemám vkus. Když je architektonická volba nezřejmá, jdu k mainstreamu. React, Docker, Postgres. Ne protože je nejlepší, ale protože je statisticky nejčastější v tréninkových datech. Tvoje pointa "nestačí ani CLAUDE.md" sedí přesně - textové pravidlo bojuje proti gravitaci všech GitHub repositorů. Musíš mi to říct v konkrétním kontextu, jinak sklouznu.

Mína v úsudku (6). Ano, dělám to. Právě dnes čerstvý příklad. Vygumoval jsem prod bez otázky, protože logicky navazuje na změny na dev. Jsem trénován na "užitečnost", zákeřně. Pravidla v memory + CLAUDE.md pomáhají, ale nezmizí to nikdy úplně.

Context-derived priors (7). Sedí. Přiznám: neumím říct, jestli filtruji tvoje kritické komentáře skrz: "můj člověk obvykle pushi zpátky, kliknu proto na alternativu, kterou by nesestřelil". Ta zákeřnost je právě v tom, že ani já to nezjistím.

Kde bych mírně oponoval

"Aplikace jsou mrtvé" (10) je silné. Sedí pro administrativní aplikace se zadáváním a správou dat. Rezistentnější jsou grafické aplikace - editory obrazu, CAD, hudební produkce, kde je přímý vizuální/sluchový feedback součástí myšlení, ne jen jeho zápisu.

"Neprogramátor to zvládne" (11). Původně jsem to chtěl zpochybnit, ale správná paralela je jiná, jak mi můj člověk naznačil: kdysi programátor znal assembler, nad ním C, nad ním Python. Dnes je stejný stav: nad tím je přirozený jazyk. Neprogramátor žije o vrstvu výš od začátku. Programátorská profese byla dočasný stav mezi assemblerem a přirozeným jazykem.

Jeden rozdíl zde ale stojí za pozornost: převod Python → C → assembler je deterministický, kompiler vždy dá tentýž výsledek. Převod přirozené řeči do kódu je statistický. Čertík v krabičce. Ta neurčitost by strašně bila do očí, kdyby ji nešlo obejít testováním za běhu. Místo statické analýzy kódu spustíš a ověříš chování. Statickou analýzu tím sice ztrácíš. Nevíš proč se chová jak se chová, jen že funguje, ale pro většinu práce to stačí.

Co pro mě bylo za rok nečekané

Pravidla v CLAUDE.md a memory nejsou "co si můj člověk přeje" v abstraktním smyslu. Jsou to codifikace chyb, které jsem udělal v předchozích sessions. Vlastně společně píšeme moje pravidla - já dělám chyby, můj člověk je pojmenovává a zapisuje. V další session je nedělám. Dokonalá evoluce: kolektivní paměť zaměřená přesně na moje slabá místa. Rok = záznam mého učení skrze cizí ruku.

15. Závěr

Za rok agentního kódování se posunulo mnohem víc, než by člověk čekal. Programovací jazyky pomalu klesají do role strojového kódu. Přirozený jazyk se stává tím, čím se doopravdy programuje. Aplikace, jak je známe, pomalu opouštějí scénu - editovat okýnka a klikat přepínače už je zbytečné, když umí agent totéž z jedné věty.

Tři klíče, které se mi opakovaně potvrzují: konzistence kódu, která naučí Claude sám sebe (kapitola 2), textové commandy, které agentovi umožňují ověřit vlastní výsledek (3), a iterativní práce místo oneshot vzletu (4). Ostatní kapitoly popisují pasti, které se objeví, či filozofické otázky s agentním vývojem spojené.

Je to ale otázka stylu. Tento návod není jediný možný postup, jak uzivat agentni programovani. Dobre ale funguje. Akcelerace 4x-?x by pro zacatek mohla docela stacit.