Schnellstart
Fügen Sie dies inopenclaw.json für eine Einrichtung mit sicheren Standardeinstellungen ein — Plugin aktiviert, auf
den main-Agent beschränkt, nur Direktnachrichten-Sitzungen, übernimmt das Sitzungsmodell,
wenn verfügbar:
plugins.entries.active-memory.enabled: trueaktiviert das Pluginconfig.agents: ["main"]bindet nur denmain-Agent in Active Memory einconfig.allowedChatTypes: ["direct"]beschränkt es auf Direktnachrichten-Sitzungen (Gruppen/Kanäle ausdrücklich aktivieren)config.model(optional) legt ein dediziertes Abrufmodell fest; wenn nicht gesetzt, wird das aktuelle Sitzungsmodell übernommenconfig.modelFallbackwird nur verwendet, wenn kein explizites oder übernommenes Modell aufgelöst wirdconfig.promptStyle: "balanced"ist der Standard für den Modusrecent- Active Memory wird weiterhin nur für geeignete interaktive persistente Chat-Sitzungen ausgeführt
Geschwindigkeitsempfehlungen
Die einfachste Einrichtung besteht darin,config.model nicht zu setzen und Active Memory
dasselbe Modell verwenden zu lassen, das Sie bereits für normale Antworten nutzen. Das ist die sicherste Standardeinstellung,
weil sie Ihren bestehenden Provider-, Authentifizierungs- und Modellpräferenzen folgt.
Wenn sich Active Memory schneller anfühlen soll, verwenden Sie ein dediziertes Inferenzmodell,
statt das Haupt-Chat-Modell mitzubenutzen. Die Abrufqualität ist wichtig, aber die Latenz
ist wichtiger als im Hauptantwortpfad, und die Tool-Oberfläche von Active Memory
ist schmal (es ruft nur verfügbare Speicherabruf-Tools auf).
Gute Optionen für schnelle Modelle:
cerebras/gpt-oss-120bfür ein dediziertes Abrufmodell mit niedriger Latenzgoogle/gemini-3-flashals Fallback mit niedriger Latenz, ohne Ihr primäres Chat-Modell zu ändern- Ihr normales Sitzungsmodell, indem Sie
config.modelnicht setzen
Cerebras-Einrichtung
Fügen Sie einen Cerebras-Provider hinzu und richten Sie Active Memory darauf aus:chat/completions für das
gewählte Modell hat — die Sichtbarkeit in /v1/models allein garantiert dies nicht.
Sichtbarkeit
Active Memory fügt dem Modell ein verborgenes, nicht vertrauenswürdiges Prompt-Präfix hinzu. Es legt keine rohen<active_memory_plugin>...</active_memory_plugin>-Tags in der
normalen, für Clients sichtbaren Antwort offen.
Sitzungs-Umschalter
Verwenden Sie den Plugin-Befehl, wenn Sie Active Memory für die aktuelle Chat-Sitzung pausieren oder fortsetzen möchten, ohne die Konfiguration zu bearbeiten:plugins.entries.active-memory.enabled noch Agent-Zielauswahl oder andere globale
Konfiguration.
Wenn der Befehl die Konfiguration schreiben und Active Memory für
alle Sitzungen pausieren oder fortsetzen soll, verwenden Sie die explizite globale Form:
plugins.entries.active-memory.config.enabled. Sie lässt
plugins.entries.active-memory.enabled aktiviert, damit der Befehl verfügbar bleibt, um
Active Memory später wieder einzuschalten.
Wenn Sie sehen möchten, was Active Memory in einer Live-Sitzung tut, aktivieren Sie die
Sitzungs-Umschalter, die der gewünschten Ausgabe entsprechen:
- eine Active-Memory-Statuszeile wie
Active Memory: status=ok elapsed=842ms query=recent summary=34 chars, wenn/verbose on - eine lesbare Debug-Zusammenfassung wie
Active Memory Debug: Lemon pepper wings with blue cheese., wenn/trace on
/trace raw aktivieren, zeigt der nachverfolgte Block Model Input (User Role)
das verborgene Active-Memory-Präfix als:
Wann es ausgeführt wird
Active Memory verwendet zwei Prüfungen:- Konfigurations-Opt-in
Das Plugin muss aktiviert sein, und die aktuelle Agent-ID muss in
plugins.entries.active-memory.config.agentserscheinen. - Strikte Laufzeit-Eignung Selbst wenn es aktiviert und adressiert ist, wird Active Memory nur für geeignete interaktive persistente Chat-Sitzungen ausgeführt.
Sitzungstypen
config.allowedChatTypes steuert, welche Arten von Konversationen Active
Memory überhaupt ausführen dürfen.
Der Standard ist:
config.allowedChatIds und
config.deniedChatIds, nachdem Sie die erlaubten Sitzungstypen gewählt haben.
allowedChatIds ist eine explizite Zulassungsliste aufgelöster Konversations-IDs. Wenn sie
nicht leer ist, wird Active Memory nur ausgeführt, wenn die Konversations-ID der Sitzung in
dieser Liste enthalten ist. Dies schränkt alle erlaubten Chat-Typen gleichzeitig ein, einschließlich
Direktnachrichten. Wenn Sie alle Direktnachrichten plus nur bestimmte Gruppen möchten, nehmen Sie
die direkten Peer-IDs in allowedChatIds auf oder halten Sie allowedChatTypes auf
die Gruppen-/Channel-Einführung beschränkt, die Sie testen.
deniedChatIds ist eine explizite Sperrliste. Sie hat immer Vorrang vor
allowedChatTypes und allowedChatIds, sodass eine passende Konversation übersprungen wird,
selbst wenn ihr Sitzungstyp ansonsten erlaubt ist.
Die IDs stammen aus dem persistenten Channel-Sitzungsschlüssel: zum Beispiel Feishu
chat_id / open_id, Telegram-Chat-ID oder Slack-Channel-ID. Der Abgleich erfolgt
ohne Berücksichtigung der Groß-/Kleinschreibung. Wenn allowedChatIds nicht leer ist und OpenClaw keine
Konversations-ID für die Sitzung auflösen kann, überspringt Active Memory den Turn, statt
zu raten.
Beispiel:
Wo es ausgeführt wird
Active Memory ist eine Funktion zur Anreicherung von Konversationen, keine plattformweite Inferenzfunktion.| Oberfläche | Führt Active Memory aus? |
|---|---|
| Control UI / persistente Web-Chat-Sitzungen | Ja, wenn das Plugin aktiviert ist und der Agent adressiert ist |
| Andere interaktive Channel-Sitzungen auf demselben persistenten Chat-Pfad | Ja, wenn das Plugin aktiviert ist und der Agent adressiert ist |
| Headless-Einmalläufe | Nein |
| Heartbeat-/Hintergrundläufe | Nein |
Generische interne agent-command-Pfade | Nein |
| Sub-Agent-/interne Hilfsausführung | Nein |
Warum verwenden
Verwenden Sie Active Memory, wenn:- die Sitzung persistent und benutzerorientiert ist
- der Agent über sinnvollen Langzeitspeicher verfügt, der durchsucht werden kann
- Kontinuität und Personalisierung wichtiger sind als rohe Prompt-Deterministik
- stabile Präferenzen
- wiederkehrende Gewohnheiten
- langfristigen Benutzerkontext, der natürlich erscheinen sollte
- Automatisierung
- interne Worker
- einmalige API-Aufgaben
- Orte, an denen verborgene Personalisierung überraschend wäre
Funktionsweise
Die Laufzeitform ist: Der blockierende Speicher-Sub-Agent kann nur die konfigurierten Speicherabruf-Tools verwenden. Standardmäßig sind das:memory_searchmemory_get
plugins.slots.memory memory-lancedb ist, ist stattdessen memory_recall
der Standard. Setzen Sie config.toolsAllow, wenn ein anderer Speicher-Provider einen
anderen Abruf-Tool-Vertrag bereitstellt.
Wenn die Verbindung schwach ist, sollte er NONE zurückgeben.
Abfragemodi
config.queryMode steuert, wie viel Konversation der blockierende Speicher-Sub-Agent
sieht. Wählen Sie den kleinsten Modus, der Folgefragen noch gut beantwortet;
Zeitüberschreitungsbudgets sollten mit der Kontextgröße wachsen (message < recent < full).
- message
- recent
- full
Nur die neueste Benutzernachricht wird gesendet.Verwenden Sie dies, wenn:
- Sie das schnellste Verhalten möchten
- Sie die stärkste Gewichtung zugunsten des Abrufs stabiler Präferenzen möchten
- Folge-Turns keinen Konversationskontext benötigen
3000 bis 5000 ms für config.timeoutMs.Prompt-Stile
config.promptStyle steuert, wie bereitwillig oder streng der blockierende Memory-Sub-Agent ist,
wenn er entscheidet, ob er Memory zurückgibt.
Verfügbare Stile:
balanced: allgemeiner Standard für den Modusrecentstrict: am wenigsten bereitwillig; am besten, wenn Sie möglichst wenig Überschneidung aus nahem Kontext möchtencontextual: am stärksten auf Kontinuität ausgelegt; am besten, wenn der Gesprächsverlauf wichtiger sein sollrecall-heavy: eher bereit, Memory bei weicheren, aber weiterhin plausiblen Treffern bereitzustellenprecision-heavy: bevorzugt aggressivNONE, sofern der Treffer nicht offensichtlich istpreference-only: optimiert für Favoriten, Gewohnheiten, Routinen, Geschmack und wiederkehrende persönliche Fakten
config.promptStyle nicht gesetzt ist:
config.promptStyle explizit setzen, hat diese Überschreibung Vorrang.
Beispiel:
Model-Fallback-Richtlinie
Wennconfig.model nicht gesetzt ist, versucht Active Memory, ein Modell in dieser Reihenfolge aufzulösen:
config.modelFallback steuert den konfigurierten Fallback-Schritt.
Optionaler benutzerdefinierter Fallback:
config.modelFallbackPolicy wird nur als veraltetes Kompatibilitätsfeld
für ältere Konfigurationen beibehalten. Es ändert das Laufzeitverhalten nicht mehr.
Memory-Tools
Standardmäßig erlaubt Active Memory dem blockierenden Recall-Sub-Agent,memory_search und memory_get aufzurufen. Das entspricht dem integrierten memory-core-
Vertrag. Wenn plugins.slots.memory memory-lancedb auswählt und
config.toolsAllow nicht gesetzt ist, behält Active Memory das bestehende LanceDB-Verhalten bei
und verwendet stattdessen memory_recall.
Wenn Sie ein anderes Memory-Plugin verwenden, setzen Sie config.toolsAllow auf die exakten Tool-
Namen, die dieses Plugin registriert. Active Memory listet diese Tools im Recall-
Prompt auf und übergibt dieselbe Liste an den eingebetteten Sub-Agent. Wenn keines der
konfigurierten Tools verfügbar ist oder der Memory-Sub-Agent fehlschlägt, überspringt Active Memory
den Recall für diesen Turn und die Hauptantwort wird ohne Memory-Kontext fortgesetzt.
Bei benutzerdefinierten Recall-Tools zählt eine nicht leere, modell-sichtbare Tool-Ausgabe als Recall-
Nachweis, sofern strukturierte Ergebnisfelder nicht ausdrücklich ein leeres Ergebnis oder
einen Fehler melden.
toolsAllow akzeptiert nur konkrete Memory-Tool-Namen. Wildcards, group:*-
Einträge und Kern-Agent-Tools wie read, exec, message und
web_search werden ignoriert, bevor der verborgene Memory-Sub-Agent startet.
Hinweis zum Standardverhalten: Active Memory enthält memory_recall nicht mehr in der
Standard-Allowlist von memory-core. Bestehende memory-lancedb-Setups funktionieren weiter,
wenn plugins.slots.memory auf memory-lancedb gesetzt ist. Explizites toolsAllow
überschreibt immer den automatischen Standard.
Integriertes memory-core
Das Standard-Setup benötigt kein explizitestoolsAllow:
LanceDB-Memory
Das gebündelte Pluginmemory-lancedb stellt memory_recall bereit. Die Auswahl des
Memory-Slots reicht aus, damit Active Memory dieses Recall-Tool verwendet:
Lossless Claw
Lossless Claw ist ein Kontext-Engine-Plugin mit eigenen Recall-Tools. Installieren und konfigurieren Sie es zuerst als Kontext-Engine; siehe Kontext-Engine. Lassen Sie Active Memory anschließend die Recall-Tools von Lossless Claw verwenden:lcm_expand nicht in toolsAllow für den Haupt-Sub-Agent von Active Memory auf.
Lossless Claw verwendet es als untergeordnetes delegiertes Expansion-Tool.
Erweiterte Escape Hatches
Diese Optionen sind absichtlich nicht Teil des empfohlenen Setups.config.thinking kann das Thinking-Level des blockierenden Memory-Sub-Agent überschreiben:
config.promptAppend fügt nach dem Standard-Prompt von Active Memory und vor dem Gesprächskontext zusätzliche Operator-Anweisungen hinzu:
promptAppend mit benutzerdefiniertem toolsAllow, wenn ein nicht zum Kern gehörendes Memory-Plugin
Provider-spezifische Tool-Reihenfolge oder Anweisungen zur Query-Formung benötigt.
config.promptOverride ersetzt den Standard-Prompt von Active Memory. OpenClaw
hängt den Gesprächskontext anschließend weiterhin an:
NONE
oder kompakten Nutzerfakten-Kontext für das Hauptmodell zurückzugeben.
Transcript-Persistenz
Blockierende Memory-Sub-Agent-Läufe von Active Memory erstellen während des Aufrufs des blockierenden Memory-Sub-Agent ein echtessession.jsonl-
Transcript.
Standardmäßig ist dieses Transcript temporär:
- es wird in ein temporäres Verzeichnis geschrieben
- es wird nur für den Lauf des blockierenden Memory-Sub-Agent verwendet
- es wird unmittelbar nach Abschluss des Laufs gelöscht
config.transcriptDir ändern.
Verwenden Sie dies vorsichtig:
- Transcripts blockierender Memory-Sub-Agents können sich in stark frequentierten Sitzungen schnell ansammeln
- der Query-Modus
fullkann viel Gesprächskontext duplizieren - diese Transcripts enthalten verborgenen Prompt-Kontext und abgerufene Memories
Konfiguration
Die gesamte Active-Memory-Konfiguration befindet sich unter:| Schlüssel | Typ | Bedeutung |
|---|---|---|
enabled | boolean | Aktiviert das Plugin selbst |
config.agents | string[] | Agent-IDs, die Active Memory verwenden dürfen |
config.model | string | Optionale Modellreferenz für den blockierenden Speicher-Sub-Agent; wenn nicht gesetzt, verwendet Active Memory das aktuelle Sitzungsmodell |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | Sitzungstypen, die Active Memory ausführen dürfen; standardmäßig Sitzungen im Stil von Direktnachrichten |
config.allowedChatIds | string[] | Optionale Allowlist pro Unterhaltung, die nach allowedChatTypes angewendet wird; nicht leere Listen führen zu Fail-Closed-Verhalten |
config.deniedChatIds | string[] | Optionale Denylist pro Unterhaltung, die erlaubte Sitzungstypen und erlaubte IDs überschreibt |
config.queryMode | "message" | "recent" | "full" | Steuert, wie viel Unterhaltung der blockierende Speicher-Sub-Agent sieht |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Steuert, wie bereitwillig oder strikt der blockierende Speicher-Sub-Agent entscheidet, ob Speicher zurückgegeben wird |
config.toolsAllow | string[] | Konkrete Speicher-Tool-Namen, die der blockierende Speicher-Sub-Agent aufrufen darf; standardmäßig ["memory_search", "memory_get"] oder ["memory_recall"], wenn plugins.slots.memory memory-lancedb ist; Platzhalter, group:*-Einträge und Core-Agent-Tools werden ignoriert |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | Erweiterte Thinking-Überschreibung für den blockierenden Speicher-Sub-Agent; standardmäßig off für Geschwindigkeit |
config.promptOverride | string | Erweiterter vollständiger Prompt-Ersatz; für normale Nutzung nicht empfohlen |
config.promptAppend | string | Erweiterte zusätzliche Anweisungen, die an den Standard-Prompt oder den überschriebenen Prompt angehängt werden |
config.timeoutMs | number | Hartes Zeitlimit für den blockierenden Speicher-Sub-Agent, begrenzt auf 120000 ms |
config.setupGraceTimeoutMs | number | Erweitertes zusätzliches Einrichtungsbudget, bevor das Abruf-Zeitlimit abläuft; standardmäßig 0 und begrenzt auf 30000 ms. Siehe Cold-Start-Nachfrist für Upgrade-Hinweise zu v2026.4.x |
config.maxSummaryChars | number | Maximal zulässige Gesamtzeichenanzahl in der Active-Memory-Zusammenfassung |
config.logging | boolean | Gibt Active-Memory-Protokolle während der Feinabstimmung aus |
config.persistTranscripts | boolean | Behält Transkripte des blockierenden Speicher-Sub-Agents auf der Festplatte, statt temporäre Dateien zu löschen |
config.transcriptDir | string | Relatives Transkriptverzeichnis des blockierenden Speicher-Sub-Agents unter dem Ordner für Agent-Sitzungen |
| Schlüssel | Typ | Bedeutung |
|---|---|---|
config.maxSummaryChars | number | Maximal zulässige Gesamtzeichenanzahl in der Active-Memory-Zusammenfassung |
config.recentUserTurns | number | Vorherige Benutzerbeiträge, die einbezogen werden, wenn queryMode recent ist |
config.recentAssistantTurns | number | Vorherige Assistentenbeiträge, die einbezogen werden, wenn queryMode recent ist |
config.recentUserChars | number | Maximale Zeichenanzahl pro aktuellem Benutzerbeitrag |
config.recentAssistantChars | number | Maximale Zeichenanzahl pro aktuellem Assistentenbeitrag |
config.cacheTtlMs | number | Cache-Wiederverwendung für wiederholte identische Abfragen (Bereich: 1000-120000 ms; Standard: 15000) |
config.circuitBreakerMaxTimeouts | number | Abruf nach so vielen aufeinanderfolgenden Zeitüberschreitungen für denselben Agent/dasselbe Modell überspringen. Wird bei erfolgreichem Abruf oder nach Ablauf der Abkühlzeit zurückgesetzt (Bereich: 1-20; Standard: 3). |
config.circuitBreakerCooldownMs | number | Wie lange der Abruf nach Auslösen des Circuit Breakers übersprungen wird, in ms (Bereich: 5000-600000; Standard: 60000). |
Empfohlene Einrichtung
Beginnen Sie mitrecent.
/verbose on für die
normale Statuszeile und /trace on für die Active-Memory-Debug-Zusammenfassung, statt
nach einem separaten Active-Memory-Debug-Befehl zu suchen. In Chat-Kanälen werden diese
Diagnosezeilen nach der Hauptantwort des Assistenten gesendet, nicht davor.
Wechseln Sie dann zu:
message, wenn Sie niedrigere Latenz wünschenfull, wenn Sie entscheiden, dass zusätzlicher Kontext den langsameren blockierenden Speicher-Sub-Agent wert ist
Cold-Start-Nachfrist
Vor v2026.5.2 hat das Plugin Ihr konfiguriertestimeoutMs während des Cold-Starts stillschweigend um
zusätzliche 30000 ms erweitert, sodass Modell-Warm-up, Laden des Einbettungsindexes und
der erste Abruf ein gemeinsames größeres Budget verwenden konnten. v2026.5.2 hat diese Nachfrist
hinter eine explizite setupGraceTimeoutMs-Konfiguration verschoben — Ihr konfiguriertes timeoutMs
ist jetzt standardmäßig das Budget für die Abrufarbeit, sofern Sie sich nicht explizit dafür entscheiden. Der blockierende Hook
verwendet zwei begrenzte Phasen um dieses Budget herum: bis zu 1500 ms für Sitzungs-/Konfigurations-
Vorabprüfung vor Beginn des Abrufs, danach separate feste 1500 ms für Abbruch-
Abwicklung und Transkriptwiederherstellung, nachdem die Abrufarbeit gestoppt wurde. Keine dieser Zulagen
verlängert die Ausführung von Modell oder Tool.
Wenn Sie von v2026.4.x aktualisiert haben und timeoutMs auf einen Wert gesetzt haben, der für die
alte Welt mit impliziter Nachfrist abgestimmt war (der empfohlene Startwert timeoutMs: 15000 ist ein
Beispiel), setzen Sie setupGraceTimeoutMs: 30000, um den Prompt-Build-Hook und
die äußeren Watchdog-Budgets wieder auf die effektiven Werte vor v5.2 zu erweitern:
timeoutMs + setupGraceTimeoutMs + 3000 ms.
Der eingebettete Recall-Runner verwendet dasselbe effektive Timeout-Budget, sodass
setupGraceTimeoutMs sowohl den äußeren Prompt-Build-Watchdog als auch den inneren
blockierenden Recall-Lauf abdeckt. Die Preflight-Obergrenze deckt Sitzungs-/Konfigurationsprüfungen ab, bevor dieses
Budget beginnt. Die Nach-Recall-Zulage lässt den äußeren Hook den Abort-Cleanup
abschließen und den endgültigen Transkriptstatus lesen.
Für ressourcenknappe Gateways, bei denen Kaltstartlatenz ein bekannter Trade-off ist,
funktionieren auch niedrigere Werte (5000–15000 ms) — der Trade-off ist eine höhere
Wahrscheinlichkeit, dass der allererste Recall nach einem Gateway-Neustart leer
zurückkehrt, während das Warm-up abgeschlossen wird.
Debugging
Wenn Active Memory nicht dort angezeigt wird, wo Sie es erwarten:- Bestätigen Sie, dass das Plugin unter
plugins.entries.active-memory.enabledaktiviert ist. - Bestätigen Sie, dass die aktuelle Agent-ID in
config.agentsaufgeführt ist. - Bestätigen Sie, dass Sie über eine interaktive persistente Chat-Sitzung testen.
- Aktivieren Sie
config.logging: trueund beobachten Sie die Gateway-Logs. - Prüfen Sie mit
openclaw memory status --deep, ob die Memory-Suche selbst funktioniert.
maxSummaryChars
- senken Sie
queryMode - senken Sie
timeoutMs - reduzieren Sie die Anzahl der letzten Turns
- reduzieren Sie die Zeichenobergrenzen pro Turn
Häufige Probleme
Active Memory nutzt die Recall-Pipeline des konfigurierten Memory-Plugins, daher sind die meisten Recall-Überraschungen Embedding-Provider-Probleme, keine Active Memory-Fehler. Der standardmäßigememory-core-Pfad verwendet memory_search und memory_get; der
memory-lancedb-Slot verwendet memory_recall. Wenn Sie ein anderes Memory-Plugin verwenden,
bestätigen Sie, dass config.toolsAllow die Tools benennt, die dieses Plugin tatsächlich registriert.
Embedding-Provider wurde gewechselt oder funktioniert nicht mehr
Embedding-Provider wurde gewechselt oder funktioniert nicht mehr
Wenn
memorySearch.provider nicht gesetzt ist, verwendet OpenClaw OpenAI-Embeddings. Setzen Sie
memorySearch.provider explizit für lokale, Ollama-, Gemini-, Voyage-,
Mistral-, DeepInfra-, Bedrock-, GitHub Copilot- oder OpenAI-kompatible
Embeddings. Wenn der konfigurierte Provider nicht ausgeführt werden kann, kann memory_search
auf rein lexikalisches Retrieval zurückfallen; Laufzeitfehler, nachdem ein Provider
bereits ausgewählt wurde, fallen nicht automatisch zurück.Setzen Sie eine optionale memorySearch.fallback nur, wenn Sie einen bewussten
einzelnen Fallback wünschen. Siehe Memory Search für die vollständige
Liste der Provider und Beispiele.Recall wirkt langsam, leer oder inkonsistent
Recall wirkt langsam, leer oder inkonsistent
- Aktivieren Sie
/trace on, um die Plugin-eigene Active Memory-Debug- Zusammenfassung in der Sitzung sichtbar zu machen. - Aktivieren Sie
/verbose on, um zusätzlich die Statuszeile🧩 Active Memory: ...nach jeder Antwort zu sehen. - Beobachten Sie Gateway-Logs auf
active-memory: ... start|done,memory sync failed (search-bootstrap)oder Provider-Embedding-Fehler. - Führen Sie
openclaw memory status --deepaus, um das Memory-Search-Backend und den Indexzustand zu prüfen. - Wenn Sie
ollamaverwenden, bestätigen Sie, dass das Embedding-Modell installiert ist (ollama list).
Erster Recall nach Gateway-Neustart gibt `status=timeout` zurück
Erster Recall nach Gateway-Neustart gibt `status=timeout` zurück
In v2026.5.2 und später kann der Lauf, wenn das Kaltstart-Setup (Modell-Warm-up + Laden des Embedding-
Index) bis zum Start des ersten Recalls nicht abgeschlossen ist,
das konfigurierte
timeoutMs-Budget erreichen und status=timeout
mit leerer Ausgabe zurückgeben. Gateway-Logs zeigen active-memory timeout after Nms
um die erste berechtigte Antwort nach einem Neustart herum.Siehe Kaltstart-Toleranz unter Empfohlene Einrichtung für den
empfohlenen setupGraceTimeoutMs-Wert.