< Zpět na články

Kvalita outputu AI agenta není samozřejmost: pět vrstev a workflows, které ji drží

Kvalita outputu AI agenta není samozřejmost: pět vrstev a workflows, které ji drží

Kvalitu výstupu AI agenta určuje model méně, než by se zdálo. Rostislav Babáček ukázal, které vrstvy si tým staví sám a jak z každé frustrace s agentem udělat trvalé zlepšení systému místo další ruční opravy kódu. Článek vychází z jeho vystoupení na AI pivku v září 2026, interním meetupu, kde si vývojáři Ackee sdílejí, jak s AI agenty skutečně pracují.

📋 TL;DR

  • Kvalitu výstupu AI agenta tvoří pět vrstev: model, built-in harness, project setup, zadání a schopnosti vývojáře. První dvě dodává nástroj, zbylé tři si tým staví sám.
  • Podle zkušeností z komunity dělají model s harnessem nanejvýš zhruba 20 % výsledku. Zbytek je práce týmu, a proto jde o agentic engineering, ne o vibe coding.
  • Drobné komponenty mají velký efekt: princip Tell, Don't Ask v rules vyčistil view od byznys logiky, glossary sjednotil naming a ADR vysvětlilo agentovi, proč je podivná podmínka v kódu schválně.
  • Komponenty samy nestačí. Workflows (orchestrační skilly) drží správné pořadí kroků, a tím disciplínu agenta – a místo pěti promptů stačí jeden.
  • Analytická fáze je nejdůležitější: krok grill-me nutí agenta doptávat se a konfrontovat zadání s codebase, grill-with-docs k tomu přidává glossary, ADR a API specifikace.
  • Multi-phase plán dělený na vertical slices řeší context rot a zaručí, že aplikace jde zbuildit po každé fázi. Commit po fázi pak znamená levný revert.
  • Implementační smyčka TDD → deslop → adversarial review → verify → commit běží AFK a každý neúspěšný krok vrací feedback orchestrátorovi.
  • Hlavní poučení: neopravujte output, opravujte systém. Co najdete na code review, patří do rules.

😤 Co vývojáři slýchali: frustrace jako výchozí bod

Když Ackee rozjíždělo adopci AI ve vývoji, ozývalo se z kanceláří hodně nadávek na Claude. Nepochopil zadání, takže celá implementace byla k ničemu. Nacpal byznys logiku do view. Choval se nedeterministicky: ráno zapomněl spustit testy, odpoledne testy pustil, ale zapomněl na lint.

Citace frustrací vývojářů z práce s AI agentem, například nepochopené zadání nebo zapomenutý lint

Rostislav Babáček, který má v Ackee agentní vývoj na starosti, si tyhle hlášky sepsal a ke každé hledal systémové řešení – pravidlo, skill nebo krok ve workflow. Z toho plyne hlavní myšlenka celého přístupu: kvalita outputu a efektivita nejsou samozřejmost, ale dají se cíleně zvyšovat.

🧱 Pět vrstev kvality outputu: model a harness jsou jen začátek

Babáček dělí faktory, které určují kvalitu výstupu AI agenta, do pěti vrstev:

  1. Model / LLM – reasoning, schopnost kódovat, dodržování instrukcí, práce s dlouhým kontextem.
  2. Built-in harness / runtime – systémový prompt, agentní smyčka, spouštění nástrojů, vestavěné skilly, správa kontextu a session, systém oprávnění.
  3. Project setup – CLAUDE.md, vlastní skilly, MCP servery, hooky, subagenti, projektové nástroje a znalosti, codebase přívětivá pro agenta a hlavně feedback loop.
  4. Zadání / specifikace – záměr, scope, constrainty, akceptační kritéria, příklady, PRD nebo spec, plán.
  5. Schopnosti vývojáře – context engineering, rozklad úkolů, orchestrace, řízení agenta, rozhodování v human-in-the-loop krocích, pochopení toho, jak se model chová.
Pět vrstev, které formují kvalitu outputu AI agenta: model, harness, project setup, zadání a operator skills

