Konfiguration der Arbeitsumgebung zum Eliminieren von banalem Boilerplate-Code durch AI-Agenten
TuBrief 편집팀
2026년 7월 24일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
Sobald man AI-Agenten in eine reale Entwicklungsumgebung einbindet, offenbaren sich schnell ihre Grenzen. Ohne den Domänenkontext zu kennen, neigen sie dazu, mechanisch Factory-Muster zu übernutzen oder endlos nutzlose Utility-Funktionen zu generieren. Laut einem von GitClear im Jahr 2024 veröffentlichten Analysebericht über 623 Millionen Commit-Zeilen stieg die Code-Duplizierung nach der Verbreitung von AI-Tools um 81 %, während der Anteil von Refactorings zum Bereinigen bestehenden Codes von 25 % auf unter 10 % einbrach. Aufgrund des Recency Bias im Kontextfenster weichen Agenten, um Risiken zu vermeiden, immer wieder auf die gängigsten Standardmuster aus ihren Trainingsdaten aus. Man muss Fehlfunktionen des Agenten unterdrücken, indem man die vom Team geteilten Architekturregeln und Synchronisationslogiken explizit in Kontextdateien festlegt.
Um die je nach Entwicklungstool unterschiedlichen Anweisungen zu steuern, sollte man als Single Source of Truth zuerst eine AGENTS.md im Projekt-Root anlegen. Tools wie Cursor und Claude Code lesen diese Regeln. Eine einzelne .cursorrules-Datei ist längst veraltet. Teilen Sie die Regeln stattdessen in MDC-Dateien im Verzeichnis .cursor/rules/ auf und rufen Sie in der Claude Code-Umgebung @AGENTS.md innerhalb von CLAUDE.md auf, um ein Verwässern der Regeln zu verhindern.
apps/api/src/common/dto.services/shared/uow.`
Wenn die Gesamtlänge des Kontexts 800 Zeilen bzw. etwa 2.000 Token überschreitet, beginnt der Agent, die weiter oben festgelegten Einschränkungen zu ignorieren. In der AGENTS.md sollten nur absolut unverhandelbare Verbote verbleiben, während detaillierte Architektur-Entscheidungsdokumente (ADRs) in das Verzeichnis docs/context/ ausgelagert werden müssen.
AGENTS.md im Projekt-Root und tragen Sie Bedingungen wie das Verbot von Single-Implementation-Interfaces und defensiven Try-Catch-Blöcken ein..cursor/rules/backend-constraints.mdc die Zieldateipfade (globs) und die YAML Frontmatter-Einschränkungen.@AGENTS.md in die CLAUDE.md ein, um die Umgebungen abzugleichen.Hinter dem plausibel wirkenden Code eines Agenten verbergen sich oft Fallstricke. Laut einer Studie von Veracode aus dem Jahr 2024 wurden in 45 % des von AI vorgeschlagenen Codes Sicherheitslücken auf OWASP Top 10-Niveau gefunden. Das Verstecken von Fehlern durch das laxe Umhüllen potenziell fehlerhafter Logik mit Try-Catch und dem anschließenden Werfen leerer Objekte oder Null-Werte kommt bei AI-generiertem Code 47 % häufiger vor als bei menschlichen Entwicklern. Auch das Vergessen von optimistischem Sperren bei Read-Modify-Write-Operationen oder das N+1-Problem durch wiederholte DB-Aufrufe innerhalb von Schleifen treten regelmäßig auf.
| Verifizierungsbereich | Detaillierte Prüfpunkte | Risikomuster & Agenten-Fallstricke | Kriterien für Merge-Blockade |
|---|---|---|---|
| Sicherheitslücken | Verwendung von Parameterized Queries, Mandantenisolierung, Prüfung nicht autorisierter Pakete | SQL-Injection durch String-Verkettung, Aufruf unprüfter Pakete durch Halluzinationen | Fehlende Eingabevalidierung, Blockade bei Hinzufügen externer Abhängigkeiten unklarer Herkunft |
| Performance-Engpässe | ORM Lazy Loading, Verschachtelte Schleifen im Hot Path, DB-Indizes | Abfrage einzelner Entitäten innerhalb von Schleifen, Filtern ganzer Tabellen im Speicher | Blockade bei DB- und externen API-Aufrufen in Schleifen, Blockade bei fehlender Paginierung |
| Typsicherheit | Strict Type-Prüfung, Boundary-Ausnahmebehandlung, Nebenläufigkeitssteuerung | Exzessives as any, Fehlerversteckung durch leere Catch-Blöcke |
Blockade bei Existenz von any und unbedachtem as-Casting, Blockade bei Catch-Blöcken ohne Logging |
Testcode, den der Agent schreibt, beschränkt sich oft auf tautologische Tests, die den Implementierungscode lediglich eins-zu-eins kopieren. Solche Tests können reale fachliche Defekte niemals aufdecken. Reglementierungen wie "Wenn bereits eine Utility-Funktion existiert, muss die vom Agenten neu erstellte Utility gelöscht und der bestehende Code wiederverwendet werden" müssen streng durchgesetzt werden.
any in die PR-Vorlage auf.as any oder ein await innerhalb einer Schleife erkannt wird.Wenn man komplexe Abrechnungslogiken oder Zustandsautomaten-basierte Bestellabwicklungen in einen einzigen Prompt zwängt, gerät der Agent schnell in eine Tool-Aufrufloop oder liefert nur oberflächlichen Hüllencode. Das liegt daran, dass sich die Token-Zuweisungsreihenfolge verheddert, wenn versucht wird, Schema-Design, API-Schnittstellen, Ausnahmebehandlung und Geschäftsregeln auf einmal zu verarbeiten.
`
[Schritt 1: Datenmodellierung] -> DB-Entitäten, Zod-Schemas erstellen
│
▼ (Ausgabeergebnis als Kontext übergeben)
[Schritt 2: Schnittstellendefinition] -> API-DTOs, Custom Errors, Servicesignaturen definieren
│
▼ (Ausgabeergebnisse aus Schritt 1+2 als Kontext übergeben)
[Schritt 3: Implementierung der Geschäftslogik] -> Transaktionen, Zustandsübergänge, Nebenläufigkeitssteuerung fertigstellen
`
Diesen Prozess manuell hin und her zu kopieren, ist ziemlich umständlich. Es ist besser, ein CLI-Automatisierungsskript (scripts/agent-decomposed-build.ts) zu schreiben, das die Ergebnisse der vorherigen Stufe direkt als Eingabekontext für die nächste Stufe verknüpft.
`typescript
import { execSync } from 'child_process';
import * as fs from 'fs';
interface TaskPipeline {
featureName: string;
stage1Prompt: string;
stage2Prompt: string;
stage3Prompt: string;
}
async function runDecomposedAgentPipeline(pipeline: TaskPipeline) {
console.log([Stage 1] Executing Data Modeling for ${pipeline.featureName}...);
const stage1Output = execSync(claude --print "${pipeline.stage1Prompt}").toString();
fs.writeFileSync(./tmp/${pipeline.featureName}_stage1.ts, stage1Output);
console.log([Stage 2] Executing Interface Definition...);
const stage2InputPrompt = ${pipeline.stage2Prompt}\n\nContext Models:\n${stage1Output};
const stage2Output = execSync(claude --print "${stage2InputPrompt}").toString();
fs.writeFileSync(./tmp/${pipeline.featureName}_stage2.ts, stage2Output);
console.log([Stage 3] Executing Business Logic Implementation...);
const stage3InputPrompt = ${pipeline.stage3Prompt}\n\nContext Models:\n${stage1Output}\n\nContext Contracts:\n${stage2Output};
const stage3Output = execSync(claude --print "${stage3InputPrompt}").toString();
fs.writeFileSync(./src/services/${pipeline.featureName}.service.ts, stage3Output);
console.log([Pipeline Complete] Business logic generated cleanly without cognitive stagnation.);
}
`
scripts/agent-decomposed-build.ts, um die vorherigen Ausgaben so zu verbinden, dass sie in den Kontext des nächsten Prompts einfließen.Je mehr man AI-Coding-Tools nutzt, desto mehr häuft sich "Write-Only-Code" an, dem die Begründung fehlt, warum er so geschrieben wurde. Code, in dem die Trade-Offs von Architekturentscheidungen nicht dokumentiert sind, wird später zu einer Last, die für Menschen schwer anzupassen ist. Man muss in der AGENTS.md erzwingen, dass der Agent beim Erstellen von Code TSDoc-Standardkommentare direkt im Quellcode hinterlässt.
`typescript
/**
`
Um zu verhindern, dass die Agenteneinstellungen zwischen verschiedenen Entwicklern abweichen, sollte man AGENTS.md als Single Source of Truth verwalten und beim Commit ein Skript (tools/sync-agent-rules.ts) ausführen, das sie mit CLAUDE.md und .cursor/rules/global.mdc synchronisiert.
`typescript
import * as fs from 'fs';
import * as path from 'path';
const AGENTS_MD_PATH = path.join(__dirname, '../AGENTS.md');
const CLAUDE_MD_PATH = path.join(__dirname, '../CLAUDE.md');
const CURSOR_RULE_PATH = path.join(__dirname, '../.cursor/rules/global.mdc');
function syncRules() {
if (!fs.existsSync(AGENTS_MD_PATH)) {
console.error('Error: AGENTS.md does not exist.');
process.exit(1);
}
const baseRules = fs.readFileSync(AGENTS_MD_PATH, 'utf-8');
const claudeContent = # AUTOMATICALLY GENERATED FROM AGENTS.md - DO NOT EDIT DIRECTLY\n\n${baseRules};
fs.writeFileSync(CLAUDE_MD_PATH, claudeContent);
const mdcHeader = ---\ndescription: Global Agent Rule Sync\nglobs: **/*\nalwaysApply: true\n---\n\n;
fs.writeFileSync(CURSOR_RULE_PATH, ${mdcHeader}${baseRules});
console.log('Successfully synchronized AGENTS.md to CLAUDE.md and Cursor MDC rules.');
}
syncRules();
`