CodeGuard

Guardrails für KI-generierten Code

Wie CodeGuard sich in die Build-Fix-Loop von Cursor, Claude Code, Copilot und Aider einklinkt und KI-generierten Code in eure Konventionen zwingt.

Guardrails für KI-generierten Code

KI-Assistenten generieren Code, der plausibel aussieht, aber eure Konventionen nicht zuverlässig kennt. Cursor, Claude Code, Copilot und Aider haben kein Gedächtnis für eure Architektur-Entscheidungen über die Session hinaus. Sie ignorieren lange Convention-Dokumente, sobald das Context-Window enger wird, und produzieren Layering-Verstöße jede Stunde aufs Neue.

CodeGuard hängt sich an drei Stellen in den AI-Workflow ein und zwingt die KI in eure Regeln.

Die Build-Fix-Loop

Agentic AI-Tools haben heute einen eingebauten Zyklus aus Code-Generierung, Test-Run und Selbst-Korrektur. CodeGuard wird darin zum Konventions-Wächter:

AI generiert Code
  -> codeguard analyze MySolution.sln --fail-on error
    -> Finding: "Controller calls EF directly. Use repository pattern."
      -> AI liest @recommendation
        -> AI fixt es selbst
          -> grüner Build

Der @recommendation-Header in jeder Regel wird zum Fix-Prompt für die KI. Eure Devs schreiben einmal "Inject TimeProvider via constructor", und ab da fixt die KI das selbst, jedes Mal, bis ans Ende eurer Vertragslaufzeit.

Eure DSL-Regeln als ausführbare Team-Spezifikation

Was bisher in der README oder im Tribal Knowledge stand, wird zur ausführbaren Datei im Repo. Die KI sieht beim nächsten Compose-Schritt nicht nur den existierenden Code, sondern auch die .cgr-Files, die die Regeln formulieren. Das ist deutlich verlässlicher als ein langes Convention-Dokument, das im Context-Window ausläuft.

Beispiel: Eure Team-Konvention "Wir nutzen IClock statt TimeProvider, weil wir noch nicht auf .NET 8 sind" muss die KI sonst aus existierendem Code ableiten. Mit CodeGuard schreibt ihr eine Regel:

@name "Use IClock instead of TimeProvider"
@severity error
@category "Team-Conventions"
@recommendation "Inject IClock via constructor and call _clock.UtcNow instead of TimeProvider.System.GetUtcNow()"

from m in Methods
where m.CalledMethods.Any(c => c.FullName.Contains("TimeProvider"))
select m

Die KI bekommt beim nächsten Versuch eine klare Anweisung in der Recommendation und kann den Fix in einem Schritt erzeugen.

PR-Reviews werden inhaltlich

Wenn KI achtzig Prozent eures Codes generiert, soll euer PR-Review nicht mehr über Naming-Konventionen diskutieren. CodeGuard räumt die mechanischen Findings weg, bevor der PR offen ist. Eure menschliche Aufmerksamkeit bleibt für Logik, Architektur-Substanz und Edge-Cases übrig.

Recommendation-Texte für KI-Loops schreiben

Eine @recommendation ist nicht nur ein Hinweis für eure Devs, sondern auch der Fix-Prompt für die KI. Drei Faustregeln für gute Recommendations.

Konkret statt vage

@recommendation "Fix this"

Das hilft weder Mensch noch KI. Besser:

@recommendation "Add 'CancellationToken cancellationToken = default' as the last parameter"

Code-Snippets sind willkommen

@recommendation "Inject TimeProvider via constructor and call _time.GetUtcNow() instead of DateTime.UtcNow"

Die KI baut die Recommendation als wörtlichen Hinweis in den Fix ein und generiert exakt das, was ihr beschrieben habt.

Hinweise auf etablierte Pattern

@recommendation "Move EF access into a repository class under Acme.Infrastructure.Repositories and inject it via the constructor"

Konkrete Namespace-Vorgaben helfen der KI, den Code an der richtigen Stelle abzulegen.

Setup für die gängigen Tools

Cursor

In .cursorrules:

After every change, run: codeguard analyze MySolution.sln --fail-on error
Fix any findings before considering the change complete. Read the
@recommendation field of each finding for guidance.

Claude Code

In CLAUDE.md:

## Lint-Loop
After making changes, always run `codeguard analyze MySolution.sln --fail-on error`
and fix any errors before reporting completion. The @recommendation field
of each finding tells you how to fix it.

GitHub Copilot mit Agent-Mode

Im Agent-System-Prompt:

Run `codeguard analyze MySolution.sln --fail-on error` after each
change. Findings under 'error' severity block completion. Read the
@recommendation field for fix guidance.

Aider

In .aider.conf.yml:

lint-cmd:
  cs: codeguard analyze MySolution.sln --fail-on error

Aider ruft die lint-cmd nach jeder Code-Änderung auf und gibt das Ergebnis der KI für den nächsten Iterations-Schritt zurück.

Performance in AI-Loops

Eine Analyse mit CodeGuard dauert je nach Solution-Größe wenige Sekunden bis eine Minute. In einer AI-Loop, in der die KI ohnehin nach jeder Code-Änderung den Build laufen lässt, fällt das nicht ins Gewicht.

Weiterführend