1. Einführung

1.1. Was ist Agentisches Programmieren?

Agentisches Programmieren (Agentic Coding) beschreibt einen Paradigmenwechsel in der Softwareentwicklung: Statt passiver Code-Vervollständigung arbeiten KI-Assistenten als autonome Agenten, die eigenständig Code erkunden, editieren und erklären – über das gesamte Projekt hinweg.

Im Gegensatz zu klassischen Autocomplete-Tools können agentische Coding-Assistenten:

  • Projektstrukturen analysieren und verstehen

  • Mehrstufige Aufgaben selbstständig planen und ausführen

  • Dateien erstellen, bearbeiten und löschen

  • Terminal-Befehle ausführen

  • Auf Fehler reagieren und iterativ verbessern

1.2. Verfügbare Tools

Tool Anbieter Besonderheiten

Claude Code

Anthropic

Terminal-basiert, tiefe Codebase-Integration

GitHub Copilot

GitHub/Microsoft

IDE-Integration, unterstützt mehrere LLMs (inkl. Claude, GPT-4, Gemini)

Cursor

Cursor Inc.

VS Code Fork mit nativer KI-Integration

Cody

Sourcegraph

Codebase-weite Suche und Kontext

Gemini Code Assist

Google

Integration in Google Cloud

ChatGPT + Code Interpreter

OpenAI

Web-basiert mit Code-Ausführung

Mistral + Continue

Mistral AI

Open-Source-freundlich, selbst hostbar

1.3. Über dieses Tutorial

Dieser Leitfaden verwendet Claude Code als Referenz-Tool, da es aktuell eines der leistungsfähigsten agentischen Coding-Tools ist. Die beschriebenen Prinzipien und Workflows sind jedoch übertragbar:

Übertragbarkeit auf andere Tools:

  • GitHub Copilot: Kann Claude als Backend-Modell verwenden. Die Prompts und Spezifikationsdateien funktionieren identisch.

  • Cursor: Unterstützt Claude, GPT-4 und andere Modelle. AGENTS.md-Dateien werden automatisch erkannt.

  • ChatGPT/GPT-4: Prompts und Strukturen funktionieren, aber ohne direkte Dateisystem-Integration.

  • Gemini: Ähnliche Fähigkeiten, Prompts können 1:1 übernommen werden.

  • Mistral: Besonders für selbst gehostete Lösungen interessant.

1.4. Warum AsciiDoc statt Markdown?

Claude Code verwendet standardmäßig Markdown-Dateien (CLAUDE.md, AGENTS.md). Dieses Tutorial nutzt bewusst AsciiDoc (.adoc), da es für technische Dokumentation mächtiger ist:

Feature Markdown AsciiDoc

Tabellen

Einfach

Komplex mit Colspan, Formatierung

Includes

include::datei.adoc[]

Admonitions (NOTE, TIP, WARNING)

Nicht standard

✅ Nativ

Inhaltsverzeichnis

Tool-abhängig

:toc: left

Querverweise

Manuell

[anchor] automatisch

Diagramme

Extern

PlantUML, Mermaid integriert

Collapsible Sections

[%collapsible]

PDF/DocBook Export

Begrenzt

✅ Professionell

KI-Assistenten verstehen AsciiDoc problemlos. Die Syntax ist Markdown ähnlich genug, dass Claude, GPT und andere Modelle .adoc-Dateien korrekt lesen, interpretieren und generieren können.

Falls dein Tool nur .md unterstützt, kannst du die Dateien umbenennen – der Inhalt funktioniert weitgehend auch als Markdown.

Der Kern dieses Tutorials – die Trennung von fachlicher Spezifikation (WAS) und technischer Implementierung (WIE) – ist toolunabhängig und verbessert die Ergebnisse mit jedem KI-Assistenten.

1.5. Workflow-Übersicht

Diagram

2. Installation von Claude Code

2.1. macOS (mit Homebrew)

2.1.1. Variante 1: Native Installer (empfohlen)

Der native Installer benötigt kein Node.js und aktualisiert sich automatisch:

curl -fsSL https://claude.ai/install.sh | bash

Nach der Installation ein neues Terminal-Fenster öffnen, dann:

claude --version

2.1.2. Variante 2: Homebrew Cask

brew install --cask claude-code
claude --version
Homebrew-Installationen aktualisieren sich nicht automatisch. Regelmäßig brew upgrade claude-code ausführen.

2.1.3. Variante 3: npm (falls Node.js bevorzugt wird)

