6.0 KiB
05 — Command System (#nexa:*)
Nexa "hört" auf folgende Kommandos in Memos-Kommentaren oder als Memo-Inhalt mit Hashtag:
🔧 Konfigurations-Kommandos
#nexa:config
- Beschreibung: Triggert Autodiscovery aller Services (Nextcloud Listen/Kalender, Qdrant Collections, LiteLLM-Modelle, Mail-Konto).
- Läuft auch automatisch:
- Täglich (cron in n8n) — neue Listen / Kalender werden ohne manuelles Eingreifen aufgenommen.
- Bei Cache-Miss — wenn ein Workflow eine Liste/ID nicht mehr findet, läuft Discovery einmal, dann Retry.
- Antwort: Postet Report mit den aktuellen Konfigurationen als Memos-Kommentar.
- Speichert: Konfiguration in der Qdrant
_configNamespace (nicht in.env).
#nexa:config
Beispiel-Response:
✅ Autodiscovery abgeschlossen (2026-05-04T23:59):
- Nextcloud Listen: Persönlich (id=14), DLR (id=dlr-1), Einkaufsliste (id=…), Wunschliste (id=…)
- Nextcloud Kalender: Persönlich, DLR, Einkaufsliste, Wunschliste
- Mail-Konto: fkrebs@nucli.de (Posteingang, Archiv, Junk, Waiting)
- Qdrant Collection: nexa_knowledge_text (1024 dims, Cosine, 0 Punkte)
- LiteLLM-Modelle: nexa-chat, nexa-embed
#nexa:status
- Beschreibung: Zeigt den aktuellen System-Status
- Antwort: Uptime, verbundene Systeme, Memory-Stats
#nexa:status
#nexa:sync-obsidian
- Beschreibung: Triggert sofortige Synchronisierung mit Obsidian Vault
- Optional Parameter:
--vault=/path/to/vaultoder--forcefür Neuindexierung
#nexa:sync-obsidian --force
📊 Memory & RAG Kommandos
#nexa:ask [question]
- Beschreibung: Semantische Suche in Qdrant (RAG) basierend auf Obsidian + Memos
- Antwort: Top-3 Treffer mit Quellen
#nexa:ask Wie implementierten wir das JWT-Middleware-Pattern?
#nexa:learn [topic]
- Beschreibung: Explizit neue Information in Qdrant speichern (mit Tags)
- Optional:
--tag=architecture--source=obsidian/notes/arch.md--permanent(überschreibt Default-TTL)
#nexa:learn Das Routing-Schema unterscheidet Work vs. Personal via SAIA-Kontext-Analyse --tag=architecture
#nexa:forget [query-or-iri]
- Beschreibung: Löscht passende Einträge aus Qdrant + GraphDB sofort.
- Beispiel:
#nexa:forget --source=rss --older-than=14d
#nexa:retain [source_type] [days]
- Beschreibung: Setzt die Default-Retention für einen Source-Type (Default-Werte siehe 08 § Memory sources & retention).
#nexa:ask [question] [--web]
- Beschreibung: Semantische Suche in Qdrant. Mit
--weberweitert Nexa die Suche um eine SearXNG-Abfrage (redis-searxng), holt die Top-3 Treffer viacrawl4ai-mcp+markitdown-mcp, embedded sie und nutzt das gemeinsame Material für die Antwort. Geholte Seiten bleiben 90 Tage im Speicher (TTL siehe oben).
🎯 Workflow-Kommandos
#nexa:route-test [text]
- Beschreibung: Testet die Klassifizierung (Work/Personal) ohne Task zu erstellen
#nexa:route-test Muss morgen die Präsentation für den Client fertigstellen
Response:
💬 Klassifizierung (Test-Mode):
- Kontext: WORK
- Vertrauen: 0.95
- Begründung: "Client-Präsentation → professioneller Kontext"
#nexa:email-digest
- Beschreibung: Triggert sofortige Email-Zusammenfassung (sonst tägl. 7 Uhr)
#nexa:email-digest
#nexa:digest
- Beschreibung: Tägliches Morgen-Digest. Läuft automatisch (07:00). Inhalt:
- Kurze Mail-Zusammenfassung (siehe
#nexa:email-digest). - Anstehende Tasks heute (DLR + Persönlich, nach Urgency).
- Drift-Report aus Phase 6 (sobald aktiv).
- Re-ask Block — siehe unten. Maximal 1 offene Frage pro Digest, nur wenn der Digest sonst kurz genug ist.
- Kurze Mail-Zusammenfassung (siehe
Re-ask der offenen Fragen (docs/11-open-questions.md)
Nexa führt im GraphDB pro offener Frage nexa:askedCount, nexa:lastAskedAt, nexa:nextAskAt. Backoff-Schema:
| Mal | Wartezeit bis zur nächsten Frage |
|---|---|
| 1 → 2 | 3 Tage |
| 2 → 3 | 7 Tage |
| 3 → 4 | 21 Tage |
| ≥ 5 | 60 Tage |
Im Morgen-Digest wird eine offene Frage angehängt — und zwar nur wenn:
- Der Digest sonst < 800 Zeichen lang wäre (Capacity-Guard, damit es nicht nervt).
nextAskAt <= today.- Bevorzugt die Frage mit dem kleinsten
askedCount(zuerst neue Fragen, alte selten).
Antwortet der User direkt unter dem Digest-Memo, parst Nexa die Antwort, markiert die Frage in docs/11 als resolved (Phase 6.4 — Self-update of docs) und committet einen Diff zur Review.
#nexa:remind
- Manuelles Triggern einer Re-Ask, ignoriert Backoff. Nützlich für Rückfragen mitten im Tag.
#nexa:answered
- Beantwortet eine offene Frage explizit. Setzt
resolvedim GraphDB und schlägt einendocs/11-Diff vor.
🔐 Admin-Kommandos
#nexa:reset-config
- Beschreibung: Löscht gespeicherte Konfiguration, triggert neuen Autodiscovery
- Warnung: Alle benutzerdefinierten Settings werden vergessen
#nexa:reset-config
#nexa:export-state
- Beschreibung: Exportiert aktuellen State als JSON (für Backups)
#nexa:export-state
📝 Implementierung in n8n
Ein Command Parser läuft immer mit:
- Memos Webhook empfängt alle Memos
- Regex Check: Sucht nach
#nexa:command - Router: Versendet an entsprechenden n8n-Workflow
- Antwort: Postet Reply als Kommentar/Edit
Command Parser Regex:
^#nexa:(\w+)(?:\s+([^\n]*?))?(?:$|\s*--)
Extrahiert: [command, parameters]
🎛️ Dynamische Konfigurationsspeicherung
Statt .env zu editieren:
-
First Run:
#nexa:configspeichert zu lokalen Metadata -
Speich-Ziel:
- Primary: Qdrant Metadata (als
_configNamespace) - Fallback:
nexa-core/config/runtime_config.json(gitignored) - Notfall: .env (nur initial)
- Primary: Qdrant Metadata (als
-
Reload-Logik: Bei jedem Workflow-Start werden Settings aus Qdrant geladen
Das macht Nexa vollständig selbstständig nach dem initialem Setup!