uc-codeguard ist ein Sicherheits- und Qualitäts-Plugin für Claude Code: Es verhindert, dass Geheimnisse wie API-Keys oder Passwörter versehentlich nach GitHub gepusht werden, und prüft den geschriebenen Code zusätzlich auf Schwachstellen und unsaubere Stellen.
Ein Claude-Code-Plugin, das den offiziellen security-guidance-Plugin ergänzt — kein Ersatz.
Drei gezielte Lücken werden gefüllt: ein harter Push-Türsteher, ein In-Session-Qualitätsreview und vorbereitete UC-Regeldateien.
📘 Komplette Schritt-für-Schritt-Anleitung (inkl. Installation des offiziellen
security-guidance-Plugins): INSTALLATION.md — empfohlener Einstieg, auch für Nicht-Entwickler.
Das offizielle security-guidance-Plugin von Anthropic bietet bereits Per-Edit-Mustersuche und KI-gestützte Sicherheitsreviews. Es blockiert jedoch nie Push/Deploy-Vorgänge.
uc-codeguard schließt drei dokumentierte Lücken:
| Lücke | Was uc-codeguard liefert |
|---|---|
| Kein hartes Blockieren | Deterministischer pre-push-Türsteher |
| Keine Code-Qualitätsprüfung | In-Session Dead-Code/Duplikate/Optimierungsreview |
| Keine UC-Stack-Regeln | Fertige Regel-Vorlagen für Next.js, Astro, WordPress/PHP, Vercel/Supabase |
| Ebene | Was | Wie | Token-Kosten | Abschalten |
|---|---|---|---|---|
| Ebene 1 | In-Session Qualitätsreview | Stop-Hook → frischer Claude-Aufruf analysiert Git-Diff auf toten Code, ungenutzte Importe, Duplikate und Optimierungen | Ja (ein Call pro Session) | UC_QUALITY_REVIEW=0 setzen |
| Ebene 2 | UC-Regeldateien | Werden vom offiziellen Plugin automatisch mitgelesen, wenn sie unter .claude/ im Projekt liegen |
Nein (kein eigener Modellaufruf) | Dateien aus .claude/ entfernen |
| Ebene 3 | git pre-push-Türsteher | Deterministischer Regex-Scan der zu pushenden Commits; Geheimnis gefunden = Push blockiert (Exit-Code ≠ 0) | Nein (nur git + grep) |
git push --no-verify |
Ebene 1 und 3 sind vollständig entkoppelt: Fällt die Claude-CLI aus, läuft der Push-Türsteher trotzdem. Fällt git weg, läuft der Session-Review trotzdem.
- Claude Code (CLI)
- Ebene 1: Python 3.8+ und die
claude-CLI müssen im PATH liegen - Ebene 2: Das offizielle Plugin muss aktiv sein (Installation siehe unten)
- Ebene 3: Ein git-Repository im Projektverzeichnis
/plugin install security-guidance@claude-plugins-official
/plugin marketplace add unitedcreation/uc-codeguard
/plugin install uc-codeguard@uc-codeguard
/uc-secure-init
Der Installer:
- Prüft, ob das Verzeichnis ein git-Repository ist (Ebene 3 braucht git)
- Installiert den pre-push-Hook in
.git/hooks/pre-push— bestehende Hooks werden ergänzt, nie überschrieben - Kopiert
security-patterns.yamlundclaude-security-guidance.mdnach.claude/— existierende Dateien werden nicht überschrieben, stattdessen als.uc-codeguard-Kopie abgelegt - Ergänzt
.gitignoreum transiente Dateien - Gibt eine Zusammenfassung aus
Nach jeder Claude-Session (Ebene 1):
Der Stop-Hook ruft quality_review.py auf. Das Script holt git diff HEAD, schickt den Diff an einen frischen Claude-Aufruf und gibt Befunde direkt in der Session aus. Wenn nichts zu beanstanden ist, erscheint nichts. Dieser Review blockiert niemals.
Bei jedem git push (Ebene 3):
Der pre-push-Hook ruft secret_scan.sh mit dem exakten Commit-Range auf, der gepusht wird (neue Branch: alle Commits; Update: nur die neuen Commits). Findet der Scan ein mögliches Geheimnis, wird der Push mit einer Erklärung blockiert.
Bei jedem Claude-Code-Edit (Ebene 2):
Das offizielle Plugin liest .claude/security-patterns.yaml und .claude/claude-security-guidance.md und wendet UC-spezifische Muster an.
Der Scanner prüft hinzugefügte Zeilen in den zu pushenden Commits auf diese Muster:
- Stripe Live/Test-Keys (
sk_live_,sk_test_) - AWS Access Keys (
AKIA…) - Google API Keys (
AIza…) - GitHub-Tokens und PATs (
ghp_,gho_, etc.) - Slack-Tokens (
xox…) - PEM-Privatschlüssel-Blöcke
- Generische Secret-Zuweisungen (
password = "…",api_key = "…"u.ä.)
Offensichtliche Platzhalter werden ignoriert: process.env, import.meta.env, os.environ, getenv, your_, xxx, changeme, example, <…> (Template-Variablen).
Wenn der Scan einen False Positive liefert oder ein bewusster Ausnahmefall vorliegt:
git push --no-verifyscripts/secret_scan.sh kann auch direkt aufgerufen werden:
# Scannt uncommitted working-tree changes (git diff HEAD)
bash scripts/secret_scan.sh
# Scannt einen expliziten Commit-Range
bash scripts/secret_scan.sh abc123..def456Wichtig: Ohne Argument scannt das Script HEAD — das entspricht git diff HEAD und prüft damit die noch nicht commiteten Änderungen gegenüber dem letzten Commit. Der pre-push-Hook übergibt immer einen expliziten Range (z.B. <remote-sha>..<local-sha>), sodass nur die tatsächlich gepushten Commits geprüft werden.
Ebene 1 (Qualitätsreview) dauerhaft deaktivieren:
export UC_QUALITY_REVIEW=0In .env oder Shell-Profil eintragen, um es dauerhaft zu deaktivieren.
Ebene 2 (UC-Regeln) deaktivieren:
Die Dateien .claude/security-patterns.yaml und .claude/claude-security-guidance.md aus dem Projekt entfernen.
Ebene 3 (Push-Türsteher) deaktivieren:
Den uc-codeguard-Block aus .git/hooks/pre-push entfernen oder den Hook löschen.
Gesamtes Plugin deaktivieren:
/plugin disable uc-codeguard
/plugin uninstall uc-codeguard
Danach manuell aus dem Projekt:
.git/hooks/pre-push— uc-codeguard-Block entfernen (oder Datei löschen).claude/security-patterns.yamlund.claude/claude-security-guidance.mdlöschen
Ebene 1 läuft nicht / gibt keine Ausgabe:
Logs prüfen: ~/.claude/uc-codeguard.log. Häufige Ursachen:
claude-CLI nicht im PATHUC_QUALITY_REVIEW=0gesetzt- Leerer Git-Diff (keine Änderungen seit letztem Commit)
- Kein git-Repository im Projektverzeichnis (funktioniert auch ohne, aber kein Diff möglich)
Ebene 3 blockiert einen False Positive:
git push --no-verify verwenden. Langfristig: Platzhalter-Erkennung greift bei process.env, import.meta.env und ähnlichen Mustern automatisch.
Ebene 3 wurde nicht installiert:
/uc-secure-init braucht ein git-Repository. git init ausführen, dann nochmal /uc-secure-init aufrufen.
Pre-push-Hook manuell installiert (ohne /uc-secure-init):
Wenn der pre-push-Hook manuell kopiert wurde, muss die Umgebungsvariable UC_CODEGUARD_DIR auf das Plugin-Verzeichnis zeigen, damit der Hook secret_scan.sh findet. Beispiel:
export UC_CODEGUARD_DIR="/pfad/zum/uc-codeguard"In der Shell-Konfigurationsdatei (.zshrc, .bashrc) eintragen, damit die Variable dauerhaft gesetzt ist.
Plugin-Installation schlägt fehl:
Sicherstellen, dass der Marketplace-Eintrag vorhanden ist (/plugin marketplace list) und der Repo-Name korrekt ist.
secret_scan.sh ist ein POSIX-Shell-Script. Unter Windows Git Bash oder WSL verwenden.
MIT — siehe LICENSE
United Creation — Andreas Lehnert