AI Company System — Technische Architektur
Ein Multi-Agent-LLM-System, das die Organisationsstruktur eines Unternehmens nachbildet, um komplexe Projekte autonom in Phasen abzuarbeiten.
Architektur-Diagramm
Das System besteht aus einem zentralen Orchestrator (der einzige nicht-LLM-Prozess), der alle Agent-Instanzen steuert, Nachrichten routet und den globalen State verwaltet.
Datenfluss
Alle Agents kommunizieren nie direkt miteinander. Jede Nachricht läuft über den Orchestrator, der sie in die Message-Queue legt und an den nächsten Agent weiterleitet. Das ermöglicht Logging, Retry-Logik und State-Updates an einer zentralen Stelle.
Kommunikationsrichtungen
| Von | Nach | Inhalt | Trigger |
|---|---|---|---|
Human | Planner | Projektidee + Anforderungen | Manuell |
Planner | ProjectManager | Projektplan (JSON) | Planner fertig |
ProjectManager | Estimator | Phasen + Aufgabenliste | Pro Phase |
Estimator | Orchestrator | Aufgabenpakete | Schätzung fertig |
Orchestrator | Worker ×N | Je 1 Aufgabenpaket | Parallel-Dispatch |
Worker | Critic | Ergebnisse (gebatched) | Alle Worker fertig |
Critic | Pragmatist | Kritikliste | Review fertig |
Pragmatist | Integrator | Korrigierte Ergebnisse | Filter fertig |
Integrator | CEO | Integrationsreport | Integr.-Test fertig |
CEO | ProjectManager | Phase-Complete Signal | CEO Approval |
Any Agent | Researcher | Fachfrage | On-Demand |
Orchestrator
Der Orchestrator ist die einzige nicht-LLM-Komponente. Er ist ein deterministischer Prozess (Python-Script, n8n-Workflow oder Node.js-Service), der:
- Agent-Instanzen startet (API-Calls an LLM-Provider)
- Nachrichten zwischen Agents routet
- Den
project_state.jsonverwaltet und bei jedem Schritt aktualisiert - Retry-Logik und Error-Recovery steuert
- Parallele Worker-Instanzen managed (Promise.all / asyncio.gather)
- Logs schreibt für jeden Agent-Call (Input, Output, Tokens, Dauer)
orchestrator.config
{
"llm_provider": "anthropic",
"default_model": "claude-sonnet-4-5-20250929",
"ceo_model": "claude-opus-4-5-20251101",
"max_parallel_workers": 10,
"max_retry_loops": 2,
"task_package_size": 5,
"state_file": "./data/project_state.json",
"log_dir": "./logs/",
"researcher_tools": ["web_search", "rag_query"]
}
Agent-Definitionen
Jeder Agent ist eine Konfiguration aus: Rolle, System-Prompt, erlaubten Tools, Input-Schema und Output-Schema. Der Orchestrator instanziiert Agents bei Bedarf.
Zentrale Entscheidungsinstanz. Bekommt als Kontext immer die aktuelle Projektakte (komprimiert). Entscheidet über Phase-Transitions und Eskalationen.
System-Prompt Kern-Direktiven
- RolleGesamtverantwortlicher. Prüft alles doppelt. Behält Übersicht.
- Inputproject_state (komprimiert), Phasenergebnisse, Integrations-Report
- Output
{ action: "approve_phase" | "request_rework" | "escalate", updates: {...}, next_phase: int } - Modell
claude-opus-4-5(höchste Intelligenz für strategische Entscheidungen) - Max Tokens4096 Output
Interaktive Planungsphase mit dem Menschen. Erstellt den initialen Projektplan.
- RolleAnalysiert Idee, stellt Rückfragen, erstellt vollständigen Projektplan mit Zielen, Nicht-Zielen, Tech-Entscheidungen
- InputMenschliches Briefing (Freitext)
- Output
ProjectPlan-Objekt (siehe Schema unten) - Modell
claude-opus-4-5(braucht Tiefe + Kreativität) - BesonderheitEinziger Agent mit Multi-Turn-Konversation (Mensch ↔ LLM)
Zerlegt den Projektplan in Phasen mit Abhängigkeiten. Tracked den Fortschritt.
- RolleErstellt Roadmap, definiert Phasenreihenfolge, meldet Phasenstatus an CEO
- Input
ProjectPlan+ aktueller Phase-Status - Output
{ phases: Phase[], current_phase: int, dependencies: [...] } - Modell
claude-sonnet-4-5
Schätzt Aufwand pro Task und bündelt sie in Worker-Pakete.
- RolleBewertet Komplexität (1-5), bündelt in Pakete mit ~Gesamtkomplexität 12-15
- InputTask-Liste einer Phase
- Output
{ packages: [{ id, tasks: Task[], total_complexity: int }] } - Modell
claude-sonnet-4-5
Führen Aufgabenpakete parallel aus. Jeder Worker ist eine frische LLM-Session ohne Vorgeschichte.
- RolleReiner Macher. Führt exakt aus, was gefordert wird. Hinterfragt nichts.
- InputSystem-Prompt +
TaskPackage+ Projekt-Kontext (nur relevanter Ausschnitt) - Output
{ package_id, results: [{ task_id, status, output, files_changed: [...] }] } - Modell
claude-sonnet-4-5(Preis-Leistung optimal für Ausführung) - ParallelitätBis zu
max_parallel_workersgleichzeitig
Prüft Worker-Ergebnisse extrem kritisch gegen die Projektanforderungen.
- RolleExtrem kritisch. Findet Fehler, Sicherheitslücken, Abweichungen. Listet alles auf.
- InputWorker-Ergebnisse + Original-Anforderungen der Phase
- Output
{ issues: [{ severity: "critical"|"major"|"minor"|"nitpick", task_id, description, suggestion }] } - Modell
claude-sonnet-4-5
Filtert übertriebene Kritik. Behält nur valide, relevante Punkte.
- RollePrüft Kritik auf Relevanz. Verwirft „Nitpicks" und übertriebene Punkte.
- InputCritic-Output + Worker-Ergebnisse + Anforderungen
- Output
{ valid_issues: [...], dismissed_issues: [...], corrected_results: [...] } - Modell
claude-sonnet-4-5
Prüft Kompatibilität aller Teilergebnisse einer Phase.
- RollePrüft, ob Einzelergebnisse zusammenpassen. Interfaces, Datenformate, Namenskonventionen.
- InputAlle korrigierten Ergebnisse einer Phase
- Output
{ compatible: bool, conflicts: [...], merged_result: {...} } - Modell
claude-sonnet-4-5
On-Demand Wissensquelle. Wird von anderen Agents aufgerufen, um deren Kontextfenster nicht zu belasten.
- RolleRecherchiert Fakten, Best Practices, rechtliche Fragen. Hat Web-Zugriff + RAG.
- InputSpezifische Frage + Kontext wozu
- Output
{ answer, sources: [...], confidence: float } - Tools
web_search,rag_query(pgvector),web_fetch - Modell
claude-sonnet-4-5mit Tool-Use
Project State File
Die zentrale Projektakte. Wird nach jedem Schritt vom Orchestrator aktualisiert. Dient als Single Source of Truth.
project_state.json — Schema
{
"project_id": "uuid",
"name": "Projektname",
"status": "planning | in_progress | review | completed | failed",
"created_at": "ISO-8601",
"updated_at": "ISO-8601",
"plan": {
"goals": ["..."],
"non_goals": ["..."],
"tech_stack": ["..."],
"constraints": ["..."]
},
"phases": [
{
"id": 1,
"name": "Phase 1: Setup",
"status": "completed | in_progress | pending",
"depends_on": [],
"tasks": [
{
"id": "task-001",
"title": "...",
"complexity": 3,
"status": "pending | assigned | done | failed",
"assigned_package": "pkg-001",
"result": null | { ... },
"retry_count": 0
}
],
"packages": [
{
"id": "pkg-001",
"task_ids": ["task-001", "task-002"],
"total_complexity": 14,
"worker_status": "pending | running | done | failed"
}
],
"review": {
"critic_issues": [],
"valid_issues": [],
"integration_ok": null | true | false
}
}
],
"decisions_log": [
{ "timestamp": "...", "agent": "ceo", "decision": "...", "reason": "..." }
],
"known_issues": [],
"total_tokens_used": 0,
"total_cost_usd": 0.0
}
Message-Format
Jede Nachricht zwischen Orchestrator und Agent folgt einem einheitlichen Schema.
AgentMessage
{
"message_id": "uuid",
"timestamp": "ISO-8601",
"from": "orchestrator",
"to": "agent_role",
"type": "task | review | decision | query | result",
"payload": { ... },
"context": {
"project_id": "...",
"phase_id": 1,
"relevant_state": { ... } // komprimierter Ausschnitt
},
"metadata": {
"tokens_in": 0,
"tokens_out": 0,
"duration_ms": 0,
"model": "...",
"retry": 0
}
}
Task-Schema
Task-Objekt
{
"id": "task-001",
"title": "API-Endpoint für User-Login erstellen",
"description": "Detaillierte Beschreibung...",
"acceptance_criteria": ["POST /auth/login", "JWT zurückgeben", "Rate-Limiting"],
"complexity": 3, // 1-5 Skala
"depends_on": ["task-000"], // Abhängigkeiten innerhalb der Phase
"deliverables": ["code", "tests"],
"context_files": ["src/auth/"] // Nur diese Dateien dem Worker geben
}
Komplexitäts-Skala
| Level | Label | Beschreibung | Beispiel |
|---|---|---|---|
1 | Trivial | Config-Änderung, Rename | ENV-Variable hinzufügen |
2 | Einfach | Klare, kleine Aufgabe | Neuen API-Endpoint scaffolden |
3 | Mittel | Standardaufgabe mit etwas Logik | CRUD mit Validierung |
4 | Komplex | Mehrere Komponenten betroffen | Auth-System mit JWT + Refresh |
5 | Sehr komplex | Architektur-Entscheidungen nötig | Real-Time Sync Engine |
Projekt-Lifecycle
Status-Transitions
| Status | Trigger | Nächster Status |
|---|---|---|
init | Human gibt Briefing | planning |
planning | Planner liefert ProjectPlan | phasing |
phasing | ProjectManager liefert Roadmap | in_progress |
in_progress | Alle Phasen completed | completed |
in_progress | Max-Retries überschritten | failed (mit Report) |
Phasen-Loop (Detail)
Für jede Phase wird folgender Zyklus durchlaufen:
- Estimator bekommt Task-Liste der Phase → gibt Pakete zurück
- Orchestrator startet N Worker parallel (1 pro Paket)
- Workers liefern Ergebnisse → Orchestrator sammelt alle
- Critic bekommt alle Ergebnisse + Original-Anforderungen
- Pragmatist filtert Kritik, korrigiert valide Punkte
- Integrator prüft Kompatibilität aller Teilergebnisse
- CEO bekommt Integrations-Report →
approve_phaseoderrequest_rework - Orchestrator aktualisiert State-File → nächste Phase oder Retry
Review-Cycle
Der dreistufige Review-Prozess ist das Qualitäts-Herzstück des Systems:
Error-Recovery
Ohne klare Fehlerbehandlung können Agents in Endlosschleifen landen. Das System definiert strikte Regeln.
Retry-Matrix
| Fehlertyp | Max Retries | Strategie | Eskalation |
|---|---|---|---|
| Worker liefert fehlerhaftes Ergebnis | 2 |
Neuer Worker mit Fehler-Feedback im Prompt | CEO reformuliert Task |
| Integration schlägt fehl | 1 |
Betroffene Worker neu starten mit Integrations-Hinweisen | CEO splittet Phase |
| CEO kann nicht entscheiden | 0 |
— | Human-Intervention |
| API-Fehler / Rate-Limit | 3 |
Exponential Backoff (5s, 15s, 45s) | Pause + Benachrichtigung |
| Token-Limit überschritten | 1 |
Task-Paket kleiner machen | Estimator re-run mit niedrigerem Budget |
failed gesetzt und ein detaillierter Fehlerbericht an den Menschen generiert. Kein automatisches Weiterlaufen.
Tech-Stack Empfehlungen
| Komponente | Option A (lightweight) | Option B (skalierbar) |
|---|---|---|
| Orchestrator | Python + asyncio |
n8n Workflow |
| LLM-Provider | Anthropic API (Claude Opus für CEO/Planner, Sonnet für Rest) |
|
| State-Storage | JSON-Dateien |
PostgreSQL + JSON-Columns |
| Message Queue | In-Memory (asyncio.Queue) |
Redis oder PostgreSQL LISTEN/NOTIFY |
| RAG-System | pgvector + Embedding-Modell |
|
| Logging | JSON-Dateien im logs/ |
PostgreSQL Audit-Tabelle |
| Benachrichtigung | Telegram Bot (Status-Updates, Fehler, Abschluss) |
|
Dateistruktur
ai-company-system/
├── config/
│ ├── orchestrator.config.json
│ └── agents/
│ ├── ceo.prompt.md
│ ├── planner.prompt.md
│ ├── project_manager.prompt.md
│ ├── estimator.prompt.md
│ ├── worker.prompt.md
│ ├── critic.prompt.md
│ ├── pragmatist.prompt.md
│ ├── integrator.prompt.md
│ └── researcher.prompt.md
├── src/
│ ├── orchestrator.py # Hauptprozess
│ ├── agent_runner.py # LLM-API-Aufrufe
│ ├── state_manager.py # project_state.json R/W
│ ├── message_router.py # Nachrichtenverteilung
│ ├── parallel_dispatcher.py # Worker-Parallelisierung
│ └── error_handler.py # Retry + Eskalation
├── data/
│ └── projects/
│ └── {project_id}/
│ ├── project_state.json
│ ├── phases/
│ │ ├── phase_1_results.json
│ │ └── phase_2_results.json
│ └── artifacts/ # generierte Dateien
├── logs/
│ └── {project_id}/
│ ├── agent_calls.jsonl # jeder API-Call
│ └── decisions.jsonl # CEO-Entscheidungen
├── rag/
│ ├── embeddings.py
│ └── sources/ # Gesetzbücher, Docs etc.
└── README.md
Skalierung
Horizontale Skalierung
- Mehr Worker parallel: Limitiert durch API-Rate-Limits des LLM-Providers (Anthropic: Tier-abhängig, bis zu 4000 RPM)
- Mehrere Projekte gleichzeitig: Jedes Projekt hat eigenen State → Orchestrator kann mehrere Projekte managen
- Verschiedene Modelle pro Rolle: CEO = Opus (teuer, klug), Worker = Sonnet (günstig, schnell), Researcher = Haiku für einfache Lookups
Optimierungshebel
| Hebel | Wirkung | Trade-off |
|---|---|---|
| Paketgröße erhöhen | Weniger API-Calls | Höheres Fehlerrisiko pro Paket |
| Billigeres Modell für Worker | Kostenersparnis ~60% | Mehr Fehler, mehr Retries |
| Review-Steps reduzieren | Schneller, günstiger | Weniger Qualitätssicherung |
| Kontext-Komprimierung | Mehr Tasks pro Session | Risiko von Informationsverlust |
Kosten & Token-Budget
Grobe Kalkulation pro Phase mit 25 Tasks (5 Pakete à 5 Tasks):
| Agent | Aufrufe | ~Tokens In | ~Tokens Out | Modell |
|---|---|---|---|---|
| Estimator | 1× | 3.000 | 2.000 | Sonnet |
| Worker ×5 | 5× | 5.000 × 5 | 4.000 × 5 | Sonnet |
| Critic | 1× | 15.000 | 3.000 | Sonnet |
| Pragmatist | 1× | 12.000 | 4.000 | Sonnet |
| Integrator | 1× | 15.000 | 3.000 | Sonnet |
| CEO | 1× | 5.000 | 2.000 | Opus |
| Gesamt pro Phase | ~75.000 | ~34.000 | ||
AI Company System · Technische Architektur v1.0 · Februar 2026