Voraussetzungen
- Schnellstart durchgespielt: Plattform läuft lokal auf
http://localhost:8080, du bist alsadmineingeloggt. - Anthropic-API-Key: ein Key mit Zugriff auf
claude-sonnet-5oderclaude-opus-4-8. Den Key generierst du unter console.anthropic.com. Ein Key kostet pro Token, für ein erstes Tutorial reichen also ein paar Euro Guthaben. - Claude-Code-CLI installiert: die Plattform ruft
claudeals Subprozess auf. Installation z.B. vianpm install -g @anthropic-ai/claude-codeoder über den Plugin-Manager (siehe Claude-Code-Dokumentation). Prüfe mitclaude --version. - Claude-Code mindestens einmal interaktiv angemeldet: die Plattform nutzt deine lokal gespeicherten Credentials.
- JDK 25 lokal installiert: der Workspace-Build (
mvn verify) braucht ein lokales JDK. Prüfe mitjava -version. - Maven (≥ 3.9): prüfe mit
mvn -v. Alternativ kann der Wrapper./mvnwaus dem generierten Workspace genutzt werden.
1. Anthropic-API-Key konfigurieren
Du hast zwei Wege, den Key in die Plattform zu bekommen:
Variante A: über die UI (empfohlen)
- Klick im Header oben rechts auf dein Benutzer-Icon und wähle Integrationen (oder navigiere zu /integrations).
- Auf der Karte Anthropic klick auf Schlüssel setzen bzw. "Anthropic API-Key hinzufügen".
- Trage den Key (beginnt mit
sk-ant-...) ein und speichere.
Der Key wird mit AES-GCM unter dem Master-Key aus deiner .env verschlüsselt in der Datenbank gespeichert. Im Klartext sieht ihn danach niemand mehr.
Variante B: per Env-Variable (Air-Gap)
Wenn du den Key als Env-Var setzen willst (z.B. für Air-Gap-Setups), füge in deine .env hinzu:
SOFTWAREFABRIK_ANTHROPIC_API_KEY=sk-ant-...
Dann: docker compose down && docker compose up -d.
audit_event — mit wer (User-Subject) und wann (Timestamp) den Key gesetzt hat. Die Env-Variante ist anonym.
2. Default-Adapter auf claudecode stellen
Damit du nicht bei jedem Run den Adapter manuell wählen musst, setzt du den globalen Default:
- Klick oben rechts auf Einstellungen (oder navigiere zu /einstellungen) und wähle den Reiter Adapter.
- Setze Default-Execution-Adapter (
execution.adapter.default) aufclaudecode. - Setze Default-Modell für Claude Code (
execution.claudecode.model) aufclaude-sonnet-5(gutes Preis-Leistungs-Verhältnis für die meisten Tasks). Für tiefere Architektur-Aufgaben istclaude-opus-4-8stärker, aber teurer. - Speichern.
Die Änderung wirkt sich nach maximal 5 Minuten aus (TTL-Cache). Wenn du es sofort sehen willst, klick unten auf der Settings-Seite auf "Cache jetzt invalidieren".
audit_event. Du siehst in der Settings-UI direkt unter dem Wert, wer ihn zuletzt geändert hat (User-Subject + Timestamp).
3. Container-Sandbox aktivieren (optional)
Wenn du Docker auf dem Host hast und den Agent isoliert laufen lassen willst:
- Einstellungen →
execution.sandbox.variant→container. - Optional:
execution.sandbox.image→ eigenes Image mit Claude-CLI vorinstalliert.
Fehlt Docker im PATH, fällt die Plattform mit Log-Warnung auf die lokale Sandbox zurück.
4. Neues Projekt mit dem Wizard
Klick auf "Neues Projekt mit Assistent anlegen" oder navigiere zu /wizard:
- Schritt 1 – Template: wähle "Modernes Spring Boot Backend".
- Schritt 2 – Fragen: Trage realistische Werte ein:
- Projekttitel: Telefonbuch-API
- Vision: "REST-API für ein einfaches Telefonbuch mit CRUD-Endpoints und Postgres-Persistenz."
- Java-Version: 25
- Datenbank: Postgres
- Architektur: hexagonal
- Sprache: Deutsch
- Schritt 3 – Quality Gates: Schalte ArchUnit und OWASP Dependency-Check an. Trivy und Playwright lass aus (Trivy ist für Container-Builds gedacht, Playwright für Frontends).
- Schritt 4 – Zusammenfassung: kontrolliere alle Werte sowie die Kosten-Schätzung und klicke "Projekt anlegen".
Du landest im Projekt-Editor mit allen Feldern bereits sinnvoll vorbelegt. Der Wizard hat aus deinen Antworten u.a. Folgendes gemacht:
technologyPreferences: "Java 25, Spring Boot 4.x, Maven, Postgres 16"architecturePreferences: "Hexagonale Architektur (domain / application / web / infrastructure)"qualityGates: "ArchUnit-Layer-Tests, OWASP Dependency-Check"
wizard_draft gespeichert. Beim nächsten Aufruf von /wizard bietet die Plattform "Entwurf fortsetzen" an.
5. Artefakte prüfen und justieren
Klick im Projekt-Editor auf "Markdown-Artefakte generieren". Die Plattform erzeugt sechs Dateien. Lies sie einmal durch:
PROJECT.md— die Charta. Ist die Vision klar? Stimmt die Zielgruppe?INSTRUCTIONS.md— die konkrete Arbeitsanweisung an den Agenten. Das ist die wichtigste Datei. Wenn hier Tippfehler oder Doppeldeutigkeiten drin sind, übernimmt der Agent sie eins zu eins.AGENTS.md— die Rollenbeschreibung des Teams. Bei BedarfpreferredModelpro Rolle anpassen.WORKFLOW.md— Phasenmodell und Approval-Punkte.DEFINITION_OF_DONE.md— wann ist der Run fertig?README.md— Lese-Einstieg für den Agenten in den Workspace.
Korrigiere alles, was unklar ist. Beispiel: Wenn in INSTRUCTIONS.md steht "erstelle CRUD-Endpoints", ergänze konkret, welche Felder eine Person hat (Name, Telefonnummer, E-Mail). Je präziser, desto kleiner die Wahrscheinlichkeit für Halluzinationen.
Der vollständige SDLC-Loop im Überblick
Ab hier spielst du den kanonischen Loop der Plattform einmal komplett durch. Er besteht aus acht Stationen, die sich am Ende selbst schließen:
- Planen — ein Plan-Run erzeugt
plans/*.mdund daraus ein Backlog. - Auswählen — du aktivierst ein Backlog-Item.
- Bauen — ein Build-Run arbeitet auf einem eigenen Branch (
sdlc/run-…) im persistenten Workspace. - Selbstkorrektur — bei rotem Build wiederholt der Agent automatisch mit Feedback (begrenzt).
- Quality Gate — aus, beratend oder blockierend.
- Liefern — mit Git-Remote und GitHub-Token: Push + Pull-Request, sonst lokaler Merge.
- Lernen — Erkenntnisse landen im Project-Memory und fließen in Folge-Runs ein.
- Weiter — optionale Auto-Folgevorschläge schließen den Loop zurück zur Auswahl.
Die Schritte 6 bis 15 führen dich genau durch diese acht Stationen.
6. Planen – Plan-Run erzeugt das Backlog
Statt sofort Code zu erzeugen, lässt du den Agenten zuerst planen. Klick auf "Neuer Run" (/runs/new) und wähle als Run-Modus "Planen" statt "Bauen":
- Projekt: Telefonbuch-API.
- Run-Modus: Planen.
- Ziel:
Erstelle einen Umsetzungsplan für die Telefonbuch-API. Zerlege das Vorhaben in kleine, einzeln testbare Arbeitspakete (Skelett, Persistenz, CRUD-Endpoints, Tests, Doku) und schreibe für jedes Paket eine Datei nach plans/ mit Titel, Ziel und Definition of Done.
- Run starten wie gewohnt: "Auf READY setzen", dann "Run starten".
Ein Plan-Run schreibt keinen Produktivcode. Er legt im Workspace unter plans/ mehrere Markdown-Dateien an — eine pro Arbeitspaket. Die Plattform liest diese Dateien aus und macht aus jeder ein Backlog-Item mit Titel, Ziel und Status OPEN.
plans/*.md vor dem Bauen noch von Hand schärfen.
7. Auswählen – Backlog-Item aktivieren
Öffne den Reiter "Backlog" im Projekt. Du siehst die aus dem Plan-Run erzeugten Items, jeweils mit Titel, Ziel und Status. Such dir das erste, kleinste Paket aus — typischerweise "Skelett anlegen" — und klick "Aktivieren".
Das aktivierte Item wird zum Ziel des nächsten Build-Runs: die Plattform übernimmt sein Ziel und seine Definition of Done direkt ins Run-Formular. Erledigte Items wandern später auf DONE, sodass du den Fortschritt jederzeit am Backlog abliest.
8. Bauen – Build-Run auf eigenem Branch
Aus dem aktivierten Backlog-Item startest du einen Build-Run. Halte ihn klein. Navigiere zu /runs/new (oder nutze "Aus Backlog-Item bauen"):
- Projekt: Telefonbuch-API.
- Run-Modus: Bauen.
- Run-Titel: Skelett anlegen
- Ziel: aus dem Backlog-Item vorbefüllt. Bei einem manuellen Run nimm einen konkreten Vorschlag wie diesen:
Lege das initiale Maven-Projekt mit Spring Boot 4.x an. Erzeuge: - pom.xml mit spring-boot-starter-web, spring-boot-starter-data-jpa, postgresql, h2 (test) - Application-Klasse mit @SpringBootApplication - application.yml mit Postgres-Config (lokal) und H2 (test-Profil) - ein einfaches Person-Entity mit id, name, phone - ein PersonRepository als Spring Data JPA Repository - einen REST-Controller mit GET /persons (return all) - Smoke-Test mit @SpringBootTest, der den Context lädt - README mit "wie starte ich das" und "wie teste ich das"
- Adapter: claudecode (Default-Settings). Modell: claude-sonnet-5.
- Klick "Run anlegen", dann "Auf READY setzen" und "Run starten".
Der Build-Run arbeitet im persistenten Workspace des Projekts und legt für seine Änderungen einen eigenen Branch sdlc/run-<run-id> an. So bleibt main sauber, mehrere Runs kollidieren nicht, und jeder Run ist als abgegrenzte Branch-Historie nachvollziehbar.
9. Phasen-Approvals durchklicken
Während der Run läuft, durchläuft er sieben Phasen. Bei kritischen Übergängen wartet die Plattform auf deine bewusste Freigabe:
| Phase | Was passiert | Approval? |
|---|---|---|
INTAKE | Run wird validiert (Projekt, Ziel, Adapter, Budget) und übernommen. | Nein, läuft automatisch. |
PROMPT_ASSEMBLY | Plattform liest PROJECT.md + INSTRUCTIONS.md und baut den Initial-Prompt. | Nein, automatisch. |
WORKSPACE_PREPARATION | Persistenten Workspace öffnen (bzw. beim ersten Run git init + Artefakte hineinkopieren), Branch sdlc/run-<run-id> auschecken. | Nein, automatisch. |
EXECUTION | Plattform startet claude --print <prompt> im Workspace. Agent schreibt Files, macht Commits. | Ja (Default-Policy). Du klickst "Freigeben", bevor der Agent loslegt. |
VALIDATION | Plattform startet mvn verify im Workspace. Build und Tests laufen. | Nein, automatisch. |
CORRECTION | Bei rotem Build erhält der Agent einen Korrektur-Prompt und versucht, Build/Tests zu reparieren. Bei grünem Build übersprungen. | Je nach Policy — standardmäßig automatisch. |
COMPLETION | Bei grünem Build: Status COMPLETED. Bei rotem Build: NEEDS_CORRECTION. | Ja. Du bestätigst, ob das Ergebnis akzeptabel ist. |
Approval-Knöpfe erscheinen rechts neben der aktuellen Phase. Du kannst Freigeben oder Ablehnen klicken — bei Ablehnung wird der Run auf CANCELED gesetzt. Browser-Notifications kannst du oben rechts aktivieren; sie feuern bei WAITING_FOR_APPROVAL oder Run-Ende.
10. Logs lesen, Git-Diff anschauen, Approval mit Inline-Diff
Während der EXECUTION-Phase strömen die Claude-Code-Outputs live in den Log-Bereich (Tab Logs). Achte auf:
- "Reading PROJECT.md..." — Agent hat die Charta gelesen.
- "Reading INSTRUCTIONS.md..." — Agent hat die Anweisungen gelesen.
- "Creating pom.xml..." — Erste Datei wird geschrieben.
- "git commit -m 'chore: initial scaffold'" — Erster Commit.
Auf der rechten Seite siehst du die Git-Ansicht mit Branches, Commits und einem Diff-Viewer. Klick auf einen Commit, um den Diff zu sehen. Das ist die ehrlichste Sicht auf das, was der Agent tatsächlich gemacht hat — keine Marketingsprache, nur Code.
Bei WAITING_FOR_APPROVAL blendet die Detail-View den git diff seit Run-Start direkt ein — kein Wechsel ins Terminal nötig. Wenn es passt: Freigeben und fortsetzen mit kurzer Begründung.
11. Selbstkorrektur – automatische Feedback-Wiederholung
Geht der Build in der VALIDATION-Phase auf Rot (Kompilierfehler, fehlgeschlagene Tests), bricht der Run nicht ab. Stattdessen wechselt er auf NEEDS_CORRECTION, und die Plattform startet die Selbstkorrektur:
- Die Plattform sammelt die Fehlerausgabe von
mvn verify(Compiler- und Test-Logs). - Sie baut daraus einen Korrektur-Prompt und schickt ihn an den Agenten — der Run geht zurück auf
RUNNING. - Der Agent repariert im selben Branch, danach läuft
mvn verifyerneut.
Diese Schleife ist begrenzt: nach einer in den Settings konfigurierbaren Zahl von Korrekturversuchen gibt die Plattform auf und lässt den Run auf NEEDS_CORRECTION stehen, damit du eingreifst. So verbrennt eine hartnäckig rote Aufgabe nicht endlos Tokens.
12. Quality Gate – aus, beratend oder blockierend
Nach COMPLETION klick auf den Reiter "Quality Gate". Du startest die fünf Reviewer:
- aider-review — ruft die Aider-CLI im read-only-Modus auf, sucht nach Smells.
- claude-review — ruft Claude Code im read-only-Modus auf, lässt das Modell selbst kritisieren.
- security — statische Heuristik: Hardcoded Passwörter, schwache Krypto, SQL-Injection-Patterns, …
- architecture-reviewer — prüft Schichten- und Modulgrenzen anhand der Artefakte.
- hallucination-review — sucht erfundene Methoden, Pakete oder API-Aufrufe.
Pro Reviewer siehst du Findings mit Severity (LOW / MEDIUM / HIGH / CRITICAL) und Confidence-Score. Das aggregierte Verdict ist eines von:
Wie streng der Quality Gate wirkt, steuerst du über die Policy (Einstellungen → Quality Gate, pro Projekt überschreibbar):
- Aus: der Quality Gate läuft gar nicht; der Run gilt allein nach grünem Build als fertig.
- Beratend: die Reviewer laufen und melden Findings, blockieren aber nichts — ein
FAILED-Verdict ist nur ein Hinweis. Gut zum Einstieg. - Blockierend: ein
FAILED-Verdict verhindert die Lieferung (Schritt 13). Erst wenn der Gate aufPASSEDoderWARNINGsteht, darf gepusht oder gemergt werden.
Unabhängig von der Policy sind SECURITY/HIGH und ARCHITECTURE/CRITICAL immer blockierend — sie kippen das Verdict auf FAILED. Reviewer-Crashes erscheinen als ERROR — sie werden nicht verschluckt, sondern gemeldet.
Typische Findings beim ersten Run:
- "Hardcoded password in application.yml" — der Agent hat ein Default-Postgres-Passwort eingebaut. Fix: Property mit
${POSTGRES_PASSWORD}referenzieren. - "Missing test coverage" — der Smoke-Test deckt nur den Context-Load ab. Fix: Folge-Run mit Ziel "Tests schreiben".
13. Liefern – Push + Pull-Request oder lokaler Merge
Steht der Quality Gate (je nach Policy) auf Grün, lieferst du das Ergebnis aus. Was dabei passiert, hängt davon ab, ob du ein Git-Remote samt GitHub-Token hinterlegt hast.
Variante A: mit Git-Remote + GitHub-Token → Pull-Request
- Hinterlege unter /integrations auf der Karte GitHub ein Personal Access Token (Scope
repo) und im Projekt das Git-Remote (z.B.git@github.com:dein-user/telefonbuch-api.git). - Klick beim abgeschlossenen Run auf "Liefern" bzw. "Pull-Request öffnen".
- Die Plattform pusht den Branch
sdlc/run-<run-id>zum Remote und öffnet einen Pull-Request gegenmain— mit dem Run-Ziel als Titel und einer Zusammenfassung (Diff, Quality-Gate-Verdict) als Beschreibung. - Du reviewst den PR auf GitHub wie jeden anderen und mergst ihn dort.
Variante B: ohne Remote → lokaler Merge
Ohne Remote oder Token fällt die Plattform auf einen lokalen Merge zurück: der Branch sdlc/run-<run-id> wird im persistenten Workspace nach main gemergt. Das Ergebnis liegt dann lokal vor, und du kannst es später selbst pushen (siehe Schritt 16).
sdlc/run-… arbeitet, ist die Lieferung der einzige Punkt, an dem etwas in main landet — entweder per PR (überprüfbar) oder per lokalem Merge.
14. Lernen – Project-Memory
Jeder abgeschlossene Run hinterlässt Spuren im Project-Memory: getroffene Entscheidungen, wiederkehrende Quality-Gate-Findings, Konventionen, die der Agent etabliert hat. Du findest es im Reiter "Memory" des Projekts.
Beim nächsten Build-Run liest die Plattform dieses Memory aus und hängt es an den Prompt an. So wiederholt der Agent nicht dieselben Fehler, bleibt bei einmal gewählten Mustern (z.B. "Passwörter immer als Env-Var, nie hardcoded") und baut auf dem bereits Erreichten auf, statt bei null anzufangen.
15. Weiter – Auto-Folgevorschläge schließen den Loop
Ein Mega-Run, der alles auf einmal macht, geht in der Praxis selten gut. Viel besser: kleine, fokussierte Folge-Runs. Genau dafür schlägt die Plattform nach jedem Run automatisch Folge-Items vor — abgeleitet aus offenen Quality-Gate-Findings, der Definition of Done und dem restlichen Backlog. Beispiele:
- Vorschlag: "Schreibe Unit-Tests für PersonRepository und PersonController, decke alle CRUD-Operationen ab. Ziel: ≥ 85 % Line-Coverage."
- Vorschlag: "Behebe das Quality-Gate-Finding 'Hardcoded password' und ersetze den Wert durch eine Env-Var-Referenz in application.yml."
- Vorschlag: "Ergänze README.md um eine Sektion 'Deployment' mit docker-compose-Beispiel und eine Sektion 'API-Beispiele' mit curl-Aufrufen pro Endpoint."
Du übernimmst einen Vorschlag mit einem Klick ins Backlog (Status OPEN) — und stehst wieder bei Schritt 7 (Auswählen). Damit schließt sich der Loop: planen → auswählen → bauen → korrigieren → prüfen → liefern → lernen → weiter. Jeder Durchlauf nutzt denselben persistenten Workspace und das gewachsene Project-Memory.
16. Workspace inspizieren & exportieren
Der Workspace liegt unter ./workspaces/<run-id>/ (oder dem in den Settings konfigurierten Pfad). Wechsle dorthin und schau dir an, was der Agent gebaut hat:
cd ./workspaces/<run-id> ls -la git branch -a git log --oneline -20 git diff HEAD~5 HEAD
Du kannst von hier aus weiterarbeiten — eigene Commits machen, in einen Remote pushen, branchen, mergen. Die Plattform fasst diesen Workspace nicht mehr an, solange du nicht einen weiteren Run startest.
Hast du in Schritt 13 lokal gemergt (Variante B), kannst du das Ergebnis jederzeit von Hand exportieren:
# in ein neues GitHub-Repo schieben: cd ./workspaces/<run-id> git remote add origin git@github.com:dein-user/telefonbuch-api.git git push -u origin main
Tipps für gute Prompts und Run-Ziele
- Konkret statt allgemein. "CRUD für Person" ist schwach. "GET /persons (Liste), GET /persons/{id} (Detail), POST /persons (anlegen mit Body {name, phone}), PUT /persons/{id}, DELETE /persons/{id}" ist stark.
- Definition of Done formulieren. "Build muss grün sein", "Tests müssen ≥ 85 % Line- und ≥ 81 % Branch-Coverage haben", "README muss API-Beispiele enthalten". Das macht den Quality Gate erst sinnvoll.
- Beispieldaten mitgeben. Wenn der Agent eine Migration schreiben soll, gib ein Beispiel mit: "Beispiel-Person: Max Mustermann, +49 30 12345678, max@example.org". Das verhindert generische Lorem-Ipsum-Daten.
- Was NICHT zu tun ist auch sagen. "Verwende keine externen Libraries außer Spring Boot Starters" verhindert, dass der Agent eine exotische Lib einbaut, die du dann nicht warten willst.
- Iterativ denken. Lieber drei Runs à 10 Minuten als ein Run à 30 Minuten. Du kannst dazwischen korrigieren.
Wenn was schiefgeht – Debug-Strategien
| Symptom | Ursache | Lösung |
|---|---|---|
claude: command not found | Plattform findet die CLI nicht im PATH. | Setze in den Settings unter Adapter den absoluten Pfad: /usr/local/bin/claude (Linux/macOS) oder C:\Users\<user>\AppData\Local\claude\claude.exe (Windows). Alternativ Env-Var SOFTWAREFABRIK_CLAUDECODE_COMMAND. |
Run hängt in EXECUTION | Claude wartet auf interaktive Eingabe (z.B. weil Login nötig). | Logs prüfen. Meist hilft: einmal manuell claude im Terminal starten und dort einloggen. |
mvn verify scheitert sofort | Agent hat kein Maven-Projekt erzeugt oder eine wirre pom.xml. | Im Workspace per Hand reinschauen, Fehler verstehen, Folge-Run mit Korrektur-Ziel. |
Quality Gate sagt ERROR | Reviewer ist gecrasht (z.B. weil Aider-CLI fehlt). | Im Quality-Gate-Detail siehst du pro Reviewer den Fehler. Fehlende CLIs in den Settings auf "deaktiviert" stellen. |
| Kein Pull-Request, nur lokaler Merge | Kein GitHub-Token oder kein Git-Remote hinterlegt. | Unter Integrationen ein PAT (Scope repo) setzen und im Projekt das Git-Remote eintragen, dann erneut liefern. |
| Backlog bleibt leer nach Plan-Run | Der Agent hat keine Dateien nach plans/ geschrieben. | Ziel des Plan-Runs schärfen (explizit "schreibe je eine Datei nach plans/") oder die plans/*.md von Hand anlegen; die Plattform parst sie beim nächsten Öffnen des Backlogs. |
| Token-Budget erschöpft | Plattform blockiert neue Runs ab 100 % Tagesbudget. | Settings → Budget. Cap erhöhen oder warten bis Mitternacht (Reset). |
Run gecancelt mit WORKSPACE_LOCKED | Voriger Run hat Lock nicht freigegeben (Plattform-Crash). | Workspace-Verzeichnis löschen, Run neu anlegen. Ist ein bekannter Edge Case. |
Was du jetzt kannst & weitere Schritte
- Projekt strukturiert anlegen, beschreiben, in den Run schicken.
- Mit einem Plan-Run ein Backlog erzeugen und Items aktivieren.
- Build-Runs auf eigenem Branch laufen lassen und live mitverfolgen.
- Vor Approval prüfen, was der Agent geändert hat.
- Selbstkorrektur bei rotem Build nutzen und den Quality Gate (aus/beratend/blockierend) anwenden.
- Ergebnisse per Pull-Request oder lokalem Merge ausliefern.
- Aus Project-Memory und Auto-Folgevorschlägen den Loop schließen.
Nächste Schritte: Einführung für Glossar und mentales Modell, Architektur für den Unterbau, Lizenzmodell für Tiers und Limits, oder die FAQ für typische Stolperfallen.