Architektur-Pivot: nginx fällt komplett weg. HAProxy 2.8+ übernimmt
TLS-Termination, L7-Routing per Host-Header und LB. ACME-Webroot
und Management-UI werden von edgeguard-api ausgeliefert (Phase 3
implementiert die zugehörigen Handler); HAProxy proxied
/.well-known/acme-challenge/* und Management-FQDN-Traffic an
127.0.0.1:9443. Eine Distro-Abhängigkeit weniger, ein Renderer
weniger, sauberere Trennung.
Renderer (alle mit Embed-Templates + Tests):
* internal/configgen/ — atomic write + systemctl reload helpers
* internal/haproxy/ — :80 + :443, ACME-ACL, Host-Header-Routing,
Stats-Frontend, api_backend Fallback
* internal/firewall/ — default-deny input, stateful baseline,
SSH-Rate-Limit, :80/:443 accept,
Cluster-Peer-Set für mTLS :8443,
Custom-Rules aus PG
* internal/{squid,wireguard,unbound}/ — Stubs (ErrNotImplemented)
Orchestrator + CLI:
* internal/services/configorch/ — fester Reihenfolge-Run, Stubs
sind soft-skip statt fatal
* cmd/edgeguard-ctl render-config [--no-reload] [--only=svc1,svc2]
Packaging:
* postinst: /etc/edgeguard/nginx raus, /var/lib/edgeguard/acme rein,
self-signed _default.pem via openssl req (damit HAProxy startet
bevor certbot etwas issuet hat)
* control: Depends nginx raus, openssl rein
* edgeguard-ui: dependency auf nginx weg, "Served by edgeguard-api
gin StaticFS"
Live-Smoke: render-config gegen lokale PG schreibt /etc/edgeguard/
haproxy/haproxy.cfg + nftables.d/ruleset.nft korrekt; CRUD-Test aus
Phase 2 läuft weiter unverändert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
agent.md — EdgeGuard Native: Agent-Factory Pipeline
Dieses Dokument beschreibt wie das Projekt über den Architect Center Orchestrator mit spezialisierten Agenten aufgebaut wird. Jeder Agent hat einen klar abgegrenzten Scope und kann parallel zu anderen arbeiten.
Idee
Der Architect Center Orchestrator dispatcht mehrere Claude Code Agenten, jeder spezialisiert auf eine Schicht des Projekts. Alle Agenten haben Zugriff auf:
- RAG (Qdrant): Code-Index von mail-gateway (project_id=6) und netcell-webpanel (project_id=5) als Referenz
- MCP-Server
architect: ac_search_code, ac_send_instruction, ac_read_file - Session: eigene tmux-Session pro Agent (EdgeGuardNative-1 … N)
Agent-Rollen
| Agent | Scope | Referenz-Projekt |
|---|---|---|
| DB-Architect | Datenbankschema, goose-Migrations, GORM-Models | mail-gateway models/ |
| API-Engineer | Gin-Router, alle Handler, Middleware (Auth/JWT/RBAC) | mail-gateway handlers/ |
| Config-Generator | HAProxy, Squid, WireGuard, Unbound, nftables Templates + Renderer | mail-gateway config/ |
| Cluster-Engineer | KeyDB AA, PG Streaming Replication, Join/Promote, Write-Proxy | mail-gateway cluster/ |
| Scheduler-Engineer | ACME-Renewal, Backup, Health-Aggregation, License-Heartbeat | mail-gateway scheduler |
| CLI-Engineer | edgeguard-ctl: initdb, migrate, cluster-join, promote, dump-config | mail-gateway cmd/nmg-ctl/ |
| Frontend-Engineer | React 19 + AntD 6 UI (1:1 enconf-Pattern), alle Seiten v1 | netcell-webpanel management-ui/ |
| Packaging-Engineer | .deb-Pakete (dpkg-deb), postinst, systemd-Units, APT-Repo | mail-gateway packaging/ |
| Bootstrap-Engineer | install.sh Onliner, Cluster-Join-Script | netcell-webpanel install.sh |
Abhängigkeiten (Build-Order)
Phase 1 (parallel):
DB-Architect → migrations/ + internal/models/
Packaging-Engineer → packaging/debian/ + deploy/systemd/
Phase 2 (parallel, braucht Phase 1):
API-Engineer → internal/handlers/ + cmd/edgeguard-api/
Config-Generator → internal/{haproxy,squid,wireguard,unbound,firewall}/
CLI-Engineer → internal/services/ + cmd/edgeguard-ctl/
Phase 3 (parallel, braucht Phase 2):
Cluster-Engineer → internal/{cluster,proxy,aggregator,license}/
Scheduler-Engineer → cmd/edgeguard-scheduler/
Frontend-Engineer → management-ui/
Phase 4 (braucht Phase 3):
Bootstrap-Engineer → scripts/install.sh, scripts/apt-repo/
Integration-Tests → make test + make deb
Orchestrator-Prompt-Template
Du bist der <ROLE>-Agent für EdgeGuard Native (project_id=8, session=EdgeGuardNative-<N>).
Deine Aufgabe: <SCOPE>
Pflicht vor jeder Implementierung:
1. ac_search_code(query="<keywords>", project_id=<REF_ID>, limit=6) — Pattern aus Referenz lesen
2. Erst dann implementieren, NIEMALS raten
Referenz-Projekte: mail-gateway (id=6) für Backend-Patterns, netcell-webpanel (id=5) für UI/Bootstrap.
Arbeite in /var/www/edgeguard-native/<deinem Scope>.
Nach jedem Abschnitt: make test (Backend) oder npx tsc --noEmit (Frontend).
RAG-Collections (Qdrant auf Architect Center Server)
| Collection | Inhalt | Wird genutzt von |
|---|---|---|
project_mail_gateway |
mail-gateway Code-Index | DB-, API-, Config-, Cluster-, Scheduler-, CLI-Agent |
project_netcell_webpanel |
netcell-webpanel Code-Index | Frontend-, Bootstrap-Agent |
project_edgeguard_native |
edgeguard-native eigener Index (live, wird gefüllt) | alle Agenten ab Phase 2 |
Code-Indexer starten:
# Auf Architect Center Server
python3 /var/www/architect-center/scripts/code_indexer.py --project-id 8
Start-Befehl (via Architect Center Orchestrator)
- Architect Center UI → Orchestrator → Neue Pipeline
- Template:
edgeguard-native-v1 - Phase 1 starten → bei Completion Phase 2, etc.
Oder manuell per Session:
tmux new-session -d -s EdgeGuardNative-2 -c /var/www/edgeguard-native
# Claude Code in Session starten:
tmux send-keys -t EdgeGuardNative-2 'ARCHITECT_SESSION=EdgeGuardNative-2 ARCHITECT_PROJECT_ID=8 claude' Enter