Fallakte · Produkt- und Engineering-Demo

Dialograft

Software entwickelt sich im Gespräch.

Eine kleine Rechnungs-SaaS, die man per Chat bedient. Fehlt eine Funktion, nimmt das System den Wunsch auf, klärt ihn, lässt ihn bewerten, macht ein Angebot und lässt ihn von einem lokalen Coding-Agenten umsetzen. Review, Merge und Deployment bleiben menschliche Entscheidungen.

Jannis KoulourisStand 31.10.2026Läuft vollständig lokal auf einem MacQuellcode auf GitHub
Video · 5 Minuten

Ein kompletter Lauf: CSV-Export für den Steuerberater

Echte Aufnahme vom 31.10.2026. Die Kundennachrichten kommen aus einem Skript; Antworten, Bewertung, Agentenläufe, Reviews und Deployment sind echt. Mit einer Schutzregel, die greift, und einem Review, das Änderungen verlangt. 1,4-fach beschleunigt, Wartezeiten geschnitten.

Terminal-Aufnahme: Claude Code (headless) über MCP, Worker, Runner, GitHub und Deployment unter OrbStack.

Am 31.10.2026 live gemessen

49 minvom Funktionswunsch im Chat bis zur bereitgestellten Mahnstufe 2
2Testmails im ersten Prüflauf, 0 im zweiten (kein Doppelversand)
600–1.440 €unverbindliches Angebot, deterministisch aus 6–12 h berechnet
7Plattformfehler, die erst im Live-Betrieb auftraten und behoben wurden
Ablauf FR-0001

Vom Wunsch zur Mahnung, mit Zeitstempeln

Ein echter Lauf. Die Zeiten stammen aus dem Verlauf der Anfrage in der Datenbank; die Pausen sind Teil des Ergebnisses.

Chat · MCP

Lücke festgestellt, Anfrage angelegt

Der Client prüft zuerst den Funktionskatalog. Kein Werkzeug für eine zweite Mahnung, also eine echte Produktlücke. Bereits genannte Angaben („nach 30 Tagen“) werden übernommen, nicht erneut gefragt.

Kunde

Umfang v2 bestätigt

Ziel, Auslöser, Verhalten, Ausnahmen, Annahmen und prüfbare Akzeptanzkriterien. Vorschläge zählen erst nach Bestätigung.

Worker · Ollama

Ticket, Bewertung, Angebot v1

GitHub-Issue mit Label auto-implement. Das lokale Modell liest einen fixierten Commit; jeder Codebeleg muss wörtlich in der genannten Datei stehen.

Pausiert

Verbindung zum Runner nach 300 s verloren

Der Worker meldete die Übergabe an das Team, statt etwas zu behaupten. Ursache: Header-Timeout von fetch. Behoben durch ein asynchrones Runner-Protokoll.

Abgelehnt

Neue Bewertung mit erfundenen Belegen

Das Modell lieferte 30 sich wiederholende Belege, einige der falschen Datei zugeordnet. Die Prüfung verwarf sie; Ergebnis needs-human. Prompt und Schema wurden verschärft.

Kunde

Angebot v2 angenommen, Auftrag AU-0002

Neu bewertet am geänderten Commit. Das ältere Angebot ist ungültig; nur das aktuelle, konkrete Angebot erzeugt einen Auftrag.

Runner · Qwen Code

Draft-PR #3

Kurzlebiger Container, Typecheck, Tests und Build vorher und nachher, Pfadregeln geprüft. 7 Dateien, +426 Zeilen, davon ein neuer Test.

Mensch

Review und Merge

Jannis prüft und merged ausdrücklich. Kein unbeaufsichtigter Merge.

Operator

Freigegebener Commit bereitgestellt

Nur der gemergte Commit darf als bereitgestellt markiert werden. Danach Prüflauf zum Stichtag 30.10.2026.

Beleg

Die Mahnung kommt im Testpostfach an

Mailpit als lokales Testpostfach. Der Adapter akzeptiert nur Adressen unter der reservierten Domain .invalid; reale Empfänger sind ausgeschlossen.

