Role agentów dla aplikacji budowanych przez czat: zdefiniuj jasne persony, szablony przekazywania i szybkie kontrole, by zespół wypuszczał bardziej niezawodne aplikacje web i mobilne z wykorzystaniem czatu.

Czat pozwala poruszać się szybko, ale nie radzi sobie z utrzymaniem całego produktu w głowie. Większość porażek to nie „zły kod”. To luki między tym, co miałeś na myśli, co asystent założył, a tym, co faktycznie trafiło do użytkowników.
Pierwsza szczelina to brak wymagań. Prosisz o „prosty przepływ rejestracji”, ale nikt nie zapisuje przypadków brzegowych jak reset hasła, e-mail już użyty, albo co się stanie, gdy użytkownik zamknie kartę w połowie. Asystent dopisuje szczegóły i te domysły stają się twoim produktem.
Druga szczelina to niespójne decyzje. Jedna wiadomość wybiera model danych, druga dodaje skrót, trzecia zmienia nazwy lub zasady walidacji. Każdy wybór z osobna może być uzasadniony. Razem tworzą kruche aplikacje, które psują się przy dodaniu następnej funkcji.
Trzecia szczelina to brak dowodu. Bez podstawowych testów i jasnych kryteriów akceptacji odkrywasz problemy dopiero po klikalnym sprawdzeniu. Wtedy „u mnie działa” zamienia się w nocne poprawki, hotfixy i losowe regresje.
Proste rozwiązanie to użycie powtarzalnych person: Planista, który konkretyzuje pracę; Architekt, który ustala kształt; Wykonawca, który buduje małymi krokami; Tester, który próbuje zepsuć; i Recenzent, który łapie ostatnie 10%, które powoduje 90% bólu. To nie ciężki proces. To powtarzalny sposób, by decyzje były spójne.
To podejście działa dla solopreneure'ów, małych zespołów i osób nietechnicznych używających narzędzi czatowych jak Koder.ai. Nadal możesz działać szybko, ale przestajesz polegać na szczęściu.
Te role nie gwarantują jakości same z siebie. Wciąż potrzebujesz jasnych wejść (jak wygląda sukces, ograniczenia, priorytety) i wciąż musisz czytać wyniki. Traktuj role jak barierki: zmniejszają uniknione błędy, ale ty jesteś kierowcą.
Niezawodność maleje, gdy jedna rozmowa próbuje zrobić wszystko naraz: zdecydować co budować, zaprojektować, zakodować, przetestować i ocenić. Mieszanie tych zadań sprawia, że łatwo przegapić przypadki brzegowe, zmieniać wymagania w trakcie budowy lub „naprawiać” błędy przez dodawanie kolejnego zamieszania.
Praktyczny sposób, by temu zapobiec, to utrzymywać role spójne i wąskie. Każda rola ma jedno zadanie i nie wolno jej „pomagać” poza tym zadaniem. To utrzymuje decyzje możliwe do prześledzenia i ułatwia znalezienie błędów.
Użyj tej sekwencji dla prawie każdej funkcji:
Czyste przekazania są równie ważne jak same role. Każde przekazanie powinno zawierać, co postanowiono, jakie założenia zrobiono i co znaczy „gotowe”. Jeśli używasz Koder.ai, traktuj każdą rolę jako oddzielny turn czatu lub snapshot, żeby móc cofnąć decyzję, gdy okaże się błędna.
Wracaj według celu, nie przez przypadek. Jeśli testy nie przejdą, wróć do Wykonawcy z minimalnym raportem błędu. Jeśli projekt nie wspiera nowego wymogu, wróć do Architekta. Jeśli wymaganie jest niejasne lub się ciągle zmienia, zatrzymaj się i wróć do Planisty.
Trzymaj te same role i kolejność dla kolejnych funkcji. Po kilku przebiegach nabierzesz nawyku: wcześniej zadawać lepsze pytania i przestaniesz powtarzać pracę na końcu.
Zadaniem Planisty jest przekształcić nieostry pomysł w coś, co można zbudować i zweryfikować. To nie jest „pisanie dokumentacji”. To uzgodnienie, co to znaczy „gotowe”, zanim powstanie pierwszy ekran czy endpoint API.
Dobry wynik od Planisty jest mały i testowalny: jasne stwierdzenie problemu, kilka user stories, proste kryteria akceptacji i krótka lista przypadków brzegowych. Powinno też zawierać, czego jeszcze nie robimy, żeby Wykonawca nie zbudował większej funkcji niż chciałeś.
Użyj tego, gdy masz pomysł na funkcję i chcesz zwarty plan, którego pozostałe role mogą przestrzegać.
You are the Planner. Turn the feature idea below into a buildable plan.
Feature idea:
<PASTE IDEA>
Context:
- App type:
- Target users:
- Current behavior (if any):
- Constraints (time, data, compliance, devices):
Output (keep it short):
1) Problem statement (1-2 sentences)
2) Assumptions (3-6 bullets)
3) Questions to confirm (max 6, prioritized)
4) User stories (2-5)
5) Acceptance criteria (5-10, testable, specific)
6) Edge cases & failure modes (3-8)
7) Out of scope (3-6 bullets)
8) Small milestone plan (2-4 steps, highest value first)
Wyślij tę wiadomość tak jak jest (wypełnioną), żeby zmniejszyć ilość iteracji.
PLANNER HANDOFF
Feature: <name>
Problem: <1-2 sentences>
Users: <who>
Must-haves (AC): <5-10 acceptance criteria>
Key edge cases: <3-6>
Out of scope: <3-6>
Open questions (need Architect input): <1-4>
Constraints: <tech, data, privacy, deadlines>
Success signal: <how we’ll know it worked>
Jeśli Planista ma zrobić tylko jedną rzecz, niech kryteria akceptacji będą mierzalne. Na przykład: „Użytkownik może zresetować hasło i otrzymuje e-mail w ciągu 60 sekund” jest lepsze niż „Reset hasła działa”.
Architekt zamienia dobry plan w możliwy do zbudowania kształt. Zadanie nie polega na wymyślaniu wyszukanych wzorców, ale na wybraniu najprostszej struktury, która będzie działać, gdy prawdziwi użytkownicy klikają, dane rosną, a błędy się pojawiają.
Tu niezawodność zaczyna być realna: jasne granice, jasne dane i jasne ścieżki błędów.
Praktyczny wynik od Architekta zwykle obejmuje:
Trzymaj się konkretów. Zamiast „system powiadomień” powiedz „POST /api/alerts, tabela alerts(user_id, type, status), pokaż liczbę nieprzeczytanych w nagłówku.” Zamiast „bezpieczne” powiedz „sesja JWT, sprawdzenia ról na endpointach admina, ochrona pól PII”.
Użyj tego, gdy Planista przekazuje pracę Architektowi lub gdy chcesz zresetować funkcję, która wydaje się chaotyczna.
You are the Architect.
Goal: design the simplest buildable structure for this feature.
Context:
- App type: [web/mobile/both]
- Stack: React UI, Go API, PostgreSQL DB (Flutter screens if mobile)
- Existing constraints: [auth method, existing tables, deadlines]
Input (from Planner):
- User story:
- Acceptance criteria:
- Out of scope:
Deliverables (keep it short and specific):
1) UI map: list screens/components with 1-line purpose each.
2) API map: list endpoints with method, path, request/response fields.
3) Data model: tables + key columns + relationships.
4) Key flows: happy path + 2 failure cases and how UI should respond.
5) Non-functional needs: security, performance, audit/logging (only what matters now).
6) Tradeoffs: 3 decisions you made (and what you avoided) to prevent over-design.
Rules:
- Prefer the smallest option that meets acceptance criteria.
- If something is unclear, ask up to 3 questions, otherwise make a reasonable assumption and write it down.
Jeśli budujesz w Koder.ai, taki handoff przyspiesza implementację, bo Wykonawca ma jasną mapę zamiast zgadywać kształt w trakcie budowy.
Wykonawca zamienia jasny plan w działający kod, bez zmieniania planu. Tutaj wygrywa lub przegrywa większość niezawodności. Cel jest prosty: zbudować dokładnie to, co uzgodniono, w odwracalnych małych krokach.
Traktuj każdą zmianę jak coś, co może zostać cofnięte. Pracuj w cienkich warstwach i zatrzymuj się, kiedy kryteria akceptacji są spełnione. Jeśli coś jest niejasne, zapytaj. Domysły to sposób, w jaki małe funkcje stają się niespodziewanymi przebudowami.
Dobry Wykonawca zostawia krótki ślad dowodowy: kolejność prac, co zmieniono, co zostało nietknięte (by uniknąć ukrytego rozszerzania zakresu) i jak zweryfikować.
Oto szablon promptu, który możesz wkleić, przekazując pracę Wykonawcy:
You are the Implementer.
Context:
- Feature: <name>
- Current behavior: <what happens today>
- Desired behavior: <what should happen>
- Acceptance criteria: <bullets>
- Constraints: <tech choices, performance, security, no schema change, etc.>
Before writing code:
1) Ask up to 5 questions if anything is unclear.
2) Propose a step-by-step build plan (max 6 steps). Each step must be reversible.
3) For each step, list the exact files/modules you expect to touch.
Then implement:
- Execute steps one by one.
- After each step, summarize what changed and how to verify.
- Do not add extras. If you notice a better idea, stop and ask first.
Przykład: jeśli Planista poprosił o „Dodaj przepływ resetu hasła przez e-mail”, Wykonawca nie powinien jednocześnie przeprojektowywać ekranu logowania. Zbuduj endpoint żądania e-maila, potem obsługę tokena, potem UI, z krótką notatką weryfikacyjną po każdym kroku. Jeśli narzędzie wspiera snapshoty i rollback (Koder.ai tak robi), małe kroki są znacznie bezpieczniejsze.
Zadaniem Testera jest złamać funkcję zanim zrobi to użytkownik. Nie ufa ścieżce szczęśliwej. Szuka niejasnych stanów, braków walidacji i przypadków brzegowych, które pokażą się od pierwszego dnia.
Dobry wynik Testera jest użyteczny dla innych: matryca testów powiązana z kryteriami akceptacji, krótki skrypt manualny i raporty błędów z dokładnymi krokami (oczekiwane vs rzeczywiste).
Celuj w pokrycie, nie w ilość. Skup się na miejscach, gdzie awaria jest najkosztowniejsza: walidacja, uprawnienia i stany błędów.
Przykład: jeśli dodano „Utwórz fakturę”, spróbuj ujemnej kwoty, notatki 10 000 znaków, brakującego klienta i podwójnego kliknięcia wysyłki.
Użyj tego przy przekazaniu od Wykonawcy do Testera. Wklej kryteria akceptacji i istotne notatki UI/API.
ROLE: Tester
GOAL: Produce a test matrix tied to acceptance criteria, including negative tests.
CONTEXT:
- Feature: <name>
- Acceptance criteria:
1) <AC1>
2) <AC2>
- Surfaces: UI screens: <list>; API endpoints: <list>; DB changes: <notes>
OUTPUT FORMAT:
1) Test matrix table with columns: AC, Test case, Steps, Expected result, Notes
2) Negative tests (at least 5) that try to break validation and permissions
3) Manual test script (10 minutes max) for a non-technical person
4) Bug ticket template entries for any failures you predict (Title, Steps, Expected, Actual, Severity)
CONSTRAINTS:
- Keep steps precise and reproducible.
- Include at least one test for loading/error states.
Recenzent to końcowe sprawdzenie jakości. Nie po to, by wszystko przepisać, ale by wychwycić małe problemy, które potem stają się długimi błędami: mylące nazwy, brakujące przypadki brzegowe, słabe komunikaty o błędach i ryzykowne skróty utrudniające przyszłe zmiany.
Dobry przegląd daje jasne wyniki: co sprawdzono, co trzeba poprawić, co jest ryzykowne, ale akceptowalne, i jaka decyzja została podjęta (żeby nie wracać do tego tydzień później).
Trzymaj przegląd krótko i powtarzalnie. Skup się na rzeczach, które najczęściej łamią niezawodność:
Użyj tego, gdy Wykonawca mówi, że funkcja jest gotowa:
You are the Reviewer. Do a final review for correctness, clarity, and maintainability.
Context
- Feature goal:
- User flows:
- Key files changed:
- Data model/migrations:
Review checklist
1) Correctness: does it meet the goal and handle edge cases?
2) Security basics: auth, validation, safe logging.
3) Errors: clear messages, consistent status codes.
4) Consistency: naming, patterns, UI text.
5) Maintainability: complexity, duplication, TODOs.
Output format
- Findings (bulleted): include file/function references and severity (high/medium/low)
- Requested changes (must-fix before merge)
- Risk notes (acceptable with reason)
- Decision log updates (what we decided and why)
Finish with exactly one:
APPROVE
CHANGES REQUESTED
Jeśli Recenzent żąda zmian, powinny być małe i konkretne. Cel to mniej niespodzianek w produkcji, nie drugi cykl developmentu.
Większość przeróbek bierze się z tego, że następna osoba zaczyna od niejasnego celu, brakujących wejść albo ukrytych ograniczeń. Prosty szablon handoffu naprawia to, czyniąc każdą transmisję przewidywalną.
Używaj jednego wspólnego nagłówka za każdym razem, nawet dla małych zadań:
Oto pojedynczy przykład handoffu (Architekt -> Wykonawca):
ROLE HANDOFF: Architect -> Implementer
Context: Add “Invite team member” to the admin area.
Goal: Admin can send an invite email; invited user can accept and set a password.
Inputs: Existing Users table; auth uses JWT; email provider already configured.
Constraints: Go backend + PostgreSQL; React UI; audit log required; no breaking auth changes.
Definition of Done:
- UI: invite modal + success state
- API: POST /invites, POST /invites/accept
- DB: invites table with expiry; audit event on create/accept
- Tests: happy path + expired invite + reused token
Assumptions: Email templates can reuse “reset password” styling.
Open questions: Should invites be single-use per email?
Decisions made: 72h expiry; tokens stored hashed.
Jeśli chcesz, żeby to przyjęło się w zespole, przechowuj szablony gdzie każdy może je kopiować. Jeśli budujesz w Koder.ai, trzymaj te promptu w Planning Mode i zrób snapshot przed implementacją, żeby rollback był bezbolesny, gdy zakres się zmieni.
Niezawodność rośnie, gdy traktujesz każdą funkcję jak małe wydanie, z czystymi przekazaniami między rolami. Zacznij od jednej user story, nie od stosu pomysłów. Napisz ją prostym językiem, potem dodaj kryteria akceptacji, które ktoś może sprawdzić bez zgadywania.
Zaprojektuj tylko minimalny kształt potrzebny do tej historii. Cel nie jest perfekcyjny system, a prosty plan, który nie rozpadnie się przy dodaniu następnej funkcji.
Praktyczny flow wygląda tak:
Utrzymuj wyjście każdego kroku małe i eksplicitne. Zwykle wystarczy jedna wiadomość handoffu na rolę: wejścia, podjęte decyzje i czego potrzebujesz dalej.
Na końcu napisz jeden akapit jako notatkę zmian: co dodano, co usunięto i na co zwrócić uwagę w kolejnym wydaniu. Ta „pamięć” zapobiega powrotowi tych samych dyskusji i błędów.
Funkcja: prosty ekran CRM, gdzie użytkownicy mogą dodawać kontakty, przypisywać tagi (np. „Lead” lub „Dostawca”) i wyszukiwać po nazwie lub tagu. Ograniczenie: masz 90 minut i musisz ponownie użyć istniejącej tabeli contacts (bez łamania migracji). Mobilnie potrzebny jest pojedynczy ekran „Dodaj kontakt” mieszczący się na jednej stronie.
Oto jak wygląda handoff używając tego łańcucha person. Każda rola produkuje mały artefakt, któremu następna osoba może zaufać.
Planner output (definition + acceptance)
- Goal: Add contacts with tags and fast search.
- Must: Create, edit, list contacts; add/remove tags.
- Search: matches name OR any tag; results update in under 300ms.
- Constraint: keep existing contacts table; tags can be new table.
- Done when: 5 test cases pass; mobile screen has no scroll on common devices.
Architect output (shape + data)
- Tables: contacts (existing), tags (id, name), contact_tags (contact_id, tag_id).
- API: POST /contacts, PATCH /contacts/:id, GET /contacts?query=.
- Search: SQL ILIKE on contact name + join on tags.
- UI: Contact list with search bar; contact form with tag picker.
- Risk: duplicate tags ("lead" vs "Lead") - enforce lowercase unique.
Implementer output (small steps)
- Step 1: Add tags + join table migrations.
- Step 2: Update backend handlers and query.
- Step 3: Build React UI list + form; wire to API.
- Step 4: Add basic validation (name required, tag length).
- Step 5: Add loading/error states; keep UI responsive.
Tester output (proof + failure)
- Case: search "lea" returns contacts tagged "lead". FAIL: returns none.
- Case: adding tag "Lead" then "lead" should not create two tags. PASS.
- Case: empty name rejected. PASS.
- Bug note: backend search only checks contact name, not tags.
Loop-back (Planner update)
- Update acceptance: search must match tags via join; include a test for it.
- Add edge case: searching by tag should return even if name doesn’t match.
Reviewer output (last 10%)
- Check: query uses indexes; add index on tags.name and contact_tags.tag_id.
- Check: error messages are clear; avoid raw SQL errors.
- Check: mobile form spacing and tap targets.
- Confirm: snapshots/rollback point created before release.
Ten pojedynczy nieudany test powoduje czyste cofnięcie: plan staje się precyzyjniejszy, Wykonawca poprawia jedno zapytanie, a Recenzent weryfikuje wydajność i dopracowanie przed wydaniem.
Najszybszy sposób, by stracić zaufanie do aplikacji budowanej przez czat, to pozwolić każdemu robić wszystko. Jasne role i czyste przekazania utrzymują pracę przewidywalną, nawet gdy działasz szybko.
Mały nawyk, który pomaga: gdy Wykonawca kończy, wklej kryteria akceptacji ponownie i odhacz je jeden po drugim.
Uruchom tę listę przed budową, przed merge i zaraz po wydaniu.
Mały przykład: „Dodaj zaproszenie przez e-mail.” Dołącz pola (email, rola), co się dzieje, gdy e-mail jest nieprawidłowy i czy pozwalasz na ponowne zaproszenia.
Jeśli twoja platforma to wspiera (Koder.ai to robi), zrób snapshot przed ryzykownymi zmianami. Wiedza, że możesz cofnąć, ułatwia wypuszczanie małych, bezpiecznych zmian.
Wybierz jedną małą funkcję i przeprowadź cały łańcuch person. Wybierz coś realnego, ale zamkniętego, jak „dodaj reset hasła”, „stwórz stronę tylko dla admina” lub „eksport faktur do CSV”. Chodzi o to, żeby zobaczyć, co się zmieni, gdy wymusisz czyste przekazania od Planisty do Recenzenta.
Jeśli używasz Koder.ai (Koder.ai), Planning Mode to praktyczne miejsce, by zablokować zakres i kryteria akceptacji przed budową. Snapshoty i rollback dają bezpieczne wyjście, gdy decyzja okaże się zła, bez zamieniania projektu w debatę.
Aby workflow był powtarzalny, zapisz swoje promptu person jako szablony, które zespół może wielokrotnie używać. Trzymaj je krótkie, spójne w formatach wyjść, a spędzisz mniej czasu na wyjaśnianiu tego samego kontekstu przy każdej funkcji.