První dvě vrstvy dodává nástroj, ať už je to Claude Code, Codex, Cursor nebo Copilot. Upravovat je je složité. Museli byste sáhnout po open-source harnessu nebo si postavit vlastní řešení přes Agent SDK. K tomu je potřeba přesah do LLM a stavby harnessů, a pro vývojáře, kteří chtějí hlavně dělat aplikace, to podle Babáčka nedává smysl.

Zbylé tři vrstvy si ale tým postaví sám a může je opřít o hard skills, které vývojáři používali i dřív. Na vývojářských meetupech podle Babáčka opakovaně zaznívá, že model s harnessem tvoří nanejvýš zhruba 20 % kvality výsledku a většinu dělají ostatní vrstvy. Je to jeho pozorování z komunity, ne změřené číslo, ale směr sedí s tím, co Ackee vidí na vlastních projektech. Proto o tom v Ackee mluví jako o agentic engineeringu, ne o vibe codingu: staví opakovatelný systém, ne jednorázové prompty.

💡
Nejdřív kvalita, rychlost přijde potom

Ackee dodává klientské aplikace, takže si nemůže dovolit „vibecodit“ a projekt rozsekat. Kvalita výstupu má proto přednost před multiplikátorem rychlosti. Rychlost se dostaví sama, jakmile agent přestane generovat kód, který se pak týden opravuje.

Pátá vrstva, schopnosti vývojáře, je důvod, proč Ackee zavedlo proficiency levely, kterými prošli všichni od nuly. Odpovídají na otázky typu „musím čistit context window v session?“ (ano, musíte) nebo „nahradím linter skillem?“ (ne – deterministické nástroje na kontrolu kódu mají zůstat deterministické).


🧩 Project setup: tři drobnosti, které vylepšily output

Project setup se v Ackee skládá z několika komponent: CLAUDE.md jako vstupní kontext projektu, .claude/rules s tvrdými pravidly pro kód, projektový kontext (glossary, ADR, API specifikace, DB schéma, Figma), skilly, hooky a MCP servery, ustálená workflows a GitLab review rules jako jediný zdroj pravdy pro CI.

Komponenty project setupu: CLAUDE.md, rules s principem Tell Don't Ask a projektový kontext s glossary a ADR

Babáček ukázal tři konkrétní případy, kdy malá úprava setupu výrazně zlepšila výsledek:

  • Tell, Don't Ask proti byznys logice ve view. Na jednom projektu končila spousta byznys logiky ve view. Kolega přidal do rules princip Tell, Don't Ask (spojovaný s Andym Huntem a Davem Thomasem, autory The Pragmatic Programmer, a popsaný mimo jiné Martinem Fowlerem) a k němu příklad. Problém zmizel.
  • Glossary proti vymyšlenému namingu. Claude pojmenovával funkce a třídy, jak ho zrovna napadlo. Projektový slovník pojmů mu teď pro každý pojem říká, který z několika synonym je ten hlavní, a agent se ho drží.
  • ADR proti mazání „zbytečné“ logiky. Na streamovací aplikaci si BI vymyslelo specifickou metriku. Claude opakovaně tvrdil, že podmínka, která ji počítá, je zbytečná a měla by zmizet. Pomohlo přidat architektonické rozhodnutí (ADR, architecture decision record), které si agent načte při práci s daným modulem. Teď ví, že podmínka je tam schválně.

Jsou to maličkosti, ale přesně o nich agentic engineering je: ke každé frustraci najít komponentu, která ji systémově vyřeší.

🔁 Workflows: jak donutit agenta k disciplíně

Komponenty samy o sobě nestačí, musí zapadnout do procesu. Babáček často slýchal otázky typu „v jakém pořadí mám ty skilly pouštět?“ nebo „kdy mám volat build a kdy commit?“. Ruční pouštění skillů navíc zdržovalo: commit skill trvá třeba minutu, a když ho vývojář volá ručně mezi kusy implementace, je to neefektivní.

Řešením jsou workflows: plugin s orchestračním skillem, který spouští ostatní skilly ve správném pořadí. Přináší dvě věci:

  • Disciplínu. Agent nevynechá krok ani ho neprohodí s jiným, protože pořadí určuje workflow.
  • Efektivitu. Místo pěti promptů stačí jeden. Agent běží 20–30 minut AFK a vývojář ho nemusí každých pět minut popostrčit.
