Template
feat: add a dedicated Security Auditor agent with veto power
Security was one section among seven in the QA Engineer. That is structurally weak: the agent that wants to recommend "production ready: YES" also judged security, and as a subsection it competes for attention with acceptance criteria, regression and test authoring. The new agent: - has no Write/Edit tools, so "never fix what you find" is enforced by the tool list rather than by instruction — it cannot launder a finding into a patch - reports PASS / FAIL / UNVERIFIED, and UNVERIFIED must reach the spec; an audit that omits what it could not check reads as all-clear - audits against .claude/rules/security.md, the same standard the developer agents are held to, so every mandatory item gets a verdict - holds a veto: BLOCK stops /deploy regardless of functional test results /qa now runs both agents in parallel and keeps the verdicts separate. The QA Engineer is explicitly forbidden from speaking for security.
This commit is contained in:
@@ -15,7 +15,7 @@ liest sich jede Skill selbst wieder ein.
|
||||
- [Schnellstart](#schnellstart)
|
||||
- [Der Workflow im Überblick](#der-workflow-im-überblick)
|
||||
- [Die neun Skills](#die-neun-skills)
|
||||
- [Die drei Sub-Agents](#die-drei-sub-agents)
|
||||
- [Die vier Sub-Agents](#die-vier-sub-agents)
|
||||
- [Die vier Rules](#die-vier-rules)
|
||||
- [Kontext-Ebenen](#kontext-ebenen)
|
||||
- [Das Feature-System](#das-feature-system)
|
||||
@@ -166,7 +166,7 @@ Status-Spalte, gewinnen die Dateien und es sagt dir das.
|
||||
|
||||
---
|
||||
|
||||
## Die drei Sub-Agents
|
||||
## Die vier Sub-Agents
|
||||
|
||||
`/frontend`, `/backend` und `/qa` führen Interview und Review mit dir im Hauptgespräch
|
||||
und geben die eigentliche Dateiarbeit ab. Der Sub-Agent arbeitet in eigenem Kontext und
|
||||
@@ -198,11 +198,59 @@ sequenceDiagram
|
||||
|-------|-------|-----------|---------|-----------|
|
||||
| **Frontend Developer** | `.claude/agents/frontend-dev.md` | Read, Write, Edit, Bash, Glob, Grep | UI umsetzen | shadcn vor Eigenbau; Lint, Typecheck und Build müssen grün sein |
|
||||
| **Backend Developer** | `.claude/agents/backend-dev.md` | Read, Write, Edit, Bash, Glob, Grep | Routen, Daten, Auth | **Stoppt und meldet zurück**, wenn der Daten-Layer noch nicht entschieden ist |
|
||||
| **QA Engineer** | `.claude/agents/qa-engineer.md` | Read, Write, Edit, Bash, Glob, Grep | Testen, Security-Audit | **Behebt niemals selbst einen Bug** — nur finden, dokumentieren, priorisieren |
|
||||
| **QA Engineer** | `.claude/agents/qa-engineer.md` | Read, Write, Edit, Bash, Glob, Grep | Funktion gegen die Spec testen | **Behebt niemals selbst einen Bug**. Spricht **nicht** über Sicherheit |
|
||||
| **Security Auditor** | `.claude/agents/security-auditor.md` | Read, Grep, Glob, Bash — **kein Write/Edit** | Sicherheit, adversarial | Hat ein **Veto** über `/deploy`. Findet er Critical oder High: BLOCK |
|
||||
|
||||
Keiner der drei fasst `features/INDEX.md` an. Tracking gehört der aufrufenden Skill —
|
||||
Keiner der vier fasst `features/INDEX.md` an. Tracking gehört der aufrufenden Skill —
|
||||
so kann es keine zwei Wahrheiten über den Status geben.
|
||||
|
||||
### Der Skeptiker
|
||||
|
||||
`/qa` startet **zwei** Agenten parallel, weil sie verschiedene Fragen beantworten:
|
||||
*Tut es, was die Spec verspricht?* und *Ist es sicher genug fürs offene Internet?*
|
||||
|
||||
Das ist bewusst getrennt. Derselbe Agent, der „Produktionsreif: JA" empfehlen will,
|
||||
sollte nicht auch über Sicherheit urteilen — er hat ein Motiv, grün zu melden. Und
|
||||
als Unterpunkt neben Acceptance Criteria, Regression und Testschreiben fällt Security
|
||||
bei knappem Kontext zuerst hinten runter.
|
||||
|
||||
Der Security Auditor arbeitet nach drei Prinzipien:
|
||||
|
||||
- **Unsicher bis zum Beweis des Gegenteils.** Eine plausible Erklärung zählt nicht;
|
||||
er muss die Kontrolle im Code gesehen haben und Datei plus Zeile nennen können.
|
||||
- **Drei Verdikte, Schweigen ist keines davon:** PASS, FAIL oder **UNGEPRÜFT**.
|
||||
Was er nicht prüfen konnte, steht als UNGEPRÜFT in der Spec — ein Audit, das
|
||||
Ungeprüftes weglässt, liest sich wie Entwarnung und ist schlimmer als keins.
|
||||
- **Kein Write- oder Edit-Werkzeug.** Er *kann* nicht beheben, was er findet. Damit
|
||||
ist „niemals selbst fixen" strukturell erzwungen statt nur angewiesen — er kann
|
||||
einen Befund nicht still wegpatchen.
|
||||
|
||||
Seine Checkliste ist `.claude/rules/security.md`, also derselbe Standard, an den sich
|
||||
die Entwickler-Agenten halten müssen. Jeder Pflichtpunkt darin braucht ein Verdikt.
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
QA["/qa PROJ-X"] --> A["QA Engineer<br/><i>Tut es, was die Spec verspricht?</i>"]
|
||||
QA --> B["Security Auditor<br/><i>Ist es sicher fürs offene Internet?</i>"]
|
||||
|
||||
A --> AV{"Critical oder<br/>High Bugs?"}
|
||||
B --> BV{"Verdikt"}
|
||||
|
||||
AV -->|ja| R["Status bleibt<br/><b>In Review</b>"]
|
||||
BV -->|"BLOCK"| R
|
||||
AV -->|nein| G((" "))
|
||||
BV -->|"PASS"| G
|
||||
|
||||
G --> OK["Status <b>Approved</b><br/>→ /deploy"]
|
||||
R --> FIX["/frontend oder /backend<br/>beheben, dann erneut /qa"]
|
||||
|
||||
style B stroke-width:3px
|
||||
style R stroke-width:3px
|
||||
```
|
||||
|
||||
Beide müssen grün sein. Ein sauberer Funktionstest hebt ein `BLOCK` nicht auf, und
|
||||
`/deploy` verweigert den Start, wenn das Security-Verdikt fehlt oder blockiert.
|
||||
|
||||
---
|
||||
|
||||
## Die vier Rules
|
||||
@@ -546,7 +594,8 @@ README.md Dieses Dokument
|
||||
agents/
|
||||
frontend-dev.md Sub-Agent für UI
|
||||
backend-dev.md Sub-Agent für Server
|
||||
qa-engineer.md Sub-Agent für Tests und Audit
|
||||
qa-engineer.md Sub-Agent für Funktionstests
|
||||
security-auditor.md Sub-Agent für Sicherheit — Veto über /deploy
|
||||
docs/
|
||||
PRD.md Füllt /init im Interview
|
||||
DEPLOYMENT.md Docker-Betrieb, Proxy, DB nachrüsten, Troubleshooting
|
||||
@@ -576,7 +625,7 @@ playwright.config.ts postcss.config.mjs vitest.config.mts
|
||||
components.json tsconfig.json package.json
|
||||
```
|
||||
|
||||
55 Dateien im Repo.
|
||||
56 Dateien im Repo.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user