Agentenrollen für chat-basierte Apps: Definiere klare Personas, Handoff-Prompts und schnelle Checks, damit dein Team zuverlässigere Web- und Mobile-Apps aus Chat liefert.

Chat hilft dir, schnell voranzukommen, aber es ist schlecht darin, ein ganzes Produkt im Kopf zu behalten. Die meisten Ausfälle sind kein „schlechter Code“. Es sind Lücken zwischen dem, was du meintest, was der Assistent annahm und dem, was tatsächlich ausgeliefert wurde.
Der erste Bruch sind fehlende Anforderungen. Du bittest um „einen einfachen Signup-Flow“, aber niemand schreibt Randfälle wie Passwort-Reset, bereits verwendete E-Mail oder was passiert, wenn der Nutzer mitten im Schritt den Tab schließt, auf. Der Assistent füllt die Lücken, und diese Vermutungen werden dein Produkt.
Der zweite Bruch sind inkonsistente Entscheidungen. Eine Nachricht wählt ein Datenmodell, die nächste fügt eine Abkürzung hinzu, und eine dritte ändert Benennungen oder Validierungsregeln. Jede Entscheidung kann für sich sinnvoll sein. Zusammengenommen entsteht eine fragile App, die beim Hinzufügen der nächsten Funktion bricht.
Der dritte Bruch ist das Fehlen von Nachweisen. Ohne grundlegende Tests und klare Abnahmekriterien entdeckst du Probleme erst, wenn du herumklickst. Dann wird aus „bei mir funktioniert es“ plötzlich Überstunden, Hotfixes und zufällige Regressionen.
Eine einfache Lösung ist die Nutzung wiederverwendbarer Personas: ein Planner, der die Arbeit konkret macht, ein Architect, der die Form vorgibt, ein Implementer, der in kleinen Schritten baut, ein Tester, der versucht, es zu zerlegen, und ein Reviewer, der die letzten 10 % findet, die 90 % des Leids verursachen. Das ist kein schwerfälliger Prozess. Es ist eine wiederholbare Methode, Entscheidungen konsistent zu halten.
Dieser Ansatz funktioniert für Solo-Gründer, kleine Teams und nicht-technische Macher, die Chat-Tools wie Koder.ai nutzen. Du kannst weiterhin schnell arbeiten, aber du hörst auf, dich auf Glück zu verlassen.
Diese Rollen garantieren nicht automatisch Qualität. Du brauchst immer noch klare Eingaben (wie Erfolg aussieht, Einschränkungen und Prioritäten) und du musst die Ausgaben lesen. Denk an die Rollen als Leitplanken: sie reduzieren vermeidbare Fehler, aber du bist immer noch der Fahrer.
Zuverlässigkeit sinkt, wenn ein Chat versucht, alles auf einmal zu erledigen: entscheiden, was gebaut wird, es designen, coden, testen und beurteilen. Diese Aufgaben zu vermischen macht es einfach, Randfälle zu übersehen, Anforderungen während der Entwicklung zu ändern oder Bugs durch zusätzliche Verwirrung zu „beheben".
Ein praktischer Weg das zu verhindern ist, die Rollen konsistent und eng zu halten. Jede Rolle besitzt eine Aufgabe, und es ist nicht erlaubt, außerhalb dieser Aufgabe „zu helfen“. Das macht Entscheidungen nachvollziehbar und Fehler leichter auffindbar.
Verwende diese Reihenfolge für fast jedes Feature:
Saubere Übergaben sind genauso wichtig wie die Rollen. Jede Übergabe sollte enthalten, was entschieden wurde, welche Annahmen gemacht wurden und was „done“ bedeutet. Wenn du Koder.ai nutzt, behandle jede Rolle als separaten Chat-Turn oder Snapshot, damit du zurückrollen kannst, wenn sich eine Entscheidung als falsch erweist.
Zurückschleifen passiert bewusst, nicht zufällig. Wenn Tests fehlschlagen, geh mit einem minimalen Bug-Report zurück zum Implementer. Wenn das Design eine neue Anforderung nicht tragen kann, geh zurück zum Architect. Wenn die Anforderung unklar ist oder sich ständig ändert, halte an und kehre zum Planner zurück.
Behalte die gleichen Rollen und die Reihenfolge über Features hinweg. Nach ein paar Runs baust du Muskelgedächtnis auf: Du stellst früher bessere Fragen und vermeidest späte Nacharbeiten.
Die Aufgabe des Planners ist, eine vage Idee in etwas zu verwandeln, das gebaut und verifiziert werden kann. Das ist nicht „Docs schreiben“. Es ist, sich darauf zu einigen, was „done" bedeutet, bevor der erste Screen oder API-Endpunkt existiert.
Ein gutes Planner-Ergebnis bleibt klein und testbar: eine klare Problembeschreibung, ein paar User Stories, einfache Akzeptanzkriterien und eine kurze Liste von Randfällen. Es sagt auch, was noch nicht gemacht wird, damit der Implementer nicht versehentlich ein größeres Feature baut als gewollt.
Nutze das, wenn du eine Feature-Idee hast und einen engen Plan willst, dem die anderen Rollen folgen können.
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)
Sende diese Nachricht so wie sie ist (ausgefüllt), um Rückfragen zu reduzieren.
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>
Wenn du als Planner nur eine Sache machst: mach die Akzeptanzkriterien messbar. Zum Beispiel: „User kann Passwort zurücksetzen und erhält innerhalb von 60 Sekunden eine E-Mail" schlägt „Passwort-Reset funktioniert".
Der Architect verwandelt einen guten Plan in eine umsetzbare Gestalt. Die Aufgabe ist nicht, fancy Patterns zu erfinden. Es geht darum, die einfachste Struktur zu wählen, die trotzdem funktioniert, wenn echte Nutzer klicken, Daten wachsen und Fehler auftreten.
Hier wird Zuverlässigkeit greifbar: klare Grenzen, klare Daten und klare Fehlerpfade.
Ein praktisches Architect-Output umfasst meist:
Halte es konkret. Statt „Notifications-System" sag „POST /api/alerts, Tabelle alerts(user_id, type, status), zeige ungelesene Anzahl im Header." Statt „sicher" sag „JWT-Session, Rollenprüfungen auf Admin-Endpunkten, PII-Felder geschützt."
Nutze das, wenn der Planner Arbeit an den Architect übergibt oder wenn ein Feature unordentlich wirkt.
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.
Wenn du in Koder.ai baust, beschleunigt so ein Handoff die Implementierung, weil der Implementer einer klaren Karte folgen kann, statt die Form während der Umsetzung zu erraten.
Der Implementer verwandelt einen klaren Plan in funktionierenden Code, ohne den Plan zu ändern. Hier entscheidet sich viel für die Zuverlässigkeit. Das Ziel ist einfach: genau das bauen, was vereinbart wurde, in kleinen, rückgängig machbaren Schritten.
Behandle jede Änderung, als könnte sie zurückgerollt werden. Arbeite in dünnen Scheiben und stoppe, wenn die Akzeptanzkriterien erfüllt sind. Wenn etwas unklar ist, frag nach. Raten ist der Grund, warum kleine Features zu überraschenden Rewrites werden.
Ein guter Implementer hinterlässt eine kurze Spur von Belegen: die Build-Reihenfolge, was geändert wurde, was nicht geändert wurde (um verstecktes Scope Creep zu vermeiden) und wie zu verifizieren ist.
Hier ist eine Prompt-Vorlage, die du beim Übergang an den Implementer einfügen kannst:
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.
Beispiel: Wenn der Planner „Passwort-Reset per E-Mail hinzufügen" verlangt hat, sollte der Implementer nicht auch das Login-Design neu machen. Baue erst den Endpoint für die E-Mail-Anfrage, dann das Token-Handling, dann die UI, mit kurzer Verifikation nach jedem Schritt. Wenn dein Tool Snapshots und Rollback unterstützt (Koder.ai tut das), werden kleine Schritte deutlich sicherer.
Die Aufgabe des Testers ist, das Feature vor den Nutzern zu brechen. Sie vertrauen nicht dem Happy Path. Sie suchen nach unklaren Zuständen, fehlender Validierung und Randfällen, die am ersten Tag auftreten.
Ein gutes Tester-Ergebnis ist nutzbar für andere: eine Testmatrix, die an Akzeptanzkriterien gebunden ist, ein kurzes manuelles Skript und Bug-Reports mit exakten Schritten (erwartet vs. tatsächlich).
Ziele Abdeckung, nicht Masse. Fokus auf Bereiche, bei denen Fehler teuer sind: Validierung, Berechtigungen und Fehlerzustände.
Beispiel: wenn du „Invoice erstellen" hinzugefügt hast, probiere einen negativen Betrag, eine 10.000-Zeichen-Anmerkung, fehlenden Kunden und doppeltes Abschicken.
Nutze das, wenn du vom Implementer an den Tester übergibst. Füge die Akzeptanzkriterien und relevante UI/API-Notizen ein.
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.
Der Reviewer ist der letzte Qualitätscheck. Nicht, um alles neu zu schreiben, sondern um die kleinen Probleme zu finden, die später zu langen Bugs werden: verwirrende Namen, fehlende Randfälle, schwache Fehlermeldungen und riskante Abkürzungen, die spätere Änderungen erschweren.
Eine gute Review liefert klare Ergebnisse: was geprüft wurde, was geändert werden muss, was riskant, aber akzeptabel ist und welche Entscheidung getroffen wurde (damit nicht nächste Woche erneut darüber gestritten wird).
Halte den Durchgang kurz und wiederholbar. Fokus auf Dinge, die Zuverlässigkeit am häufigsten gefährden:
Nutze das, wenn der Implementer sagt, das Feature sei fertig:
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
Wenn der Reviewer Änderungen verlangt, sollten sie klein und spezifisch sein. Das Ziel ist weniger Überraschungen in Produktion, nicht ein zweiter Entwicklungszyklus.
Die meiste Nacharbeit entsteht, weil die nächste Person mit einem verschwommenen Ziel, fehlenden Eingaben oder versteckten Einschränkungen startet. Eine einfache Handoff-Vorlage behebt das, indem jede Übergabe vorhersehbar wird.
Verwende immer einen gemeinsamen Header, auch für kleine Aufgaben:
Hier ein einzelnes Handoff-Beispiel (Architect -> Implementer):
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.
Wenn du willst, dass das hängen bleibt: speichere deine Vorlagen an einem Ort, aus dem jeder kopieren kann. Wenn du Koder.ai benutzt, kannst du diese Prompts in Planning Mode halten und vor der Umsetzung einen Snapshot machen, sodass ein Rollback schmerzfrei ist, falls der Scope sich ändert.
Zuverlässigkeit verbessert sich, wenn du jedes Feature wie ein Mini-Release behandelst, mit sauberen Übergaben zwischen Rollen. Starte mit einer User Story, nicht mit einem Haufen Ideen. Schreibe sie in einfacher Sprache und füge Akzeptanzkriterien hinzu, die jemand ohne Raten prüfen kann.
Designe nur die minimale Form, die die Story trägt. Das Ziel ist kein perfektes System. Es ist ein einfacher Plan, der nicht kollabiert, wenn du das nächste Feature hinzufügst.
Ein praktischer Ablauf sieht so aus:
Halte die Outputs jedes Schrittes klein und explizit. Eine Handoff-Nachricht pro Rolle reicht meist: Eingaben, getroffene Entscheidungen und was als nächstes gebraucht wird.
Beende mit einem ein Absatz langen Change-Note: was hinzugefügt wurde, was entfernt wurde und worauf man in der nächsten Version achten sollte. Dieses „Gedächtnis" verhindert, dass die gleichen Argumente und Bugs später wieder auftauchen.
Feature: ein einfaches CRM-Screen, in dem Nutzer Kontakte hinzufügen, Tags (wie „Lead" oder „Vendor") zuweisen und nach Name oder Tag suchen können. Einschränkung: du hast 90 Minuten und musst die bestehende contacts-Tabelle wiederverwenden (keine breaking migrations). Mobile braucht einen einzigen „Kontakt hinzufügen"-Screen, der auf eine Seite passt.
Hier sieht der Handoff aus, wenn du die Persona-Kette nutzt. Jede Rolle produziert ein kleines Artefakt, dem die nächste Person vertrauen kann.
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.
Dieser einzelne fehlgeschlagene Test erzwingt ein sauberes Zurückschleifen: der Plan wird schärfer, der Implementer ändert eine Query und der Reviewer prüft Performance und Politur vor dem Release.
Der schnellste Weg, Vertrauen in chatbasierte Software zu verlieren, ist, alle alles machen zu lassen. Klare Rollen und saubere Übergaben halten die Arbeit vorhersehbar, auch wenn du schnell bist.
Eine kleine Gewohnheit, die hilft: Wenn der Implementer fertig ist, füge die Akzeptanzkriterien wieder ein und hake sie einzeln ab.
Führe diese Checkliste vor dem Bauen, vor dem Merge und direkt nach dem Ausliefern durch.
Ein kleines Beispiel: „Invite-by-email hinzufügen." Felder: email, role; was passiert bei ungültiger E-Mail; ob Re-Invites erlaubt sind.
Wenn deine Plattform Snapshots unterstützt (Koder.ai tut das), mach vor riskanten Änderungen einen Snapshot. Zu wissen, dass du zurückkannst, macht es leichter, kleine, sichere Änderungen zu liefern.
Wähle ein kleines Feature und durchlaufe die komplette Persona-Kette einmal. Nimm etwas Reales, aber Abgegrenztes, wie „Passwort zurücksetzen", „eine Admin-Seite hinzufügen" oder „Rechnungen nach CSV exportieren." Der Sinn ist zu sehen, was sich ändert, wenn du saubere Übergaben vom Planner zum Reviewer erzwingst.
Wenn du Koder.ai nutzt (koder.ai), ist der Planning Mode ein praktischer Ort, um Scope und Akzeptanzkriterien vor dem Bauen zu sperren. Snapshots und Rollbacks geben dir eine sichere Ausstiegsoption, wenn sich Entscheidungen als falsch herausstellen, ohne das ganze Projekt zur Debatte zu machen.
Speichere deine Persona-Prompts als Vorlagen, die dein Team wiederverwenden kann. Kurz halten, Ausgabeformate konsistent halten — so verbringst du weniger Zeit damit, denselben Kontext für jedes Feature neu zu erklären.