Feature flow a bug fix flow jako workflows, které spouštějí skilly ve správném pořadí

Ackee dnes pracuje se dvěma hlavními flow: feature flow (analytická, implementační a finalizační fáze) a bug fix flow (zachycení issue, triáž, oprava). Jak může analytická fáze vypadat na konkrétním projektu, ukazuje článek o PRD flow. Bug fix flow rozebírá článek o autonomní opravě bugů.

⚠️
Stejný skill na dvou projektech je varovný signál

Stává se, že na projektu A vznikne build & test skill a na projektu B ho někdo napíše znovu. Než založíte nový plugin v projektovém marketplace, zvažte, jestli nepatří do sdíleného marketplace. Jinak tým dělá duplicitní práci a posouvá se pomaleji.

Domluvit konzultaci zdarma


🔍 Analytická fáze: grill-me, který nutí agenta se doptávat

Za nejdůležitější fázi celého procesu Babáček považuje analytickou. Zadání pro agenta by podle něj mělo mít takovou kvalitu, jakou byste potřebovali vy sami, kdybyste přišli na cizí projekt bez kontextu a měli dodat task bez chyb. Agent ten kontext sám mít nebude, musíte mu ho dodat i s akceptačními kritérii.

Analytickou fázi spouští příkaz /start-feature s odkazem na tiket a tvoří ji čtyři kroky: fetch-ticket (běží AFK), interview-me, tedy grilování (human in the loop), to-tech-spec (AFK) a to-plan. Výstupem jsou soubory spec.md a plan.md.

Ackee nejdřív používalo plan mode: Claude udělal exploration a vytvořil plán. Často se ale ukázalo, že zadání nepochopil. Načetl tiket, jenže neviděl všechny souvislosti a neměl možnost se doptat nebo zadání konfrontovat s codebase. Proto do procesu přibyl krok inspirovaný skillem grill-me Matta Pococka. Agent se doptává a průběžně porovnává zadání s kódem, takže se v zadání postupně odhalují díry a výsledné řešení má mnohem vyšší kvalitu. Tenhle krok běží vždy s člověkem a Ackee ho automatizovat nechce.

Když pak klient v zadání použil pro jednu věc dva různé pojmy, Claude se znovu zmátl. Grilování se proto rozšířilo na grill-with-docs, který během doptávání načítá projektový kontext: glossary, architektonická rozhodnutí, API specifikace a další dokumentaci.

🍰 Multi-phase plán a vertical slices proti context rotu

S dobrým zadáním se objevil další problém. Agent začal kódit, a najednou odbočil od plánu: hrabal se v souborech, které v plánu vůbec nebyly, nebo dělal úplně jiné úkoly. Příčinou byl přeplněný kontext a context rot – s rostoucím kontextem model přestává spolehlivě dodržovat instrukce.

Odpovědí je vlastní skill to-plan, který vytváří multi-phase plán. Implementaci rozseká na menší fáze, takže se agent nedostane do přeplněného kontextu, kde přestává dodržovat disciplínu.

Krok to-plan: multi-phase plán, kde jedna fáze odpovídá jedné vertical slice

Pak přišla další lekce. Babáček měl na streamovací aplikaci hotové tři fáze z pěti a chtěl si ručně vyzkoušet stahování obsahu, které mu agent neotestuje. Aplikace ale nešla zbildit, protože první fáze rozdělala networking a kód nešel spustit. Plán proto teď pracuje s vertical slices (příbuzný koncept tracer bullets popisují Hunt a Thomas v The Pragmatic Programmer): jedna fáze odpovídá jednomu implementačnímu cyklu a jedné svislé vrstvě funkcionality, takže aplikace jde zbildit a otestovat po každé fázi.

💡
Vertical slices se nehodí na všechno

U migrace v rámci jedné vrstvy architektury nejsou vertical slices ideální. U mobilních aplikací jsou ale skvělé: nestane se, že by aplikace v nějaké fázi nešla spustit.

Nově se plán i spec automaticky reviewují: po vytvoření plánu se spustí subagent, udělá review a případný feedback se do plánu rovnou zapracuje.


⚙️ Implementace: TDD, deslop a adversarial review ve feedback loopu

