~/.openclaw/openclaw.json.
Der aktive Konfigurationspfad muss eine reguläre Datei sein. Symlink-Layouts für openclaw.json
werden für von OpenClaw verwaltete Schreibvorgänge nicht unterstützt; ein atomarer Schreibvorgang kann
den Pfad ersetzen, statt den Symlink beizubehalten. Wenn Sie die Konfiguration außerhalb des
standardmäßigen Zustandsverzeichnisses aufbewahren, setzen Sie OPENCLAW_CONFIG_PATH direkt auf die echte Datei.
Wenn die Datei fehlt, verwendet OpenClaw sichere Standardwerte. Häufige Gründe für eine Konfiguration:
- Kanäle verbinden und steuern, wer dem Bot Nachrichten senden darf
- Modelle, Tools, Sandboxing oder Automatisierung festlegen (Cron, Hooks)
- Sitzungen, Medien, Netzwerk oder UI abstimmen
config.schema.lookup für exakte
Dokumentation auf Feldebene verwenden, bevor sie Konfiguration bearbeiten. Nutzen Sie diese Seite für aufgabenorientierte Anleitung und die
Konfigurationsreferenz für die breitere
Feldübersicht und Standardwerte.
Minimale Konfiguration
Konfiguration bearbeiten
- Interaktiver Assistent
- CLI (Einzeiler)
- Control UI
- Direkt bearbeiten
Strikte Validierung
openclaw config schema gibt das kanonische JSON-Schema aus, das von Control UI
und der Validierung verwendet wird. config.schema.lookup ruft einen einzelnen pfadbezogenen Knoten plus
Zusammenfassungen der untergeordneten Elemente für Drilldown-Tools ab. Dokumentationsmetadaten der Felder title/description
werden durch verschachtelte Objekte, Wildcard- (*), Array-Item- ([]) und anyOf-/
oneOf-/allOf-Zweige weitergegeben. Laufzeit-Schemas für Plugins und Kanäle werden zusammengeführt, wenn die
Manifest-Registry geladen ist.
Wenn die Validierung fehlschlägt:
- Der Gateway bootet nicht
- Nur Diagnosebefehle funktionieren (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Führen Sie
openclaw doctoraus, um die genauen Probleme zu sehen - Führen Sie
openclaw doctor --fix(oder--yes) aus, um Reparaturen anzuwenden
openclaw.json
die Validierung nicht besteht (einschließlich Plugin-lokaler Validierung), schlägt der Gateway-Start fehl oder
das Neuladen wird übersprungen und die aktuelle Laufzeit behält die zuletzt akzeptierte Konfiguration.
Führen Sie openclaw doctor --fix (oder --yes) aus, um mit Präfixen versehene/überschriebene Konfiguration zu reparieren oder
die letzte bekanntermaßen funktionierende Kopie wiederherzustellen. Die Übernahme als letzte bekanntermaßen funktionierende Kopie wird übersprungen, wenn ein
Kandidat geschwärzte Secret-Platzhalter wie *** enthält.
Häufige Aufgaben
Einen Kanal einrichten (WhatsApp, Telegram, Discord usw.)
Einen Kanal einrichten (WhatsApp, Telegram, Discord usw.)
channels.<provider>. Einrichtungsschritte finden Sie auf der jeweiligen Kanalseite:- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
Modelle auswählen und konfigurieren
Modelle auswählen und konfigurieren
agents.defaults.modelsdefiniert den Modellkatalog und dient als Allowlist für/model;provider/*-Einträge filtern/model,/modelsund Modellauswahlen auf ausgewählte Provider, während weiterhin die dynamische Modellerkennung verwendet wird.- Verwenden Sie
openclaw config set agents.defaults.models '<json>' --strict-json --merge, um Allowlist-Einträge hinzuzufügen, ohne vorhandene Modelle zu entfernen. Einfache Ersetzungen, die Einträge entfernen würden, werden abgelehnt, sofern Sie nicht--replaceübergeben. - Modellreferenzen verwenden das Format
provider/model(z. B.anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxsteuert das Herunterskalieren von Transkript-/Tool-Bildern (Standard1200); niedrigere Werte reduzieren in der Regel die Vision-Token-Nutzung bei screenshotlastigen Läufen.- Siehe Models CLI zum Wechseln von Modellen im Chat und Model Failover für Auth-Rotation und Fallback-Verhalten.
- Für benutzerdefinierte/selbst gehostete Provider siehe Custom providers in der Referenz.
Steuern, wer dem Bot Nachrichten senden darf
Steuern, wer dem Bot Nachrichten senden darf
dmPolicy gesteuert:"pairing"(Standard): unbekannte Absender erhalten einen einmaligen Pairing-Code zur Genehmigung"allowlist": nur Absender inallowFrom(oder im gekoppelten Allow-Store)"open": alle eingehenden DMs erlauben (erfordertallowFrom: ["*"])"disabled": alle DMs ignorieren
groupPolicy + groupAllowFrom oder kanalspezifische Allowlists.Details pro Kanal finden Sie in der vollständigen Referenz.Mention-Gating für Gruppenchats einrichten
Mention-Gating für Gruppenchats einrichten
- Metadaten-Erwähnungen: native @-Erwähnungen (WhatsApp Tap-to-Mention, Telegram @bot usw.)
- Textmuster: sichere Regex-Muster in
mentionPatterns - Sichtbare Antworten:
messages.visibleReplieskann Message-Tool-Sends global erzwingen;messages.groupChat.visibleRepliesüberschreibt dies für Gruppen/Kanäle. - Siehe vollständige Referenz für sichtbare Antwortmodi, Überschreibungen pro Kanal und Self-Chat-Modus.
Skills pro Agent beschränken
Skills pro Agent beschränken
agents.defaults.skills für eine gemeinsame Basis und überschreiben Sie dann bestimmte
Agents mit agents.list[].skills:- Lassen Sie
agents.defaults.skillsweg, um Skills standardmäßig uneingeschränkt zu erlauben. - Lassen Sie
agents.list[].skillsweg, um die Standardwerte zu erben. - Setzen Sie
agents.list[].skills: [], um keine Skills zuzulassen. - Siehe Skills, Skills-Konfiguration und die Konfigurationsreferenz.
Gateway-Kanal-Health-Monitoring abstimmen
Gateway-Kanal-Health-Monitoring abstimmen
- Setzen Sie
gateway.channelHealthCheckMinutes: 0, um Health-Monitor-Neustarts global zu deaktivieren. channelStaleEventThresholdMinutessollte größer oder gleich dem Prüfintervall sein.- Verwenden Sie
channels.<provider>.healthMonitor.enabledoderchannels.<provider>.accounts.<id>.healthMonitor.enabled, um automatische Neustarts für einen Kanal oder Account zu deaktivieren, ohne den globalen Monitor zu deaktivieren. - Siehe Health Checks für operative Fehlersuche und die vollständige Referenz für alle Felder.
Gateway-WebSocket-Handshake-Timeout abstimmen
Gateway-WebSocket-Handshake-Timeout abstimmen
- Standardwert ist
15000Millisekunden. OPENCLAW_HANDSHAKE_TIMEOUT_MShat weiterhin Vorrang für einmalige Service- oder Shell-Überschreibungen.- Beheben Sie bevorzugt zuerst Start-/Event-Loop-Blockaden; dieser Regler ist für Hosts gedacht, die gesund, aber beim Warmup langsam sind.
Sitzungen und Resets konfigurieren
Sitzungen und Resets konfigurieren
dmScope:main(gemeinsam) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: globale Standardwerte für Thread-gebundenes Sitzungsrouting (Discord unterstützt/focus,/unfocus,/agents,/session idleund/session max-age).- Siehe Sitzungsverwaltung für Scoping, Identitätsverknüpfungen und Senderichtlinie.
- Siehe vollständige Referenz für alle Felder.
Sandboxing aktivieren
Sandboxing aktivieren
scripts/sandbox-setup.sh aus, oder lesen Sie bei einer npm-Installation den eingebetteten docker build-Befehl unter Sandboxing § Images und Einrichtung.Siehe Sandboxing für die vollständige Anleitung und vollständige Referenz für alle Optionen.Relay-gestützten Push für offizielle iOS-Builds aktivieren
Relay-gestützten Push für offizielle iOS-Builds aktivieren
https://ios-push-relay.openclaw.ai.Benutzerdefinierte Relay-Bereitstellungen erfordern einen bewusst separaten iOS-Build-/Bereitstellungspfad, dessen Relay-URL mit der Gateway-Relay-URL übereinstimmt. Wenn Sie einen benutzerdefinierten Relay-Build verwenden, legen Sie dies in der Gateway-Konfiguration fest:- Ermöglicht dem Gateway,
push.test, Aufweck-Anstöße und Wiederverbindungs-Wecksignale über das externe Relay zu senden. - Verwendet eine registrierungsgebundene Sendeberechtigung, die von der gekoppelten iOS-App weitergeleitet wird. Das Gateway benötigt kein bereitstellungsweites Relay-Token.
- Bindet jede Relay-gestützte Registrierung an die Gateway-Identität, mit der die iOS-App gekoppelt wurde, sodass ein anderes Gateway die gespeicherte Registrierung nicht wiederverwenden kann.
- Belässt lokale/manuelle iOS-Builds bei direkten APNs. Relay-gestützte Sendungen gelten nur für offiziell verteilte Builds, die über das Relay registriert wurden.
- Muss mit der in den iOS-Build eingebetteten Relay-Basis-URL übereinstimmen, damit Registrierungs- und Sendetraffic dieselbe Relay-Bereitstellung erreichen.
- Installieren Sie die offizielle iOS-App.
- Optional: Konfigurieren Sie
gateway.push.apns.relay.baseUrlauf dem Gateway nur, wenn Sie einen bewusst separaten benutzerdefinierten Relay-Build verwenden. - Koppeln Sie die iOS-App mit dem Gateway und lassen Sie sowohl Node- als auch Operator-Sitzungen eine Verbindung herstellen.
- Die iOS-App ruft die Gateway-Identität ab, registriert sich beim Relay mit App Attest plus App-Beleg und veröffentlicht anschließend die Relay-gestützte
push.apns.register-Payload an das gekoppelte Gateway. - Das Gateway speichert das Relay-Handle und die Sendeberechtigung und verwendet sie dann für
push.test, Aufweck-Anstöße und Wiederverbindungs-Wecksignale.
- Wenn Sie die iOS-App auf ein anderes Gateway umstellen, verbinden Sie die App erneut, damit sie eine neue, an dieses Gateway gebundene Relay-Registrierung veröffentlichen kann.
- Wenn Sie einen neuen iOS-Build ausliefern, der auf eine andere Relay-Bereitstellung zeigt, aktualisiert die App ihre zwischengespeicherte Relay-Registrierung, statt den alten Relay-Ursprung wiederzuverwenden.
OPENCLAW_APNS_RELAY_BASE_URLundOPENCLAW_APNS_RELAY_TIMEOUT_MSfunktionieren weiterhin als temporäre Env-Overrides.- Benutzerdefinierte Gateway-Relay-URLs müssen mit der in den iOS-Build eingebetteten Relay-Basis-URL übereinstimmen. Der öffentliche App-Store-Release-Lane lehnt benutzerdefinierte iOS-Relay-URL-Overrides ab.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=truebleibt ein nur für local loopback gedachter Entwicklungs-Notausstieg; speichern Sie keine HTTP-Relay-URLs dauerhaft in der Konfiguration.
Heartbeat einrichten (periodische Check-ins)
Heartbeat einrichten (periodische Check-ins)
every: Dauerzeichenfolge (30m,2h). Setzen Sie0m, um zu deaktivieren.target:last|none|<channel-id>(zum Beispieldiscord,matrix,telegramoderwhatsapp)directPolicy:allow(Standard) oderblockfür DM-artige Heartbeat-Ziele- Siehe Heartbeat für die vollständige Anleitung.
Cron-Jobs konfigurieren
Cron-Jobs konfigurieren
sessionRetention: Entfernt abgeschlossene isolierte Ausführungssitzungen aussessions.json(Standard24h; setzen Siefalse, um zu deaktivieren).runLog: Entfernt beibehaltene Cron-Ausführungsverlaufszeilen pro Job.maxBytesbleibt für ältere dateibasierte Ausführungslogs akzeptiert.- Siehe Cron-Jobs für Funktionsüberblick und CLI-Beispiele.
Webhooks einrichten (Hooks)
Webhooks einrichten (Hooks)
- Behandeln Sie alle Hook-/Webhook-Payload-Inhalte als nicht vertrauenswürdige Eingaben.
- Verwenden Sie ein dediziertes
hooks.token; verwenden Sie keine aktiven Gateway-Auth-Geheimnisse wieder (gateway.auth.token/OPENCLAW_GATEWAY_TOKENodergateway.auth.password/OPENCLAW_GATEWAY_PASSWORD). - Hook-Auth erfolgt nur per Header (
Authorization: Bearer ...oderx-openclaw-token); Query-String-Token werden abgelehnt. hooks.pathdarf nicht/sein; halten Sie Webhook-Ingress auf einem dedizierten Unterpfad wie/hooks.- Lassen Sie Bypass-Flags für unsichere Inhalte deaktiviert (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), außer bei eng begrenztem Debugging. - Wenn Sie
hooks.allowRequestSessionKeyaktivieren, setzen Sie außerdemhooks.allowedSessionKeyPrefixes, um vom Aufrufer ausgewählte Sitzungsschlüssel zu begrenzen. - Für Hook-gesteuerte Agents sollten Sie starke moderne Modellstufen und strikte Tool-Richtlinien bevorzugen (zum Beispiel nur Messaging plus Sandboxing, wo möglich).
Multi-Agent-Routing konfigurieren
Multi-Agent-Routing konfigurieren
Konfiguration in mehrere Dateien aufteilen ($include)
Konfiguration in mehrere Dateien aufteilen ($include)
$include, um große Konfigurationen zu organisieren:- Einzelne Datei: ersetzt das enthaltende Objekt
- Array von Dateien: wird der Reihe nach tief zusammengeführt (später gewinnt)
- Geschwisterschlüssel: werden nach Includes zusammengeführt (überschreiben eingeschlossene Werte)
- Verschachtelte Includes: bis zu 10 Ebenen tief unterstützt
- Relative Pfade: werden relativ zur einschließenden Datei aufgelöst
- Pfadformat: Include-Pfade dürfen keine Nullbytes enthalten und müssen vor und nach der Auflösung strikt kürzer als 4096 Zeichen sein
- OpenClaw-eigene Schreibvorgänge: Wenn ein Schreibvorgang nur einen Top-Level-Abschnitt ändert,
der durch einen Single-File-Include wie
plugins: { $include: "./plugins.json5" }gestützt wird, aktualisiert OpenClaw diese eingeschlossene Datei und lässtopenclaw.jsonunverändert - Nicht unterstütztes Write-through: Root-Includes, Include-Arrays und Includes mit Geschwister-Overrides schlagen für OpenClaw-eigene Schreibvorgänge geschlossen fehl, statt die Konfiguration zu flatten
- Einschließung:
$include-Pfade müssen unter dem Verzeichnis aufgelöst werden, dasopenclaw.jsonenthält. Um einen Baum über Maschinen oder Benutzer hinweg zu teilen, setzen SieOPENCLAW_INCLUDE_ROOTSauf eine Pfadliste (:auf POSIX,;unter Windows) mit zusätzlichen Verzeichnissen, auf die Includes verweisen dürfen. Symlinks werden aufgelöst und erneut geprüft, sodass ein Pfad, der lexikalisch in einem Konfigurationsverzeichnis liegt, dessen reales Ziel aber alle erlaubten Roots verlässt, dennoch abgelehnt wird. - Fehlerbehandlung: klare Fehler für fehlende Dateien, Parse-Fehler, zirkuläre Includes, ungültiges Pfadformat und übermäßige Länge
Config-Hot-Reload
Das Gateway überwacht~/.openclaw/openclaw.json und wendet Änderungen automatisch an: Für die meisten Einstellungen ist kein manueller Neustart erforderlich.
Direkte Dateiänderungen gelten als nicht vertrauenswürdig, bis sie validiert wurden. Der Watcher wartet,
bis temporäre Schreib-/Umbenennungsaktivitäten des Editors abgeschlossen sind, liest die finale Datei und lehnt
ungültige externe Änderungen ab, ohne openclaw.json neu zu schreiben. OpenClaw-eigene Konfigurations-
Schreibvorgänge verwenden vor dem Schreiben dieselbe Schema-Prüfung; destruktives Überschreiben wie
das Entfernen von gateway.mode oder das Verkleinern der Datei um mehr als die Hälfte wird abgelehnt und
zur Prüfung als .rejected.* gespeichert.
Wenn Sie config reload skipped (invalid config) sehen oder der Start Invalid config meldet, prüfen Sie die Konfiguration, führen Sie openclaw config validate aus und führen Sie anschließend openclaw doctor --fix zur Reparatur aus. Siehe Gateway-Fehlerbehebung
für die Checkliste.
Reload-Modi
| Modus | Verhalten |
|---|---|
hybrid (Standard) | Wendet sichere Änderungen sofort per Hot-Apply an. Startet bei kritischen Änderungen automatisch neu. |
hot | Wendet nur sichere Änderungen per Hot-Apply an. Protokolliert eine Warnung, wenn ein Neustart erforderlich ist - Sie kümmern sich darum. |
restart | Startet das Gateway bei jeder Konfigurationsänderung neu, ob sicher oder nicht. |
off | Deaktiviert die Dateiüberwachung. Änderungen werden beim nächsten manuellen Neustart wirksam. |
Was per Hot-Apply übernommen wird und was einen Neustart benötigt
Die meisten Felder werden ohne Ausfallzeit per Hot-Apply übernommen. Im Modushybrid werden Änderungen, die einen Neustart erfordern, automatisch behandelt.
| Kategorie | Felder | Neustart erforderlich? |
|---|---|---|
| Kanäle | channels.*, web (WhatsApp) - alle integrierten und Plugin-Kanäle | Nein |
| Agent & Modelle | agent, agents, models, routing | Nein |
| Automatisierung | hooks, cron, agent.heartbeat | Nein |
| Sitzungen & Nachrichten | session, messages | Nein |
| Tools & Medien | tools, browser, skills, mcp, audio, talk | Nein |
| UI & Sonstiges | ui, logging, identity, bindings | Nein |
| Gateway-Server | gateway.* (Port, Bind, Auth, Tailscale, TLS, HTTP) | Ja |
| Infrastruktur | discovery, plugins | Ja |
gateway.reload und gateway.remote sind Ausnahmen - Änderungen daran lösen keinen Neustart aus.Planung des Neuladens
Wenn Sie eine Quelldatei bearbeiten, die über$include referenziert wird, plant OpenClaw
das Neuladen anhand des in der Quelle verfassten Layouts, nicht anhand der abgeflachten Ansicht im Arbeitsspeicher.
Dadurch bleiben Entscheidungen für Hot Reload (sofort anwenden vs. Neustart) vorhersehbar, selbst wenn ein
einzelner Abschnitt der obersten Ebene in einer eigenen eingebundenen Datei liegt, etwa
plugins: { $include: "./plugins.json5" }. Die Planung des Neuladens schlägt geschlossen fehl, wenn das
Quelllayout mehrdeutig ist.
Config-RPC (programmatische Updates)
Für Tools, die Konfiguration über die Gateway-API schreiben, bevorzugen Sie diesen Ablauf:config.schema.lookup, um einen Teilbaum zu prüfen (flacher Schemaknoten + Zusammenfassungen der Kinder)config.get, um den aktuellen Snapshot plushashabzurufenconfig.patchfür Teilupdates (JSON Merge Patch: Objekte werden zusammengeführt,nulllöscht, Arrays werden ersetzt, wenn dies ausdrücklich mitreplacePathsbestätigt wurde, falls Einträge entfernt würden)config.applynur, wenn Sie die gesamte Konfiguration ersetzen möchtenupdate.runfür ein explizites Self-Update plus Neustart; schließen SiecontinuationMessageein, wenn die Sitzung nach dem Neustart einen Folgeturn ausführen sollupdate.status, um den neuesten Update-Neustart-Sentinel zu prüfen und nach einem Neustart die laufende Version zu verifizieren
config.schema.lookup als erste Anlaufstelle für genaue
Dokumentation und Einschränkungen auf Feldebene behandeln. Verwenden Sie die Konfigurationsreferenz,
wenn sie die umfassendere Konfigurationsübersicht, Standardwerte oder Links zu dedizierten
Subsystemreferenzen benötigen.
config.apply, config.patch, update.run) sind
auf 3 Anfragen pro 60 Sekunden je deviceId+clientIp begrenzt. Neustart-
Anfragen werden zusammengeführt und erzwingen anschließend eine Abkühlzeit von 30 Sekunden zwischen Neustartzyklen.
update.status ist schreibgeschützt, aber admin-beschränkt, weil der Neustart-Sentinel
Zusammenfassungen von Update-Schritten und Enden von Befehlsausgaben enthalten kann.config.apply als auch config.patch akzeptieren raw, baseHash, sessionKey,
note und restartDelayMs. baseHash ist für beide Methoden erforderlich, wenn bereits eine
Konfiguration existiert.
config.patch akzeptiert außerdem replacePaths, ein Array von Konfigurationspfaden, deren Array-
Ersetzung beabsichtigt ist. Wenn ein Patch ein vorhandenes Array durch eines mit weniger Einträgen
ersetzen oder löschen würde, lehnt das Gateway den Schreibvorgang ab, sofern dieser genaue Pfad nicht
in replacePaths erscheint; verschachtelte Arrays unter Array-Einträgen verwenden [], etwa
agents.list[].skills. Dadurch wird verhindert, dass abgeschnittene config.get-Snapshots
Routing- oder Allowlist-Arrays stillschweigend überschreiben. Verwenden Sie config.apply, wenn Sie
die vollständige Konfiguration ersetzen möchten.
Umgebungsvariablen
OpenClaw liest Umgebungsvariablen aus dem Elternprozess plus:.envaus dem aktuellen Arbeitsverzeichnis (falls vorhanden)~/.openclaw/.env(globaler Fallback)
Shell-Env-Import (optional)
Shell-Env-Import (optional)
OPENCLAW_LOAD_SHELL_ENV=1Umgebungsvariablen-Ersetzung in Konfigurationswerten
Umgebungsvariablen-Ersetzung in Konfigurationswerten
${VAR_NAME}:- Nur passende Namen in Großbuchstaben:
[A-Z_][A-Z0-9_]* - Fehlende/leere Variablen lösen beim Laden einen Fehler aus
- Mit
$${VAR}für literale Ausgabe escapen - Funktioniert innerhalb von
$include-Dateien - Inline-Ersetzung:
"${BASE}/v1"→"https://api.example.com/v1"
SecretRefs (env, file, exec)
SecretRefs (env, file, exec)
secrets.providers für env/file/exec) finden Sie unter Secrets Management.
Unterstützte Zugangsdatenpfade sind in SecretRef Credential Surface aufgeführt.Vollständige Referenz
Die vollständige Feld-für-Feld-Referenz finden Sie in der Konfigurationsreferenz.Verwandt: Konfigurationsbeispiele · Konfigurationsreferenz · Doctor