Mailpit-Posteingang mit zwei Mails „2. Mahnung“ für R-0002 und R-0004 und vier Zahlungserinnerungen der ersten Stufe
Posteingang: zwei Mahnungen der Stufe 2 über den vier Erinnerungen der Stufe 1. R-0003 und R-0006 sind noch keine 30 Tage überfällig.
Mailpit-Ansicht der Mahnung zu Rechnung R-0002: seit 45 Tagen überfällig, offener Betrag 535,50 Euro
Einzelne Mahnung: Rechnung R-0002, 45 Tage überfällig, offener Restbetrag 535,50 €.
Schutzregeln im Einsatz

Was das System selbst gestoppt hat

Ein Agent, der Code schreibt, braucht Grenzen, die nicht von seiner Selbsteinschätzung abhängen. Alle Fälle hier sind live aufgetreten.

gestoppt · Pfadregel

Änderung an geschützten Dateien

Der Agent änderte den Datenspeicher, einen bestehenden Test und später einen Test-Helfer, obwohl die Aufgabe es untersagte. Der Runner verwarf jeweils das ganze Ergebnis; kein PR.

gestoppt · Review

Grüne Tests, falsches Verhalten

Ein Lauf bestand alle Prüfungen, hätte aber an den falschen Mailserver gesendet und ein Zahlungsziel in der Vergangenheit genannt. Bei FR-0002 fand das Review fehlerhafte Grammatik, eine gestrichene Zahlungsaufforderung und doppelten Code. Jede Ablehnung startet eine neue Agentenrunde mit allen Review-Notizen.

gestoppt · Belegprüfung

Erfundene Codezitate

Bewertungen mit paraphrasierten oder falsch zugeordneten Zitaten führen nie zu einem Angebot, sondern zur menschlichen Prüfung.

gestoppt · Versionen

Veraltete Angebote

Ändert sich der Umfang oder die Codebasis, wird das offene Angebot ungültig. Angenommen werden kann nur die aktuelle Version.

Architektur

Drei Tokens, ein Werkzeugkatalog, ein isolierter Agent

Entscheidungen

  • Zod-Schemas sind die einzige Quelle: API-Validierung, OpenAPI und MCP-Katalog werden daraus erzeugt.
  • MySQL mit expliziter Store-Abstraktion; Jobs, Mitteilungen und Audit entstehen in derselben Transaktion wie die fachliche Änderung.
  • Preise sind deterministisch: Arbeitspakete × Stundensatz, Risikoaufschlag auf die Obergrenze. Das Modell erfindet keine Summe.
  • Getrennte Entscheidungen: Prüfung, Angebotsannahme, Merge, Deployment.

Stack

  • TypeScript, Node.js, Fastify, Zod, MCP SDK, mysql2, PDFKit, ExcelJS
  • Kubernetes unter OrbStack, Docker, Mailpit
  • Ollama mit qwen3-coder-next, Qwen Code im Container
  • Vitest (52 Tests), MySQL-Integrationstest in CI, GitHub Actions
Grenzen

Was diese Demo nicht behauptet

  • Keine produktive Buchhaltung, keine echten Zahlungen, keine realen Empfänger. Alle Dokumente sind Demo-Daten.
  • Der Agentencontainer ist eingeschränkt, aber sein Netzwerkzugang ist nicht vollständig isoliert. Gedacht für ein kontrolliertes Repository.
  • Grüne Tests beweisen keine Korrektheit. Deshalb bleibt das menschliche Review Pflicht, und es hat im Live-Betrieb echte Fehler gefunden.
  • Agentencode braucht oft mehrere Runden: Für einheitliche Mahntexte (FR-0002) lehnte das Review drei Pull Requests ab, bevor der vierte bestand.
Live-Vorführung

Den ganzen Ablauf live sehen

Der Quellcode ist offen auf GitHub (MIT). In einer persönlichen Vorführung auf meinem Mac zeige ich den kompletten Weg: Chat, Klärung, Bewertung, Angebot, Agentenlauf, Review und Deployment, mit einer Funktion, die Sie vorschlagen.

Schreiben Sie mir für einen Termin am einfachsten über LinkedIn, wo Sie diese Seite gefunden haben. Wenn Sie über einen anderen Weg hierher gekommen sind, erreichen Sie mich über GitHub: github.com/ioannis-koulouris.

Dialograft ist ein Demonstrationsprojekt von Jannis Koulouris. Alle Kunden, Rechnungen und Adressen sind erfunden.