Ani multi-phase plán nezabránil tomu, aby agent občas zapomněl spustit lint nebo snapshot testy. V CLAUDE.md bylo napsané, že má pustit build & test skill, ale proces na to chyběl. Proto vznikl implementační orchestrátor pro Claude Code (původně /do-work, pak /do-work-with-subagents, pracovně /ack-implement). Pracuje s multi-phase plánem a deleguje práci na subagenty. Pro každou fázi plánu proběhne jeden cyklus:

  1. TDD. Test-driven development je metoda, kterou zpopularizoval Kent Beck. Dřív na ni vývojáři často neměli trpělivost, s agentem se ale vyplácí, protože ho dobře řídí.
  2. Deslop – úklid zbytečností po agentovi.
  3. Adversarial review – nezaujatá kontrola subagenty.
  4. Verify – build, testy, lint, snapshoty. Aplikace musí jít vždy zbildit.
  5. Commit – po každé fázi.
Implementační orchestrátor: TDD, verify a commit po každé fázi ve feedback loopu

Nejdůležitější jsou feedback loopy. Když některý krok neprojde, výsledek se vrátí orchestrátorovi nebo implementátorovi, ten problém opraví a cyklus proběhne znovu. Kroky tak zaručují, že se vždy použijí všechny validace, které si tým definoval. Celá fáze může běžet AFK a vývojář zasahuje jen tehdy, když je to potřeba.

Commit po každé fázi

Jednou Claude hodinu pracoval na velkém plánu a pak vyplivl obrovskou změnu najednou, bez jediného commitu. Když se Babáčkovi něco nezdálo, mohl jen revertovat úplně všechno. Teď workflow commituje po každé fázi. Díky vertical slices jde aplikace zbildit po každém commitu, takže commity fungují jako levné reverty. Vývojář vidí, jak kód postupně přibývá, a může včas zasáhnout. Commit messages navíc zaznamenávají, která fáze je hotová, a agent z nich ví, kde pokračovat.

Deslop: méně komentářů, méně abstrakcí

Implementace byla správná, ale agent v ní nechával spoustu zbytečných komentářů. Novější modely jsou v tomhle už střídmější, ale problém nezmizel. Jindy napsal na 50 řádků to, co šlo napsat na 10, vytvořil zbytečné abstrakce nebo zduplikoval kód, který šel vytáhnout do jedné funkce.

Proto vznikl skill deslop (podobně pojmenovaný skill má například Cursor). Projde diff a odstraní zbytečné komentáře. Ve feature branchi se k němu přidává simplify na zbytečné zanořování, abstrakce a duplicity. Výhoda je, že skill jde průběžně upravovat podle toho, jak se mění modely a jejich zlozvyky.

Adversarial review: dva subagenti bez biasu

Poslední problém: agent v některých případech nedodržoval .claude/rules. Pravidla se načtou na začátku implementace, ale během ní je agent z různých důvodů nemusí brát jako prioritu. Pomohl review krok, ve kterém subagenti nedostanou kontext implementátora, ale jen git diff. Nemají tedy jeho bias.

Slide adversarial review: dva subagenti bez kontextu implementátora kontrolují pravidla a fázi plánu

Jeden subagent kontroluje dodržení rules, druhý ověřuje, že implementátor udělal v dané fázi všechno, co plán předepisoval. Od zavedení tohoto kroku se Babáčkovi do merge requestu nedostalo žádné porušení pravidel z codebase.

⚠️
Neplatíme tokeny dvakrát?

Nabízí se námitka: nešlo by upovídanost řešit už ve fázi plánu nebo ji vynutit přes rules? U deslopu a simplify totiž platíte tokeny dvakrát: jednou za přidání kódu, podruhé za jeho odebrání. Babáček to zkoušel v rules, v CLAUDE.md i v zadání a agent to spolehlivě nedodržoval. Post-processing je zatím jediná varianta, na kterou je spoleh. U běžně velkých implementací navíc cena tokenů podle něj nehraje velkou roli. S dalšími modely se to může zlepšit, takže stojí za to zkoušet to dál.


🔧 Neopravujte output, opravujte systém

