Gateway
Konfiguration
OpenClaw liest optional eine JSON5-Konfiguration aus ~/.openclaw/openclaw.json. Wenn die Datei fehlt, verwendet OpenClaw sichere Standardwerte.
Der aktive Konfigurationspfad muss eine reguläre Datei sein. Schreibvorgänge von OpenClaw ersetzen sie atomar (durch Umbenennen auf den Pfad), sodass bei einer über einen symbolischen Link eingebundenen openclaw.json deren Ziel ersetzt wird, statt durch den Link hindurch zu schreiben – vermeiden Sie daher Konfigurationslayouts mit symbolischen Links. Wenn Sie die Konfiguration außerhalb des standardmäßigen Zustandsverzeichnisses aufbewahren, lassen Sie OPENCLAW_CONFIG_PATH direkt auf die tatsächliche Datei verweisen.
Häufige Gründe für das Hinzufügen einer Konfiguration:
- Kanäle verbinden und steuern, wer dem Bot Nachrichten senden darf
- Modelle, Tools, Sandboxing oder Automatisierung (Cron, Hooks) festlegen
- Sitzungen, Medien, Netzwerk oder Benutzeroberfläche anpassen
Alle verfügbaren Felder finden Sie in der vollständigen Referenz.
Agenten und Automatisierungen sollten vor der Bearbeitung der Konfiguration config.schema.lookup verwenden, um eine genaue
Dokumentation auf Feldebene abzurufen. Verwenden Sie diese Seite für aufgabenorientierte Anleitungen und die
Konfigurationsreferenz für die umfassendere
Feldübersicht und die Standardwerte.
Minimale Konfiguration
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}Konfiguration bearbeiten
Interaktiver Assistent
openclaw onboard # vollständiger Onboarding-Ablaufopenclaw configure # KonfigurationsassistentCLI (Einzeiler)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeySteuerungsoberfläche
Öffnen Sie http://127.0.0.1:18789 und verwenden Sie die Registerkarte Konfiguration.
Die Steuerungsoberfläche rendert ein Formular aus dem Live-Konfigurationsschema, einschließlich der Dokumentationsmetadaten
title / description für Felder sowie der Plugin- und Kanalschemas, sofern
verfügbar, und bietet einen Raw JSON-Editor als Ausweichmöglichkeit. Für Detailansichten
und andere Tools stellt das Gateway außerdem config.schema.lookup bereit, um
einen einzelnen pfadbezogenen Schemaknoten sowie Zusammenfassungen seiner direkten untergeordneten Elemente abzurufen.
Direkte Bearbeitung
Bearbeiten Sie ~/.openclaw/openclaw.json direkt. Das Gateway überwacht die Datei und wendet Änderungen automatisch an (siehe Hot Reload).
Strenge Validierung
openclaw config schema gibt das kanonische JSON-Schema aus, das von der Steuerungsoberfläche
und für die Validierung verwendet wird. config.schema.lookup ruft einen einzelnen pfadbezogenen Knoten sowie
Zusammenfassungen seiner untergeordneten Elemente für Tools mit Detailansichten ab. Die Dokumentationsmetadaten title/description für Felder
werden durch verschachtelte Objekte, Platzhalter (*), Array-Elemente ([]) sowie anyOf-/
oneOf-/allOf-Verzweigungen weitergegeben. Laufzeitschemas für Plugins und Kanäle werden zusammengeführt, wenn die
Manifest-Registry geladen wird.
Wenn die Validierung fehlschlägt:
- Das Gateway startet nicht
- Nur Diagnosebefehle funktionieren (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Führen Sie
openclaw doctoraus, um die genauen Probleme anzuzeigen - Führen Sie
openclaw doctor --fixaus (--repairist dasselbe Flag;--yesüberspringt Eingabeaufforderungen), um Reparaturen anzuwenden
Das Gateway bewahrt nach jedem erfolgreichen Start eine vertrauenswürdige Kopie der letzten als funktionsfähig bekannten Konfiguration auf,
stellt sie jedoch weder beim Start noch beim Hot Reload automatisch wieder her – dies erfolgt nur durch openclaw doctor --fix.
Wenn die Validierung von openclaw.json fehlschlägt (einschließlich der Plugin-lokalen Validierung), schlägt der Start des Gateways
fehl oder das erneute Laden wird übersprungen, und die aktuelle Laufzeit verwendet weiterhin die zuletzt akzeptierte
Konfiguration. Ein abgelehnter Schreibvorgang wird zur Prüfung außerdem als <path>.rejected.<timestamp> gespeichert.
Das Gateway blockiert Schreibvorgänge, die wie versehentliches Überschreiben aussehen – etwa das Entfernen von gateway.mode,
den Verlust des meta-Blocks oder eine Verkleinerung der Datei um mehr als die Hälfte –, sofern der Schreibvorgang
destruktive Änderungen nicht ausdrücklich zulässt. Die Übernahme als letzte als funktionsfähig bekannte Konfiguration wird übersprungen, wenn ein
Kandidat einen Platzhalter für ein geschwärztes Geheimnis wie *** oder [redacted] enthält.
Häufige Aufgaben
Einen Kanal einrichten (WhatsApp, Telegram, Discord usw.)
Jeder Kanal hat unter channels.<provider> einen eigenen Konfigurationsabschnitt. Einrichtungsschritte finden Sie auf der jeweiligen Kanalseite:
- Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - iMessage -
channels.imessage - Mattermost -
channels.mattermost - Microsoft Teams -
channels.msteams - Signal -
channels.signal - Slack -
channels.slack - Telegram -
channels.telegram - WhatsApp -
channels.whatsapp
Alle Kanäle verwenden dasselbe Richtlinienmuster für Direktnachrichten:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["tg:123"], // nur für allowlist/open }, },}Modelle auswählen und konfigurieren
Legen Sie das primäre Modell und optionale Fallbacks fest:
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["openai/gpt-5.4"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "openai/gpt-5.4": { alias: "GPT" }, }, }, },}agents.defaults.modelsdefiniert den Modellkatalog und dient als Zulassungsliste für/model;provider/*-Einträge beschränken/model,/modelsund Modellauswahlelemente 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 Einträge zur Zulassungsliste 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 die Herunterskalierung von Bildern in Transkripten und Tools (Standardwert1200); niedrigere Werte reduzieren bei Durchläufen mit vielen Screenshots normalerweise die Nutzung von Vision-Tokens.- Informationen zum Wechseln von Modellen im Chat finden Sie unter Modelle über die CLI, Informationen zur Authentifizierungsrotation und zum Fallback-Verhalten unter Modell-Failover.
- Informationen zu benutzerdefinierten oder selbst gehosteten Providern finden Sie unter Benutzerdefinierte Provider in der Referenz.
Steuern, wer dem Bot Nachrichten senden darf
Der Zugriff auf Direktnachrichten wird pro Kanal über dmPolicy gesteuert (Standardwert "pairing"):
"pairing": Unbekannte Absender erhalten einen einmaligen Kopplungscode zur Genehmigung"allowlist": Nur Absender inallowFrom(oder im Speicher gekoppelter zugelassener Absender)"open": Alle eingehenden Direktnachrichten zulassen (erfordertallowFrom: ["*"])"disabled": Alle Direktnachrichten ignorieren
Verwenden Sie für Gruppen groupPolicy ("allowlist" | "open" | "disabled") zusammen mit groupAllowFrom oder kanalspezifischen Zulassungslisten.
Kanalspezifische Details finden Sie in der vollständigen Referenz.
Erwähnungspflicht für Gruppenchats einrichten
Gruppennachrichten erfordern standardmäßig eine Erwähnung. Konfigurieren Sie Auslösemuster pro Agent. Normale Gruppen-/Kanalantworten werden automatisch veröffentlicht; aktivieren Sie den Pfad über das Nachrichten-Tool für gemeinsam genutzte Räume, in denen der Agent entscheiden soll, wann er sich äußert:
{ messages: { visibleReplies: "automatic", // auf "message_tool" setzen, um überall Sendevorgänge über das Nachrichten-Tool zu verlangen groupChat: { visibleReplies: "message_tool", // explizit aktiviert; sichtbare Ausgabe erfordert message(action=send) unmentionedInbound: "room_event", // nicht erwähnte, dauerhaft aktive Gruppenunterhaltung dient als stiller Kontext }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- Metadaten-Erwähnungen: native @-Erwähnungen (Antippen zum Erwähnen in WhatsApp, Telegram-@bot usw.)
- Textmuster: sichere reguläre Ausdrücke in
mentionPatterns - Sichtbare Antworten:
messages.visibleReplieskann Sendevorgänge über das Nachrichten-Tool global vorschreiben;messages.groupChat.visibleRepliesüberschreibt dies für Gruppen/Kanäle. - Informationen zu Modi für sichtbare Antworten, kanalspezifischen Überschreibungen und dem Selbstchat-Modus finden Sie in der vollständigen Referenz.
Skills pro Agent beschränken
Verwenden Sie agents.defaults.skills als gemeinsame Basis und überschreiben Sie anschließend bestimmte
Agenten mit agents.list[].skills:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // übernimmt github, weather { id: "docs", skills: ["docs-search"] }, // ersetzt die Standardwerte { id: "locked-down", skills: [] }, // keine Skills ], },}- Lassen Sie
agents.defaults.skillsweg, damit Skills standardmäßig nicht beschränkt sind. - Lassen Sie
agents.list[].skillsweg, um die Standardwerte zu übernehmen. - Legen Sie
agents.list[].skills: []fest, um keine Skills zuzulassen. - Weitere Informationen finden Sie unter Skills, Skills-Konfiguration und in der Konfigurationsreferenz.
Überwachung des Kanalzustands durch das Gateway anpassen
Steuern Sie, wie aggressiv das Gateway Kanäle neu startet, die veraltet zu sein scheinen:
{ gateway: { channelHealthCheckMinutes: 5, channelStaleEventThresholdMinutes: 30, channelMaxRestartsPerHour: 10, }, channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- Die angezeigten Werte sind die Standardwerte. Legen Sie
gateway.channelHealthCheckMinutes: 0fest, um durch die Zustandsüberwachung ausgelöste 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 einzelnen Kanal oder ein einzelnes Konto zu deaktivieren, ohne die globale Überwachung zu deaktivieren. - Informationen zur betrieblichen Fehlerdiagnose finden Sie unter Zustandsprüfungen, alle Felder in der vollständigen Referenz.
Zeitüberschreitung für den WebSocket-Handshake des Gateways anpassen
Geben Sie lokalen Clients auf ausgelasteten oder leistungsschwachen Hosts mehr Zeit, den WebSocket-Handshake vor der Authentifizierung abzuschließen:
{ gateway: { handshakeTimeoutMs: 30000, },}- Der Standardwert beträgt
15000Millisekunden. OPENCLAW_HANDSHAKE_TIMEOUT_MShat für einmalige Überschreibungen in Diensten oder Shells weiterhin Vorrang.- Beheben Sie vorzugsweise zuerst Verzögerungen beim Start oder in der Ereignisschleife; diese Einstellung ist für Hosts vorgesehen, die ordnungsgemäß funktionieren, aber während der Aufwärmphase langsam sind.
Sitzungen und Zurücksetzungen konfigurieren
Sitzungen steuern die Kontinuität und Isolation von Unterhaltungen:
{ session: { dmScope: "per-channel-peer", // empfohlen für mehrere Benutzer threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, }, reset: { mode: "daily", atHour: 4, idleMinutes: 120, }, },}dmScope:main(gemeinsam genutzt) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: Globale Standardwerte für das Routing Thread-gebundener Sitzungen./focus,/unfocus,/agents,/session idleund/session max-agebinden diese Einstellung pro Sitzung, heben die Bindung auf, listen sie auf und passen sie an (Discord bindet Threads, Telegram bindet Themen/Unterhaltungen).- Weitere Informationen zu Geltungsbereichen, Identitätsverknüpfungen und Senderichtlinien finden Sie unter Sitzungsverwaltung.
- Alle Felder finden Sie in der vollständigen Referenz.
Enable sandboxing
Führen Sie Agent-Sitzungen in isolierten Sandbox-Laufzeitumgebungen aus:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}Erstellen Sie zuerst das Image – führen Sie aus einem Quellcode-Checkout scripts/sandbox-setup.sh aus, oder verwenden Sie bei einer npm-Installation den eingebetteten Befehl docker build unter Sandboxing § Images und Einrichtung.
Die vollständige Anleitung finden Sie unter Sandboxing und alle Optionen in der vollständigen Referenz.
Relay-gestützte Push-Benachrichtigungen für offizielle iOS-Builds aktivieren
Relay-gestützte Push-Benachrichtigungen für öffentliche App-Store-Builds verwenden das gehostete OpenClaw-Relay: https://ios-push-relay.openclaw.ai.
Benutzerdefinierte Relay-Bereitstellungen erfordern einen bewusst getrennten iOS-Build-/Bereitstellungspfad, dessen Relay-URL mit der Relay-URL des Gateways übereinstimmt. Wenn Sie einen benutzerdefinierten Relay-Build verwenden, legen Sie Folgendes in der Gateway-Konfiguration fest:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // Optional. Standardwert: 10000 timeoutMs: 10000, }, }, }, },}CLI-Entsprechung:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comFunktionsweise:
- Ermöglicht dem Gateway,
push.test, Aktivierungsimpulse und Aktivierungen zur Wiederherstellung der Verbindung über das externe Relay zu senden. - Verwendet eine registrierungsspezifische 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.
- Verwendet für lokale/manuelle iOS-Builds weiterhin direkte 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 integrierten Relay-Basis-URL übereinstimmen, damit Registrierungs- und Sendedatenverkehr dieselbe Relay-Bereitstellung erreichen.
End-to-End-Ablauf:
- Installieren Sie die offizielle iOS-App.
- Optional: Konfigurieren Sie
gateway.push.apns.relay.baseUrlauf dem Gateway nur, wenn Sie bewusst einen separaten benutzerdefinierten Relay-Build verwenden. - Koppeln Sie die iOS-App mit dem Gateway und lassen Sie sowohl die Node- als auch die Operator-Sitzung eine Verbindung herstellen.
- Die iOS-App ruft die Gateway-Identität ab, registriert sich mithilfe von App Attest und dem App-Beleg beim Relay und veröffentlicht anschließend die Relay-gestützte
push.apns.register-Nutzlast auf dem gekoppelten Gateway. - Das Gateway speichert das Relay-Handle und die Sendeberechtigung und verwendet sie anschließend für
push.test, Aktivierungsimpulse und Aktivierungen zur Wiederherstellung der Verbindung.
Betriebshinweise:
- 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 verweist, aktualisiert die App ihre zwischengespeicherte Relay-Registrierung, anstatt den alten Relay-Ursprung wiederzuverwenden.
Kompatibilitätshinweis:
OPENCLAW_APNS_RELAY_BASE_URLundOPENCLAW_APNS_RELAY_TIMEOUT_MSfunktionieren weiterhin als temporäre Umgebungsüberschreibungen.- Benutzerdefinierte Gateway-Relay-URLs müssen mit der in den iOS-Build integrierten Relay-Basis-URL übereinstimmen; der öffentliche App-Store-Veröffentlichungskanal lehnt benutzerdefinierte Überschreibungen der iOS-Relay-URL ab.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=truebleibt ein ausschließlich für Loopback bestimmter Entwicklungsnotausgang; speichern Sie keine HTTP-Relay-URLs dauerhaft in der Konfiguration.
Den End-to-End-Ablauf finden Sie unter iOS-App, das Relay-Sicherheitsmodell unter Authentifizierungs- und Vertrauensablauf.
Heartbeat einrichten (regelmäßige Statusmeldungen)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: Zeichenfolge für die Dauer (30m,2h). Setzen Sie den Wert zum Deaktivieren auf0m. Standard:30m.target:last|none|<channel-id>(zum Beispieldiscord,matrix,telegramoderwhatsapp)directPolicy:allow(Standard) oderblockfür DM-artige Heartbeat-Ziele- Die vollständige Anleitung finden Sie unter Heartbeat.
Cron-Jobs konfigurieren
{ cron: { enabled: true, maxConcurrentRuns: 8, // Standardwert; Cron-Weiterleitung + isolierte Ausführung von Cron-Agent-Turns sessionRetention: "24h", runLog: { maxBytes: "2mb", keepLines: 2000, }, },}sessionRetention: Sitzungen abgeschlossener isolierter Ausführungen aus den SQLite-Sitzungszeilen entfernen (Standardwert24h; zum Deaktivieren auffalsesetzen).runLog: Aufbewahrte Zeilen des Cron-Ausführungsverlaufs pro Job entfernen. Der Verlauf wird in SQLite gespeichert;maxBytes(Standardwert2_000_000) wird für die Kompatibilität mit älteren dateibasierten Ausführungsprotokollen beibehalten,keepLineshat den Standardwert2000.- Eine Funktionsübersicht und CLI-Beispiele finden Sie unter Cron-Jobs.
Webhooks (Hooks) einrichten
Aktivieren Sie HTTP-Webhook-Endpunkte am Gateway:
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: false, allowedSessionKeyPrefixes: ["hook:"], mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "main", deliver: true, }, ], },}Sicherheitshinweis:
- Behandeln Sie sämtliche Inhalte von Hook-/Webhook-Nutzdaten als nicht vertrauenswürdige Eingaben.
- Verwenden Sie ein dediziertes
hooks.token; verwenden Sie keine aktiven Gateway-Authentifizierungsgeheimnisse (gateway.auth.token/OPENCLAW_GATEWAY_TOKENodergateway.auth.password/OPENCLAW_GATEWAY_PASSWORD) erneut. - Die Hook-Authentifizierung erfolgt ausschließlich über Header (
Authorization: Bearer ...oderx-openclaw-token); Tokens in Abfragezeichenfolgen werden abgelehnt. hooks.pathdarf nicht/sein; verwenden Sie für eingehende Webhooks einen dedizierten Unterpfad wie/hooks.- Lassen Sie Flags zur Umgehung der Prüfung unsicherer Inhalte (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent) deaktiviert, außer bei eng begrenzter Fehlerdiagnose. - Wenn Sie
hooks.allowRequestSessionKeyaktivieren, legen Sie außerdemhooks.allowedSessionKeyPrefixesfest, um die vom Aufrufer ausgewählten Sitzungsschlüssel einzugrenzen. - Bevorzugen Sie für Hook-gesteuerte Agenten leistungsfähige moderne Modellklassen und eine strikte Tool-Richtlinie (beispielsweise ausschließlich Nachrichtenfunktionen sowie Sandboxing, sofern möglich).
Alle Zuordnungsoptionen und die Gmail-Integration finden Sie in der vollständigen Referenz.
Multi-Agent-Routing konfigurieren
Führen Sie mehrere isolierte Agenten mit separaten Arbeitsbereichen und Sitzungen aus:
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}Bindungsregeln und agentenspezifische Zugriffsprofile finden Sie unter Multi-Agent und in der vollständigen Referenz.
Konfiguration auf mehrere Dateien aufteilen ($include)
Verwenden Sie $include, um große Konfigurationen zu organisieren:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- Einzelne Datei: ersetzt das umgebende Objekt
- Datei-Array: wird der Reihe nach tief zusammengeführt (spätere Werte haben Vorrang), bis zu 10 verschachtelte Ebenen
- Gleichgeordnete Schlüssel: werden nach den Includes zusammengeführt (überschreiben eingebundene Werte)
- Relative Pfade: werden relativ zur einbindenden 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
- Von OpenClaw ausgeführte Schreibvorgänge: Wenn ein Schreibvorgang nur einen Abschnitt der obersten Ebene ändert,
der durch ein Include einer einzelnen Datei wie
plugins: { $include: "./plugins.json5" }gestützt wird, aktualisiert OpenClaw diese eingebundene Datei und lässtopenclaw.jsonunverändert - Nicht unterstütztes Durchschreiben: Root-Includes, Include-Arrays und Includes mit gleichgeordneten Überschreibungen werden bei von OpenClaw ausgeführten Schreibvorgängen sicher abgelehnt, anstatt die Konfiguration zu verflachen
- Einschränkung:
$include-Pfade müssen innerhalb des Verzeichnisses aufgelöst werden, dasopenclaw.jsonenthält. Um eine Verzeichnisstruktur über mehrere Rechner oder Benutzer hinweg gemeinsam zu verwenden, setzen SieOPENCLAW_INCLUDE_ROOTSauf eine Pfadliste (:unter POSIX,;unter Windows) mit zusätzlichen Verzeichnissen, auf die Includes verweisen dürfen. Symbolische Links werden aufgelöst und erneut geprüft. Daher wird ein Pfad weiterhin abgelehnt, der sich lexikalisch in einem Konfigurationsverzeichnis befindet, dessen tatsächliches Ziel jedoch außerhalb aller zulässigen Wurzelverzeichnisse liegt. - Fehlerbehandlung: eindeutige Fehler bei fehlenden Dateien, Parsing-Fehlern, zirkulären Includes, ungültigem Pfadformat und übermäßiger Länge
Hot-Reload der Konfiguration
Der 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- und Umbenennungsvorgänge des Editors abgeschlossen sind, liest die endgültige Datei und lehnt
ungültige externe Änderungen ab, ohne openclaw.json neu zu schreiben. Von OpenClaw ausgeführte
Konfigurationsschreibvorgänge durchlaufen vor dem Schreiben dieselbe Schemaprüfung (siehe Strikte Validierung
für die Regeln zum Überschreiben und Zurücksetzen, die für jeden Schreibvorgang gelten).
Wenn config reload skipped (invalid config) angezeigt wird oder beim Start Invalid config gemeldet wird, prüfen Sie die Konfiguration, führen Sie openclaw config validate und anschließend zur Reparatur openclaw doctor --fix aus. Die Prüfliste finden Sie unter Fehlerbehebung für den Gateway.
Reload-Modi
| Modus | Verhalten |
|---|---|
hybrid (Standard) |
Wendet sichere Änderungen sofort per Hot-Reload an. Bei kritischen Änderungen erfolgt automatisch ein Neustart. |
hot |
Wendet nur sichere Änderungen per Hot-Reload an. Protokolliert eine Warnung, wenn ein Neustart erforderlich ist – Sie führen ihn durch. |
restart |
Startet den Gateway bei jeder Konfigurationsänderung neu, unabhängig davon, ob sie sicher ist. |
off |
Deaktiviert die Dateiüberwachung. Änderungen werden beim nächsten manuellen Neustart wirksam. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}Was per Hot-Reload angewendet wird und was einen Neustart erfordert
Die meisten Felder werden ohne Ausfallzeit direkt angewendet; bei einigen direkt angewendeten Abschnitten wird nur das jeweilige
Subsystem (Kanal, Cron, Heartbeat, Zustandsüberwachung) statt des gesamten Gateways neu gestartet. Im
Modus hybrid werden Änderungen, die einen Gateway-Neustart erfordern, automatisch verarbeitet.
| Kategorie | Felder | Gateway-Neustart erforderlich? |
|---|---|---|
| Kanäle | channels.*, web (WhatsApp) – alle integrierten und Plugin-Kanäle |
Nein (startet diesen Kanal neu) |
| Agent und Modelle | agent, agents, models, routing |
Nein |
| Automatisierung | hooks, cron, agent.heartbeat |
Nein (startet dieses Subsystem neu) |
| Sitzungen und Nachrichten | session, messages |
Nein |
| Tools und Medien | tools, skills, mcp, audio, talk |
Nein |
| Plugin-Konfiguration | plugins.entries.*, plugins.allow, plugins.deny, plugins.enabled |
Nein (lädt die Plugin-Laufzeit neu) |
| UI und Sonstiges | ui, logging, identity, bindings |
Nein |
| Gateway-Server | gateway.* (Port, Bindung, Authentifizierung, Tailscale, TLS, HTTP, Push) |
Ja |
| Infrastruktur | discovery, browser, plugins.load, plugins.installs |
Ja |
Planung des Neuladens
Wenn Sie eine Quelldatei bearbeiten, auf die über $include verwiesen wird, plant OpenClaw
das Neuladen anhand der in der Quelle definierten Struktur und nicht anhand der vereinheitlichten Ansicht im Arbeitsspeicher.
Dadurch bleiben Entscheidungen zum direkten Neuladen (direktes Anwenden oder Neustart) vorhersehbar, selbst wenn sich ein
einzelner Abschnitt der obersten Ebene in einer eigenen eingebundenen Datei befindet, beispielsweise
plugins: { $include: "./plugins.json5" }. Die Planung des Neuladens wird sicher abgebrochen, wenn die
Quellstruktur mehrdeutig ist.
Konfigurations-RPC (programmatische Aktualisierungen)
Für Tools, die die Konfiguration über die Gateway-API schreiben, verwenden Sie vorzugsweise diesen Ablauf:
config.schema.lookup, um einen Unterbaum zu prüfen (flacher Schemaknoten und Zusammenfassungen der untergeordneten Elemente)config.get, um den aktuellen Snapshot einschließlichhashabzurufenconfig.patchfür teilweise Aktualisierungen (JSON-Merge-Patch: Objekte werden zusammengeführt,nulllöscht, Arrays werden ersetzt, wenn dies mitreplacePathsausdrücklich bestätigt wird, falls Einträge entfernt würden)config.applynur, wenn Sie die gesamte Konfiguration ersetzen möchtenupdate.runfür eine ausdrückliche Selbstaktualisierung mit anschließendem Neustart; geben SiecontinuationMessagean, wenn die Sitzung nach dem Neustart einen weiteren Durchlauf ausführen sollupdate.status, um den neuesten Neustart-Marker der Aktualisierung zu prüfen und nach einem Neustart die ausgeführte Version zu verifizieren
Agents sollten config.schema.lookup als erste Anlaufstelle für genaue
Dokumentation und Einschränkungen auf Feldebene verwenden. Verwenden Sie die Konfigurationsreferenz,
wenn Sie die umfassendere Konfigurationsübersicht, Standardwerte oder Links zu speziellen
Subsystemreferenzen benötigen.
Beispiel für einen teilweisen Patch:
openclaw gateway call config.get --params '{}' # payload.hash erfassenopenclaw gateway call config.patch --params '{ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }", "baseHash": "<hash>"}'Sowohl config.apply als auch config.patch akzeptieren raw, baseHash, sessionKey,
note und restartDelayMs. baseHash ist für beide Methoden erforderlich, sobald bereits eine
Konfigurationsdatei vorhanden ist (beim erstmaligen Schreiben ohne bestehende Konfiguration entfällt die Prüfung).
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 der Gateway den Schreibvorgang ab, sofern nicht genau dieser Pfad
in replacePaths enthalten ist; verschachtelte Arrays innerhalb von Array-Einträgen verwenden [], beispielsweise
agents.list[].skills. Dadurch wird verhindert, dass gekürzte config.get-Snapshots
Routing- oder Zulassungslisten-Arrays unbemerkt überschreiben. Verwenden Sie config.apply, wenn Sie
die vollständige Konfiguration ersetzen möchten.
Umgebungsvariablen
OpenClaw liest Umgebungsvariablen aus dem übergeordneten Prozess sowie aus:
.envim aktuellen Arbeitsverzeichnis (falls vorhanden)~/.openclaw/.env(globaler Rückgriff)
Keine der beiden Dateien überschreibt bereits vorhandene Umgebungsvariablen. Sie können Umgebungsvariablen auch direkt in der Konfiguration festlegen:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}Import der Shell-Umgebung (optional)
Wenn diese Option aktiviert ist und erwartete Schlüssel nicht gesetzt sind, führt OpenClaw Ihre Anmelde-Shell aus und importiert nur die fehlenden Schlüssel:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}Entsprechende Umgebungsvariable: OPENCLAW_LOAD_SHELL_ENV=1. Standardwert für timeoutMs: 15000.
Ersetzung von Umgebungsvariablen in Konfigurationswerten
Verweisen Sie in beliebigen Zeichenfolgenwerten der Konfiguration mit ${VAR_NAME} auf Umgebungsvariablen:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}Regeln:
- Nur Namen in Großbuchstaben werden erkannt:
[A-Z_][A-Z0-9_]* - Fehlende oder leere Variablen verursachen beim Laden einen Fehler
- Verwenden Sie
$${VAR}für eine literale Ausgabe - Funktioniert innerhalb von
$include-Dateien - Direkte Ersetzung:
"${BASE}/v1"→"https://api.example.com/v1"
Secret-Referenzen (Umgebung, Datei, Ausführung)
Für Felder, die SecretRef-Objekte unterstützen, können Sie Folgendes verwenden:
{models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, },},skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, },},channels: { googlechat: { serviceAccountRef: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}Details zu SecretRef (einschließlich secrets.providers für env/file/exec) finden Sie unter Secret-Verwaltung.
Unterstützte Anmeldedatenpfade sind unter SecretRef-Anmeldedatenoberfläche aufgeführt.
Die vollständige Rangfolge und alle Quellen finden Sie unter Umgebung.
Vollständige Referenz
Die vollständige Referenz aller einzelnen Felder finden Sie in der Konfigurationsreferenz.
Verwandte Themen: Konfigurationsbeispiele · Konfigurationsreferenz · Doctor