Voraussetzung: Node.js 18+

# Falls Node.js fehlt
brew install node

# Claude Code installieren
npm install -g @anthropic-ai/claude-code

# Bei "command not found":
echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

claude --version

2.2. Linux

2.2.1. Variante 1: Native Installer (empfohlen)

curl -fsSL https://claude.ai/install.sh | bash

Falls command not found erscheint:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2.2.2. Variante 2: Homebrew (falls installiert)

brew install --cask claude-code

2.2.3. Variante 3: npm

# npm-Verzeichnis ohne sudo einrichten
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# Installation
npm install -g @anthropic-ai/claude-code
claude --version
Niemals sudo npm install -g verwenden – das verursacht Berechtigungsprobleme.

2.3. Windows

2.3.1. Variante 1: PowerShell (Native Installer)

irm https://claude.ai/install.ps1 | iex
claude --version

2.3.2. Variante 2: CMD

curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

2.3.3. Variante 3: WSL (Windows Subsystem for Linux)

WSL 1 und WSL 2 werden unterstützt. Nach WSL-Setup die Linux-Anweisungen befolgen.

2.3.4. Variante 4: Git Bash

Zuerst Git for Windows installieren, dann:

curl -fsSL https://claude.ai/install.sh | bash

2.4. Authentifizierung

Nach der Installation:

claude auth login

Dies öffnet den Browser für OAuth-Authentifizierung. Alternativ:

export ANTHROPIC_API_KEY="sk-ant-..."
Claude Code erfordert einen Pro, Max, Teams, Enterprise oder Console Account.

3. Der strukturierte Workflow

3.1. Schritt 1: Story erstellen

Die story.adoc ist der Ausgangspunkt – eine grobe Skizze der Aufgabenstellung mit technischen Rahmenbedingungen.

3.1.1. Verzeichnisstruktur anlegen

mkdir -p mein-projekt/specs
cd mein-projekt

3.1.2. story.adoc erstellen

specs/story.adoc
= Story: [Projektname]
:revdate: 2026-03-19

== Vision

[2-3 Sätze: Was soll das System leisten? Welches Problem löst es?]

== Grobe Anforderungen

* [Anforderung 1]
* [Anforderung 2]
* [Anforderung 3]

== Technische Rahmenbedingungen

[cols="1,2"]
|===
| Aspekt | Vorgabe

| Sprache
| Java 21

| Build-Tool
| Maven / Gradle

| Framework
| Spring Boot 3.x / Quarkus / ...

| Datenbank
| PostgreSQL / MongoDB / ...

| Architektur
| Hexagonale Architektur / Clean Architecture / ...

| Design Patterns
| Repository, Factory, Strategy, ...

| Dokumentation
| AsciiDoc (.adoc)

| Tests
| JUnit 5, AssertJ, Testcontainers
|===

== Offene Fragen

* [Was ist noch unklar?]
* [Welche Entscheidungen stehen aus?]

== Nicht-Ziele (Out of Scope)

* [Was gehört explizit NICHT zum Projekt?]

3.1.3. Beispiel: Bestellsystem

specs/story.adoc (Beispiel)
= Story: Online-Bestellsystem

== Vision

Ein Bestellsystem für einen mittelständischen Händler, das Kunden
ermöglicht, Produkte online zu bestellen und den Bestellstatus
zu verfolgen.

== Grobe Anforderungen

* Kunden können Produkte in einen Warenkorb legen
* Bestellungen werden mit Zahlungsart erfasst
* Sachbearbeiter können Bestellungen einsehen und bearbeiten
* E-Mail-Benachrichtigung bei Statusänderungen

== Technische Rahmenbedingungen

[cols="1,2"]
|===
| Aspekt | Vorgabe

| Sprache | Java 21
| Build-Tool | Gradle (Kotlin DSL)
| Framework | Spring Boot 3.3
| Datenbank | PostgreSQL 16
| Architektur | Hexagonale Architektur
| API | REST mit OpenAPI 3.0
| Dokumentation | AsciiDoc
| Tests | JUnit 5, AssertJ, Testcontainers
|===

== Offene Fragen

* Wie soll die Zahlungsabwicklung erfolgen?
* Gibt es ein bestehendes Kundensystem zur Integration?

== Nicht-Ziele

* Mobile App (nur Web)
* Internationalisierung (nur DACH-Region)

3.2. Schritt 2: Claude Code starten und Fragen beantworten

Starte Claude Code im Projektverzeichnis:

cd mein-projekt
claude

