Fünf Grundsätze
Eine Guideline, kein Regelkatalog
Der Agent arbeitet mit den vollständigen zdrei.com Coding Guidelines. Die Golden Rules stehen vorn und begründen jede Detailregel.
Philosophie wird Arbeitsweise
Die Golden Rules prägen, wie der Agent arbeitet, nicht nur was er prüft: erst verstehen und planen (1.5), Generisches vom Spezifischen trennen (1.6), gleiche Begriffe für Gleiches (1.2).
Tools prüfen Deterministisches
Formatierung, Typisierung und die PHP-Regeln aus z3/sdk erzwingen PHP-CS-Fixer und PHPStan. Die AI beurteilt, was Urteilsvermögen braucht: Struktur, Benennung, generisches Design.
Finden und Bestätigen sind getrennt
Ein Review-Befund zählt erst, wenn ein unabhängiger Agent ihn am Code überprüft hat.
Eine Quelle, überall verteilt
Die Guideline wird an einer Stelle gepflegt und erreicht jedes Projekt über Plugin-Updates. Projekte ergänzen eigene Regeln, sie kopieren und ändern unsere nicht.
Die Golden Rules
Wähle eine Regel, um zu sehen, was sie verlangt und wo das Plugin sie anwendet.
Ein Feature in einem bestehenden Projekt
In einem TYPO3-Projekt sollen Referenzen nach Branche filterbar werden. Das Projekt wurde einmal mit /zdrei-core:setup eingerichtet.
Kleine Änderungen brauchen weniger: Ein Tippfehler braucht weder Plan noch Review, die Checks nach jedem Edit laufen trotzdem. Den Plan zu bestätigen ist eine Empfehlung; bei „mach einfach“ legt der Agent los.
Komponenten
Plugins im Marketplace
| Plugin | Version | Install-ID | Zweck |
|---|---|---|---|
zdrei-core | 0.4.0 | zdrei-core@zdrei | zdrei.com Golden Rules und PHP Coding Guidelines: immer geladen, als Workflow angewandt, durch Hooks und unabhängiges Review durchgesetzt. |
security-audit | c1c8a8c | security-audit@zdrei | Cloudflares Security-Audit-Skill (MIT), auf einen geprüften Commit gepinnt. Wird als Abhängigkeit von zdrei-core automatisch installiert. |
Unterstützung je Tool
| Ebene | Komponente | Claude Code | Codex |
|---|---|---|---|
| Wissen | skills/guideline mit Coding Guidelines und ADRs | Per Hook beim Sessionstart, Skill bei Bedarf | Skill |
| Workflow | skills/develop, skills/setup | Skills | Skills |
| Harte Checks | hooks/hooks.json | Hooks | Noch nicht verifiziert |
| Unabhängiges Review | skills/review mit zwei Agents | Skill + Subagents | Skill, zwei Durchgänge |
Wann welche PHP-Checks laufen
Das hängt davon ab, ob das Projekt den zdrei.com-Builder hat.
Security-Review aus drei Quellen
/zdrei-core:security kombiniert vorhandene Werkzeuge, statt alles selbst zu bauen. Standard ist das Review einer Änderung; ein vollständiges Audit läuft nur auf ausdrücklichen Wunsch.
| Quelle | Was sie beiträgt | Verfügbar in |
|---|---|---|
security-review | Eingebaut in Claude Code. Schnelles Review der offenen Änderungen auf dem Branch. | Claude Code |
security-audit | Cloudflares Methode: Trust Boundaries, Angriffsklassen, Candidate Gate, unabhängige Validierung. Auf Wunsch das vollständige Audit in sechs Phasen. | Claude Code; in Codex nur separat installiert |
php-typo3-hotspots.md | Wo PHP-, TYPO3- und Symfony-Projekte typischerweise brechen. | Überall |
Ein Befund zählt nur, wenn er einen niedriger privilegierten Akteur, die Eingabe, die verletzte Grenze und ein konkretes Ergebnis benennt. Das vollständige Audit nutzt viele Agents, braucht Node.js für die Validatoren und schreibt seinen Bericht nach ~/security-audit-skill/<repo>/run-<N>, außerhalb des Projekts.
Den Marketplace einbinden
Das Repository ist privat. Zugriff gibt es über einen lesenden Deploy Token (Scope read_repository): einen für zdrei.com und je einen pro Kunde, damit jeder Zugang einzeln widerrufen werden kann. Der Token ist Teil der Marketplace-URL.
Standardweg für zdrei.com. Ein Admin mit Owner-Rolle trägt dieses JSON einmal ein unter claude.ai → Organization settings → Claude Code → Managed settings (alternativ als managed-settings.json oder per MDM).
{
"extraKnownMarketplaces": {
"zdrei": {
"source": {
"source": "git",
"url": "https://<token-user>:<token>@git.z3.ag/zdrei.com/product/p1599-ai-marketplace.git"
},
"autoUpdate": true
}
},
"enabledPlugins": {
"zdrei-core@zdrei": true
}
}- Claude Code registriert den Marketplace und installiert
zdrei-corebeim nächsten Sessionstart. Niemand muss einen Befehl ausführen oder den Token kennen. - Automatische Updates sind an und lassen sich nicht versehentlich abschalten.
- Der verwaltete Eintrag ersetzt einen von Hand angelegten Marketplace namens
zdrei. - Prüfen: Claude Code starten,
/pluginzeigtzdreiundzdrei-core;/statuslistetEnterprise managed settings.
Gilt nur für Claude Code und für alle in der Organisation. Codex-Nutzer installieren von Hand.
Für Kunden und Einzelinstallationen.
claude plugin marketplace add "https://<token-user>:<token>@git.z3.ag/zdrei.com/product/p1599-ai-marketplace.git" claude plugin install zdrei-core@zdrei
Danach einmal automatische Updates einschalten: /plugin → Marketplaces → zdrei → Enable auto-update. Der Admin eines Kunden kann stattdessen die Managed Settings mit dem Kunden-Token nutzen.
Pro Projekt, einmalig (optional): /zdrei-core:setup ausführen. Es schreibt AGENTS.md, CLAUDE.md und GLOSSARY.md und prüft das PHP-Tooling.
Noch nicht getestet.
codex plugin marketplace add "https://<token-user>:<token>@git.z3.ag/zdrei.com/product/p1599-ai-marketplace.git" codex plugin install zdrei-core
Aktualisieren mit codex plugin marketplace upgrade zdrei. Cloudflares Skill wird in Codex nicht automatisch installiert:
npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit
Der Token liegt im macOS-Schlüsselbund, die Marketplace-URL enthält keine Zugangsdaten.
git config --global credential.helper osxkeychain git config --global credential.https://git.z3.ag.useHttpPath true printf 'protocol=https\nhost=git.z3.ag\npath=zdrei.com/product/p1599-ai-marketplace.git\nusername=<token-user>\npassword=<token>\n' | git credential approve claude plugin marketplace add https://git.z3.ag/zdrei.com/product/p1599-ai-marketplace.git claude plugin install zdrei-core@zdrei
Bei einem neuen Token nur die Zeile mit git credential approve erneut ausführen. SSH funktioniert nicht mit Hardware-Keys (FIDO, z. B. YubiKey), weil Claude Code git ohne Interaktion ausführt.
Wird ein Token widerrufen, laufen installierte Plugins mit ihrer letzten Version weiter, aber Updates schlagen fehl.
Zentraler Rollout: Token in den Managed Settings ersetzen. Rechner bekommen die neue URL beim nächsten Sessionstart. Noch nicht getestet: erst auf einem Rechner mit /plugin prüfen. Zeigt zdrei-core „failed to load“, claude plugin marketplace update zdrei ausführen oder neu installieren.
Von Hand installiert: Die URL in den Settings von Hand zu ändern macht das Plugin kaputt. Stattdessen den Marketplace ersetzen:
claude plugin marketplace remove zdrei claude plugin marketplace add "https://<token-user>:<new-token>@git.z3.ag/zdrei.com/product/p1599-ai-marketplace.git" claude plugin install zdrei-core@zdrei
remove deinstalliert auch das Plugin, daher ist install wieder nötig. Danach Auto-Update wieder einschalten.
- Den Marketplace nie mit
--scope projecthinzufügen. Die URL samt Token landet sonst in.claude/settings.jsondes Projekts und wird committet. - Den Token nie in ein Repository, Ticket oder einen Chat schreiben. Er liegt im Klartext in
~/.claude/settings.jsonund~/.claude/plugins/known_marketplaces.json. - Der Token kann nur dieses Repository lesen, das keine Secrets enthält. Wird er bekannt: widerrufen und neu ausgeben.
Fehlerbehebung
Die häufigsten Probleme nach Symptom. Jeder Eintrag hat einen eigenen Link, den du im Chat oder Ticket teilen kannst.
› Pluginzdrei-core zeigt „failed to load“nach Token-Wechsel
Die Marketplace-URL zeigt noch auf den alten Token. Zuerst den Marketplace aktualisieren:
claude plugin marketplace update zdrei
Hilft das nicht, den Marketplace ersetzen wie unter Token wechseln beschrieben. Die URL in den Settings nie von Hand ändern.
› PluginNeue Version kommt nicht anPlugin bleibt alt
- Auto-Update ist aus:
/plugin→ Marketplaces →zdrei→ Enable auto-update. - Der Token wurde widerrufen. Installierte Plugins laufen weiter, Updates schlagen fehl. Neuen Token wie unter Token wechseln eintragen.
- Die
versioninplugin.jsonwurde nicht erhöht. Nutzer bekommen nur dann eine neue Version.
Sofort aktualisieren:
claude plugin marketplace update zdrei claude plugin update zdrei-core@zdrei
› HookKein Hinweis auf eine neue Versionbeim Sessionstart
- Der SessionStart-Hook prüft höchstens einmal am Tag. Ein neues Release erscheint also frühestens am nächsten Tag als Hinweis.
- Er fragt die Tags per SSH ab (
git@git.z3.ag:…). Wer nur per Deploy Token zugreift, bekommt keinen Hinweis; die Prüfung schlägt still fehl. - Abhilfe: Umgebungsvariable
ZDREI_MARKETPLACE_URLauf die HTTPS-Adresse ohne Token setzen und den Token im Schlüsselbund ablegen (Ohne Token im Klartext).
› HookPHP-Checks laufen nichtnach einem PHP-Edit
phpist nicht imPATHder Claude-Code-Session. Dann überspringen die Hooks alle Checks ohne Meldung. Prüfen mit! which php.- Nur Dateien mit der Endung
.phplösen die Checks aus. - Ohne
bin/builderlaufen PHP-CS-Fixer und PHPStan nur, wenn sie imbin-dirauscomposer.jsonliegen (Standardvendor/bin) und ihre Konfiguration im Projekt-Root liegt. Siehe PHP-Checks. /zdrei-core:setupprüft das Tooling des Projekts und zeigt, was fehlt.
› Hook„still reports findings after 3 attempts“Agent hört auf
Der Stop-Hook schickt Befunde von bin/builder analyse:php höchstens dreimal hintereinander an den Agent zurück. Danach gibt er an dich ab. Befunde selbst ansehen und beheben, nicht unterdrücken und die PHPStan-Konfiguration nicht ändern:
bin/builder analyse:php
› Setupzdrei-core fehlt in /pluginnach dem Rollout
- Managed Settings greifen erst beim nächsten Sessionstart. Claude Code neu starten.
/statusmussEnterprise managed settingsals Quelle zeigen. Fehlt die Zeile, ist das Gerät nicht in der Organisation angemeldet.- Bei Kunden ohne Managed Settings: von Hand installieren, siehe Claude Code von Hand.
› Codexsecurity-audit fehlt in Codex/zdrei-core:security
Codex installiert Cloudflares Skill nicht automatisch als Abhängigkeit. Einmal separat installieren, siehe Codex.
Guideline und ADRs
skills/guideline/references/coding-guidelines.md ist eine Kopie von doc/1_Guidelines/coding-guidelines.md aus p1453-z3-coding-styleguide, die ADRs kommen aus doc/5_Architecture/adr/. Geändert wird dort, nie hier. /update-guideline kopiert beides aus demselben Commit.
Priorität beim Anwenden
- Golden Rules zuerst. Passt eine Detailregel nicht, wird im Sinne der Golden Rules entschieden.
- zdrei.com ADRs erklären Strukturregeln. Akzeptierte ADRs sind verbindlich, vorgeschlagene noch nicht.
- Projektregeln in
AGENTS.md,CLAUDE.md,GLOSSARY.mdund Projekt-ADRs ergänzen und gewinnen bei ausdrücklichem Widerspruch. - Tools setzen Deterministisches durch. Befunde werden behoben, nie unterdrückt.
Abschnitte der Guideline
Die Golden Rules (Abschnitt 1) stehen oben. Die Links öffnen den Abschnitt im Repository.
| Nr. | Abschnitt | Kern |
|---|---|---|
| 2.1 | Project Structure | PSR-4, zentrales tests/-Verzeichnis, Pakete unter packages/; 2.1.1 hierarchisches Composer-Setup; 2.1.2 Test-Setup nach Typ und Paket. |
| 2.2 | Naming Conventions | PascalCase für Klassen, camelCase für Methoden und Variablen, UPPER_SNAKE_CASE für Konstanten. |
| 2.3 | Services, Classes, and Methods | Eine Verantwortung pro Klasse. Eine Funktion orchestriert oder führt einen Schritt aus. Klassen sind standardmäßig final; erweitert wird per Decorator. |
| 2.4 | Booleans & Naming | is, has, should, can für boolesche Methoden und Variablen. |
| 2.5 | Early Returns | Früh zurückkehren, kein else, kein ! in booleschen Prüfungen. |
| 2.6 | Clean Comparisons | Strikte Vergleiche mit ===, saubere Zähl- und Leer-Prüfungen, keine Yoda Conditions. |
| 2.7 | Comments and Documentation | Kommentare erklären das Warum, nicht das Was. Immer auf Englisch. |
| 2.8 | Blank Line Before Return | Eine Leerzeile trennt return von der Logik davor. |
| 2.9 | Gather Data Before Assignment | Erst alle Daten sammeln, dann zuweisen oder ausgeben. |
| 2.10 | Return Value in Variable | Rückgabewerte erst in eine sprechende Variable, das erleichtert das Debugging. |
| 2.11 | Constants, Enums, and Configuration | Konfiguration zuerst. Ein fester Wert ist eine Konstante, eine feste Menge ein Enum. |
| 2.12 | Static Analysis with PHPStan | Level max für neue Projekte, zdrei.com-Regelsatz, keine Baseline. |
| 2.13 | Code Style with PHP-CS-Fixer | Niemand formatiert von Hand. Symfony Coding Standard mit zdrei.com-Abweichungen. |
| 2.14 | Dependency Inversion | Abhängigkeiten auf Abstraktionen an Systemgrenzen. Das Interface gehört dem Konsumenten. |
| 3.1 | Commit Messages | Format [TYPE] #<issue> Beschreibung /s<Minuten>. |
| 3.2 | Commit Early, Push Often | Kleine, lauffähige Commits; spätestens am Ende des Tages pushen. |
Architecture Decision Records
| Nr. | Titel | Status |
|---|---|---|
| 0001 | Separate Libraries from System Integrations | Accepted |
| 0002 | Configuration, Constants and Enums for Fixed Values | Accepted |
| 0003 | Each Package Declares Its Own Dependencies | Accepted |
| 0004 | Symfony Coding Standard, Enforced by PHP-CS-Fixer | Accepted |
| 0006 | Strict Typing and PHPStan as Quality Gate | Accepted |
| 0007 | Structs Only for Serialized Data Structures | Proposed |
| 0008 | Consumer-Owned Interfaces at Boundaries | Proposed |
| 0009 | Constructor Injection for Services | Proposed |
| 0010 | Classes Are Final by Default | Proposed |
Im Plugin zitiert als zdrei.com ADR-NNNN, damit sie nicht mit den ADRs des Projekts verwechselt werden.
Release-Checkliste
Nutzer bekommen eine neue Version nur, wenn sich version ändert. Der Haken wird nur in deinem Browser gespeichert.
Lokal entwickeln
claude --plugin-dir ./plugins/zdrei-core
Nach Änderungen /reload-plugins ausführen.
Changelog
Quelle: CHANGELOG.md
zdrei-core 0.4.0 unreleased
- Coding Guidelines und ADRs aus
p1453-z3-coding-styleguide, Commitf05c3cf: neuer Abschnitt 2.1.2 Test Setup; Klassen standardmäßigfinalund keine Constructor Injection in abstrakten Klassen (2.3); neue ADRs 0008–0010 (Proposed).
zdrei-core 0.3.0 unreleased
- Coding Guidelines und ADRs aus
p1453-z3-coding-styleguide, Commit2eac3c7: neuer Abschnitt 2.1.1 Hierarchical Composer Setup, Projektstruktur in 2.1 auf die Basis jedes Projekts reduziert, ADRs verlinken direkt auf Guideline-Abschnitte. - zdrei.com ADRs 0001–0007 als Teil des
guideline-Skills; Sessionstart, Reviewer und Verifier verweisen darauf.
zdrei-core 0.2.0 unreleased
- Neuer Skill
security: Change-Review mitsecurity-review, Cloudflares Methode und PHP/TYPO3/Symfony-Hotspots; vollständiges Audit auf ausdrücklichen Wunsch. - Neuer Marketplace-Eintrag
security-audit, gepinnt aufc1c8a8c, automatisch als Abhängigkeit installiert. developundreviewempfehlen das Security-Review bei sicherheitsrelevanten Änderungen.
zdrei-core 0.1.0 unreleased
- MVP: vollständige Coding Guidelines (Commit
379d45d) als Skill und Sessionstart-Kontext. - Skills
develop,review,setup; Agentsgolden-rules-reviewerundgolden-rules-verifier. - Hooks: PHP-Lint nach PHP-Edits,
bin/builder fix:php+analyse:phpam Ende jedes Turns (höchstens 3 Runden). - Update-Hinweis beim Sessionstart auf Basis der
zdrei-core--v*-Tags.