58 commitů, čtyři stacky, jeden den
Jak jeden vývojář s týmem pěti AI agentů dokončil 30 položek backlogu za jediný den, a proč je nejdůležitější člen týmu ten, který nesmí psát kód.

projekt AIssistant · 11. července 2026 · data: git historie + backlog + reviewer paměť
API · billing · RLS
UI · i18n · specs
voice · Twilio
dle potřeby
(10:39–23:42)
303 souborů
backlog položek
Ø 1,6 kola
Kontext
AIssistant je SaaS pro český trh: multi-kanálový AI asistent, který za firmy vyřizuje rezervace a zákaznickou komunikaci e-mailem a telefonicky. Technicky netriviální systém: multi-tenant architektura s Row Level Security na PostgreSQL, Stripe billing se třemi tarify a add-ony, telefonie přes Twilio, realtime voice pipeline (STT → LLM → TTS) s latencí pod 500 ms a tvrdé GDPR požadavky, tedy veškeré zpracování v EU.
Tři programovací jazyky, tři aplikace, jeden člověk. Klasická odpověď by byla „najmi tým“. Odpověď v tomto projektu byla postavit ho z AI agentů.
A nejde o „vývoj s AI asistencí“ na okraji: prakticky celý kód produktu (přes sto tisíc řádků napříč třemi stacky) napsali AI agenti. Lidská role je produktová a provozní: zadání, priority, rozhodnutí, schvalování a nasazení. Popsaný den není výjimečná ukázka, ale běžný pracovní režim, ve kterém produkt vznikl.
Tři konstrukční rozhodnutí
1 · Team-lead nesmí psát kód ani verifikovat. Jeho definice obsahuje explicitní zákazy: žádná implementace (nouzová výjimka ~5 řádků), žádné spouštění testů či čtení diffů mezi implementací a review. Pokušení „ušetřit kolečko“ vlastní kontrolou je v definici výslovně označeno za chybu. Oddělení implementace a verifikace je celý smysl role.
2 · Reviewer nesmí kód měnit. Smí pouze číst, analyzovat a reportovat, a to „jako by kód šel okamžitě do produkce a čekaly na něj nepřátelské vstupy, souběhy a částečné výpadky“. Nálezy vrací se severitou (🔴 blocker / 🟡 warning / 🔵 nit), přesným soubor:řádek, návrhem opravy a vlastníkem. Hotovo je teprve „review clean“, tedy nula otevřených nálezů.
3 · Reviewer má perzistentní paměť verzovanou v gitu. 43 tematických souborů, ~230 zaznamenaných vzorů: pasti, které v tomto projektu už jednou někoho spálily. Team-lead je před každým spawnem vkládá specialistům do zadání. Chyba nalezená v březnu se v červenci už nedostane ani do review.
Vedle rolí drží kvalitu skill balíčky (devět souborů kodifikovaných standardů s předností před jakýmkoli zadáním) a OpenAPI-first kontrakty. Spec je zdroj pravdy pro všechny tři stacky a reviewer kontroluje drift.
Proces: od auditu k „review clean“
- Scope analýza. Team-lead určí specialisty z „technologických otisků“ úlohy. Při nejednoznačnosti spawne víc; každý má klauzuli sebe-eliminace.
- Paralelní implementace. Specialisté různých stacků pracují souběžně; závislosti řeší zpráva „kontrakt hotov“.
- Review přichází okamžitě po implementaci. Reviewer čte diff i blast radius: volající kód, migrace, generované klienty, testy.
- Routing nálezů. Team-lead je rozdělí podle vlastníka a pošle zpět v plném znění.
- Stateless re-review. Reviewer znovu čte dotčené soubory a soudí podle aktuálního kódu, ne podle poznámek. Smyčka běží do nuly nálezů.
I backlog toho dne vznikl stejným mechanismem: ráno v 10:39 adversariální audit tří stacků proti feature matici vyprodukoval 38 úloh s prioritami, závislostmi a odkazy na konkrétní řádky, včetně nálezů typu chybějícího vynucení placené funkce, které by jinak znamenalo tichý únik tržeb.
Den v číslech
Commity po hodinách · 11. 7. 2026
58 commitů mezi 10:39 a 23:42. Špička přišla ve 21 h, kdy se paralelně uzavíralo billing, FE i infra.
Review kola na změnu
39 review běhů: polovina čistá napoprvé, žádný nepotřeboval víc než tři kola.
Nálezy podle severity
40 zdokumentovaných nálezů za den, všechny vyřešené před „review clean“.
Rozsah nebyl „hodně malých úprav“. Za den vznikly mimo jiné: minutové metering hovorů s tvrdými kvótami, operator fallback s ochranou proti toll fraud, Stripe plan-change flow s proration sagou, CSV exporty s OWASP ochranou, kill-switch parita pro hlasový kanál, produkční deployment konfigurace a PIN-gated hlasové vyhledávání. K tomu deset nových DB migrací a FE test suite, která vyrostla ze 701 na 783 testů, na konci dne 783/783 zelených.
Co review skutečně zachytilo
Konkrétní technické detaily nálezů v publikované verzi záměrně zobecňujeme. Všechny byly opraveny před sloučením větve, ale mapa vlastní útočné plochy do případové studie nepatří. Pět tříd z toho dne:
Izolace tenantů maskovaná testovacím prostředím 🔴 blocker
Bezpečnostní kontrola zapojená v nesprávném pořadí by v produkci zablokovala legitimní provoz celého kanálu. Testy ji nechytily: testovací databázová role měla vyšší privilegia než produkční a izolační politiky tiše obcházela. Reviewer si vynutil regresní test pod stejnou rolí, jakou má produkce.
Přeskopovaná tajemství mezi službami 🟡 warning
Jedna služba dostávala v deployment konfiguraci kompletní sadu tajemství platformy, ačkoli potřebovala zlomek. Kompromitace jedné komponenty by se stala kompromitací všeho. Výsledek: least-privilege rozdělení konfigurace per služba.
Konfigurovatelná hodnota s finančním dopadem 🟡 warning
Nastavení, které si zákazník může sám změnit, mohlo přesměrovat placenou externí operaci na účet provozovatele. Řešení: allowlist v kódu + guard na úrovni externí platformy jako podmínka spuštění.
Injection do datových exportů 🟡 warning
Klasická OWASP třída: externě ovlivnitelná data se při otevření exportu v tabulkovém procesoru chovají jako spustitelný obsah. K tomu upozornění na paměťové nároky bulk exportů.
Oracle v ověřovacím flow: design vynucený předem
Ověřování tajemství nesmí chováním odpovědí prozrazovat, zda tajemství vůbec existuje. Autorizační příznak vzniká výhradně v deterministickém kódu po kryptograficky ověřené odpovědi, nikdy z promptu: LLM není bezpečnostní hranice, hranicí je deterministický kód.
Žádný z těchto nálezů není stylistika. Jsou to třídy chyb, které v běžných týmech procházejí i seniorním review. Vyžadují držet v hlavě sémantiku databázových bezpečnostních politik, billing externích platforem i chování kancelářského softwaru zároveň.
Proč to funguje
- Oddělení implementace a verifikace je strukturální, ne dobrovolné. Implementátor nemůže schválit sám sebe a orchestrátor nemůže review přeskočit. Role to technicky neumožňují.
- Paměť revieweru se skládá. Každý nález se stává vstupem příštího zadání; křivka učení týmu je uložená v gitu.
- Standardy jsou kodifikované, ne tradované. Skill pravidla mají přednost před zadáním i existujícím kódem.
- Kontrakty místo koordinace. OpenAPI spec umožňuje třem stackům pracovat paralelně; drift chytá review, ne integrace za týden.
- Stateless re-review. Reviewer nemůže „odmávnout“ opravu na základě popisu, musí ji znovu přečíst.
Poctivé limity
- Člověk zůstává produktovým vlastníkem i ops. Produktová rozhodnutí, Stripe katalog, Twilio konfigurace, prod secrety a deploy jsou explicitně lidské brány. „Review clean“ neznamená „nasazeno“.
- Metriky měří výstup a disciplínu, ne byznys hodnotu. 18 958 řádků za den vypovídá o kapacitě procesu; o správnosti spíš 39 review běhů a regresní testy z nálezů.
- Review má náklady. Ø 1,6 kola znamená reálné vícenáklady na tokeny i čas. Je to záměr, ne režie k optimalizaci.
- Počty commitů jsou spodní odhad. Historie repozitáře byla průběžně squashována; 179 commitů nevypovídá o skutečném počtu iterací. Session z 11. 7. je naopak zachycena commit po commitu, a proto je hlavním datovým vzorkem.
- Proces přiznává vlastní slepá místa. Reviewer si zapisuje i nálezy o vlastním prostředí a procesu, ne jen o kódu.
Čísla celého projektu (21. 2. – 11. 7. 2026)
Řádky kódu podle stacku
~115 000 řádků celkem. Backend má víc testovacího kódu než produkčního.
| Metrika | Hodnota |
|---|---|
| Commity celkem | 179 (po squashi, spodní odhad) |
| Kód celkem | ~115 000 řádků |
| DB migrace | 118 |
| Testovací soubory (BE / FE / PY) | 219 / 73 / 14 |
| Reviewer paměť | 43 souborů · ~230 vzorů |
Detail k vypíchnutí: backend má víc testovacího kódu (38 823 ř.) než produkčního (35 592 ř.). To není vlastnost AI kódování obecně. Je to přímý důsledek revieweru, který odmítá podepsat změnu bez pokrytí chybových cest, a paměti plné vzorů typu „superuser test tuhle chybu maskuje, chce to test s aplikační rolí“.
Závěr
Agentní tým není „rychlejší autocomplete“. Je to organizační vzor: role s oddělenými pravomocemi, adversariální verifikace jako neobejitelná brána, kodifikované standardy a paměť, která se skládá v čase. Jeden člověk s tímto vzorem uřídil za den objem práce odpovídající sprintu vícečlenného týmu, a to s auditní stopou kvality, jakou většina lidských týmů nevede.
Největší páka není v tom, kdo kód píše, ale v tom, jak je postavená smyčka, která ho odmítá pustit dál.