3.2.1. Initialer Prompt

Lies bitte specs/story.adoc und analysiere die Anforderungen.

Stelle mir gezielte Fragen, um:
1. Die fachlichen Anforderungen vollständig zu verstehen
2. Alle Unklarheiten zu beseitigen
3. Die technischen Entscheidungen zu validieren

Formatiere deine Fragen strukturiert nach Kategorien.
Frage NICHT nach Code oder Implementierungsdetails –
das kommt später.

3.2.2. Typische Fragen von Claude

Claude wird Fragen stellen wie:

Fachliche Fragen
  • Welche Benutzerrollen gibt es?

  • Was passiert bei Stornierung einer Bestellung?

  • Gibt es Rabattsysteme oder Gutscheine?

  • Wie werden Retouren behandelt?

Technische Fragen
  • Soll die API versioniert werden?

  • Welche Authentifizierung (JWT, OAuth2, …​)?

  • Gibt es Performance-Anforderungen (Requests/Sekunde)?

  • Soll Event Sourcing verwendet werden?

Klärungsfragen
  • Was genau bedeutet "Bestellstatus verfolgen"?

  • Wer darf Bestellungen stornieren?

  • Wie lange werden Daten aufbewahrt?

Beantworte die Fragen ausführlich. Je mehr Kontext Claude hat, desto besser werden die generierten Spezifikationen.

3.3. Schritt 3: FSD.adoc generieren lassen

Nach dem Frage-Antwort-Dialog:

Erstelle basierend auf unserer Diskussion eine vollständige
fachliche Spezifikation als specs/fsd.adoc.

Verwende folgende Struktur:
- Glossar mit Ubiquitous Language
- Akteure und ihre Berechtigungen
- Anwendungsfälle (Use Cases) mit Vor-/Nachbedingungen
- Geschäftsregeln mit IDs
- Fachliches Datenmodell (ohne technische Details)
- Akzeptanzkriterien

Die Spezifikation soll von Fachexperten lesbar sein –
keine technischen Implementierungsdetails.

3.3.1. Erwartete Struktur der fsd.adoc

Die fachliche Spezifikation verwendet User Stories als primäres Format – passend für Scrum-basierte Entwicklung an HTLs und in agilen Teams.

specs/fsd.adoc (generiert)
= Functional Specification: [Projektname]
:author: Fachbereich
:revdate: 2026-03-19
:toc: left
:sectnums:

== Einleitung

=== Zweck
[Geschäftlicher Kontext]

=== Scope
[Was ist enthalten, was nicht]

== Glossar

[cols="1,3"]
|===
| Begriff | Definition

| Bestellung
| Ein Auftrag eines Kunden über ein oder mehrere Produkte...

| Bestellposition
| Einzelne Zeile einer Bestellung mit Produkt, Menge, Preis
|===

== Akteure / Rollen

=== Kunde
* Kann Produkte suchen und bestellen
* Kann eigene Bestellungen einsehen

=== Sachbearbeiter
* Kann alle Bestellungen einsehen
* Kann Bestellstatus ändern

== Epics und User Stories

=== Epic: Bestellprozess

==== US-001: Bestellung aufgeben

[horizontal]
Story:: Als *Kunde* möchte ich *meinen Warenkorb bestellen können*,
        damit *ich die gewünschten Produkte erhalte*.
Priorität:: Hoch
Story Points:: 8
Sprint:: 1

===== Akzeptanzkriterien

[source,gherkin]
....
Given ich bin eingeloggt
  And mein Warenkorb enthält mindestens einen Artikel
When ich auf "Bestellen" klicke
  And ich eine Lieferadresse auswähle
  And ich eine Zahlungsart auswähle
  And ich die Bestellung bestätige
Then wird eine Bestellung mit Status "offen" erzeugt
  And ich erhalte eine Bestätigungs-E-Mail
  And mein Warenkorb ist geleert
....

===== Geschäftsregeln
* <<BR-001>>: Mindestbestellwert 10 EUR
* <<BR-003>>: Maximal 99 Stück pro Position

===== Tasks
* [ ] REST-Endpoint POST /api/bestellungen
* [ ] BestellungService implementieren
* [ ] E-Mail-Versand (async)
* [ ] Unit Tests
* [ ] Integration Tests

==== US-002: Bestellstatus einsehen

[horizontal]
Story:: Als *Kunde* möchte ich *den Status meiner Bestellungen sehen*,
        damit *ich weiß, wann meine Lieferung ankommt*.
