Anleitung: Dashboard-Überwachung
Zwei Dashboard-Befehle
oh-my-agent bietet zwei Echtzeit-Dashboards zur Überwachung der Agentenaktivität während Multi-Agenten-Workflows.
| Befehl | Oberfläche | URL | Technologie |
|---|---|---|---|
oma dashboard | Terminal (TUI) | N/A — rendert in Ihrem Terminal | chokidar Dateiüberwachung, picocolors Rendering |
oma dashboard:web | Browser | http://localhost:9847 | HTTP-Server, WebSocket, chokidar Dateiüberwachung |
Beide Dashboards überwachen dieselbe Datenquelle: das .serena/memories/-Verzeichnis.
Terminal-Dashboard
oma dashboard
Rendert eine Rahmenzeichnungs-Oberfläche direkt im Terminal. Aktualisiert sich automatisch bei Änderungen an Memory-Dateien. Mit Strg+C beenden.
╔════════════════════════════════════════════════════════╗
║ Serena Memory Dashboard ║
║ Sitzung: session-20260324-143052 [LÄUFT] ║
╠════════════════════════════════════════════════════════╣
║ Agent Status Zug Aufgabe ║
║ ──────────── ──────────── ────── ────────────────── ║
║ backend ● läuft 3 User-API impl. ║
║ frontend ● läuft 2 Login-Seite bauen ║
║ mobile ✓ fertig 5 Auth-Screens fertig║
║ qa ○ blockiert - ║
╠════════════════════════════════════════════════════════╣
║ Letzte Aktivität: ║
║ [backend] JWT-Token-Validierung implementieren ║
║ [frontend] Login-Formular-Komponenten erstellen ║
║ [mobile] Biometrische Auth-Integration abgeschlossen ║
╠════════════════════════════════════════════════════════╣
║ Aktualisiert: 24.03.2026, 14:31:15 | Strg+C zum ║
║ Beenden ║
╚════════════════════════════════════════════════════════╝
Statussymbole:
●(grün) — läuft✓(cyan) — abgeschlossen✗(rot) — fehlgeschlagen○(gelb) — blockiert◌(gedimmt) — ausstehend
Web-Dashboard
oma dashboard:web
Öffnet einen Webserver auf Port 9847 (konfigurierbar über die Umgebungsvariable DASHBOARD_PORT). Die Browser-Oberfläche verbindet sich über WebSocket und empfängt Live-Updates.
# Benutzerdefinierter Port
DASHBOARD_PORT=8080 oma dashboard:web
# Benutzerdefiniertes Memories-Verzeichnis
MEMORIES_DIR=/path/to/.serena/memories oma dashboard:web
Das Web-Dashboard zeigt dieselben Informationen wie das Terminal-Dashboard, aber mit einer gestylten Dark-Theme-Oberfläche mit:
- Verbindungsstatus-Badge (Verbunden / Getrennt / Verbinde mit Auto-Reconnect)
- Sitzungs-ID und Statusleiste
- Agentenstatus-Tabelle mit animierten Statuspunkten
- Neueste-Aktivität-Feed
- Automatisch aktualisierende Zeitstempel
Empfohlenes 3-Terminal-Layout
Für Multi-Agenten-Workflows wird folgendes Setup mit drei Terminal-Fenstern empfohlen:
┌────────────────────────────────┬────────────────────────────────┐
│ │ │
│ Terminal 1: Haupt-Agent │ Terminal 2: Dashboard │
│ │ │
│ $ gemini │ $ oma dashboard │
│ > /orchestrate │ │
│ ... │ ╔═══════════════════════╗ │
│ │ ║ Serena Dashboard ║ │
│ │ ║ Sitzung: ... ║ │
│ │ ╚═══════════════════════╝ │
│ │ │
├────────────────────────────────┴────────────────────────────────┤
│ │
│ Terminal 3: Ad-hoc-Befehle │
│ │
│ $ oma agent:status session-20260324-143052 backend frontend │
│ $ oma stats │
│ $ oma verify backend -w ./api │
│ │
└─────────────────────────────────────────────────────────────────┘
Terminal 1 führt Ihre primäre Agentensitzung aus (Gemini CLI, Claude Code, Codex usw.), in der Sie mit Workflows wie /orchestrate oder /work interagieren.
Terminal 2 führt das Dashboard zur passiven Überwachung aus. Es aktualisiert sich automatisch — keine Interaktion nötig.
Terminal 3 ist für Ad-hoc-Befehle: Agentenstatus prüfen, Verifikationen ausführen, Statistiken anzeigen oder Probleme debuggen.
Datenquellen in .serena/memories/
Die Dashboards lesen aus dem .serena/memories/-Verzeichnis. Dieses Verzeichnis wird von Agenten und Workflows über MCP-Memory-Tools während der Ausführung befüllt.
Dateitypen und ihre Inhalte
| Dateimuster | Erstellt von | Inhalte |
|---|---|---|
orchestrator-session.md | /orchestrate Schritt 2 | Sitzungs-ID, Startzeit, Status (RUNNING/COMPLETED/FAILED), Workflow-Version |
session-{workflow}.md | /work, /ultrawork | Sitzungsmetadaten, Phasenfortschritt, Zusammenfassung der Benutzeranfrage |
task-board.md | Orchestrierungs-Workflows | Markdown-Tabelle mit Agentenzuweisungen, Status und Aufgaben |
progress-{agent}.md | Jeder gestartete Agent | Aktuelle Zugnummer, woran der Agent arbeitet, Zwischenergebnisse |
result-{agent}.md | Jeder abgeschlossene Agent | Endstatus (COMPLETED/FAILED), geänderte Dateien, gefundene Probleme, Ergebnisse |
debug-{id}.md | /debug-Workflow | Bug-Diagnose, Grundursache, angewendete Korrektur, Regressionstest-Speicherort |
experiment-ledger.md | Qualitätsbewertungssystem | Experimentverfolgung: Baseline-Bewertungen, Deltas, Behalten-/Verwerfen-Entscheidungen |
lessons-learned.md | Automatisch am Sitzungsende generiert | Erkenntnisse aus verworfenen Experimenten (Delta <= -5) |
Wie das Dashboard sie liest
Das Dashboard verwendet mehrere Strategien zur Informationsextraktion:
-
Sitzungserkennung — Sucht zuerst nach
orchestrator-session.md, fällt dann auf die zuletzt modifiziertesession-*.md-Datei zurück. Analysiert den Status aus Schlüsselwörtern:RUNNING,IN PROGRESS,COMPLETED,DONE,FAILED,ERROR. -
Task-Board-Analyse — Liest
task-board.mdals Markdown-Tabelle. Extrahiert Agentenname, Status und Aufgabenbeschreibung aus den Spalten. -
Agentenerkennung — Ohne Task Board werden Agenten durch Scannen aller
.md-Dateien nach**Agent**: {name}-Mustern,Agent: {name}-Zeilen oder Dateinamen mit_agentoder-agententdeckt. -
Zugzählung — Für jeden entdeckten Agenten werden
progress-{agent}.md-Dateien gelesen und die Zugnummer austurn: N-Mustern extrahiert. -
Aktivitäts-Feed — Listet die 5 zuletzt modifizierten
.md-Dateien, extrahiert die letzte aussagekräftige Zeile (Überschriften, Statuszeilen, Aktionspunkte) als Aktivitätsnachricht.
Was jedes Dashboard anzeigt
Sitzungsstatus
Der obere Bereich zeigt:
- Sitzungs-ID — Extrahiert aus Sitzungsdateien (Format:
session-YYYYMMDD-HHMMSS). - Status — Farbcodiert: grün für LÄUFT, cyan für ABGESCHLOSSEN, rot für FEHLGESCHLAGEN, gelb für UNBEKANNT.
Task-Board
Die Agententabelle zeigt jeden erkannten Agenten mit:
- Agentenname — Die Domänenkennung (backend, frontend, mobile, qa, debug, pm).
- Status — Aktueller Zustand mit visuellem Indikator (läuft/abgeschlossen/fehlgeschlagen/blockiert/ausstehend).
- Zug — Die aktuelle Zugnummer des Agenten (wie viele Iterationen er abgeschlossen hat). Aus Fortschrittsdateien extrahiert.
- Aufgabe — Kurze Beschreibung der aktuellen Arbeit des Agenten (bei Bedarf gekürzt).
Agentenfortschritt
Der Fortschritt wird über progress-{agent}.md-Dateien verfolgt. Jede Datei wird vom Agenten während der Arbeit aktualisiert. Das Dashboard fragt diese Dateien ab nach:
- Zugnummer (inkrementiert mit dem Fortschritt des Agenten).
- Aktuelle Aktion (was der Agent gerade tut).
- Zwischenergebnisse (Teilabschlüsse).
Ergebnisse
Bei Abschluss schreibt ein Agent result-{agent}.md mit:
- Endstatus (COMPLETED oder FAILED).
- Liste der geänderten Dateien.
- Aufgetretene Probleme.
- Erzeugte Ergebnisse.
Das Dashboard erkennt den Abschluss durch das Vorhandensein dieser Datei und aktualisiert den Status des Agenten entsprechend.
Fehlerbehebungs-Handbuch
Signal 1: Agent zeigt "läuft" aber kein Zugfortschritt
Symptom: Das Dashboard zeigt einen Agenten als laufend, aber die Zugnummer hat sich seit mehreren Minuten nicht geändert.
Mögliche Ursachen:
- Der Agent steckt bei einer langen Operation fest (großer Codebasis-Scan, langsamer API-Aufruf).
- Der Agent ist abgestürzt, aber die PID-Datei existiert noch.
- Der Agent wartet auf Benutzereingabe (sollte im Auto-Approve-Modus nicht vorkommen).
Maßnahmen:
- Logdatei des Agenten prüfen:
cat /tmp/subagent-{session-id}-{agent-id}.log - Prüfen, ob der Prozess tatsächlich läuft:
oma agent:status {session-id} {agent-id} - Falls der Prozess nicht läuft, aber der Status "läuft" zeigt, ist der Agent abgestürzt. Mit Fehlerkontext erneut starten.
Signal 2: Agent zeigt "abgestürzt"
Symptom: oma agent:status gibt crashed für einen Agenten zurück.
Mögliche Ursachen:
- Der CLI-Vendor-Prozess wurde unerwartet beendet (Speichermangel, API-Kontingent überschritten, Netzwerk-Timeout).
- Das Workspace-Verzeichnis wurde gelöscht oder Berechtigungen geändert.
- Die Vendor-CLI ist nicht installiert oder nicht authentifiziert.
Maßnahmen:
- Logdatei auf Fehlerdetails prüfen:
cat /tmp/subagent-{session-id}-{agent-id}.log - CLI-Installation verifizieren:
oma doctor - Authentifizierung prüfen:
oma auth:status - Agenten mit derselben Aufgabe erneut starten:
oma agent:spawn {agent-id} "{task}" {session-id} -w {workspace}
Signal 3: Dashboard zeigt "Noch keine Agenten erkannt"
Symptom: Das Dashboard läuft, zeigt aber keine Agenten.
Mögliche Ursachen:
- Der Workflow hat den Agenten-Spawning-Schritt noch nicht erreicht.
- Das
.serena/memories/-Verzeichnis ist leer. - Das Dashboard überwacht das falsche Verzeichnis.
Maßnahmen:
- Memories-Verzeichnis verifizieren:
ls -la .serena/memories/ - Prüfen, ob der Workflow noch in der Planungsphase ist (Agenten wurden noch nicht gestartet).
- Sicherstellen, dass das Dashboard das richtige Projektverzeichnis überwacht: Das Dashboard löst den Memories-Pfad vom aktuellen Arbeitsverzeichnis auf.
- Bei benutzerdefiniertem Pfad:
MEMORIES_DIR=/path/to/.serena/memories oma dashboard
Signal 4: Web-Dashboard zeigt "Getrennt"
Symptom: Das Verbindungsbadge des Web-Dashboards zeigt "Disconnected" in Rot.
Mögliche Ursachen:
- Der
oma dashboard:web-Prozess wurde beendet. - Ein Netzwerkproblem zwischen Browser und localhost.
- Der Port wird von einem anderen Prozess verwendet.
Maßnahmen:
- Prüfen, ob der Dashboard-Prozess läuft:
ps aux | grep dashboard - Einen anderen Port versuchen:
DASHBOARD_PORT=8080 oma dashboard:web - Port-Verfügbarkeit prüfen:
lsof -i :9847 - Das Web-Dashboard verbindet sich automatisch mit exponentiellem Backoff (Start bei 1 s, 1,5x-Multiplikator, max. 10 s). Einige Sekunden auf Wiederverbindung warten.
Pre-Merge-Überwachungscheckliste
Bevor eine Multi-Agenten-Sitzung als abgeschlossen gilt, über das Dashboard verifizieren:
- Alle Agenten zeigen "abgeschlossen" — Keine Agenten im Zustand "läuft" oder "blockiert" hängengeblieben.
- Keine Agenten zeigen "fehlgeschlagen" — Falls welche fehlgeschlagen sind, Logs prüfen und erneut starten.
- QA-Agent hat sein Review abgeschlossen — Nach
result-qa-agent.mdoderresult-qa.mdsuchen. - Null CRITICAL-/HIGH-Befunde — QA-Ergebnisdatei auf Schweregrad-Zählungen prüfen.
- Sitzungsstatus ist ABGESCHLOSSEN — Die Sitzungsdatei sollte den Endstatus zeigen.
- Aktivitäts-Feed zeigt Abschlussbericht — Die letzte Aktivität sollte der Zusammenfassungsbericht sein.
Abschlusskriterien
Die Dashboard-Überwachung ist abgeschlossen, wenn:
- Alle gestarteten Agenten einen Endzustand erreicht haben (abgeschlossen oder fehlgeschlagen-und-behandelt).
- Der QA-Review-Zyklus ohne blockierende Probleme abgeschlossen wurde.
- Der Sitzungsstatus das Endergebnis widerspiegelt.
- Ergebnisse im Memory für zukünftige Referenz aufgezeichnet sind.
Technische Details
Terminal-Dashboard (oma dashboard)
- Dateiüberwachung: Verwendet chokidar mit
awaitWriteFinish(200 ms Stabilitätsschwelle, 50 ms Abfrageintervall), um das Rendern unvollständiger Dateischreibvorgänge zu vermeiden. - Rendering: Löscht und zeichnet das gesamte Terminal bei jedem Dateiänderungsereignis neu. Verwendet
picocolorsfür ANSI-Farbausgabe und Unicode-Rahmenzeichnungszeichen für den Rand. - Memory-Verzeichnis: Aufgelöst aus der Umgebungsvariable
MEMORIES_DIR, einem CLI-Argument oder{cwd}/.serena/memories. - Sauberes Beenden: Fängt
SIGINTundSIGTERM, schließt den chokidar-Watcher und beendet sich ordnungsgemäß.
Web-Dashboard (oma dashboard:web)
- HTTP-Server: Node.js
createServerliefert die HTML-Seite unter/und den JSON-Zustand unter/api/state. - WebSocket: Verwendet die
ws-Bibliothek. EinWebSocketServerwird an den HTTP-Server angehängt. Bei Verbindung erhält der Client sofort den vollständigen Zustand. Nachfolgende Updates werden als{ type: "update", event, file, data }-Nachrichten gepusht. - Dateiüberwachung: Selbes chokidar-Setup wie das Terminal-Dashboard. Dateiänderungen lösen eine
broadcast()-Funktion aus, die den aktuellen Zustand erstellt und an alle verbundenen WebSocket-Clients sendet. - Entprellung: Updates werden mit 100 ms entprellt, um das Überschwemmen von Clients bei schnellen Dateischreibvorgängen zu vermeiden (z. B. wenn mehrere Agenten gleichzeitig Fortschritt schreiben).
- Auto-Reconnect: Der Browser-Client verbindet sich mit exponentiellem Backoff (1 s initial, 1,5x-Multiplikator, 10 s max) wieder, wenn die WebSocket-Verbindung abbricht.
- Port: Standard 9847, konfigurierbar über die Umgebungsvariable
DASHBOARD_PORT. - Zustandsaufbau: Die
buildFullState()-Funktion aggregiert Sitzungsinformationen, Task-Board, Agentenstatus, Zugzähler und Aktivitäts-Feed bei jedem Update in ein einzelnes JSON-Objekt.