Gateway
Configuratiereferentie
Kernconfiguratiereferentie voor ~/.openclaw/openclaw.json. Zie Configuratie voor een taakgericht overzicht.
Behandelt de belangrijkste OpenClaw-configuratievlakken en linkt door wanneer een subsysteem een eigen diepere referentie heeft. Kanaal- en Plugin-beheerde opdrachtcatalogi en diepe geheugen-/QMD-knoppen staan op hun eigen pagina's in plaats van op deze.
Codewaarheid:
openclaw config schemadrukt het live JSON-schema af dat wordt gebruikt voor validatie en Control UI, met gebundelde/Plugin-/kanaalmetadata samengevoegd wanneer beschikbaarconfig.schema.lookupretourneert één padgebonden schemaknooppunt voor drill-downtoolingpnpm config:docs:check/pnpm config:docs:genvalideren de baselinehash van de configuratiedocumentatie tegen het huidige schema-oppervlak
Agent-opzoekpad: gebruik de gateway-toolactie config.schema.lookup voor
exacte documentatie en beperkingen op veldniveau voordat je bewerkingen uitvoert. Gebruik
Configuratie voor taakgerichte begeleiding en deze pagina
voor de bredere veldkaart, standaardwaarden en links naar subsysteemreferenties.
Speciale diepe referenties:
- Referentie voor geheugenconfiguratie voor
agents.defaults.memorySearch.*,memory.qmd.*,memory.citations, en dreaming-configuratie onderplugins.entries.memory-core.config.dreaming - Slash-opdrachten voor de huidige ingebouwde + gebundelde opdrachtcatalogus
- beherende kanaal-/Plugin-pagina's voor kanaalspecifieke opdrachtvlakken
De configuratie-indeling is JSON5 (opmerkingen + afsluitende komma's toegestaan). Alle velden zijn optioneel - OpenClaw gebruikt veilige standaardwaarden wanneer ze worden weggelaten.
Kanalen
Configuratiesleutels per kanaal zijn verplaatst naar een speciale pagina - zie
Configuratie - kanalen voor channels.*,
inclusief Slack, Discord, Telegram, WhatsApp, Matrix, iMessage en andere
gebundelde kanalen (authenticatie, toegangscontrole, meerdere accounts, vermeldingspoort).
Agentstandaardwaarden, multi-agent, sessies en berichten
Verplaatst naar een speciale pagina - zie Configuratie - agents voor:
agents.defaults.*(werkruimte, model, denken, Heartbeat, geheugen, media, Skills, sandbox)multiAgent.*(multi-agentroutering en bindingen)session.*(sessielevenscyclus, Compaction, pruning)messages.*(berichtbezorging, TTS, markdownrendering)talk.*(Talk-modus)talk.speechLocale: optionele BCP 47-locale-id voor Talk-spraakherkenning op iOS/macOStalk.silenceTimeoutMs: wanneer niet ingesteld, behoudt Talk het standaard pauzevenster van het platform voordat het transcript wordt verzonden (700 ms on macOS and Android, 900 ms on iOS)
Tools en aangepaste providers
Toolbeleid, experimentele schakelaars, provider-ondersteunde toolconfiguratie en installatie van aangepaste provider / basis-URL zijn verplaatst naar een speciale pagina - zie Configuratie - tools en aangepaste providers.
Modellen
Providerdefinities, modeltoelatingslijsten en aangepaste providerconfiguratie staan in
Configuratie - tools en aangepaste providers.
De models-root beheert ook globaal modelcatalogusgedrag.
{
models: {
// Optional. Default: true. Requires a Gateway restart when changed.
pricing: { enabled: false },
},
}
models.mode: provider-catalogusgedrag (mergeofreplace).models.providers: aangepaste provider-map, gesleuteld op provider-id.models.pricing.enabled: beheert de achtergrond-pricingbootstrap die start nadat sidecars en kanalen het Gateway-ready-pad bereiken. Wanneerfalse, slaat de Gateway OpenRouter- en LiteLLM-prijscatalogusopvragingen over; geconfigureerdemodels.providers.*.models[].cost-waarden blijven werken voor lokale kostenschattingen.
MCP
Door OpenClaw beheerde MCP-serverdefinities staan onder mcp.servers en worden
gebruikt door ingebedde Pi en andere runtimeadapters. De opdrachten openclaw mcp list,
show, set en unset beheren dit blok zonder verbinding te maken met de
doelserver tijdens configuratiebewerkingen.
{
mcp: {
// Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction.
sessionIdleTtlMs: 600000,
servers: {
docs: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-fetch"],
},
remote: {
url: "https://example.com/mcp",
transport: "streamable-http", // streamable-http | sse
headers: {
Authorization: "Bearer ${MCP_REMOTE_TOKEN}",
},
},
},
},
}
mcp.servers: benoemde stdio- of externe MCP-serverdefinities voor runtimes die geconfigureerde MCP-tools beschikbaar maken. Externe vermeldingen gebruikentransport: "streamable-http"oftransport: "sse";type: "http"is een CLI-native alias dieopenclaw mcp setenopenclaw doctor --fixnormaliseren naar het canonieketransport-veld.mcp.sessionIdleTtlMs: idle-TTL voor sessiegebonden gebundelde MCP-runtimes. Eenmalige ingebedde runs vragen om cleanup aan het einde van de run; deze TTL is de terugval voor langlevende sessies en toekomstige callers.- Wijzigingen onder
mcp.*worden hot-toegepast door gecachete sessie-MCP-runtimes af te voeren. De volgende tooldetectie/het volgende toolgebruik maakt ze opnieuw aan vanuit de nieuwe configuratie, zodat verwijderdemcp.servers-vermeldingen onmiddellijk worden opgeruimd in plaats van te wachten op idle-TTL.
Zie MCP en CLI-backends voor runtimegedrag.
Skills
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/Projects/agent-scripts/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun
},
entries: {
"image-lab": {
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string
env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
allowBundled: optionele toelatingslijst alleen voor gebundelde skills (beheerde/werkruimte-skills niet beïnvloed).load.extraDirs: extra gedeelde skill-roots (laagste prioriteit).install.preferBrew: wanneer true, geef de voorkeur aan Homebrew-installers wanneerbrewbeschikbaar is voordat wordt teruggevallen op andere installertypen.install.nodeManager: voorkeur voor Node-installer voormetadata.openclaw.installspecificaties (npm|pnpm|yarn|bun).entries.<skillKey>.enabled: falseschakelt een skill uit, zelfs als deze gebundeld/geïnstalleerd is.entries.<skillKey>.apiKey: gemak voor skills die een primaire omgevingsvariabele declareren (plaintext string of SecretRef-object).
Plugins
{
plugins: {
enabled: true,
allow: ["voice-call"],
bundledDiscovery: "allowlist",
deny: [],
load: {
paths: ["~/Projects/oss/voice-call-plugin"],
},
entries: {
"voice-call": {
enabled: true,
hooks: {
allowPromptInjection: false,
},
config: { provider: "twilio" },
},
},
},
}
- Geladen uit
~/.openclaw/extensions,<workspace>/.openclaw/extensions, plusplugins.load.paths. - Detectie accepteert native OpenClaw-plugins plus compatibele Codex-bundels en Claude-bundels, inclusief manifestloze Claude-bundels met standaardlayout.
- Configuratiewijzigingen vereisen een herstart van de Gateway.
allow: optionele toelatingslijst (alleen vermelde plugins worden geladen).denywint.bundledDiscovery: standaard"allowlist"voor nieuwe configuraties, zodat een niet-legeplugins.allowook gebundelde provider-plugins poort, inclusief web-search runtimeproviders. Doctor schrijft"compat"voor gemigreerde legacy-toelatingslijst- configuraties om bestaand gebundeld providergedrag te behouden totdat je je aanmeldt.plugins.entries.<id>.apiKey: gemakveld voor API-sleutel op Plugin-niveau (wanneer ondersteund door de Plugin).plugins.entries.<id>.env: Plugin-scoped omgevingsvariabelemap.plugins.entries.<id>.hooks.allowPromptInjection: wanneerfalse, blokkeert corebefore_prompt_builden negeert prompt-muterende velden van legacybefore_agent_start, terwijl legacymodelOverrideenproviderOverridebehouden blijven. Van toepassing op native Plugin-hooks en ondersteunde door bundels geleverde hookmappen.plugins.entries.<id>.hooks.allowConversationAccess: wanneertrue, mogen vertrouwde niet-gebundelde plugins ruwe gespreksinhoud lezen vanuit getypeerde hooks zoalsllm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeenagent_end.plugins.entries.<id>.subagent.allowModelOverride: vertrouw deze Plugin expliciet om per-runprovider- enmodel-overrides aan te vragen voor achtergrond-subagentruns.plugins.entries.<id>.subagent.allowedModels: optionele toelatingslijst van canoniekeprovider/model-doelen voor vertrouwde subagent-overrides. Gebruik"*"alleen wanneer je bewust elk model wilt toestaan.plugins.entries.<id>.config: door Plugin gedefinieerd configuratieobject (gevalideerd door native OpenClaw-Plugin-schema wanneer beschikbaar).- Account-/runtime-instellingen voor kanaal-plugins staan onder
channels.<id>en moeten worden beschreven door dechannelConfigs-metadata van het manifest van de beherende Plugin, niet door een centraal OpenClaw-optieregister. plugins.entries.firecrawl.config.webFetch: Firecrawl web-fetch-providerinstellingen.apiKey: Firecrawl API-sleutel (accepteert SecretRef). Valt terug opplugins.entries.firecrawl.config.webSearch.apiKey, legacytools.web.fetch.firecrawl.apiKey, of de omgevingsvariabeleFIRECRAWL_API_KEY.baseUrl: basis-URL voor Firecrawl API (standaard:https://api.firecrawl.dev; self-hosted overrides moeten privé/interne endpoints targeten).onlyMainContent: extraheer alleen de hoofdinhoud van pagina's (standaard:true).maxAgeMs: maximale cacheleeftijd in milliseconden (standaard:172800000/ 2 dagen).timeoutSeconds: time-out voor scrapeverzoek in seconden (standaard:60).
plugins.entries.xai.config.xSearch: xAI X Search (Grok websearch)-instellingen.enabled: schakel de X Search-provider in.model: Grok-model dat voor zoeken moet worden gebruikt (bijv."grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: instellingen voor memory dreaming. Zie Dreaming voor fasen en drempels.enabled: hoofdschakelaar voor dreaming (standaardfalse).frequency: Cron-cadans voor elke volledige dreamingsweep (standaard"0 3 * * *").model: optionele Dream Diary-subagentmodeloverride. Vereistplugins.entries.memory-core.subagent.allowModelOverride: true; combineer metallowedModelsom doelen te beperken. Fouten wegens niet-beschikbaar model proberen het eenmaal opnieuw met het standaardmodel van de sessie; vertrouwens- of toelatingslijstfouten vallen niet stilzwijgend terug.- fasebeleid en drempels zijn implementatiedetails (geen gebruikersgerichte configuratiesleutels).
- Volledige geheugenconfiguratie staat in Referentie voor geheugenconfiguratie:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Ingeschakelde Claude-bundelplugins kunnen ook ingebedde Pi-standaardwaarden bijdragen uit
settings.json; OpenClaw past die toe als opgeschoonde agentinstellingen, niet als ruwe OpenClaw-configuratiepatches. plugins.slots.memory: kies de actieve geheugen-Plugin-id, of"none"om geheugen-plugins uit te schakelen.plugins.slots.contextEngine: kies de actieve context-engine-Plugin-id; standaard"legacy"tenzij je een andere engine installeert en selecteert.
Zie Plugins.
Toezeggingen
commitments beheert afgeleid follow-upgeheugen: OpenClaw kan check-ins uit gespreksbeurten detecteren en deze bezorgen via Heartbeat-runs.
commitments.enabled: schakel verborgen LLM-extractie, opslag en Heartbeat-bezorging in voor afgeleide follow-uptoezeggingen. Standaard:false.commitments.maxPerDay: maximaal aantal afgeleide follow-uptoezeggingen dat per agentsessie in een rollende dag wordt bezorgd. Standaard:3.
Browser
{
browser: {
enabled: true,
evaluateEnabled: true,
defaultProfile: "user",
ssrfPolicy: {
// dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
// allowPrivateNetwork: true, // legacy alias
// hostnameAllowlist: ["*.example.com", "example.com"],
// allowedHostnames: ["localhost"],
},
tabCleanup: {
enabled: true,
idleMinutes: 120,
maxTabsPerSession: 8,
sweepMinutes: 5,
},
profiles: {
openclaw: { cdpPort: 18800, color: "#FF4500" },
work: {
cdpPort: 18801,
color: "#0066CC",
executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
},
user: { driver: "existing-session", attachOnly: true, color: "#00AA00" },
brave: {
driver: "existing-session",
attachOnly: true,
userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
color: "#FB542B",
},
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
},
color: "#FF4500",
// headless: false,
// noSandbox: false,
// extraArgs: [],
// executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
// attachOnly: false,
},
}
evaluateEnabled: falseschakeltact:evaluateenwait --fnuit.tabCleanupruimt bijgehouden primaire-agenttabbladen op na inactiviteit of wanneer een sessie de limiet overschrijdt. StelidleMinutes: 0ofmaxTabsPerSession: 0in om die afzonderlijke opschoonmodi uit te schakelen.ssrfPolicy.dangerouslyAllowPrivateNetworkis uitgeschakeld wanneer dit niet is ingesteld, zodat browsernavigatie standaard strikt blijft.- Stel
ssrfPolicy.dangerouslyAllowPrivateNetwork: truealleen in wanneer je browsernavigatie via een privénetwerk bewust vertrouwt. - In strikte modus zijn externe CDP-profieleindpunten (
profiles.*.cdpUrl) onderworpen aan dezelfde blokkering van privénetwerken tijdens bereikbaarheids-/detectiecontroles. ssrfPolicy.allowPrivateNetworkblijft ondersteund als verouderde alias.- Gebruik in strikte modus
ssrfPolicy.hostnameAllowlistenssrfPolicy.allowedHostnamesvoor expliciete uitzonderingen. - Externe profielen zijn alleen-koppelen (start/stop/reset uitgeschakeld).
profiles.*.cdpUrlaccepteerthttp://,https://,ws://enwss://. Gebruik HTTP(S) wanneer je wilt dat OpenClaw/json/versionontdekt; gebruik WS(S) wanneer je provider je een directe DevTools WebSocket-URL geeft.remoteCdpTimeoutMsenremoteCdpHandshakeTimeoutMszijn van toepassing op externe enattachOnlyCDP-bereikbaarheid plus aanvragen om tabbladen te openen. Beheerde loopback- profielen behouden lokale CDP-standaardwaarden.- Als een extern beheerde CDP-service bereikbaar is via loopback, stel dan voor dat
profiel
attachOnly: truein; anders behandelt OpenClaw de loopback-poort als een lokaal beheerd browserprofiel en kan het fouten over lokaal poortbezit melden. existing-session-profielen gebruiken Chrome MCP in plaats van CDP en kunnen koppelen op de geselecteerde host of via een verbonden browsernode.existing-session-profielen kunnenuserDataDirinstellen om een specifiek Chromium-gebaseerd browserprofiel zoals Brave of Edge te targeten.existing-session-profielen behouden de huidige Chrome MCP-routelimieten: snapshot-/ref-gestuurde acties in plaats van CSS-selector-targeting, hooks voor upload van één bestand, geen overrides voor dialoogtime-outs, geenwait --load networkidleen geenresponsebody, PDF-export, downloadinterceptie of batchacties.- Lokaal beheerde
openclaw-profielen wijzen automatischcdpPortencdpUrltoe; stelcdpUrlalleen expliciet in voor externe CDP. - Lokaal beheerde profielen kunnen
executablePathinstellen om de globalebrowser.executablePathvoor dat profiel te overschrijven. Gebruik dit om één profiel in Chrome en een ander in Brave te draaien. - Lokaal beheerde profielen gebruiken
browser.localLaunchTimeoutMsvoor Chrome CDP HTTP- detectie na processtart enbrowser.localCdpReadyTimeoutMsvoor CDP-websocketgereedheid na het starten. Verhoog ze op tragere hosts waar Chrome succesvol start maar gereedheidscontroles met het opstarten racen. Beide waarden moeten positieve gehele getallen tot120000ms zijn; ongeldige configuratiewaarden worden geweigerd. - Automatische detectievolgorde: standaardbrowser als deze Chromium-gebaseerd is → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathenbrowser.profiles.<name>.executablePathaccepteren beide~en~/...voor de thuismap van je besturingssysteem voordat Chromium wordt gestart. Per-profieluserDataDiropexisting-session-profielen wordt ook met tilde uitgebreid.- Besturingsservice: alleen loopback (poort afgeleid van
gateway.port, standaard18791). extraArgsvoegt extra startvlaggen toe aan lokale Chromium-opstart (bijvoorbeeld--disable-gpu, vensterafmetingen of debugvlaggen).
UI
{
ui: {
seamColor: "#FF4500",
assistant: {
name: "OpenClaw",
avatar: "CB", // emoji, short text, image URL, or data URI
},
},
}
seamColor: accentkleur voor native app-UI-chrome (Talk Mode-bubbelkleur, enz.).assistant: identiteitsoverschrijving voor Control UI. Valt terug op de actieve agentidentiteit.
Gateway
{
gateway: {
mode: "local", // local | remote
port: 18789,
bind: "loopback",
auth: {
mode: "token", // none | token | password | trusted-proxy
token: "your-token",
// password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD
// trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth
allowTailscale: true,
rateLimit: {
maxAttempts: 10,
windowMs: 60000,
lockoutMs: 300000,
exemptLoopback: true,
},
},
tailscale: {
mode: "off", // off | serve | funnel
resetOnExit: false,
},
controlUi: {
enabled: true,
basePath: "/openclaw",
// root: "dist/control-ui",
// embedSandbox: "scripts", // strict | scripts | trusted
// allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs
// chatMessageMaxWidth: "min(1280px, 82%)", // optional grouped chat message max-width
// allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI
// dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode
// allowInsecureAuth: false,
// dangerouslyDisableDeviceAuth: false,
},
remote: {
url: "ws://gateway.tailnet:18789",
transport: "ssh", // ssh | direct
token: "your-token",
// password: "your-password",
},
trustedProxies: ["10.0.0.1"],
// Optional. Default false.
allowRealIpFallback: false,
nodes: {
pairing: {
// Optional. Default unset/disabled.
autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"],
},
allowCommands: ["canvas.navigate"],
denyCommands: ["system.run"],
},
tools: {
// Additional /tools/invoke HTTP denies
deny: ["browser"],
// Remove tools from the default HTTP deny list
allow: ["gateway"],
},
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
timeoutMs: 10000,
},
},
},
},
}
Gateway field details
mode:local(Gateway uitvoeren) ofremote(verbinden met externe Gateway). Gateway weigert te starten tenzij ditlocalis.port: één gemultiplexte poort voor WS + HTTP. Prioriteit:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(standaard),lan(0.0.0.0),tailnet(alleen Tailscale-IP), ofcustom.- Verouderde bind-aliassen: gebruik bind-moduswaarden in
gateway.bind(auto,loopback,lan,tailnet,custom), geen hostaliassen (0.0.0.0,127.0.0.1,localhost,::,::1). - Docker-opmerking: de standaard
loopback-bind luistert op127.0.0.1binnen de container. Met Docker bridge networking (-p 18789:18789) komt verkeer binnen opeth0, waardoor de Gateway onbereikbaar is. Gebruik--network host, of stelbind: "lan"in (ofbind: "custom"metcustomBindHost: "0.0.0.0") om op alle interfaces te luisteren. - Authenticatie: standaard vereist. Niet-loopback-binds vereisen Gateway-authenticatie. In de praktijk betekent dit een gedeeld token/wachtwoord of een identity-aware reverse proxy met
gateway.auth.mode: "trusted-proxy". De onboardingwizard genereert standaard een token. - Als zowel
gateway.auth.tokenalsgateway.auth.passwordzijn geconfigureerd (inclusief SecretRefs), stelgateway.auth.modedan expliciet in optokenofpassword. Opstart- en service-installatie-/reparatiestromen mislukken wanneer beide zijn geconfigureerd en de modus niet is ingesteld. gateway.auth.mode: "none": expliciete modus zonder authenticatie. Gebruik alleen voor vertrouwde local loopback-configuraties; dit wordt bewust niet aangeboden door onboardingprompts.gateway.auth.mode: "trusted-proxy": delegeer browser-/gebruikersauthenticatie aan een identity-aware reverse proxy en vertrouw identiteitsheaders vangateway.trustedProxies(zie Authenticatie via vertrouwde proxy). Deze modus verwacht standaard een niet-loopback proxybron; reverse proxy's via loopback op dezelfde host vereisen explicietgateway.auth.trustedProxy.allowLoopback = true. Interne callers op dezelfde host kunnengateway.auth.passwordgebruiken als lokale directe fallback;gateway.auth.tokenblijft wederzijds exclusief met de trusted-proxy-modus.gateway.auth.allowTailscale: wanneertrue, kunnen Tailscale Serve-identiteitsheaders voldoen aan Control UI-/WebSocket-authenticatie (geverifieerd viatailscale whois). HTTP API-eindpunten gebruiken die Tailscale-headerauthenticatie niet; ze volgen in plaats daarvan de normale HTTP-authenticatiemodus van de Gateway. Deze tokenloze stroom gaat ervan uit dat de Gateway-host wordt vertrouwd. Standaardtruewanneertailscale.mode = "serve".gateway.auth.rateLimit: optionele begrenzer voor mislukte authenticatie. Geldt per client-IP en per authenticatiescope (shared-secret en device-token worden onafhankelijk bijgehouden). Geblokkeerde pogingen retourneren429+Retry-After.- Op het asynchrone Tailscale Serve Control UI-pad worden mislukte pogingen voor dezelfde
{scope, clientIp}geserialiseerd voordat de fout wordt geschreven. Gelijktijdige ongeldige pogingen van dezelfde client kunnen daardoor de begrenzer activeren bij het tweede verzoek, in plaats van dat beide als gewone mismatches doorglippen. gateway.auth.rateLimit.exemptLoopbackis standaardtrue; stel dit in opfalsewanneer je bewust ook localhost-verkeer wilt beperken (voor testconfiguraties of strikte proxydeployments).- Browser-origin WS-authenticatiepogingen worden altijd vertraagd met loopback-vrijstelling uitgeschakeld (defense-in-depth tegen browsergebaseerde localhost-bruteforce).
- Op loopback worden die browser-origin-lockouts geïsoleerd per genormaliseerde
Origin-waarde, zodat herhaalde fouten vanaf één localhost-origin niet automatisch een andere origin blokkeren. tailscale.mode:serve(alleen tailnet, loopback-bind) offunnel(publiek, vereist authenticatie).controlUi.allowedOrigins: expliciete browser-origin-allowlist voor Gateway WebSocket-verbindingen. Vereist wanneer browserclients worden verwacht vanaf niet-loopback-origins.controlUi.chatMessageMaxWidth: optionele maximale breedte voor gegroepeerde Control UI-chatberichten. Accepteert beperkte CSS-breedtewaarden zoals960px,82%,min(1280px, 82%)encalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: gevaarlijke modus die Host-header-origin-fallback inschakelt voor deployments die bewust vertrouwen op Host-header-originbeleid.remote.transport:ssh(standaard) ofdirect(ws/wss). Voordirectmoetremote.urlws://ofwss://zijn.OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: break-glass-override in de client-side procesomgeving die plaintextws://toestaat naar vertrouwde private-network-IP's; de standaard blijft alleen loopback voor plaintext. Er is geenopenclaw.json-equivalent, en browser-private-network-configuratie zoalsbrowser.ssrfPolicy.dangerouslyAllowPrivateNetworkheeft geen invloed op Gateway WebSocket-clients.gateway.remote.token/.passwordzijn credentialvelden voor externe clients. Ze configureren Gateway-authenticatie op zichzelf niet.gateway.push.apns.relay.baseUrl: basis-HTTPS-URL voor de externe APNs-relay die door officiële/TestFlight-iOS-builds wordt gebruikt nadat ze relay-backed registraties naar de Gateway publiceren. Deze URL moet overeenkomen met de relay-URL die in de iOS-build is gecompileerd.gateway.push.apns.relay.timeoutMs: verzendtimeout van Gateway naar relay in milliseconden. Standaard10000.- Relay-backed registraties worden gedelegeerd aan een specifieke Gateway-identiteit. De gekoppelde iOS-app haalt
gateway.identity.getop, neemt die identiteit op in de relayregistratie en stuurt een registratiegebonden verzendmachtiging door naar de Gateway. Een andere Gateway kan die opgeslagen registratie niet hergebruiken. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: tijdelijke env-overrides voor de relayconfiguratie hierboven.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: alleen-voor-ontwikkeling escape hatch voor loopback-HTTP-relay-URL's. Productierelay-URL's moeten HTTPS blijven gebruiken.gateway.handshakeTimeoutMs: pre-auth Gateway WebSocket-handshaketimeout in milliseconden. Standaard:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MSheeft prioriteit wanneer ingesteld. Verhoog dit op belaste hosts of hosts met weinig vermogen waar lokale clients kunnen verbinden terwijl de opstartwarmup nog stabiliseert.gateway.channelHealthCheckMinutes: interval van de kanaal-health-monitor in minuten. Stel0in om health-monitor-herstarts globaal uit te schakelen. Standaard:5.gateway.channelStaleEventThresholdMinutes: drempel voor stale sockets in minuten. Houd dit groter dan of gelijk aangateway.channelHealthCheckMinutes. Standaard:30.gateway.channelMaxRestartsPerHour: maximum aantal health-monitor-herstarts per kanaal/account in een voortschrijdend uur. Standaard:10.channels.<provider>.healthMonitor.enabled: opt-out per kanaal voor health-monitor-herstarts terwijl de globale monitor ingeschakeld blijft.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override per account voor multi-account-kanalen. Wanneer ingesteld, heeft dit prioriteit boven de override op kanaalniveau.- Lokale Gateway-aanroeppaden kunnen
gateway.remote.*alleen als fallback gebruiken wanneergateway.auth.*niet is ingesteld. - Als
gateway.auth.token/gateway.auth.passwordexpliciet via SecretRef is geconfigureerd en niet kan worden opgelost, mislukt de resolutie gesloten (geen masking door externe fallback). trustedProxies: reverse-proxy-IP's die TLS beëindigen of forwarded-client-headers injecteren. Vermeld alleen proxy's die je beheert. Loopback-items blijven geldig voor proxy-/lokale-detectieconfiguraties op dezelfde host (bijvoorbeeld Tailscale Serve of een lokale reverse proxy), maar ze maken loopback-verzoeken niet geschikt voorgateway.auth.mode: "trusted-proxy".allowRealIpFallback: wanneertrue, accepteert de GatewayX-Real-IPalsX-Forwarded-Forontbreekt. Standaardfalsevoor fail-closed-gedrag.gateway.nodes.pairing.autoApproveCidrs: optionele CIDR/IP-allowlist voor het automatisch goedkeuren van eerste node-device-pairing zonder aangevraagde scopes. Dit is uitgeschakeld wanneer niet ingesteld. Dit keurt operator-/browser-/Control UI-/WebChat-pairing niet automatisch goed, en keurt rol-, scope-, metadata- of public-key-upgrades niet automatisch goed.gateway.nodes.allowCommands/gateway.nodes.denyCommands: globale allow/deny-vormgeving voor gedeclareerde node-commando's na pairing en evaluatie van de platformallowlist. GebruikallowCommandsom gevaarlijke node-commando's zoalscamera.snap,camera.clipenscreen.recordexpliciet toe te staan;denyCommandsverwijdert een commando zelfs als een platformstandaard of expliciete allow het anders zou opnemen. Nadat een node zijn gedeclareerde commandolijst wijzigt, wijs die device-pairing af en keur deze opnieuw goed zodat de Gateway de bijgewerkte commandosnapshot opslaat.gateway.tools.deny: extra toolnamen die worden geblokkeerd voor HTTPPOST /tools/invoke(breidt de standaard deny list uit).gateway.tools.allow: verwijder toolnamen uit de standaard HTTP deny list.
OpenAI-compatibele eindpunten
- Chat Completions: standaard uitgeschakeld. Schakel in met
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Hardening voor Responses URL-input:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistLege allowlists worden behandeld als niet ingesteld; gebruikgateway.http.endpoints.responses.files.allowUrl=falseen/ofgateway.http.endpoints.responses.images.allowUrl=falseom URL-fetching uit te schakelen.
- Optionele response-hardeningheader:
gateway.http.securityHeaders.strictTransportSecurity(stel alleen in voor HTTPS-origins die je beheert; zie Authenticatie via vertrouwde proxy)
Isolatie van meerdere instanties
Voer meerdere Gateways uit op één host met unieke poorten en state dirs:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
Gemaksvlaggen: --dev (gebruikt ~/.openclaw-dev + poort 19001), --profile <name> (gebruikt ~/.openclaw-<name>).
Zie Meerdere Gateways.
gateway.tls
{
gateway: {
tls: {
enabled: false,
autoGenerate: false,
certPath: "/etc/openclaw/tls/server.crt",
keyPath: "/etc/openclaw/tls/server.key",
caPath: "/etc/openclaw/tls/ca-bundle.crt",
},
},
}
enabled: schakelt TLS-terminatie in bij de Gateway-listener (HTTPS/WSS) (standaard:false).autoGenerate: genereert automatisch een lokaal self-signed cert/key-paar wanneer expliciete bestanden niet zijn geconfigureerd; alleen voor lokaal/dev-gebruik.certPath: bestandssysteempad naar het TLS-certificaatbestand.keyPath: bestandssysteempad naar het bestand met de TLS-privésleutel; houd de permissies beperkt.caPath: optioneel CA-bundelpad voor clientverificatie of aangepaste trust chains.
gateway.reload
{
gateway: {
reload: {
mode: "hybrid", // off | restart | hot | hybrid
debounceMs: 500,
deferralTimeoutMs: 300000,
},
},
}
mode: bepaalt hoe configuratiebewerkingen tijdens runtime worden toegepast."off": negeer live bewerkingen; wijzigingen vereisen een expliciete herstart."restart": herstart het Gateway-proces altijd bij een configuratiewijziging."hot": pas wijzigingen in-process toe zonder te herstarten."hybrid"(standaard): probeer eerst hot reload; val terug op herstart indien vereist.
debounceMs: debouncevenster in ms voordat configuratiewijzigingen worden toegepast (niet-negatief geheel getal).deferralTimeoutMs: optionele maximale tijd in ms om te wachten op lopende bewerkingen voordat een herstart of kanaal-hot reload wordt afgedwongen. Laat weg om de standaard begrensde wachttijd (300000) te gebruiken; stel0in om onbeperkt te wachten en periodiek waarschuwingen over nog openstaande bewerkingen te loggen.
Hooks
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
maxBodyBytes: 262144,
defaultSessionKey: "hook:ingress",
allowRequestSessionKey: true,
allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"],
allowedAgentIds: ["hooks", "main"],
presets: ["gmail"],
transformsDir: "~/.openclaw/hooks/transforms",
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "hooks",
wakeMode: "now",
name: "Gmail",
sessionKey: "hook:gmail:{{messages[0].id}}",
messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
deliver: true,
channel: "last",
model: "openai/gpt-5.4-mini",
},
],
},
}
Authenticatie: Authorization: Bearer <token> of x-openclaw-token: <token>.
Hook-tokens in de querystring worden geweigerd.
Validatie- en veiligheidsnotities:
hooks.enabled=truevereist een niet-legehooks.token.hooks.tokenmoet verschillen vangateway.auth.token; hergebruik van het Gateway-token wordt geweigerd.hooks.pathmag niet/zijn; gebruik een specifiek subpad zoals/hooks.- Als
hooks.allowRequestSessionKey=true, beperk danhooks.allowedSessionKeyPrefixes(bijvoorbeeld["hook:"]). - Als een mapping of preset een
sessionKeymet template gebruikt, stel danhooks.allowedSessionKeyPrefixesenhooks.allowRequestSessionKey=truein. Statische mapping-sleutels vereisen die opt-in niet.
Eindpunten:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeyuit de request-payload wordt alleen geaccepteerd wanneerhooks.allowRequestSessionKey=true(standaard:false).
POST /hooks/<name>→ opgelost viahooks.mappings- Door templates gerenderde mappingwaarden voor
sessionKeyworden behandeld als extern aangeleverd en vereisen ookhooks.allowRequestSessionKey=true.
- Door templates gerenderde mappingwaarden voor
Mapping details
match.pathmatcht het subpad na/hooks(bijv./hooks/gmail→gmail).match.sourcematcht een payloadveld voor generieke paden.- Templates zoals
{{messages[0].subject}}lezen uit de payload. transformkan verwijzen naar een JS/TS-module die een hook-actie retourneert.transform.modulemoet een relatief pad zijn en blijft binnenhooks.transformsDir(absolute paden en traversal worden geweigerd).- Houd
hooks.transformsDironder~/.openclaw/hooks/transforms; workspace-Skills-mappen worden geweigerd. Alsopenclaw doctordit pad als ongeldig rapporteert, verplaats dan de transform-module naar de hooks-transforms-map of verwijderhooks.transformsDir. agentIdrouteert naar een specifieke agent; onbekende ID's vallen terug op de standaardwaarde.allowedAgentIds: beperkt expliciete routering (*of weggelaten = alles toestaan,[]= alles weigeren).defaultSessionKey: optionele vaste sessiesleutel voor hook-agent-runs zonder explicietesessionKey.allowRequestSessionKey: laat/hooks/agent-callers en template-gestuurde mapping-sessiesleutelssessionKeyinstellen (standaard:false).allowedSessionKeyPrefixes: optionele prefix-allowlist voor explicietesessionKey-waarden (request + mapping), bijv.["hook:"]. Deze wordt vereist wanneer een mapping of preset eensessionKeymet template gebruikt.deliver: truestuurt het definitieve antwoord naar een kanaal;channelis standaardlast.modeloverschrijft het LLM voor deze hook-run (moet toegestaan zijn als de modelcatalogus is ingesteld).
Gmail-integratie
- De ingebouwde Gmail-preset gebruikt
sessionKey: "hook:gmail:{{messages[0].id}}". - Als je die routering per bericht behoudt, stel dan
hooks.allowRequestSessionKey: truein en beperkhooks.allowedSessionKeyPrefixeszodat deze overeenkomt met de Gmail-namespace, bijvoorbeeld["hook:", "hook:gmail:"]. - Als je
hooks.allowRequestSessionKey: falsenodig hebt, overschrijf de preset dan met een statischesessionKeyin plaats van de standaardwaarde met template.
{
hooks: {
gmail: {
account: "[email protected]",
topic: "projects/<project-id>/topics/gog-gmail-watch",
subscription: "gog-gmail-watch-push",
pushToken: "shared-push-token",
hookUrl: "http://127.0.0.1:18789/hooks/gmail",
includeBody: true,
maxBytes: 20000,
renewEveryMinutes: 720,
serve: { bind: "127.0.0.1", port: 8788, path: "/" },
tailscale: { mode: "funnel", path: "/gmail-pubsub" },
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
thinking: "off",
},
},
}
- Gateway start
gog gmail watch serveautomatisch bij het opstarten wanneer dit is geconfigureerd. StelOPENCLAW_SKIP_GMAIL_WATCHER=1in om dit uit te schakelen. - Voer geen aparte
gog gmail watch serveuit naast de Gateway.
Canvas-pluginhost
{
plugins: {
entries: {
canvas: {
config: {
host: {
root: "~/.openclaw/workspace/canvas",
liveReload: true,
// enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1
},
},
},
},
},
}
- Serveert door agents bewerkbare HTML/CSS/JS en A2UI via HTTP onder de Gateway-poort:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Alleen lokaal: houd
gateway.bind: "loopback"(standaard). - Niet-loopback-binds: canvas-routes vereisen Gateway-authenticatie (token/wachtwoord/vertrouwde proxy), hetzelfde als andere HTTP-oppervlakken van de Gateway.
- Node WebViews verzenden meestal geen auth-headers; nadat een node is gekoppeld en verbonden, adverteert de Gateway node-scoped capability-URL's voor canvas/A2UI-toegang.
- Capability-URL's zijn gekoppeld aan de actieve node-WS-sessie en verlopen snel. IP-gebaseerde fallback wordt niet gebruikt.
- Injecteert live-reload-client in geserveerde HTML.
- Maakt automatisch een start-
index.htmlaan wanneer deze leeg is. - Serveert A2UI ook op
/__openclaw__/a2ui/. - Wijzigingen vereisen een herstart van de Gateway.
- Schakel live reload uit voor grote mappen of
EMFILE-fouten.
Discovery
mDNS (Bonjour)
{
discovery: {
mdns: {
mode: "minimal", // minimal | full | off
},
},
}
minimal(standaard wanneer de gebundeldebonjour-plugin is ingeschakeld): laatcliPath+sshPortweg uit TXT-records.full: neemcliPath+sshPortop; LAN-multicastadvertenties vereisen nog steeds dat de gebundeldebonjour-plugin is ingeschakeld.off: onderdrukt LAN-multicastadvertenties zonder de plugin-inschakeling te wijzigen.- De gebundelde
bonjour-plugin start automatisch op macOS-hosts en is opt-in op Linux, Windows en containerized Gateway-deployments. - De hostnaam is standaard de systeemhostnaam wanneer die een geldig DNS-label is, met terugval naar
openclaw. Overschrijf metOPENCLAW_MDNS_HOSTNAME.
Wide-area (DNS-SD)
{
discovery: {
wideArea: { enabled: true },
},
}
Schrijft een unicast DNS-SD-zone onder ~/.openclaw/dns/. Voor cross-network discovery, combineer met een DNS-server (CoreDNS aanbevolen) + Tailscale split DNS.
Setup: openclaw dns setup --apply.
Omgeving
env (inline omgevingsvariabelen)
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: {
GROQ_API_KEY: "gsk-...",
},
shellEnv: {
enabled: true,
timeoutMs: 15000,
},
},
}
- Inline omgevingsvariabelen worden alleen toegepast als de procesomgeving de sleutel mist.
.env-bestanden: CWD.env+~/.openclaw/.env(geen van beide overschrijft bestaande variabelen).shellEnv: importeert ontbrekende verwachte sleutels uit je login-shellprofiel.- Zie Omgeving voor de volledige prioriteit.
Vervanging van omgevingsvariabelen
Verwijs naar omgevingsvariabelen in elke config-tekenreeks met ${VAR_NAME}:
{
gateway: {
auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
},
}
- Alleen namen in hoofdletters komen overeen:
[A-Z_][A-Z0-9_]*. - Ontbrekende/lege variabelen veroorzaken een fout bij het laden van de configuratie.
- Escape met
$${VAR}voor een letterlijke${VAR}. - Werkt met
$include.
Geheimen
Geheimreferenties zijn additief: platte tekstwaarden blijven werken.
SecretRef
Gebruik één objectvorm:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
Validatie:
provider-patroon:^[a-z][a-z0-9_-]{0,63}$source: "env"id-patroon:^[A-Z][A-Z0-9_]{0,127}$source: "file"id: absolute JSON-pointer (bijvoorbeeld"/providers/openai/apiKey")source: "exec"id-patroon:^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$source: "exec"ids mogen geen.- of..-padsegmenten bevatten die door slashes zijn gescheiden (bijvoorbeelda/../bwordt geweigerd)
Ondersteund credential-oppervlak
- Canonieke matrix: SecretRef Credential Surface
secrets applyricht zich op ondersteunde credential-paden inopenclaw.json.auth-profiles.json-referenties zijn opgenomen in runtime-resolutie en auditdekking.
Configuratie van geheimproviders
{
secrets: {
providers: {
default: { source: "env" }, // optional explicit env provider
filemain: {
source: "file",
path: "~/.openclaw/secrets.json",
mode: "json",
timeoutMs: 5000,
},
vault: {
source: "exec",
command: "/usr/local/bin/openclaw-vault-resolver",
passEnv: ["PATH", "VAULT_ADDR"],
},
},
defaults: {
env: "default",
file: "filemain",
exec: "vault",
},
},
}
Opmerkingen:
- De
file-provider ondersteuntmode: "json"enmode: "singleValue"(idmoet"value"zijn in de singleValue-modus). - Paden van file- en exec-providers falen gesloten wanneer Windows ACL-verificatie niet beschikbaar is. Stel
allowInsecurePath: truealleen in voor vertrouwde paden die niet kunnen worden geverifieerd. - De
exec-provider vereist een absoluutcommand-pad en gebruikt protocolpayloads op stdin/stdout. - Standaard worden symlink-commandopaden geweigerd. Stel
allowSymlinkCommand: truein om symlinkpaden toe te staan terwijl het opgeloste doelpad wordt gevalideerd. - Als
trustedDirsis geconfigureerd, wordt de trusted-dir-controle toegepast op het opgeloste doelpad. - De
exec-childomgeving is standaard minimaal; geef vereiste variabelen expliciet door metpassEnv. - Geheimreferenties worden tijdens activering opgelost naar een in-memory snapshot; daarna lezen requestpaden alleen de snapshot.
- Filtering op actief oppervlak wordt toegepast tijdens activering: onopgeloste referenties op ingeschakelde oppervlakken laten startup/reload falen, terwijl inactieve oppervlakken worden overgeslagen met diagnostiek.
Auth-opslag
{
auth: {
profiles: {
"anthropic:default": { provider: "anthropic", mode: "api_key" },
"anthropic:work": { provider: "anthropic", mode: "api_key" },
"openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
},
order: {
anthropic: ["anthropic:default", "anthropic:work"],
"openai-codex": ["openai-codex:personal"],
},
},
}
- Profielen per agent worden opgeslagen in
<agentDir>/auth-profiles.json. auth-profiles.jsonondersteunt referenties op waardeniveau (keyRefvoorapi_key,tokenRefvoortoken) voor statische credential-modi.- Verouderde platte
auth-profiles.json-maps zoals{ "provider": { "apiKey": "..." } }zijn geen runtime-formaat;openclaw doctor --fixherschrijft ze naar canoniekeprovider:defaultAPI-key-profielen met een.legacy-flat.*.bak-back-up. - OAuth-modusprofielen (
auth.profiles.<id>.mode = "oauth") ondersteunen geen door SecretRef ondersteunde auth-profielcredentials. - Statische runtimecredentials komen uit in-memory opgeloste snapshots; verouderde statische
auth.json-items worden opgeschoond wanneer ze worden ontdekt. - Verouderde OAuth-imports komen uit
~/.openclaw/credentials/oauth.json. - Zie OAuth.
- Runtimegedrag van geheimen en
audit/configure/apply-tooling: Geheimbeheer.
auth.cooldowns
{
auth: {
cooldowns: {
billingBackoffHours: 5,
billingBackoffHoursByProvider: { anthropic: 3, openai: 8 },
billingMaxHours: 24,
authPermanentBackoffMinutes: 10,
authPermanentMaxMinutes: 60,
failureWindowHours: 24,
overloadedProfileRotations: 1,
overloadedBackoffMs: 0,
rateLimitedProfileRotations: 1,
},
},
}
billingBackoffHours: basis-backoff in uren wanneer een profiel faalt door echte facturerings-/onvoldoende-tegoedfouten (standaard:5). Expliciete factureringstekst kan hier nog steeds terechtkomen, zelfs bij401/403-antwoorden, maar providerspecifieke tekstmatchers blijven beperkt tot de provider die ze bezit (bijvoorbeeld OpenRouterKey limit exceeded). Opnieuw te proberen HTTP402-berichten voor gebruiksvensters of bestedingslimieten van organisatie/werkruimte blijven in plaats daarvan in hetrate_limit-pad.billingBackoffHoursByProvider: optionele overrides per provider voor backoff-uren voor facturering.billingMaxHours: maximum in uren voor exponentiële groei van factureringsbackoff (standaard:24).authPermanentBackoffMinutes: basis-backoff in minuten voor fouten met hoge zekerheid van het typeauth_permanent(standaard:10).authPermanentMaxMinutes: maximum in minuten voor groei vanauth_permanent-backoff (standaard:60).failureWindowHours: voortschrijdend venster in uren dat wordt gebruikt voor backoff-tellers (standaard:24).overloadedProfileRotations: maximumaantal auth-profielrotaties bij dezelfde provider voor overbelastingsfouten voordat naar model-fallback wordt overgeschakeld (standaard:1). Provider-bezet-vormen zoalsModelNotReadyExceptionkomen hier terecht.overloadedBackoffMs: vaste vertraging voordat een overbelaste provider/profielrotatie opnieuw wordt geprobeerd (standaard:0).rateLimitedProfileRotations: maximumaantal auth-profielrotaties bij dezelfde provider voor rate-limit-fouten voordat naar model-fallback wordt overgeschakeld (standaard:1). Die rate-limit-bucket omvat providerachtige tekst zoalsToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededenresource exhausted.
Logregistratie
{
logging: {
level: "info",
file: "/tmp/openclaw/openclaw.log",
consoleLevel: "info",
consoleStyle: "pretty", // pretty | compact | json
redactSensitive: "tools", // off | tools
redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"],
},
}
- Standaard logbestand:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Stel
logging.filein voor een stabiel pad. consoleLevelwordt verhoogd naardebugbij--verbose.maxFileBytes: maximale grootte van het actieve logbestand in bytes vóór rotatie (positief geheel getal; standaard:104857600= 100 MB). OpenClaw bewaart maximaal vijf genummerde archieven naast het actieve bestand.redactSensitive/redactPatterns: best-effort maskering voor console-uitvoer, bestandslogs, OTLP-logrecords en opgeslagen sessietranscripttekst.redactSensitive: "off"schakelt alleen dit algemene log-/transcriptbeleid uit; UI-/tool-/diagnostische veiligheidsoppervlakken redigeren geheimen nog steeds vóór emissie.
Diagnostiek
{
diagnostics: {
enabled: true,
flags: ["telegram.*"],
stuckSessionWarnMs: 30000,
stuckSessionAbortMs: 600000,
otel: {
enabled: false,
endpoint: "https://otel-collector.example.com:4318",
tracesEndpoint: "https://traces.example.com/v1/traces",
metricsEndpoint: "https://metrics.example.com/v1/metrics",
logsEndpoint: "https://logs.example.com/v1/logs",
protocol: "http/protobuf", // http/protobuf | grpc
headers: { "x-tenant-id": "my-org" },
serviceName: "openclaw-gateway",
traces: true,
metrics: true,
logs: false,
sampleRate: 1.0,
flushIntervalMs: 5000,
captureContent: {
enabled: false,
inputMessages: false,
outputMessages: false,
toolInputs: false,
toolOutputs: false,
systemPrompt: false,
},
},
cacheTrace: {
enabled: false,
filePath: "~/.openclaw/logs/cache-trace.jsonl",
includeMessages: true,
includePrompt: true,
includeSystem: true,
},
},
}
enabled: hoofdschakelaar voor instrumentatie-uitvoer (standaard:true).flags: array met flagstrings die gerichte loguitvoer inschakelen (ondersteunt jokertekens zoals"telegram.*"of"*").stuckSessionWarnMs: leeftijdsdrempel zonder voortgang in ms voor het classificeren van langlopende verwerkingssessies alssession.long_running,session.stalledofsession.stuck. Antwoord, tool, status, blok en ACP-voortgang resetten de timer; herhaaldesession.stuck-diagnostiek past backoff toe zolang er niets verandert.stuckSessionAbortMs: leeftijdsdrempel zonder voortgang in ms voordat in aanmerking komend vastgelopen actief werk via abort-drain mag worden beëindigd voor herstel. Wanneer niet ingesteld, gebruikt OpenClaw het veiligere verlengde venster voor embedded runs van ten minste 10 minuten en 5xstuckSessionWarnMs.otel.enabled: schakelt de OpenTelemetry-exportpipeline in (standaard:false). Zie OpenTelemetry-export voor de volledige configuratie, signaalcatalogus en het privacymodel.otel.endpoint: collector-URL voor OTel-export.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: optionele signaalspecifieke OTLP-eindpunten. Wanneer ingesteld, overschrijven zeotel.endpointalleen voor dat signaal.otel.protocol:"http/protobuf"(standaard) of"grpc".otel.headers: extra HTTP/gRPC-metadataheaders die met OTel-exportverzoeken worden verzonden.otel.serviceName: servicenaam voor resource-attributen.otel.traces/otel.metrics/otel.logs: schakel export van traces, metrics of logs in.otel.sampleRate: samplingratio voor traces0-1.otel.flushIntervalMs: periodiek flush-interval voor telemetrie in ms.otel.captureContent: opt-in vastlegging van ruwe content voor OTEL-spanattributen. Staat standaard uit. Booleaanse waardetruelegt niet-systeembericht-/toolcontent vast; met de objectvorm kun jeinputMessages,outputMessages,toolInputs,toolOutputsensystemPromptexpliciet inschakelen.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: omgevingsschakelaar voor de nieuwste experimentele GenAI-spanproviderattributen. Standaard behouden spans het legacy-attribuutgen_ai.systemvoor compatibiliteit; GenAI-metrics gebruiken begrensde semantische attributen.OPENCLAW_OTEL_PRELOADED=1: omgevingsschakelaar voor hosts die al een globale OpenTelemetry-SDK hebben geregistreerd. OpenClaw slaat dan het starten/afsluiten van de Plugin-eigen SDK over, terwijl diagnostische listeners actief blijven.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTenOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: signaalspecifieke eindpunt-env-vars die worden gebruikt wanneer de overeenkomende configuratiesleutel niet is ingesteld.cacheTrace.enabled: log cachetracesnapshots voor embedded runs (standaard:false).cacheTrace.filePath: uitvoerpad voor cachetrace-JSONL (standaard:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: bepalen wat in cachetrace-uitvoer wordt opgenomen (allemaal standaard:true).
Bijwerken
{
update: {
channel: "stable", // stable | beta | dev
checkOnStart: true,
auto: {
enabled: false,
stableDelayHours: 6,
stableJitterHours: 12,
betaCheckIntervalHours: 1,
},
},
}
channel: releasekanaal voor npm-/git-installaties -"stable","beta"of"dev".checkOnStart: controleer op npm-updates wanneer de gateway start (standaard:true).auto.enabled: schakel automatische achtergrondupdates in voor pakketinstallaties (standaard:false).auto.stableDelayHours: minimale vertraging in uren vóór automatisch toepassen voor het stabiele kanaal (standaard:6; max:168).auto.stableJitterHours: extra spreidingsvenster voor uitrol in het stabiele kanaal in uren (standaard:12; max:168).auto.betaCheckIntervalHours: hoe vaak controles voor het bètakanaal worden uitgevoerd in uren (standaard:1; max:24).
ACP
{
acp: {
enabled: true,
dispatch: { enabled: true },
backend: "acpx",
defaultAgent: "main",
allowedAgents: ["main", "ops"],
maxConcurrentSessions: 10,
stream: {
coalesceIdleMs: 50,
maxChunkChars: 1000,
repeatSuppression: true,
deliveryMode: "live", // live | final_only
hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph
maxOutputChars: 50000,
maxSessionUpdateChars: 500,
},
runtime: {
ttlMinutes: 30,
},
},
}
enabled: globale ACP-featuregate (standaard:true; stel in opfalseom ACP-dispatch- en spawnmogelijkheden te verbergen).dispatch.enabled: onafhankelijke gate voor ACP-sessiebeurtdispatch (standaard:true). Stel in opfalseom ACP-opdrachten beschikbaar te houden terwijl uitvoering wordt geblokkeerd.backend: standaard ACP-runtimebackend-id (moet overeenkomen met een geregistreerde ACP-runtime-Plugin). Installeer eerst de backend-Plugin en, alsplugins.allowis ingesteld, neem de backend-Plugin-id op (bijvoorbeeldacpx), anders wordt de ACP-backend niet geladen.defaultAgent: fallback-ACP-doelagent-id wanneer spawns geen expliciet doel opgeven.allowedAgents: allowlist van agent-id's die zijn toegestaan voor ACP-runtimesessies; leeg betekent geen aanvullende beperking.maxConcurrentSessions: maximumaantal gelijktijdig actieve ACP-sessies.stream.coalesceIdleMs: idle-flushvenster in ms voor gestreamde tekst.stream.maxChunkChars: maximale chunkgrootte voordat gestreamde blokprojectie wordt opgesplitst.stream.repeatSuppression: onderdruk herhaalde status-/toolregels per beurt (standaard:true).stream.deliveryMode:"live"streamt incrementeel;"final_only"buffert tot terminale gebeurtenissen van de beurt.stream.hiddenBoundarySeparator: scheidingsteken vóór zichtbare tekst na verborgen toolgebeurtenissen (standaard:"paragraph").stream.maxOutputChars: maximaal aantal assistant-uitvoertekens dat per ACP-beurt wordt geprojecteerd.stream.maxSessionUpdateChars: maximaal aantal tekens voor geprojecteerde ACP-status-/updateregels.stream.tagVisibility: record van tagnamen naar booleaanse zichtbaarheids-overrides voor gestreamde gebeurtenissen.runtime.ttlMinutes: idle-TTL in minuten voor ACP-sessieworkers voordat ze in aanmerking komen voor opruiming.runtime.installCommand: optionele installatieopdracht om uit te voeren bij het bootstrappen van een ACP-runtimeomgeving.
CLI
{
cli: {
banner: {
taglineMode: "off", // random | default | off
},
},
}
cli.banner.taglineModebepaalt de stijl van de bannerslogan:"random"(standaard): roterende grappige/seizoensgebonden slogans."default": vaste neutrale slogan (All your chats, one OpenClaw.)."off": geen slogantekst (bannertitel/versie wordt nog steeds getoond).
- Om de volledige banner te verbergen (niet alleen slogans), stel env
OPENCLAW_HIDE_BANNER=1in.
Wizard
Metadata geschreven door begeleide CLI-installatiestromen (onboard, configure, doctor):
{
wizard: {
lastRunAt: "2026-01-01T00:00:00.000Z",
lastRunVersion: "2026.1.4",
lastRunCommit: "abc1234",
lastRunCommand: "configure",
lastRunMode: "local",
},
}
Identiteit
Zie de identiteitsvelden van agents.list onder Agentstandaarden.
Bridge (legacy, verwijderd)
Huidige builds bevatten de TCP-bridge niet meer. Nodes verbinden via de Gateway-WebSocket. bridge.*-sleutels maken geen deel meer uit van het configuratieschema (validatie faalt totdat ze zijn verwijderd; openclaw doctor --fix kan onbekende sleutels verwijderen).
Legacy bridge-configuratie (historische referentie)
{
"bridge": {
"enabled": true,
"port": 18790,
"bind": "tailnet",
"tls": {
"enabled": true,
"autoGenerate": true
}
}
}
Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs
webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth
sessionRetention: "24h", // duration string or false
runLog: {
maxBytes: "2mb", // default 2_000_000 bytes
keepLines: 2000, // default 2000
},
},
}
sessionRetention: hoelang voltooide geïsoleerde cron-uitvoeringssessies worden bewaard voordat ze uitsessions.jsonworden verwijderd. Regelt ook het opschonen van gearchiveerde verwijderde cron-transcripten. Standaard:24h; stel in opfalseom uit te schakelen.runLog.maxBytes: maximale grootte per uitvoeringslogbestand (cron/runs/<jobId>.jsonl) voordat er wordt opgeschoond. Standaard:2_000_000bytes.runLog.keepLines: nieuwste regels die worden behouden wanneer opschoning van uitvoeringslogs wordt geactiveerd. Standaard:2000.webhookToken: bearer-token dat wordt gebruikt voor cron Webhook POST-bezorging (delivery.mode = "webhook"); indien weggelaten wordt er geen auth-header verzonden.webhook: verouderde legacy fallback-Webhook-URL (http/https) die alleen wordt gebruikt voor opgeslagen taken die nog steedsnotify: truehebben.
cron.retry
{
cron: {
retry: {
maxAttempts: 3,
backoffMs: [30000, 60000, 300000],
retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"],
},
},
}
maxAttempts: maximum aantal retries voor eenmalige taken bij tijdelijke fouten (standaard:3; bereik:0-10).backoffMs: array met backoff-vertragingen in ms voor elke retry-poging (standaard:[30000, 60000, 300000]; 1-10 items).retryOn: fouttypen die retries activeren -"rate_limit","overloaded","network","timeout","server_error". Laat weg om alle tijdelijke typen opnieuw te proberen.
Alleen van toepassing op eenmalige cron-taken. Terugkerende taken gebruiken afzonderlijke foutafhandeling.
cron.failureAlert
{
cron: {
failureAlert: {
enabled: false,
after: 3,
cooldownMs: 3600000,
includeSkipped: false,
mode: "announce",
accountId: "main",
},
},
}
enabled: schakel foutmeldingen voor cron-taken in (standaard:false).after: opeenvolgende fouten voordat een melding wordt geactiveerd (positief geheel getal, min:1).cooldownMs: minimumaantal milliseconden tussen herhaalde meldingen voor dezelfde taak (niet-negatief geheel getal).includeSkipped: tel opeenvolgende overgeslagen uitvoeringen mee voor de meldingsdrempel (standaard:false). Overgeslagen uitvoeringen worden afzonderlijk bijgehouden en hebben geen invloed op backoff voor uitvoeringsfouten.mode: bezorgmodus -"announce"verzendt via een kanaalbericht;"webhook"post naar de geconfigureerde Webhook.accountId: optionele account- of kanaal-id om meldingsbezorging te begrenzen.
cron.failureDestination
{
cron: {
failureDestination: {
mode: "announce",
channel: "last",
to: "channel:C1234567890",
accountId: "main",
},
},
}
- Standaardbestemming voor cron-foutmeldingen voor alle taken.
mode:"announce"of"webhook"; valt terug op"announce"wanneer er voldoende doelgegevens beschikbaar zijn.channel: kanaaloverride voor announce-bezorging."last"hergebruikt het laatst bekende bezorgkanaal.to: expliciet announce-doel of Webhook-URL. Vereist voor Webhook-modus.accountId: optionele accountoverride voor bezorging.- Per-taak
delivery.failureDestinationoverschrijft deze globale standaard. - Wanneer er noch een globale noch een per-taak foutbestemming is ingesteld, vallen taken die al via
announcebezorgen bij fouten terug op dat primaire announce-doel. delivery.failureDestinationwordt alleen ondersteund voorsessionTarget="isolated"-taken, tenzij de primairedelivery.modevan de taak"webhook"is.
Zie Cron-taken. Geïsoleerde cron-uitvoeringen worden bijgehouden als achtergrondtaken.
Sjabloonvariabelen voor mediamodellen
Sjabloonplaatsaanduidingen die worden uitgebreid in tools.media.models[].args:
| Variabele | Beschrijving |
|---|---|
{{Body}} |
Volledige inkomende berichttekst |
{{RawBody}} |
Ruwe body (geen geschiedenis-/afzenderwrappers) |
{{BodyStripped}} |
Body zonder groepsvermeldingen |
{{From}} |
Afzender-id |
{{To}} |
Bestemmings-id |
{{MessageSid}} |
Kanaalbericht-id |
{{SessionId}} |
Huidige sessie-UUID |
{{IsNewSession}} |
"true" wanneer een nieuwe sessie is gemaakt |
{{MediaUrl}} |
Pseudo-URL voor inkomende media |
{{MediaPath}} |
Lokaal mediapad |
{{MediaType}} |
Mediatype (image/audio/document/…) |
{{Transcript}} |
Audiotranscript |
{{Prompt}} |
Opgeloste mediaprompt voor CLI-items |
{{MaxChars}} |
Opgelost maximum aantal uitvoertekens voor CLI-items |
{{ChatType}} |
"direct" of "group" |
{{GroupSubject}} |
Groepsonderwerp (naar beste vermogen) |
{{GroupMembers}} |
Voorvertoning van groepsleden (naar beste vermogen) |
{{SenderName}} |
Weergavenaam van afzender (naar beste vermogen) |
{{SenderE164}} |
Telefoonnummer van afzender (naar beste vermogen) |
{{Provider}} |
Providerhint (whatsapp, telegram, discord, enz.) |
Configuratie-includes ($include)
Splits configuratie over meerdere bestanden:
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
},
}
Mergegedrag:
- Eén bestand: vervangt het bevattende object.
- Array van bestanden: deep-merged in volgorde (latere overschrijven eerdere).
- Sibling-sleutels: gemerged na includes (overschrijven opgenomen waarden).
- Geneste includes: tot 10 niveaus diep.
- Paden: opgelost relatief aan het includende bestand, maar moeten binnen de hoogste configuratiemap blijven (
dirnamevanopenclaw.json). Absolute/../-vormen zijn alleen toegestaan wanneer ze nog steeds binnen die begrenzing oplossen. - Door OpenClaw beheerde schrijfacties die slechts één top-level sectie wijzigen die wordt ondersteund door een single-file include, schrijven door naar dat opgenomen bestand.
plugins installwerkt bijvoorbeeldplugins: { $include: "./plugins.json5" }bij inplugins.json5en laatopenclaw.jsonintact. - Root-includes, include-arrays en includes met sibling-overrides zijn alleen-lezen voor door OpenClaw beheerde schrijfacties; die schrijfacties falen gesloten in plaats van de configuratie af te vlakken.
- Fouten: duidelijke meldingen voor ontbrekende bestanden, parsefouten en circulaire includes.
Gerelateerd: Configuratie · Configuratievoorbeelden · Doctor