Priorität:: Mittel
Story Points:: 3
Sprint:: 1

===== Akzeptanzkriterien

[source,gherkin]
....
Given ich bin eingeloggt
  And ich habe mindestens eine Bestellung
When ich meine Bestellübersicht öffne
Then sehe ich alle meine Bestellungen mit aktuellem Status
  And die Bestellungen sind nach Datum sortiert (neueste zuerst)
....

=== Epic: Bestellverwaltung

==== US-010: Bestellung stornieren

[horizontal]
Story:: Als *Sachbearbeiter* möchte ich *eine Bestellung stornieren können*,
        damit *ich auf Kundenwünsche reagieren kann*.
Priorität:: Mittel
Story Points:: 5
Sprint:: 2

// Weitere User Stories...

== Geschäftsregeln

[[BR-001]]
=== BR-001: Mindestbestellwert
Der Mindestbestellwert beträgt 10,00 EUR.

[[BR-003]]
=== BR-003: Maximale Artikelmenge
Pro Position können maximal 99 Stück bestellt werden.

== Fachliches Datenmodell

[plantuml]
....
@startuml
entity Bestellung {
  nummer: Bestellnummer
  datum: Datum
  status: Bestellstatus
  gesamtbetrag: Geldbetrag
}

entity Bestellposition {
  menge: Anzahl
  einzelpreis: Geldbetrag
}

entity Kunde {
  kundennummer: Kundennummer
  name: Personenname
}

