Témata: ai-agenti, review, testovani

Většina mých commitů má Claude jako spoluautora. Když to říkám klientovi, správně se zeptá, jak tedy vím, že ten kód dělá, co má. Tohle je odpověď: jak s agenty pracuju, co si nechávám pro sebe a kde jsem je za poslední měsíce přistihl, že hlásí něco jiného, než je pravda.

Jak vypadá jeden úkol

Začínám zadáním. Sepíšu, co má výsledek splňovat, a z toho plán rozdělený na malé úkoly, z nichž každý jde přečíst a posoudit za pár minut. Velká dávka změn se nedá reviewovat, dá se jen odklepnout.

Úkoly implementují agenti v Claude Code. Každý dostane výřez plánu jako zadání, napíše kód a testy. Hotovou dávku pak čte nezávislý agent, který zadání zná, ale implementaci neviděl vznikat, a po něm já. Oba kontrolujeme proti zadání, ne proti tomu, co agent tvrdí, že udělal.

Každé rozhodnutí, které padne mimo plán, zapisuju do ledgeru: co jsem rozhodl, proč, a co to bude stát, když se pletu. U jedné změny v přehledu pro skupinu e-shopů, přepočtu měn kurzem ke dni objednávky, jich za jeden běh vzniklo dvacet. Bez zápisu by za týden nikdo nevěděl, proč kód vypadá jinak než plán, a agent by to při příštím úkolu mohl „opravit” zpátky.

Testy nestačí spustit. Když po opravě chyby test svítí zeleně, nechám chybu dočasně vrátit a chci vidět, že test spadne. Teprve pak věřím, že hlídá to, kvůli čemu vznikl. Jeden takový průchod chytil test, který porovnával dva datumy vzdálené 730 dní z definice, takže by prošel i proti službě, která posílá úplně jiný rozsah.

Nasazuje se vedle starého postupu. Generátor objednávek k výrobci běžel několik týdnů ve stínovém provozu na reálných datech, než dostal ostrý provoz.

Nástroje: Claude Code s vlastními skilly a hooky, subagenti pro implementaci a review, MCP servery pro přístup k datům a službám. Jeden hook mi například zakazuje commit, dokud výslovně nenapíšu, že ho chci.

Co si nechávám

Architekturu, datový model, bezpečnost, rozhodnutí o rozsahu, finální review a komunikaci s klientem. Agent nesmí sloučit kód bez testů a review, sahat na produkci, vidět data klienta mimo prostředí, kde k tomu má souhlas, ani rozhodovat za mě.

Čtyři selhání, která mám doložená

Široký staging kontaminoval commit. Dvě session běžely paralelně nad jedním repozitářem a jedna z nich sebrala rozpracované změny té druhé do svého commitu. Od té doby platí: nikdy git add -A, commituje se výčtem cest.

Review kontrolovalo shodu s plánem, ne se skutečností. U přehledu pro skupinu e-shopů psali agenti texty průvodce obrazovkou. Review po každém úkolu prošlo, protože text odpovídal plánu. Tři z osmi textů ale tvrdily o obrazovce něco, co na ní nebylo. Chytilo to až závěrečné review, které místo plánu četlo komponenty.

Stejný vzorec z druhé strany: když review najde vadu, kterou předepsal můj vlastní plán, je lákavé ji odmítnout, protože „tak to má být”. Za jedno odpoledne se mi to stalo pětkrát. Rozhoduje zadání, ne plán. A plán se opraví taky, aby v repozitáři nezůstal návod, o kterém vím, že je špatně.

Počet testů od agenta nesedí. Na jednom projektu v agentuře hlásil agent 3 301 asercí v testech, skutečný běh dal 3 299. Bylo to pošesté v řadě a po dvou upozorněních. Čísla z agenta se ověřují spuštěním, nepřebírají se.

Agent odložil rozhodnutí do textu pro reviewera. V popisu pull requestu zůstala pracovní poznámka „ponechat 3301 nebo aktualizovat dle skutečného výstupu”. Není to chyba v obsahu. Je to neuzavřená úvaha vydaná jako hotový dokument. Od té doby čtu i popis PR jako artefakt, ne jako průvodní dopis.

Co z toho vzešlo

Z osmi incidentů za tři měsíce nezachytila ani jeden automatická pojistka. Všechny chytil lidský review. Nejčastější selhání nebylo v kódu, ale v nepravdivém hlášení stavu a ve čtení tajemství, ke kterým agent neměl co sahat. Technické zábrany (guardy, seznamy zakázaných příkazů, oddělená prostředí) snižují dopad, ne pravděpodobnost.

Proto stavím proces tak, jak ho stavím: malé dávky, nezávislý průchod, mutační ověření testů, čísla ze spuštění. Agenti mě zrychlují tam, kde je práce rozbitá na reviewovatelné kusy. Bez toho zrychlují jen výrobu chyb.

Co si z toho odnést

Agenti píšou většinu kódu, ale odpovědnost se delegovat nedá. Zrychlení přichází z malých dávek a nezávislého review, ne z důvěry. Každé číslo, které agent nahlásí, se ověřuje spuštěním. A když se agent a zadání rozcházejí, vyhrává zadání, i kdyby chybu předepsal můj vlastní plán.

Další poznámka

Záloha, která hlásila úspěch

Záloha git serveru běžela denně, hlásila úspěch a hlídal ji monitoring. Obnovit z ní nešlo. Odhalil to až test obnovy na čistém serveru.

Napište mi, co potřebujete

Napište mi