Co je tedy k lepšímu outputu potřeba:

  • nespoléhat se jen na model a built-in agent harness,
  • být součástí budování harnessu a workflows,
  • dávat feedback na připravený harness (v Ackee na to slouží feedback skill),
  • sdílet svoje zkušenosti,
  • vzdělávat se – bez znalosti toho, jak funguje kontext, pluginy nebo progressive disclosure ve skillech, se systém nikam neposune.
Shrnutí talku: nespoléhat jen na model, sdílet zkušenosti, opravovat systém místo outputu

Nejdůležitější je ale to, co udělat s vlastní frustrací z agenta.

Rostislav Babáček, Team Leader a vrchní implementátor agentního vývoje v Ackee

Z toho plyne praktické pravidlo: když code review najde chybu, nestačí ji opravit. Musí se propsat do rules, jinak ji agent udělá znovu a tým bude donekonečna opravovat output místo systému. Dobré nápady se navíc mají sdílet. Jeden kolega měl například ve vlastní verzi implementačního skillu na konci krok, který sepíše report, a ten se teď dostane do sdíleného workflow.

Vyplatí se také sjednotit pojmenování workflows napříč projekty. Když se implementační flow všude jmenuje stejně (například /ack-implement), vývojář na novém projektu hned ví, co který příkaz dělá.

Často kladené otázky

Vibe coding spoléhá na to, že model z jednorázového promptu vygeneruje něco použitelného. Agentic engineering staví kolem agenta opakovatelný systém: project setup, pravidla, workflows, kvalitní zadání a feedback loopy. Opírá se přitom o inženýrské znalosti týmu.
Ano. S rostoucím kontextem model přestává spolehlivě dodržovat instrukce (context rot). Proto Ackee dělí implementaci do menších fází a těžkou práci deleguje na subagenty s čistým kontextem.
Ne. Lint a další deterministické kontroly mají zůstat deterministické. Skill je může spouštět a reagovat na jejich výsledek, ale nemá je nahrazovat.
Je to krok, ve kterém se agent místo okamžitého plánování doptává na zadání a konfrontuje ho s codebase, dokud nejsou vyjasněné všechny větve problému. Myšlenku zpopularizoval Matt Pocock svým open-source skillem. Ackee ho rozšířilo o načítání glossary, ADR a API specifikací.
Commit po fázi funguje jako levný revert. Díky vertical slices jde aplikace zbildit po každém commitu, takže se dá kdykoli vrátit o krok zpět a průběžně sledovat, co agent dělá. Commit messages zároveň zaznamenávají, které fáze jsou hotové.

🎯 Co si odnést

Model a harness, které dostanete s nástrojem, jsou jen základ. Kvalita outputu AI agenta závisí hlavně na tom, co si tým postaví nad nimi: setup s pravidly a kontextem, kvalitní zadání, workflows s feedback loopy a vývojáři, kteří vědí, jak agenta řídit.

Většina vylepšení přitom nejsou velké projekty, ale drobnosti: jeden princip v rules, slovník pojmů, ADR, commit po fázi, review subagent bez biasu. Každá z nich vznikla z konkrétní frustrace a každá z nich přinesla trvalé zlepšení místo jednorázové opravy.

A nakonec: AI je multiplikátor znalostí, ne jejich náhrada. Víc o tom, jak Ackee přistupuje k agentnímu vývoji jako celku, najdete v článku o Agentic Development Lifecycle.

Minisérie z AI pivka: PRD flow: jedno zadání pro iOS i Android · Autonomní oprava bugů: od tiketu k merge requestu

Odebírejte newsletter Ackee

Podobné postřehy z Ackee najdete v newsletteru – přihlaste se a příští takový obsah vám přijde přímo do schránky.

Rostislav Babáček
Rostislav Babáček
Team Leader Indigo Mobile Development týmuRosťa je Team Leader Indigo Mobile Development týmu, vrchní implementátor Agentic Developmentu v Ackee a externí lektor na FIT ČVUT. Ve světě mobilního vývoje se pohybuje přes 7 let a má za sebou projekty od vládních aplikací po streamovací platformy. Když zrovna neladí (AI) kód pravděpodobně ho najdete na treku v horách, na tréninku nebo cestujícího s batohem po celém světě.

Máte zájem o spolupráci? Pojďme to probrat osobně!

Napište nám >