Kunde ||--|{ Bestellung
Bestellung ||--|{ Bestellposition
@enduml
....

== Sprint-Planung

=== Sprint 1
* US-001: Bestellung aufgeben (8 SP)
* US-002: Bestellstatus einsehen (3 SP)
* Velocity: 11 SP

=== Sprint 2
* US-010: Bestellung stornieren (5 SP)
* ...
Alternative: Use-Case-Spezifikation (klassisch)

Für Projekte, die eine klassische Use-Case-Dokumentation bevorzugen:

== Anwendungsfälle

=== UC-001: Bestellung aufgeben

[horizontal]
Akteur:: Kunde
Vorbedingung:: Warenkorb enthält mindestens einen Artikel
Auslöser:: Kunde klickt "Bestellen"

==== Ablauf
1. System zeigt Bestellübersicht
2. Kunde wählt Lieferadresse
3. Kunde wählt Zahlungsart
4. Kunde bestätigt Bestellung
5. System prüft Geschäftsregeln (BR-001, BR-003)
6. System erzeugt Bestellung mit Status "offen"
7. System sendet Bestätigungs-E-Mail

==== Alternativabläufe

*4a. Mindestbestellwert nicht erreicht:*

  4a1. System zeigt Fehlermeldung
  4a2. Zurück zu Schritt 1

*5a. Zahlungsautorisierung fehlgeschlagen:*

  5a1. System zeigt Zahlungsfehler
  5a2. Zurück zu Schritt 3

==== Nachbedingung
* Bestellung existiert mit Status "offen"
* Warenkorb ist geleert
* Bestätigungs-E-Mail wurde versendet

==== Geschäftsregeln
* <<BR-001>>
* <<BR-003>>

==== Activity Diagram

[plantuml]
....
@startuml
start
:Bestellübersicht anzeigen;

:Lieferadresse auswählen;

:Zahlungsart auswählen;

:Bestellung bestätigen;

if (Mindestbestellwert erreicht?) then (ja)
  if (Zahlungsautorisierung OK?) then (ja)
    :Bestellung erzeugen;
    :Status = "offen";
    fork
      :Warenkorb leeren;
    fork again
      :Bestätigungs-E-Mail senden;
    end fork
    :Bestellbestätigung anzeigen;
  else (nein)
    :Zahlungsfehler anzeigen;
    stop
  endif
else (nein)
  :Fehlermeldung anzeigen;
  stop
endif

stop
@enduml
....
User Stories eignen sich besser für iterative Entwicklung mit Scrum. Use Cases sind nützlich für komplexe Abläufe mit vielen Alternativpfaden oder wenn eine formale Dokumentation gefordert ist.

3.4. Schritt 4: AGENTS.adoc generieren lassen

Erstelle basierend auf specs/fsd.adoc und unseren technischen
Rahmenbedingungen eine technische Spezifikation als agents.adoc
im Projektstamm.

Diese Datei dient als Anweisung für dich (Claude Code) bei der
Implementierung. Enthalten sein soll:

- Technologie-Stack mit Versionen
- Architekturprinzipien und Package-Struktur
- Coding-Konventionen
- Mapping von FSD-Elementen zu Code-Artefakten
- Test-Strategie
- Workflow-Anweisungen für die Implementierung

Wichtig: Die fsd.adoc bleibt die Single Source of Truth für
fachliche Anforderungen.

3.4.1. Erwartete Struktur der agents.adoc

agents.adoc (generiert)
= Technische Spezifikation: [Projektname]
:revdate: 2026-03-19

== Fachliche Spezifikation

IMPORTANT: Die fachlichen Anforderungen sind in `specs/fsd.adoc` definiert.
Diese Datei ist die Single Source of Truth für das WAS.

== Technologie-Stack

[cols="1,2"]
|===
| Komponente | Version/Details

| Java | 25 (LTS)
| Build | Maven 3.9.x
| Framework | Quarkus 3.x
| Datenbank | PostgreSQL 18
| ORM | Hibernate ORM mit Panache
| Migration | Flyway
| API-Docs | SmallRye OpenAPI
| JSON | Jackson
|===

== Architektur

=== Layer-Architektur

....
src/main/java/at/htl/projekt/
├── entity/                # JPA Entities
│   ├── Bestellung.java
│   └── Bestellposition.java
├── repository/            # Data Access (Panache)
│   └── BestellungRepository.java
├── service/               # Business Logic
│   └── BestellungService.java
├── boundary/              # REST Resources
│   └── BestellungResource.java
└── dto/                   # Data Transfer Objects
    ├── BestellungDTO.java
    └── CreateBestellungDTO.java
....

=== Schichten-Regeln

[IMPORTANT]
====
* `boundary/` → ruft `service/` auf
* `service/` → ruft `repository/` auf, enthält Geschäftslogik
* `repository/` → Datenzugriff via Panache
* `entity/` → JPA-Entities mit Validierung
* `dto/` → Für REST-Schnittstellen, keine Entities nach außen
====

== Coding-Konventionen

=== Allgemein
* Package-Prefix: `at.htl.projekt`
* Keine Wildcards in Imports
* Records für DTOs
* Optional statt null-Returns

=== Naming
* Klassen: PascalCase
* Methoden/Variablen: camelCase
* Konstanten: SCREAMING_SNAKE_CASE
* Packages: lowercase
* REST-Resources: `*Resource.java`
* Services: `*Service.java`
* Repositories: `*Repository.java`

=== Quarkus-spezifisch
* CDI für Dependency Injection (`@Inject`, `@ApplicationScoped`)
* Panache Active Record oder Repository Pattern
* `@Transactional` auf Service-Methoden
* `application.properties` für Konfiguration

== Mapping: FSD → Code

[cols="1,2,2"]
|===
| FSD-Element | Code-Artefakt | Beispiel

| Glossar-Begriff
| Entity in `entity/`
| `Bestellung.java`

| User Story
| Service-Methode + REST-Endpoint
| `BestellungService.aufgeben()`

| Geschäftsregel
| Validierung in Entity oder Service
| `Bestellung.validiereMindestwert()`

| Akteur
| Security Role
| `@RolesAllowed("kunde")`
|===

== Test-Strategie

[cols="1,2,2"]
|===
| Ebene | Scope | Technologie

| Unit Tests
| Services, Entities
| JUnit 5, AssertJ, Mockito

| Integration Tests
| Repository, REST
| @QuarkusTest, Testcontainers

| API Tests
| REST-Endpoints
| REST Assured

| Acceptance Tests
| User Stories End-to-End
| Cucumber (optional)
|===

== Workflow für Claude Code

=== Bei neuen User Stories

1. `specs/fsd.adoc` konsultieren
2. Relevante User Story identifizieren
3. Entity erstellen/erweitern (falls nötig)
4. Repository erstellen/erweitern
5. Service-Methode implementieren
6. REST-Resource implementieren
7. Tests auf allen Ebenen

=== Regeln

* Bei Unklarheiten: *nachfragen*, nicht raten
* Fachbegriffe exakt aus Glossar übernehmen
* Keine Änderungen an der Fachlichkeit ohne Rücksprache
* Commits nach jeder logischen Einheit

== Prompts für häufige Aufgaben

=== Neue User Story implementieren

[source]
....
Implementiere US-XXX aus specs/fsd.adoc.
Erstelle Entity, Repository, Service und Resource.
Schreibe Tests für jede Schicht.
....

=== Code Review anfordern

[source]
....
Prüfe [Datei/Package] auf:
- Einhaltung der Schichten-Architektur
- Clean Code und SOLID
- Vollständigkeit der Tests
- Übereinstimmung mit fsd.adoc
....

3.5. Schritt 5: CLAUDE.md als Einstiegspunkt erstellen

Claude Code liest automatisch die CLAUDE.md im Projektstamm. Diese Datei dient als Einstiegspunkt und verweist auf die detaillierten .adoc-Spezifikationen:

CLAUDE.md
# Projektanweisungen

## Wichtige Dateien

Lies vor jeder Aufgabe folgende Spezifikationen:

- `specs/fsd.adoc` – Fachliche Spezifikation (User Stories, Glossar, Regeln)
- `agents.adoc` – Technische Vorgaben (Stack, Architektur, Konventionen)
- `specs/chats.adoc` – Bisherige Entscheidungen und Kontext

## Regeln

- Fachbegriffe exakt aus dem Glossar in fsd.adoc verwenden
- Bei Unklarheiten: **nachfragen**, nicht raten
- Dokumentation in AsciiDoc (.adoc) erstellen
- Commits nach jeder logischen Einheit

## Technologie-Stack

- Java 25, Quarkus 3.x, PostgreSQL 18
- Maven als Build-Tool
- Layer-Architektur (entity → repository → service → boundary)

## Schnellstart

```bash
# Projekt bauen
./mvnw clean compile

# Tests ausführen
./mvnw test

# Dev-Modus starten
./mvnw quarkus:dev
```

Warum CLAUDE.md zusätzlich zu agents.adoc?

  • CLAUDE.md wird von Claude Code automatisch gelesen – keine manuelle Anweisung nötig

  • agents.adoc enthält die ausführlichen technischen Details

  • Die .md-Datei ist kurz und verweist auf die .adoc-Dateien für Details

3.6. Schritt 6: Implementierung starten

Mit den generierten Spezifikationen kann die Implementierung beginnen:

# Claude Code starten
claude

# Initialisierung
/init
Verwende den Plan Mode (/plan) für komplexe Implementierungen – Claude zeigt dann zuerst einen Umsetzungsplan zur Bestätigung. Siehe Plan Mode in den Best Practices.

3.6.1. Beispiel-Prompts für die Implementierung

Lies agents.adoc und specs/fsd.adoc.
Erstelle die Grundstruktur des Projekts gemäß der
definierten Package-Struktur.
/plan Implementiere US-001 (Bestellung aufgeben) aus specs/fsd.adoc.
Befolge die Architekturprinzipien aus agents.adoc.
Beginne mit der Entity und arbeite dich nach außen vor.
/plan Erstelle Tests für US-001 basierend auf den Akzeptanzkriterien
in specs/fsd.adoc. Jedes Given/When/Then soll ein Testfall sein.

Akzeptanzkriterien als Testgrundlage

Die Akzeptanzkriterien in der FSD (Gherkin-Format: Given/When/Then) sind die ideale Vorlage für Tests:

  • Given → Test-Setup (Vorbedingungen)

  • When → Aktion ausführen (Methodenaufruf)

  • Then → Assertions (Erwartetes Ergebnis)

So stellst du sicher, dass die Tests genau das prüfen, was fachlich gefordert ist.

4. Best Practices

4.1. Modellauswahl

Die Wahl des Backend-Modells beeinflusst die Ergebnisqualität erheblich. Die meisten KI-Coding-Tools erlauben den Wechsel über /model oder in den Einstellungen.

Leistungsfähigere Modelle liefern bessere Ergebnisse bei:

  • Komplexen Architekturentscheidungen

  • Mehrstufigen Refactorings

  • Verständnis großer Codebasen

  • Konsistenz über längere Sessions

Empfehlung: Für agentisches Programmieren die jeweils stärksten verfügbaren Modelle verwenden (z.B. Claude Opus, GPT-4, Gemini Ultra).

Table 1. Modelle im Vergleich (Stand 2026)
Anbieter Top-Modell Stärken

Anthropic

Claude Opus

Reasoning, lange Kontexte, Code-Qualität

OpenAI

GPT-4

Breites Wissen, Tool-Integration

Google

Gemini Ultra

Multimodal, schnelle Iteration

Mistral

Mistral Large

Open-Source-nah, selbst hostbar

Bei Budget-Einschränkungen: Für einfache Tasks (Formatierung, kleine Fixes) reichen kleinere Modelle. Für Architektur und komplexe Features das beste verfügbare Modell wählen.

4.2. Sprache beim Prompten

Ein verbreiteter Mythos: Englische Prompts sparen Tokens. Die Ersparnis ist jedoch minimal und lohnt sich praktisch nicht.

Table 2. Token-Verbrauch im Vergleich
Komponente Beispiel Anteil

Dein Prompt

20-50 Tokens

< 1%

Gelesene Dateien

10.000-30.000 Tokens

~50%

Claudes Antwort + Code

10.000-30.000 Tokens

~50%

Die Sprache des Prompts beeinflusst den Gesamtverbrauch kaum – der Code und Kontext dominieren.

Schreibe in der Sprache, in der du am präzisesten formulieren kannst.

  • Unklare Prompts → Rückfragen → mehr Tokens

  • Missverständnisse → Korrekturen → mehr Tokens

  • Muttersprache → präziser → weniger Iterationen

Für Projekte mit deutschsprachiger Fachlichkeit (Glossar, User Stories, Team) ist Deutsch die bessere Wahl. Die KI versteht beide Sprachen gleich gut.

4.3. Plan Mode

Der Plan Mode ergänzt unseren Workflow auf Task-Ebene: Bevor Claude Code ausführt, zeigt er einen Umsetzungsplan und wartet auf Bestätigung.

4.3.1. Aktivierung

# Beim Start
claude --plan "Implementiere US-001"

# Oder interaktiv
/plan Implementiere US-001 aus specs/fsd.adoc

4.3.2. Vorteile

Ohne Plan Mode Mit Plan Mode

Claude legt sofort los

Claude zeigt erst den Plan

Fehler fallen spät auf

Fehler werden früh erkannt

Schwer zu korrigieren

Einfach anzupassen vor Umsetzung

Mehr Tokens bei Korrekturen

Weniger Iterationen

4.3.3. Zusammenspiel mit unserem Workflow

Ebene Planungsmethode

Projekt

Unser Workflow (Story → FSD → Agents)

Task

Plan Mode (/plan)

Unser Workflow trennt Planung von Implementierung auf Projektebene. Der Plan Mode macht dasselbe für einzelne Tasks – beides zusammen ergibt maximale Kontrolle.

Besonders bei komplexen User Stories oder Refactorings /plan verwenden. Bei einfachen Fixes (Typos, kleine Änderungen) ist der Plan Mode optional.

4.4. Kontext-Management

Das wichtigste Ressource in Claude Code ist das Kontext-Fenster. Es füllt sich schnell mit Dateiinhalten und Command-Outputs.

  • /compact bei ~50% Kontextfüllung ausführen

  • /clear beim Wechsel zu neuen Aufgaben

  • Kleine, fokussierte Prompts statt Mega-Anfragen

Kontextfüllung anzeigen und überwachen

Mit /context siehst du die aktuelle Kontextnutzung:

/context

Ausgabe:

Context usage: 45,231 / 128,000 tokens (35%)

Übersicht der relevanten Befehle:

Befehl Funktion

/context

Zeigt aktuelle Nutzung

/usage

Zeigt Plan-Limits und Verbrauch

/compact

Komprimiert den Kontext

/clear

Löscht den Kontext komplett

Permanente Statuszeile einrichten:

In /config oder in ~/.claude/settings.json:

{
  "statusLine": "context"
}

Dann siehst du die Kontextfüllung dauerhaft am unteren Bildschirmrand.

Faustregel:

  • < 50%: Weiterarbeiten

  • ~50%: /compact ausführen (Claude fasst bisherigen Kontext zusammen)

  • > 70%: Dringend komprimieren, Performance leidet

  • Neue Aufgabe: /clear und frisch starten

4.5. Thinking-Modi

Claude Code unterstützt verschiedene Denk-Intensitäten:

Keyword Verwendung

think

Standard-Überlegung

think hard

Komplexere Probleme

think harder

Architektur-Entscheidungen

ultrathink

Maximale Analyse (z.B. Security-Review)

Beispiel
Ultrathink: Analysiere die Sicherheit unserer
Authentifizierungs-Implementierung.

4.6. Subagents für spezialisierte Aufgaben

Für komplexe Reviews können dedizierte Subagents definiert werden:

.claude/agents/security-reviewer.md
---
name: security-reviewer
description: Reviews code for security vulnerabilities
tools: Read, Grep, Glob, Bash
model: opus
---

Du bist ein Senior Security Engineer. Prüfe Code auf:
- Injection-Schwachstellen (SQL, XSS, Command Injection)
- Authentifizierungs- und Autorisierungsfehler
- Secrets oder Credentials im Code
- Unsichere Datenverarbeitung

Gib konkrete Zeilenreferenzen an.

4.7. Chat-Protokollierung mit chats.adoc

Alle Prompts werden in chats.adoc protokolliert, bevor sie nach Claude Code kopiert werden. Vorteile:

Vorteil Beschreibung

Reproduzierbar

Kontext kann jederzeit neu aufgebaut werden

Dokumentation

Entscheidungen sind nachvollziehbar

Lerneffekt

Gute Prompts können wiederverwendet werden

Teamfähig

Kollegen sehen, wie das Projekt entstanden ist

4.7.1. Workflow

  1. Prompt in chats.adoc schreiben

  2. Prompt nach Claude Code kopieren

  3. Weiterarbeiten – Claudes Antworten müssen nicht protokolliert werden

4.7.2. Wichtig: Selbsterklärende Prompts

Bei Antworten auf Claudes Fragen immer den Kontext wiederholen. Nach /compact oder beim Neuaufbau des Kontexts fehlt sonst der Bezug.

❌ Schlecht ✅ Gut
Ja
Ja, verwende das Builder Pattern
für die Bestellung-Entity.

4.7.3. Vorlage: chats.adoc

specs/chats.adoc
= Chat-Protokoll: [Projektname]

== Session 1

Lies specs/story.adoc und stelle mir Fragen zur Klärung
der fachlichen Anforderungen.

'''

Ja, es gibt drei Rollen: Kunde, Sachbearbeiter, Admin

'''

Ja, verwende das Builder Pattern für die Bestellung-Entity

'''

Nein, kein Event Sourcing – klassisches CRUD reicht

'''

Erstelle basierend auf unserer Diskussion eine vollständige
fachliche Spezifikation als specs/fsd.adoc.

== Session 2

Implementiere US-001 aus specs/fsd.adoc.
Erstelle Entity, Repository, Service und Resource.
Schreibe Tests für jede Schicht.

'''

Nein, die Validierung soll im Service erfolgen, nicht in der Entity.
Claudes Antworten werden nicht protokolliert – sie können bei Bedarf aus der Claude Code Session-History (/history) rekonstruiert werden.

4.8. Dateien trennen statt verschmelzen

Datei Zweck Änderungshäufigkeit

CLAUDE.md

Einstiegspunkt für Claude Code

Selten (nur bei Strukturänderungen)

story.adoc

Ursprüngliche Vision

Einmalig

specs/fsd.adoc

Fachliche Wahrheit

Bei Scope-Änderungen

specs/chats.adoc

Prompt-Protokoll und Entscheidungen

Jede Session

agents.adoc

Technische Anweisungen (Details)

Bei Tech-Entscheidungen

.claude/ Verzeichnis

Agents, Commands, Hooks

Bei Workflow-Optimierung

5. Anhang

5.1. Verzeichnisstruktur (Komplett)

mein-projekt/
├── CLAUDE.md                      # Einstiegspunkt für Claude Code
├── agents.adoc                    # Technische Spec (Details)
├── specs/
│   ├── story.adoc                 # Ursprüngliche Vision
│   ├── fsd.adoc                   # Fachliche Spezifikation
│   └── chats.adoc                 # Prompt-Protokoll
├── .claude/
│   ├── agents/                    # Spezialisierte Subagents
│   ├── commands/                  # Eigene Slash-Commands
│   └── settings.json              # Projekteinstellungen
├── src/
│   ├── main/
│   │   ├── java/at/htl/projekt/
│   │   │   ├── entity/            # JPA Entities
│   │   │   ├── repository/        # Panache Repositories
│   │   │   ├── service/           # Business Logic
│   │   │   ├── boundary/          # REST Resources
│   │   │   └── dto/               # Data Transfer Objects
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       └── java/at/htl/projekt/
├── docs/
│   ├── architecture.adoc          # Architektur-Entscheidungen
│   └── api.adoc                   # API-Dokumentation
├── pom.xml                        # Maven Build
└── README.adoc

5.2. Nützliche Claude Code Befehle

Befehl Funktion

/init

Generiert initiale CLAUDE.md

/compact

Komprimiert Kontext-Fenster

/clear

Löscht aktuellen Kontext

/config

Öffnet Konfiguration

/model

Wechselt das Modell

/context

Zeigt Kontext-Nutzung

/usage

Zeigt Plan-Limits