openclaw doctor ist das Reparatur- und Migrationstool für OpenClaw. Es behebt veraltete Konfigurationen/Zustände, prüft die Integrität und stellt umsetzbare Reparaturschritte bereit.
Schnellstart
Headless- und Automatisierungsmodi
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
Schreibgeschützter Lint-Modus
openclaw doctor --lint ist das automatisierungsfreundliche Gegenstück zu
openclaw doctor --fix. Beide verwenden die Integritätsprüfungen von doctor, aber ihre Ausrichtung ist
unterschiedlich:
| Modus | Eingabeaufforderungen | Schreibt Konfiguration/Zustand | Ausgabe | Verwenden für |
|---|---|---|---|---|
openclaw doctor | ja | nein | verständlicher Integritätsbericht | eine Person, die den Status prüft |
openclaw doctor --fix | manchmal | ja, gemäß Reparaturrichtlinie | verständliches Reparaturprotokoll | genehmigte Reparaturen anwenden |
openclaw doctor --lint | nein | nein | strukturierte Befunde | CI, Preflight und Review-Gates |
repair()-Implementierung bereitstellen.
doctor --fix wendet diese Reparaturen an, wenn sie vorhanden sind, und verwendet weiterhin den
bestehenden doctor-Reparaturablauf für Prüfungen, die noch nicht migriert wurden.
Der strukturierte Reparaturvertrag trennt außerdem Reparaturberichte von der Erkennung:
detect() meldet aktuelle Befunde, während repair() Änderungen,
Konfigurations-/Datei-Diffs und dateiunabhängige Nebenwirkungen melden kann. So bleibt der Migrationspfad
für zukünftige doctor --fix --dry-run- und Diff-Ausgaben offen, ohne dass Lint-Prüfungen
Mutationen planen.
Beispiele:
ok: ob ein sichtbarer Befund den ausgewählten Schweregrad-Schwellenwert erreicht hatchecksRun: Anzahl der ausgeführten IntegritätsprüfungenchecksSkipped: Prüfungen, die durch das ausgewählte Profil,--onlyoder--skipübersprungen wurdenfindings: strukturierte Diagnosen mitcheckId,severity,messageund optionalpath,line,column,ocPathundfixHint
0: keine Befunde auf oder über dem ausgewählten Schwellenwert1: ein oder mehrere Befunde haben den ausgewählten Schwellenwert erreicht2: Befehls-/Laufzeitfehler, bevor Lint-Befunde ausgegeben werden konnten
--severity-min info|warning|error, um sowohl zu steuern, was ausgegeben wird, als auch,
was einen Lint-Exit ungleich null verursacht. Verwenden Sie --all, um das vollständige Lint-Inventar auszuführen,
einschließlich tieferer Opt-in-Prüfungen, die vom standardmäßigen Automatisierungsset ausgeschlossen sind. Verwenden Sie --only <id> für enge Preflight-Gates und
--skip <id>, um eine laute Prüfung vorübergehend auszuschließen, während der Rest des
Lint-Laufs aktiv bleibt.
Lint-Ausgabeoptionen wie --json, --severity-min, --all, --only und
--skip müssen mit --lint kombiniert werden; reguläre doctor- und Reparaturläufe lehnen
sie ab.
Was es tut (Zusammenfassung)
Integrität, UI und Updates
Integrität, UI und Updates
- Optionales Preflight-Update für Git-Installationen (nur interaktiv).
- Prüfung der UI-Protokollaktualität (baut die Control UI neu, wenn das Protokollschema neuer ist).
- Integritätsprüfung und Neustartaufforderung.
- Skills-Statuszusammenfassung (zulässig/fehlend/blockiert) und Plugin-Status.
Konfiguration und Migrationen
Konfiguration und Migrationen
- Konfigurationsnormalisierung für Legacy-Werte.
- Migration der Talk-Konfiguration von Legacy-Flachfeldern
talk.*nachtalk.provider+talk.providers.<provider>. - Browser-Migrationsprüfungen für Legacy-Konfigurationen der Chrome-Erweiterung und Chrome-MCP-Bereitschaft.
- Warnungen zu OpenCode-Provider-Überschreibungen (
models.providers.opencode/models.providers.opencode-go). - Migration von Legacy-OpenAI-Codex-Providern/-Profilen (
openai-codex→openai) und Shadowing-Warnungen für veraltetemodels.providers.openai-codex. - Prüfung der OAuth-TLS-Voraussetzungen für OpenAI-Codex-OAuth-Profile.
- Warnungen zur Plugin-/Tool-Allowlist, wenn
plugins.allowrestriktiv ist, die Tool-Richtlinie aber weiterhin Wildcard- oder Plugin-eigene Tools anfordert. - Migration von Legacy-Zustand auf dem Datenträger (Sitzungen/Agent-Verzeichnis/WhatsApp-Auth).
- Migration von Legacy-Plugin-Manifest-Vertragsschlüsseln (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - Migration des Legacy-Cron-Speichers (
jobId,schedule.cron, Top-Level-Delivery-/Payload-Felder, Payload-provider,notify: true-Webhook-Fallback-Jobs). - Bereinigung der Legacy-Laufzeitrichtlinie für ganze Agents; die Provider-/Modell-Laufzeitrichtlinie ist der aktive Routenauswähler.
- Bereinigung veralteter Plugin-Konfiguration, wenn Plugins aktiviert sind; bei
plugins.enabled=falsewerden veraltete Plugin-Referenzen als inerte Containment-Konfiguration behandelt und beibehalten.
Zustand und Integrität
Zustand und Integrität
- Prüfung von Sitzungs-Sperrdateien und Bereinigung veralteter Sperren.
- Reparatur von Sitzungstranskripten für duplizierte Prompt-Rewrite-Zweige, die von betroffenen 2026.4.24-Builds erstellt wurden.
- Erkennung von Tombstones für die Neustartwiederherstellung blockierter Subagents, mit
--fix-Unterstützung zum Löschen veralteter abgebrochener Wiederherstellungsflags, damit der Start das Kind nicht weiter als neustartabgebrochen behandelt. - Integritäts- und Berechtigungsprüfungen des Zustands (Sitzungen, Transkripte, Zustandsverzeichnis).
- Berechtigungsprüfungen der Konfigurationsdatei (chmod 600) bei lokaler Ausführung.
- Modell-Auth-Integrität: prüft den OAuth-Ablauf, kann bald ablaufende Token aktualisieren und meldet Cooldown-/Deaktivierungszustände von Auth-Profilen.
Gateway, Dienste und Supervisoren
Gateway, Dienste und Supervisoren
- Reparatur des Sandbox-Images, wenn Sandboxing aktiviert ist.
- Migration von Legacy-Diensten und Erkennung zusätzlicher Gateways.
- Migration des Legacy-Zustands des Matrix-Kanals (im Modus
--fix/--repair). - Gateway-Laufzeitprüfungen (Dienst installiert, aber nicht ausgeführt; zwischengespeichertes launchd-Label).
- Kanalstatuswarnungen (vom laufenden Gateway geprüft).
- Kanalspezifische Berechtigungsprüfungen befinden sich unter
openclaw channels capabilities; Discord-Sprachkanalberechtigungen werden beispielsweise mitopenclaw channels capabilities --channel discord --target channel:<channel-id>geprüft. - WhatsApp-Reaktionsprüfungen für beeinträchtigte Gateway-Event-Loop-Integrität, während lokale TUI-Clients noch laufen;
--fixstoppt nur verifizierte lokale TUI-Clients. - Codex-Routenreparatur für Legacy-
openai-codex/*-Modellreferenzen in Primärmodellen, Fallbacks, Bild-/Videogenerierungsmodellen, Heartbeat-/Subagent-/Compaction-Überschreibungen, Hooks, Kanalmodell-Überschreibungen und Sitzungsrouten-Pins;--fixschreibt sie inopenai/*um, migriertopenai-codex:*-Auth-Profile/-Reihenfolge nachopenai:*, entfernt veraltete Sitzungs-/Ganz-Agent-Laufzeit-Pins und belässt kanonische OpenAI-Agent-Referenzen auf dem standardmäßigen Codex-Harness. - Audit der Supervisor-Konfiguration (launchd/systemd/schtasks) mit optionaler Reparatur.
- Bereinigung eingebetteter Proxy-Umgebungen für Gateway-Dienste, die während Installation oder Update Shell-Werte für
HTTP_PROXY/HTTPS_PROXY/NO_PROXYerfasst haben. - Gateway-Laufzeitprüfungen für Best Practices (Node vs. Bun, Pfade von Versionsmanagern).
- Diagnose von Gateway-Portkonflikten (Standard
18789).
Auth, Sicherheit und Pairing
Auth, Sicherheit und Pairing
- Sicherheitswarnungen für offene DM-Richtlinien.
- Gateway-Auth-Prüfungen für lokalen Token-Modus (bietet Token-Generierung an, wenn keine Token-Quelle vorhanden ist; überschreibt keine Token-SecretRef-Konfigurationen).
- Erkennung von Problemen beim Geräte-Pairing (ausstehende erstmalige Pairing-Anfragen, ausstehende Rollen-/Scope-Upgrades, Drift veralteter lokaler Geräte-Token-Caches und Auth-Drift gekoppelter Datensätze).
Workspace und Shell
Workspace und Shell
- systemd-Linger-Prüfung unter Linux.
- Größenprüfung der Workspace-Bootstrap-Datei (Abschneidungs-/Grenzwertwarnungen für Kontextdateien).
- Skills-Bereitschaftsprüfung für den Standard-Agent; meldet erlaubte Skills mit fehlenden Binaries, Umgebungs-, Konfigurations- oder Betriebssystemanforderungen, und
--fixkann nicht verfügbare Skills inskills.entriesdeaktivieren. - Statusprüfung der Shell-Vervollständigung und automatische Installation/Aktualisierung.
- Bereitschaftsprüfung des Embedding-Providers für Speichersuche (lokales Modell, Remote-API-Schlüssel oder QMD-Binary).
- Prüfungen für Quellinstallationen (pnpm-Workspace-Abweichung, fehlende UI-Assets, fehlendes tsx-Binary).
- Schreibt aktualisierte Konfiguration und Wizard-Metadaten.
Dreams-UI-Backfill und Zurücksetzen
Die Dreams-Szene der Control UI enthält die Aktionen Backfill, Reset und Clear Grounded für den grounded Dreaming-Workflow. Diese Aktionen verwenden Gateway-RPC-Methoden im doctor-Stil, sind aber nicht Teil der CLI-Reparatur/-Migration vonopenclaw doctor.
Was sie tun:
- Backfill durchsucht historische
memory/YYYY-MM-DD.md-Dateien im aktiven Workspace, führt den grounded REM-Tagebuchdurchlauf aus und schreibt reversible Backfill-Einträge inDREAMS.md. - Reset entfernt nur diese markierten Backfill-Tagebucheinträge aus
DREAMS.md. - Clear Grounded entfernt nur bereitgestellte, ausschließlich grounded Kurzzeiteinträge, die aus historischer Wiedergabe stammen und noch keinen Live-Recall oder tägliche Unterstützung angesammelt haben.
- sie bearbeiten
MEMORY.mdnicht - sie führen keine vollständigen doctor-Migrationen aus
- sie stellen grounded Kandidaten nicht automatisch im Live-Kurzzeit-Promotion-Speicher bereit, außer Sie führen zuerst ausdrücklich den gestagten CLI-Pfad aus
DREAMS.md die Review-Oberfläche bleibt.
Detailliertes Verhalten und Begründung
0. Optionales Update (Git-Installationen)
0. Optionales Update (Git-Installationen)
1. Konfigurationsnormalisierung
1. Konfigurationsnormalisierung
messages.ackReaction ohne kanalspezifische Überschreibung), normalisiert doctor sie in das aktuelle Schema.Dazu gehören Legacy-Talk-Flachfelder. Die aktuelle öffentliche Talk-Sprachkonfiguration ist talk.provider + talk.providers.<provider>, und die Echtzeit-Sprachkonfiguration ist talk.realtime.*. Doctor schreibt alte Formen von talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey in die Provider-Map um und schreibt Legacy-Top-Level-Echtzeitselektoren (talk.mode, talk.transport, talk.brain, talk.model, talk.voice) in talk.realtime um.Doctor warnt auch, wenn plugins.allow nicht leer ist und die Tool-Richtlinie
Wildcard- oder Plugin-eigene Tool-Einträge verwendet. tools.allow: ["*"] passt nur auf Tools
aus Plugins, die tatsächlich geladen werden; es umgeht die exklusive Plugin-
Allowlist nicht.2. Migrationen veralteter Konfigurationsschlüssel
2. Migrationen veralteter Konfigurationsschlüssel
openclaw doctor auszuführen.Doctor wird:- Erklären, welche veralteten Schlüssel gefunden wurden.
- Die angewendete Migration anzeigen.
~/.openclaw/openclaw.jsonmit dem aktualisierten Schema neu schreiben.
openclaw doctor --fix auszuführen; er schreibt openclaw.json beim Start nicht neu. Migrationen des Cron-Job-Speichers werden ebenfalls von openclaw doctor --fix behandelt.Aktuelle Migrationen:routing.allowFrom→channels.whatsapp.allowFromrouting.groupChat.requireMention→channels.whatsapp/telegram/imessage.groups."*".requireMentionrouting.groupChat.historyLimit→messages.groupChat.historyLimitrouting.groupChat.mentionPatterns→messages.groupChat.mentionPatternschannels.telegram.requireMention→channels.telegram.groups."*".requireMention- entferne die ausgemusterten
channels.webchatundgateway.webchat routing.queue→messages.queuerouting.bindings→bindingsauf oberster Ebenerouting.agents/routing.defaultAgentId→agents.list+agents.list[].default- veraltete
talk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKey→talk.provider+talk.providers.<provider> - veraltete Echtzeit-Talk-Selektoren auf oberster Ebene (
talk.mode/talk.transport/talk.brain/talk.model/talk.voice) +talk.provider/talk.providers→talk.realtime routing.agentToAgent→tools.agentToAgentrouting.transcribeAudio→tools.media.audio.modelsmessages.tts.<provider>(openai/elevenlabs/microsoft/edge) →messages.tts.providers.<provider>messages.tts.provider: "edge"undmessages.tts.providers.edge→messages.tts.provider: "microsoft"undmessages.tts.providers.microsoft- TTS-Sprecherauswahlfelder (
voice/voiceName/voiceId) →speakerVoice/speakerVoiceId channels.discord.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.voice.tts.providers.<provider>channels.discord.accounts.<id>.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.accounts.<id>.voice.tts.providers.<provider>plugins.entries.voice-call.config.tts.<provider>(openai/elevenlabs/microsoft/edge) →plugins.entries.voice-call.config.tts.providers.<provider>plugins.entries.voice-call.config.tts.provider: "edge"undplugins.entries.voice-call.config.tts.providers.edge→provider: "microsoft"undproviders.microsoftplugins.entries.voice-call.config.provider: "log"→"mock"plugins.entries.voice-call.config.twilio.from→plugins.entries.voice-call.config.fromNumberplugins.entries.voice-call.config.streaming.sttProvider→plugins.entries.voice-call.config.streaming.providerplugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold→plugins.entries.voice-call.config.streaming.providers.openai.*bindings[].match.accountID→bindings[].match.accountId- Bei Kanälen mit benannten
accounts, aber verbliebenen Top-Level-Kanalwerten für Einzelkonten, werden diese kontoabhängigen Werte in das hochgestufte Konto verschoben, das für diesen Kanal ausgewählt wurde (accounts.defaultfür die meisten Kanäle; Matrix kann ein vorhandenes passendes benanntes/Standardziel beibehalten) identity→agents.list[].identityagent.*→agents.defaults+tools.*(tools/elevated/exec/sandbox/subagents)agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks→agents.defaults.models+agents.defaults.model.primary/fallbacks+agents.defaults.imageModel.primary/fallbacks- entferne
agents.defaults.llm; verwenden Siemodels.providers.<id>.timeoutSecondsfür Timeouts langsamer Provider/Modelle, und halten Sie den Agent-/Run-Timeout über diesem Wert, wenn der gesamte Run länger dauern muss browser.ssrfPolicy.allowPrivateNetwork→browser.ssrfPolicy.dangerouslyAllowPrivateNetworkbrowser.profiles.*.driver: "extension"→"existing-session"- entferne
browser.relayBindHost(veraltete Extension-Relay-Einstellung) - veraltetes
models.providers.*.api: "openai"→"openai-completions"(der Gateway-Start überspringt außerdem Provider, derenapiauf einen zukünftigen oder unbekannten Enum-Wert gesetzt ist, statt geschlossen fehlzuschlagen) - entferne
plugins.entries.codex.config.codexDynamicToolsProfile; der Codex-App-Server behält Codex-native Workspace-Tools immer nativ bei
- Wenn zwei oder mehr
channels.<channel>.accounts-Einträge ohnechannels.<channel>.defaultAccountoderaccounts.defaultkonfiguriert sind, warnt Doctor, dass Fallback-Routing ein unerwartetes Konto auswählen kann. - Wenn
channels.<channel>.defaultAccountauf eine unbekannte Konto-ID gesetzt ist, warnt Doctor und listet die konfigurierten Konto-IDs auf.
2b. OpenCode-Provider-Overrides
2b. OpenCode-Provider-Overrides
models.providers.opencode, opencode-zen oder opencode-go manuell hinzugefügt haben, überschreibt dies den integrierten OpenCode-Katalog aus openclaw/plugin-sdk/llm. Das kann Modelle auf die falsche API zwingen oder Kosten auf null setzen. Doctor warnt, damit Sie den Override entfernen und API-Routing + Kosten pro Modell wiederherstellen können.2c. Browser-Migration und Chrome-MCP-Bereitschaft
2c. Browser-Migration und Chrome-MCP-Bereitschaft
browser.profiles.*.driver: "extension"wird zu"existing-session"browser.relayBindHostwird entfernt
defaultProfile: "user" oder ein konfiguriertes existing-session-Profil verwenden:- prüft, ob Google Chrome auf demselben Host für Standard-Auto-Connect-Profile installiert ist
- prüft die erkannte Chrome-Version und warnt, wenn sie unter Chrome 144 liegt
- erinnert Sie daran, Remote-Debugging auf der Browser-Inspect-Seite zu aktivieren (zum Beispiel
chrome://inspect/#remote-debugging,brave://inspect/#remote-debuggingoderedge://inspect/#remote-debugging)
- einen Chromium-basierten Browser 144+ auf dem Gateway-/Node-Host
- den lokal ausgeführten Browser
- aktiviertes Remote-Debugging in diesem Browser
- Bestätigung der ersten Attach-Zustimmungsabfrage im Browser
responsebody, PDF-Export, Download-Abfangung und Batch-Aktionen erfordern weiterhin einen verwalteten Browser oder ein Roh-CDP-Profil.Diese Prüfung gilt nicht für Docker-, Sandbox-, Remote-Browser- oder andere Headless-Flows. Diese verwenden weiterhin Roh-CDP.2d. OAuth-TLS-Voraussetzungen
2d. OAuth-TLS-Voraussetzungen
UNABLE_TO_GET_ISSUER_CERT_LOCALLY, abgelaufenes Zertifikat oder selbstsigniertes Zertifikat), gibt Doctor plattformspezifische Reparaturhinweise aus. Auf macOS mit einem Homebrew-Node lautet die Reparatur normalerweise brew postinstall ca-certificates. Mit --deep läuft die Prüfung auch dann, wenn der Gateway fehlerfrei ist.2e. Codex-OAuth-Provider-Overrides
2e. Codex-OAuth-Provider-Overrides
models.providers.openai-codex hinzugefügt haben, können diese den integrierten Codex-OAuth-Provider-Pfad überdecken, den neuere Releases automatisch verwenden. Doctor warnt, wenn es diese alten Transporteinstellungen neben Codex OAuth sieht, damit Sie den veralteten Transport-Override entfernen oder umschreiben und das integrierte Routing-/Fallback-Verhalten zurückerhalten können. Benutzerdefinierte Proxys und reine Header-Overrides werden weiterhin unterstützt und lösen diese Warnung nicht aus.2f. Codex-Routenreparatur
2f. Codex-Routenreparatur
openai-codex/*-Modellreferenzen. Natives Codex-Harness-Routing verwendet kanonische openai/*-Modellreferenzen; OpenAI-Agent-Turns laufen über das Codex-App-Server-Harness statt über den OpenClaw-OpenAI-Provider-Pfad.Im Modus --fix / --repair schreibt Doctor betroffene Standard-Agent- und agentenspezifische Referenzen um, einschließlich primärer Modelle, Fallbacks, Modelle für Bild-/Videogenerierung, Heartbeat-/Subagent-/Compaction-Overrides, Hooks, Kanalmodell-Overrides und veraltetem persistiertem Session-Routenstatus:openai-codex/gpt-*wird zuopenai/gpt-*.- Die Codex-Absicht wird für reparierte Agent-Modellreferenzen in Provider-/modellbezogene
agentRuntime.id: "codex"-Einträge verschoben. - Veraltete Laufzeitkonfiguration für ganze Agents und persistierte Session-Laufzeit-Pins werden entfernt, weil die Laufzeitauswahl Provider-/modellbezogen ist.
- Bestehende Provider-/Modell-Laufzeitrichtlinien bleiben erhalten, sofern die reparierte veraltete Modellreferenz kein Codex-Routing benötigt, um den alten Auth-Pfad beizubehalten.
- Bestehende Modell-Fallback-Listen bleiben erhalten, wobei ihre veralteten Einträge umgeschrieben werden; kopierte Einstellungen pro Modell werden vom veralteten Schlüssel zum kanonischen Schlüssel
openai/*verschoben. - Persistierte Session-
modelProvider/providerOverride,model/modelOverride, Fallback-Hinweise und Auth-Profil-Pins werden in allen erkannten Agent-Session-Speichern repariert. /codex ...bedeutet „eine native Codex-Konversation aus dem Chat steuern oder binden.“/acp ...oderruntime: "acp"bedeutet „den externen ACP/acpx-Adapter verwenden.“
2g. Bereinigung von Session-Routen
2g. Bereinigung von Session-Routen
openclaw doctor --fix kann automatisch erstellten veralteten Status wie modelOverrideSource: "auto"-Modell-Pins, Laufzeit-Modellmetadaten, angepinnte Harness-IDs, CLI-Session-Bindings und automatische Auth-Profil-Overrides löschen, wenn deren besitzende Route nicht mehr konfiguriert ist. Explizite Benutzer- oder veraltete Session-Modellwahlen werden zur manuellen Prüfung gemeldet und unverändert gelassen; wechseln Sie sie mit /model ..., /new, oder setzen Sie die Session zurück, wenn diese Route nicht mehr beabsichtigt ist.3. Migrationen veralteten Zustands (Datenträgerlayout)
3. Migrationen veralteten Zustands (Datenträgerlayout)
- Session-Speicher + Transkripte:
- von
~/.openclaw/sessions/nach~/.openclaw/agents/<agentId>/sessions/
- von
- Agent-Verzeichnis:
- von
~/.openclaw/agent/nach~/.openclaw/agents/<agentId>/agent/
- von
- WhatsApp-Auth-Status (Baileys):
- von veraltetem
~/.openclaw/credentials/*.json(außeroauth.json) - nach
~/.openclaw/credentials/whatsapp/<accountId>/...(Standardkonto-ID:default)
- von veraltetem
openclaw doctor migriert. Die Normalisierung von Talk-Provider/Provider-Map vergleicht jetzt anhand struktureller Gleichheit, sodass Diffs, die nur die Schlüsselreihenfolge betreffen, keine wiederholten wirkungslosen doctor --fix-Änderungen mehr auslösen.3a. Migrationen veralteter Plugin-Manifeste
3a. Migrationen veralteter Plugin-Manifeste
speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders). Wenn sie gefunden werden, bietet er an, sie in das Objekt contracts zu verschieben und die Manifestdatei direkt zu überschreiben. Diese Migration ist idempotent; wenn der Schlüssel contracts bereits dieselben Werte enthält, wird der veraltete Schlüssel entfernt, ohne die Daten zu duplizieren.3b. Migrationen veralteter Cron-Speicher
3b. Migrationen veralteter Cron-Speicher
~/.openclaw/cron/jobs.json oder cron.store, wenn überschrieben) auf alte Job-Strukturen, die der Scheduler aus Kompatibilitätsgründen noch akzeptiert.Aktuelle Cron-Bereinigungen umfassen:jobId→idschedule.cron→schedule.expr- Payload-Felder auf oberster Ebene (
message,model,thinking, …) →payload - Zustellungsfelder auf oberster Ebene (
deliver,channel,to,provider, …) →delivery - Payload-
provider-Zustellungsaliase → explizitesdelivery.channel - veraltete
notify: true-Webhook-Fallback-Jobs → explizite Webhook-Zustellung auscron.webhook, wenn gesetzt; Ankündigungsjobs behalten ihre Chat-Zustellung und erhaltendelivery.completionDestination. Wenncron.webhooknicht gesetzt ist, wird der inaktive Markernotifyauf oberster Ebene für Jobs ohne Ziel entfernt (bestehende Zustellung, einschließlich Ankündigung, bleibt erhalten), da die Laufzeitzustellung ihn nie liest
jobs-quarantine.json kopiert, bevor sie aus jobs.json entfernt werden; Doctor meldet isolierte Zeilen, damit Sie sie manuell prüfen oder reparieren können.Der Gateway-Start normalisiert die Laufzeitprojektion und ignoriert den Marker notify auf oberster Ebene, lässt die persistierte Cron-Konfiguration aber für die Doctor-Reparatur unverändert. Wenn cron.webhook nicht gesetzt ist, entfernt Doctor den inaktiven Marker für Jobs ohne Migrationsziel (delivery.mode none/fehlend, ein unbrauchbares Webhook-Ziel oder bestehende Ankündigungs-/Chat-Zustellung), lässt die bestehende Zustellung unverändert, sodass wiederholte doctor --fix-Läufe nicht mehr vor demselben Job warnen. Wenn cron.webhook gesetzt ist, aber keine gültige HTTP(S)-URL ist, warnt Doctor weiterhin und lässt den Marker stehen, damit Sie die URL korrigieren können.Unter Linux warnt Doctor außerdem, wenn die Crontab des Benutzers noch das veraltete ~/.openclaw/bin/ensure-whatsapp.sh aufruft. Dieses hostlokale Skript wird vom aktuellen OpenClaw nicht gewartet und kann falsche Gateway inactive-Meldungen nach ~/.openclaw/logs/whatsapp-health.log schreiben, wenn Cron den systemd-Benutzerbus nicht erreichen kann. Entfernen Sie den veralteten Crontab-Eintrag mit crontab -e; verwenden Sie openclaw channels status --probe, openclaw doctor und openclaw gateway status für aktuelle Health Checks.3c. Bereinigung von Sitzungssperren
3c. Bereinigung von Sitzungssperren
--fix / --repair entfernt er Locks mit toten, verwaisten, wiederverwendeten, fehlerhaft-alten oder Nicht-OpenClaw-Eigentümern automatisch. Alte Locks, die noch einem aktiven OpenClaw-Prozess gehören, werden gemeldet, aber an Ort und Stelle belassen, damit Doctor keinen aktiven Transcript-Schreiber unterbricht.3d. Reparatur von Sitzungstranscript-Branches
3d. Reparatur von Sitzungstranscript-Branches
--fix / --repair sichert Doctor jede betroffene Datei neben dem Original und schreibt das Transcript auf den aktiven Branch um, sodass Gateway-Verlauf und Speicherleser keine doppelten Turns mehr sehen.4. Integritätsprüfungen des Status (Sitzungspersistenz, Routing und Sicherheit)
4. Integritätsprüfungen des Status (Sitzungspersistenz, Routing und Sicherheit)
- Statusverzeichnis fehlt: warnt vor katastrophalem Statusverlust, fordert zum erneuten Erstellen des Verzeichnisses auf und erinnert Sie daran, dass fehlende Daten nicht wiederhergestellt werden können.
- Berechtigungen des Statusverzeichnisses: überprüft Schreibbarkeit; bietet an, Berechtigungen zu reparieren (und gibt einen
chown-Hinweis aus, wenn eine Abweichung bei Eigentümer/Gruppe erkannt wird). - macOS-Cloud-synchronisiertes Statusverzeichnis: warnt, wenn der Status unter iCloud Drive (
~/Library/Mobile Documents/com~apple~CloudDocs/...) oder~/Library/CloudStorage/...aufgelöst wird, da synchronisierte Pfade langsamere I/O und Lock-/Sync-Races verursachen können. - Linux-SD- oder eMMC-Statusverzeichnis: warnt, wenn der Status auf eine
mmcblk*-Mount-Quelle aufgelöst wird, da SD- oder eMMC-gestützte zufällige I/O unter Sitzungs- und Zugangsdaten-Schreibvorgängen langsamer sein und schneller verschleißen kann. - Linux-flüchtiges Statusverzeichnis: warnt, wenn der Status auf
tmpfsoderramfsaufgelöst wird, da Sitzungen, Zugangsdaten, Konfiguration und SQLite-Status mit seinen WAL-/Journal-Sidecars beim Neustart verschwinden. Docker-overlay-Mounts werden absichtlich nicht markiert, da ihre beschreibbaren Layer über Host-Neustarts hinweg bestehen bleiben, solange der Container erhalten bleibt. - Sitzungsverzeichnisse fehlen:
sessions/und das Sitzungsspeicherverzeichnis sind erforderlich, um Verlauf zu persistieren undENOENT-Abstürze zu vermeiden. - Transcript-Abweichung: warnt, wenn aktuellen Sitzungseinträgen Transcript-Dateien fehlen.
- Hauptsitzung „1-line JSONL“: markiert, wenn das Haupt-Transcript nur eine Zeile hat (Verlauf wird nicht angesammelt).
- Mehrere Statusverzeichnisse: warnt, wenn mehrere
~/.openclaw-Ordner über Home-Verzeichnisse hinweg existieren oder wennOPENCLAW_STATE_DIRanderswohin zeigt (Verlauf kann sich zwischen Installationen aufteilen). - Remote-Modus-Erinnerung: wenn
gateway.mode=remote, erinnert Doctor Sie daran, ihn auf dem Remote-Host auszuführen (der Status liegt dort). - Berechtigungen der Konfigurationsdatei: warnt, wenn
~/.openclaw/openclaw.jsonfür Gruppe/Welt lesbar ist, und bietet an, auf600zu verschärfen.
5. Modell-Auth-Gesundheit (OAuth-Ablauf)
5. Modell-Auth-Gesundheit (OAuth-Ablauf)
--non-interactive überspringt Aktualisierungsversuche.Wenn eine OAuth-Aktualisierung dauerhaft fehlschlägt (zum Beispiel refresh_token_reused, invalid_grant oder ein Provider, der Sie auffordert, sich erneut anzumelden), meldet Doctor, dass eine erneute Authentifizierung erforderlich ist, und gibt den genauen auszuführenden Befehl openclaw models auth login --provider ... aus.Doctor meldet außerdem Auth-Profile, die vorübergehend unbrauchbar sind wegen:- kurzen Cooldowns (Rate Limits/Timeouts/Auth-Fehler)
- längeren Deaktivierungen (Billing-/Credit-Fehler)
openclaw doctor --fix einmal aus einem interaktiven Terminal aus, um schlüsselbundgestützte Legacy-Tokens inline nach auth-profiles.json zu migrieren; danach lösen eingebettete Turns (Telegram, Cron, Sub-Agent-Dispatch) sie als kanonische OpenAI-OAuth-Profile auf.6. Hooks-Modellvalidierung
6. Hooks-Modellvalidierung
hooks.gmail.model gesetzt ist, validiert Doctor die Modellreferenz gegen den Katalog und die Allowlist und warnt, wenn sie nicht aufgelöst wird oder nicht erlaubt ist.7. Sandbox-Image-Reparatur
7. Sandbox-Image-Reparatur
7b. Bereinigung von Plugin-Installationen
7b. Bereinigung von Plugin-Installationen
openclaw doctor --fix / openclaw doctor --repair. Dies umfasst veraltete generierte Abhängigkeits-Roots, alte Installations-Staging-Verzeichnisse, paketlokale Rückstände aus früherem Reparaturcode für Abhängigkeiten gebündelter Plugins sowie verwaiste oder wiederhergestellte verwaltete npm-Kopien gebündelter @openclaw/*-Plugins, die das aktuelle gebündelte Manifest überdecken können. Doctor verlinkt außerdem das Hostpaket openclaw erneut in verwaltete npm-Plugins, die peerDependencies.openclaw deklarieren, sodass paketlokale Laufzeitimporte wie openclaw/plugin-sdk/* nach Updates oder npm-Reparaturen weiterhin aufgelöst werden.Doctor kann außerdem fehlende herunterladbare Plugins neu installieren, wenn die Konfiguration auf sie verweist, die lokale Plugin-Registry sie aber nicht finden kann. Beispiele umfassen konkrete plugins.entries, konfigurierte Channel-/Provider-/Sucheinstellungen und konfigurierte Agent-Laufzeiten. Während Paketupdates vermeidet Doctor die Ausführung von Paketmanager-Plugin-Reparaturen, während das Kernpaket ausgetauscht wird; führen Sie openclaw doctor --fix nach dem Update erneut aus, wenn ein konfiguriertes Plugin weiterhin Wiederherstellung benötigt. Gateway-Start und Konfigurationsneuladen führen keine Paketmanager aus; Plugin-Installationen bleiben explizite Doctor-/Install-/Update-Arbeit.8. Gateway-Service-Migrationen und Bereinigungshinweise
8. Gateway-Service-Migrationen und Bereinigungshinweise
openclaw gateway status --deep oder openclaw doctor --deep, entfernen Sie dann das Duplikat oder setzen Sie OPENCLAW_SERVICE_REPAIR_POLICY=external, wenn ein System-Supervisor den Gateway-Lebenszyklus besitzt.8b. Startup-Matrix-Migration
8b. Startup-Matrix-Migration
--fix / --repair) einen Vormigrations-Snapshot und führt dann die Best-Effort-Migrationsschritte aus: Legacy-Matrix-Statusmigration und Vorbereitung des veralteten verschlüsselten Status. Beide Schritte sind nicht fatal; Fehler werden protokolliert und der Start wird fortgesetzt. Im schreibgeschützten Modus (openclaw doctor ohne --fix) wird diese Prüfung vollständig übersprungen.8c. Gerätekopplung und Auth-Abweichung
8c. Gerätekopplung und Auth-Abweichung
- ausstehende erstmalige Kopplungsanfragen
- ausstehende Rollen-Upgrades für bereits gekoppelte Geräte
- ausstehende Scope-Upgrades für bereits gekoppelte Geräte
- Reparaturen von Public-Key-Abweichungen, bei denen die Geräte-ID noch übereinstimmt, die Geräteidentität aber nicht mehr mit dem genehmigten Datensatz übereinstimmt
- gekoppelte Datensätze, denen ein aktives Token für eine genehmigte Rolle fehlt
- gekoppelte Tokens, deren Scopes von der genehmigten Kopplungsbasis abweichen
- lokal zwischengespeicherte Gerätetoken-Einträge für die aktuelle Maschine, die älter sind als eine Gateway-seitige Tokenrotation oder veraltete Scope-Metadaten enthalten
- ausstehende Anfragen mit
openclaw devices listprüfen - die genaue Anfrage mit
openclaw devices approve <requestId>genehmigen - ein frisches Token mit
openclaw devices rotate --device <deviceId> --role <role>rotieren - einen veralteten Datensatz mit
openclaw devices remove <deviceId>entfernen und erneut genehmigen
9. Sicherheitswarnungen
9. Sicherheitswarnungen
10. systemd-Linger (Linux)
10. systemd-Linger (Linux)
11. Workspace-Status (Skills, Plugins und TaskFlows)
11. Workspace-Status (Skills, Plugins und TaskFlows)
- Skills-Status: zählt geeignete, wegen fehlender Anforderungen ausgeschlossene und durch Allowlist blockierte Skills.
- Plugin-Status: zählt aktivierte/deaktivierte/fehlerhafte Plugins; listet Plugin-IDs für Fehler auf; meldet Bundle-Plugin-Fähigkeiten.
- Plugin-Kompatibilitätswarnungen: markiert Plugins, die Kompatibilitätsprobleme mit der aktuellen Runtime haben.
- Plugin-Diagnose: zeigt Ladezeit-Warnungen oder -Fehler an, die von der Plugin-Registry ausgegeben wurden.
- TaskFlow-Wiederherstellung: zeigt verdächtige verwaltete TaskFlows an, die manuelle Prüfung oder Abbruch erfordern.
11b. Bootstrap-Dateigröße
11b. Bootstrap-Dateigröße
AGENTS.md, CLAUDE.md oder andere injizierte Kontextdateien) nahe am konfigurierten Zeichenbudget liegen oder dieses überschreiten. Er meldet pro Datei rohe gegenüber injizierten Zeichenzahlen, Kürzungsprozentsatz, Kürzungsursache (max/file oder max/total) und die insgesamt injizierten Zeichen als Anteil am Gesamtbudget. Wenn Dateien gekürzt werden oder nahe am Limit liegen, gibt Doctor Tipps zur Abstimmung von agents.defaults.bootstrapMaxChars und agents.defaults.bootstrapTotalMaxChars aus.11d. Bereinigung veralteter Channel-Plugins
11d. Bereinigung veralteter Channel-Plugins
openclaw doctor --fix ein fehlendes Channel-Plugin entfernt, entfernt es auch die verwaiste channel-bezogene Konfiguration, die auf dieses Plugin verwiesen hat: channels.<id>-Einträge, Heartbeat-Ziele, die den Channel benannt haben, und agents.*.models["<channel>/*"]-Overrides. Dadurch werden Gateway-Startschleifen verhindert, bei denen die Channel-Runtime nicht mehr vorhanden ist, die Konfiguration den Gateway aber weiterhin auffordert, sich daran zu binden.11c. Shell-Vervollständigung
11c. Shell-Vervollständigung
- Wenn das Shell-Profil ein langsames dynamisches Vervollständigungsmuster (
source <(openclaw completion ...)) verwendet, aktualisiert Doctor es auf die schnellere Variante mit zwischengespeicherter Datei. - Wenn die Vervollständigung im Profil konfiguriert ist, aber die Cache-Datei fehlt, regeneriert Doctor den Cache automatisch.
- Wenn gar keine Vervollständigung konfiguriert ist, fordert Doctor zur Installation auf (nur im interaktiven Modus; mit
--non-interactiveübersprungen).
openclaw completion --write-state aus, um den Cache manuell neu zu generieren.12. Gateway-Authentifizierungsprüfungen (lokales Token)
12. Gateway-Authentifizierungsprüfungen (lokales Token)
- Wenn der Token-Modus ein Token benötigt und keine Token-Quelle vorhanden ist, bietet Doctor an, eines zu generieren.
- Wenn
gateway.auth.tokenSecretRef-verwaltet, aber nicht verfügbar ist, warnt Doctor und überschreibt es nicht mit Klartext. openclaw doctor --generate-gateway-tokenerzwingt die Generierung nur, wenn kein Token-SecretRef konfiguriert ist.
12b. Schreibgeschützte SecretRef-bewusste Reparaturen
12b. Schreibgeschützte SecretRef-bewusste Reparaturen
openclaw doctor --fixverwendet jetzt dasselbe schreibgeschützte SecretRef-Zusammenfassungsmodell wie Statusbefehle für gezielte Konfigurationsreparaturen.- Beispiel: Die Reparatur von Telegram
allowFrom/groupAllowFrom@usernameversucht, konfigurierte Bot-Zugangsdaten zu verwenden, wenn sie verfügbar sind. - Wenn das Telegram-Bot-Token über SecretRef konfiguriert, aber im aktuellen Befehlspfad nicht verfügbar ist, meldet Doctor, dass die Zugangsdaten konfiguriert, aber nicht verfügbar sind, und überspringt die automatische Auflösung, statt abzustürzen oder das Token fälschlich als fehlend zu melden.
13. Gateway-Integritätsprüfung + Neustart
13. Gateway-Integritätsprüfung + Neustart
13b. Bereitschaft der Memory-Suche
13b. Bereitschaft der Memory-Suche
- QMD-Backend: prüft, ob das
qmd-Binary verfügbar und startbar ist. Falls nicht, gibt es Reparaturhinweise einschließlich des npm-Pakets und einer Option für einen manuellen Binary-Pfad aus. - Expliziter lokaler Provider: prüft auf eine lokale Modelldatei oder eine erkannte Remote-/herunterladbare Modell-URL. Falls sie fehlt, wird ein Wechsel zu einem Remote-Provider vorgeschlagen.
- Expliziter Remote-Provider (
openai,voyageusw.): prüft, ob ein API-Schlüssel in der Umgebung oder im Authentifizierungsspeicher vorhanden ist. Gibt umsetzbare Reparaturhinweise aus, falls er fehlt. - Veralteter automatischer Provider: behandelt
memorySearch.provider: "auto"als OpenAI, prüft die OpenAI-Bereitschaft, unddoctor --fixschreibt es zuprovider: "openai"um.
openclaw memory status --deep, um die Embedding-Bereitschaft zur Laufzeit zu prüfen.14. Channel-Statuswarnungen
14. Channel-Statuswarnungen
15. Supervisor-Konfigurationsprüfung + Reparatur
15. Supervisor-Konfigurationsprüfung + Reparatur
openclaw doctorfragt nach, bevor die Supervisor-Konfiguration umgeschrieben wird.openclaw doctor --yesakzeptiert die standardmäßigen Reparaturaufforderungen.openclaw doctor --fixwendet empfohlene Korrekturen ohne Nachfragen an (--repairist ein Alias).openclaw doctor --fix --forceüberschreibt benutzerdefinierte Supervisor-Konfigurationen.OPENCLAW_SERVICE_REPAIR_POLICY=externalhält Doctor für den Lebenszyklus des Gateway-Dienstes schreibgeschützt. Er meldet weiterhin den Dienstzustand und führt Nicht-Dienst-Reparaturen aus, überspringt aber Dienstinstallation/-start/-neustart/-bootstrap, Umschreibungen der Supervisor-Konfiguration und Bereinigung veralteter Dienste, weil ein externer Supervisor diesen Lebenszyklus besitzt.- Unter Linux schreibt Doctor keine Befehls-/Entrypoint-Metadaten um, während die passende systemd-Gateway-Unit aktiv ist. Außerdem ignoriert er inaktive, nicht veraltete zusätzliche gateway-ähnliche Units während der Suche nach doppelten Diensten, damit begleitende Dienstdateien keinen Bereinigungsrauschen erzeugen.
- Wenn Token-Authentifizierung ein Token erfordert und
gateway.auth.tokenSecretRef-verwaltet ist, validiert die Doctor-Dienstinstallation/-reparatur den SecretRef, speichert aber keine aufgelösten Klartext-Tokenwerte in den Umgebungsmetadaten des Supervisor-Dienstes. - Doctor erkennt verwaltete
.env-/SecretRef-gestützte Dienstumgebungswerte, die ältere LaunchAgent-, systemd- oder Windows Scheduled Task-Installationen inline eingebettet haben, und schreibt die Dienstmetadaten so um, dass diese Werte aus der Runtime-Quelle statt aus der Supervisor-Definition geladen werden. - Doctor erkennt, wenn der Dienstbefehl nach Änderungen an
gateway.portweiterhin einen alten--portfestschreibt, und schreibt die Dienstmetadaten auf den aktuellen Port um. - Wenn Token-Authentifizierung ein Token erfordert und der konfigurierte Token-SecretRef nicht aufgelöst ist, blockiert Doctor den Installations-/Reparaturpfad mit umsetzbarer Anleitung.
- Wenn sowohl
gateway.auth.tokenals auchgateway.auth.passwordkonfiguriert sind undgateway.auth.modenicht gesetzt ist, blockiert Doctor Installation/Reparatur, bis der Modus ausdrücklich gesetzt wird. - Für Linux-user-systemd-Units beziehen Doctor-Prüfungen auf Token-Abweichungen jetzt sowohl
Environment=- als auchEnvironmentFile=-Quellen ein, wenn Dienst-Authentifizierungsmetadaten verglichen werden. - Doctor-Dienstreparaturen verweigern das Umschreiben, Stoppen oder Neustarten eines Gateway-Dienstes aus einem älteren OpenClaw-Binary, wenn die Konfiguration zuletzt von einer neueren Version geschrieben wurde. Siehe Gateway-Fehlerbehebung.
- Sie können jederzeit ein vollständiges Umschreiben über
openclaw gateway install --forceerzwingen.
16. Gateway-Runtime + Port-Diagnose
16. Gateway-Runtime + Port-Diagnose
18789) und meldet wahrscheinliche Ursachen (Gateway läuft bereits, SSH-Tunnel).17. Gateway-Runtime Best Practices
17. Gateway-Runtime Best Practices
nvm, fnm, volta, asdf usw.) läuft. WhatsApp- und Telegram-Channels erfordern Node, und Versionsmanager-Pfade können nach Upgrades brechen, weil der Dienst Ihre Shell-Initialisierung nicht lädt. Doctor bietet an, auf eine System-Node-Installation zu migrieren, wenn verfügbar (Homebrew/apt/choco).Neu installierte oder reparierte macOS LaunchAgents verwenden einen kanonischen System-PATH (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin), statt den interaktiven Shell-PATH zu kopieren. Dadurch bleiben von Homebrew verwaltete System-Binaries verfügbar, während Volta, asdf, fnm, pnpm und andere Versionsmanager-Verzeichnisse nicht ändern, welche Node-Kindprozesse auflösen. Linux-Dienste behalten weiterhin explizite Umgebungswurzeln (NVM_DIR, FNM_DIR, VOLTA_HOME, ASDF_DATA_DIR, BUN_INSTALL, PNPM_HOME) und stabile Benutzer-Bin-Verzeichnisse, aber erratene Versionsmanager-Fallback-Verzeichnisse werden nur dann in den Dienst-PATH geschrieben, wenn diese Verzeichnisse auf der Festplatte existieren.18. Konfigurationsschreiben + Wizard-Metadaten
18. Konfigurationsschreiben + Wizard-Metadaten
19. Workspace-Tipps (Backup + Memory-System)
19. Workspace-Tipps (Backup + Memory-System)