Configuratie 🔧
OpenClaw leest een optionele JSON5-config uit~/.openclaw/openclaw.json (commentaar + afsluitende komma’s toegestaan).
Als het bestand ontbreekt, gebruikt OpenClaw veilige-achtige standaardwaarden (ingebedde Pi-agent + per-afzender sessies + werkruimte ~/.openclaw/workspace). Meestal heb je alleen een config nodig om:
- te beperken wie de bot kan activeren (
channels.whatsapp.allowFrom,channels.telegram.allowFrom, enz.) - groeps-toegestane lijsten + mention-gedrag te beheren (
channels.whatsapp.groups,channels.telegram.groups,channels.discord.guilds,agents.list[].groupChat) - berichtprefixen aan te passen (
messages) - de werkruimte van de agent in te stellen (
agents.defaults.workspaceofagents.list[].workspace) - de standaardinstellingen van de ingebedde agent (
agents.defaults) en sessiegedrag (session) af te stemmen - per-agent identiteit in te stellen (
agents.list[].identity)
Nieuw met configuratie? Bekijk de gids Configuration Examples voor volledige voorbeelden met gedetailleerde uitleg!
Strikte configvalidatie
OpenClaw accepteert alleen configuraties die volledig overeenkomen met het schema. Onbekende sleutels, onjuist gevormde typen of ongeldige waarden zorgen ervoor dat de Gateway weigert te starten om veiligheidsredenen. Wanneer validatie faalt:- De Gateway start niet.
- Alleen diagnostische opdrachten zijn toegestaan (bijvoorbeeld:
openclaw doctor,openclaw logs,openclaw health,openclaw status,openclaw service,openclaw help). - Voer
openclaw doctoruit om de exacte problemen te zien. - Voer
openclaw doctor --fix(of--yes) uit om migraties/reparaties toe te passen.
--fix/--yes.
Schema + UI-hints
De Gateway stelt een JSON Schema-weergave van de config beschikbaar viaconfig.schema voor UI-editors.
De Control UI rendert een formulier vanuit dit schema, met een Raw JSON-editor als ontsnappingsluik.
Kanaalplugins en extensies kunnen schema + UI-hints registreren voor hun config, zodat kanaalinstellingen
schema-gedreven blijven in alle apps zonder hardgecodeerde formulieren.
Hints (labels, groepering, gevoelige velden) worden samen met het schema geleverd zodat clients
betere formulieren kunnen renderen zonder hardgecodeerde kennis van de config.
Toepassen + herstarten (RPC)
Gebruikconfig.apply om de volledige config te valideren + weg te schrijven en de Gateway in één stap te herstarten.
Dit schrijft een herstart-sentinel en pingt de laatst actieve sessie nadat de Gateway weer online is.
Waarschuwing: config.apply vervangt de volledige config. Als je slechts enkele sleutels wilt wijzigen,
gebruik config.patch of openclaw config set. Houd een back-up van ~/.openclaw/openclaw.json bij.
Params:
raw(string) — JSON5-payload voor de volledige configbaseHash(optioneel) — confighash vanconfig.get(vereist wanneer er al een config bestaat)sessionKey(optioneel) — sleutel van de laatst actieve sessie voor de wake-up pingnote(optioneel) — notitie om op te nemen in de herstart-sentinelrestartDelayMs(optioneel) — vertraging vóór herstart (standaard 2000)
gateway call):
Gedeeltelijke updates (RPC)
Gebruikconfig.patch om een gedeeltelijke update samen te voegen met de bestaande config zonder
onverwante sleutels te overschrijven. Het past JSON merge patch-semantiek toe:
- objecten worden recursief samengevoegd
nullverwijdert een sleutel- arrays worden vervangen
Net als
config.applyvalideert het, schrijft de config weg, slaat een herstart-sentinel op en plant de Gateway-herstart (met een optionele wake wanneersessionKeyis opgegeven).
raw(string) — JSON5-payload met alleen de te wijzigen sleutelsbaseHash(vereist) — confighash vanconfig.getsessionKey(optioneel) — sleutel van de laatst actieve sessie voor de wake-up pingnote(optioneel) — notitie om op te nemen in de herstart-sentinelrestartDelayMs(optioneel) — vertraging vóór herstart (standaard 2000)
Minimale config (aanbevolen startpunt)
Zelf-chatmodus (aanbevolen voor groepscontrole)
Om te voorkomen dat de bot reageert op WhatsApp-@-mentions in groepen (alleen reageren op specifieke teksttriggers):Config-includes ($include)
Splits je config in meerdere bestanden met behulp van de $include-directive. Dit is handig voor:
- Het organiseren van grote configs (bijv. per-client agentdefinities)
- Het delen van gemeenschappelijke instellingen tussen omgevingen
- Het gescheiden houden van gevoelige configs
Basisgebruik
Samenvoeggedrag
- Enkel bestand: Vervangt het object dat
$includebevat - Array van bestanden: Diep samenvoegen in volgorde (latere bestanden overschrijven eerdere)
- Met sibling-sleutels: Sibling-sleutels worden na includes samengevoegd (overschrijven inbegrepen waarden)
- Sibling-sleutels + arrays/primitieven: Niet ondersteund (ingesloten inhoud moet een object zijn)
Geneste includes
Ingesloten bestanden kunnen zelf$include-directives bevatten (tot 10 niveaus diep):
Pad resolutie
- Relatieve paden: Opgelost relatief aan het insluitende bestand
- Absolute paden: Ongewijzigd gebruikt
- Bovenliggende mappen:
../-referenties werken zoals verwacht
Fout bij behandeling
- Ontbrekend bestand: Duidelijke fout met opgelost pad
- Parsefout: Toont welk ingesloten bestand faalde
- Circulaire includes: Gedetecteerd en gerapporteerd met include-keten
Voorbeeld: Multi-client juridische setup
Veelvoorkomende opties
Env vars + .env
OpenClaw leest omgevingsvariabelen uit het bovenliggende proces (shell, launchd/systemd, CI, enz.).
Daarnaast laadt het:
.envuit de huidige werkdirectory (indien aanwezig)- een globale fallback
.envuit~/.openclaw/.env(oftewel$OPENCLAW_STATE_DIR/.env)
.env-bestanden overschrijft bestaande env vars.
Je kunt ook inline env vars in de config opgeven. Deze worden alleen toegepast als de
procesomgeving de sleutel mist (dezelfde niet-overschrijvende regel):
env.shellEnv (optioneel)
Opt-in gemak: indien ingeschakeld en geen van de verwachte sleutels nog is ingesteld,
start OpenClaw je login-shell en importeert alleen de ontbrekende verwachte sleutels (nooit overschrijven).
Dit komt effectief neer op het sourcen van je shellprofiel.
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000
Env-var substitutie in config
Je kunt omgevingsvariabelen direct refereren in elke config-stringwaarde met de${VAR_NAME}-syntaxis. Variabelen worden vervangen bij het laden van de config, vóór validatie.
- Alleen hoofdletter-env-varnamen worden gematcht:
[A-Z_][A-Z0-9_]* - Ontbrekende of lege env vars veroorzaken een fout bij het laden van de config
- Escapen met
$${VAR}om een letterlijke${VAR}uit te voeren - Werkt met
$include(ingesloten bestanden krijgen ook substitutie)
Auth opslag (OAuth + API keys)
Openlaw bewaart per agent auth-profielen (OAuth + API-sleutels) in:<agentDir>/auth-profiles.json(standaard:~/.openclaw/agents/<agentId>/agent/auth-profiles.json)
~/.openclaw/credentials/oauth.json(of$OPENCLAW_STATE_DIR/credentials/oauth.json)
<agentDir>/auth.json(automatisch beheerd; niet handmatig bewerken)
~/.openclaw/agent/*(gemigreerd dooropenclaw doctornaar~/.openclaw/agents/<defaultAgentId>/agent/*)
- OAuth dir (legacy import alleen):
OPENCLAW_OAUTH_DIR - Agent dir (standaard agent root overschrijven):
OPENCLAW_AGENT_DIR(geprefereerd),PI_CODING_AGENT_DIR(legacy)
oauth.json in auth-profiles.json.
authenticatie
Optionele metadata voor autorisatieprofielen. Dit bevat geen winkelgeheimen; het kaarten
profiel IDs aan een provider + modus (en optionele e-mail) en definieert de rotatie volgorde van provider
die wordt gebruikt voor mislukking.
agents.list[].identity
Optionele per-agent identiteit gebruikt voor standaardwaarden en UX. Dit wordt geschreven door de macOS onboarding-assistent.
Als dit is ingesteld, ontleent OpenClaw standaard (alleen wanneer je ze niet expliciet hebt ingesteld):
messages.ackReactionvan de actieve agent’sidentity.emoji(terugvalt naar 👀)agents.list[].groupChat.mentionPatternsvan de agentidentity.name/identity.emoji(dus “@Samantha” werkt in groepen over de verschillende Telegram/Slack/Discord/Google Chat/iMessage/WhatsApp)identity.avataraccepteert een workspace-relative image pad of een externe URL/data URL. Lokale bestanden moeten in de medewerker werkruimte wonen.
identity.avatar accepteert:
- Workspace-relatief pad (moet binnen de medewerkerwerkruimte blijven)
http(s)URLdata:URI
wizard
Metadata geschreven door CLI wizards (onboard, configure, doctor).
logging
- Standaard logboekbestand:
/tmp/openclaw/openclaw-YYYY-MM-DD.log - Als je een stabiele route wilt, zet
logging.filenaar/tmp/openclaw/openclaw.log. - Console uitvoer kan apart worden afgestemd:
logging.consoleLevel(standaardinfo, bumps todebugwhen--verbose)logging.consoleStyle(pretty|compact|json)
- Gereedschap samenvattingen kunnen worden gewijzigd om lekken te voorkomen:
logging.redactSensitive(offtools, standaard:tools`)logging.redactPatterns(array van regex strings; Overschrijft standaarden)
channels.whatsapp.dmPolicy
Bepaalt hoe de directe chats van WhatsApp (DMs) worden behandeld:
"pairing"(standaard): onbekende afzenders krijgen een koppelingscode; eigenaar moet goedkeuren"allowlist": alleen afzenders toestaan inchannels.whatsapp.allowFrom(of gekoppelde toestemming winkel)"open": sta alle inkomende DMs (requireschannels.whatsapp.allowFromtoe om"*") toe te voegen"uitgeschakeld": negeer alle inkomende DMs
openclaw pairing list whatsappopenclaw pairing keurt whatsapp <code>
channels.whatsapp.allowFrom
Lijst van E.164 telefoonnummers toestaan, waarmee automatische WhatsApp antwoorden kunnen worden gestart (alleen DM).
Indien leeg en channels.whatsapp.dmPolicy="pairing", zullen onbekende afzenders een koppelingscode ontvangen.
Voor groepen, gebruik channels.whatsapp.groupPolicy + channels.whatsapp.groupAllowFrom.
channels.whatsapp.sendReadReceipts
Hiermee bepaalt u of inkomende WhatsApp-berichten zijn gemarkeerd als gelezen (blauwe tikken). Standaard: true.
Zelf-chat modus slaat altijd leesbevestigingen over, zelfs als dit is ingeschakeld.
Per-account overschrijven: channels.whatsapp.accounts.<id>.sendReadReceipts.
channels.whatsapp.accounts (multi-account)
Voer meerdere WhatsApp-accounts uit met één gateway:
- Uitgaande commando’s standaard naar account
defaultals aanwezig; anders het eerste geconfigureerde account id (gesorteerd). - De legacy enkele account Baileys auth dir is gemigreerd door
openclaw doctornaarwhatsapp/default.
channels.telegram.accounts / channels.discord.accounts / channels.googlechat.accounts / channels.slack.accounts / channels.mattermost.accounts / channels.signa.accounts / channels.imessage.accounts
Voer meerdere accounts per kanaal uit (elk account heeft zijn eigen accountId en optioneel naam):
defaultwordt gebruikt wanneeraccountIdis weggelaten (CLI + routing).- Env tokens zijn alleen van toepassing op het standaard account.
- Basiskanaal instellingen (groepsbeleid, vermelding gating, etc.) Van toepassing op alle accounts tenzij deze per account overschreven worden.
- Gebruik
bindings[].match.accountIdom elk account naar een andere agents.standaard te verplaatsen.
Groepschat vermelden gating (agents.list[].groupChat + messages.groupChat)
Groepsberichten standaard op vereisen vermelding (hetzij metadata vermelding of regex patronen). Van toepassing op WhatsApp, Telegram, Discord, Google Chat, en iMessage groepsgesprekken.
Vermeld types:
- Metadata vermeldingen: Native platform @-vermeldt (bijv. WhatsApp tap-to-mention). Genegeerd in WhatsApp self-chat modus (zie
channels.whatsapp.allowFrom). - Tekstpatronen: Regex patronen gedefinieerd in
agents.list[].groupChat.mentionPatterns. Altijd gecontroleerd, ongeacht de zelf-chatmodus. - Het vermelden van gating is alleen afgedwongen wanneer vermelding detectie mogelijk is (native vermeldt of ten minste één
mentionPattern).
messages.groupChat.historyLimit stelt de algemene standaard in voor de groepsgeschiedenis context. Kanalen kunnen met kanalen overschrijven.<channel>.historyLimit (of channels.<channel>.accounts.*.historyLimit voor multi-account). Zet 0 aan om geschiedenisterugloop uit te schakelen.
DM geschiedenis limieten
DM-gesprekken gebruiken sessie-gebaseerde geschiedenis beheerd door de agent. Je kunt het aantal gebruikers beperken dat de gebruiker bewaard blijft per DM sessie:- Per-DM overschrijven:
kanalen.<provider>.dms[userId].historyLimit - Provider standaard:
kanalen.<provider>.dmHistoryLimit - Geen limiet (alle geschiedenis behouden)
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Per-agent overschrijving (heeft voorrang op de reeks, zelfs []):
channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups, channels.discord.guilds). Wanneer *.groups is ingesteld, fungeert het ook als een groepsallowlist; inclusief *" om alle groepen toe te staan.
Om alleen te reageren op specifieke teksttriggers (negeer native @-mentions):
Groepsbeleid (per kanaal)
Gebruikchannels.*.groupPolicy om te bepalen of groeps- en kamerberichten worden geaccepteerd:
"open": groepen bypass allowlists; vermeldings-gating is nog steeds van toepassing."Uitgeschakeld": blokkeer alle groep/room berichten."allowlist": alleen groepsruimten toestaan die overeenkomen met de geconfigureerde allowlist.channels.defaults.groupPolicystelt de standaard in wanneer een providergroupPolicyis vrijgegeven.- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams gebruiken
groupAllowFrom(fallback: explicitallowFrom). - Discord/Slack gebruikt kanaal allowlists (
channels.discord.guilds.*.channels,channels.slack.channels). - Group DMs (Discord/Slack) worden nog steeds bestuurd door
dm.groupEnabled+dm.groupChannels. - Standaard is
groupPolicy: "allowlist"(tenzij overschreven doorchannels.defaults.groupPolicy`); als er geen toegestane lijst is geconfigureerd, worden groepsberichten geblokkeerd.
Multi-agent routering (agents.list + bindings)
Voer meerdere geïsoleerde agenten uit (gescheiden werkruimte, agentDir, sessies) binnen één Gateway.
Binnenkomende berichten worden naar een agent doorgestuurd via bindingen.
agents.list[]: per-agent overrides.id: stable agent id (verplicht).default: optioneel; als er meerdere zijn ingesteld, wint de eerste en wordt een waarschuwing gelogd. Als er geen één is ingesteld, is de eerste invoer in de lijst de standaard agent.naam: toon naam voor de agent.workspace: standaard~/.openclaw/workspace-<agentId>(voormain, daalt terug naaragents.defaults.workspace).agentDir: standaard~/.openclaw/agents/<agentId>/agent.model: per agent standaard model, overschrijftagents.defaults.modelvoor die agent.- tekenreeksformulier:
"provider/model", overschrijft alleenagents.defaults.model.primary - object formulier:
{ primary, fallbacks }(overschrijftagents.defaults.model.fallbacks;[]schakelt globale fallbacks voor die agent)
- tekenreeksformulier:
identity: per-agent name/theme/emoji (gebruikt voor vermelding patronen + ack reactions).groupChat: per-agent vermeld-gating (mentionPatterns).sandbox: per-agent sandbox config (overschrijftagents.defaults.sandbox).mode:"off"/h"niet-main"(Engels)workspaceAccess:"none"Ο"ro"~"rw"scope:"session"credentials"agent"”shared”`workspaceRoot: aangepaste sandbox werkruimte rootdocker: per-agent docker overrides (bijv.image,netwerk,env,setupCommand, limits; genegeerd wanneerscope: "shared")browser: per-agent sandboxed browser overschrijvingen (genegeerd wanneerscope: "gedeeld")prune: per-agent sandbox overschrijvingen verwijderen (genegeerd wanneerscope: "gedeeld")
subagents: per agent sub-agent standaard.allowAgents: allowlist van agent ids voorsessions_spawnvan deze agent (["*"]= sta iedereen toe; standaard: alleen dezelfde agent)
tools: per-agent tool restricties (toegepast voor het sandbox tool beleid).profile: basis tool profiel (toegepast voor allow/deny)allow: array van toegestane toolnamendeny: array van ontkende tool namen (deny wins)
agents.defaults: gedeelde agent standaard (model, werkruimte, sandbox, etc.).bindings[]: stuurt inkomende berichten door naar eenagentId.match.channel(verplicht)match.accountId(optioneel;*= elk account; weggelaten = standaard account)match.peer(optioneel;{ kind: direct|group|channel, id })match.guildId/match.teamId(optioneel; channel-specific)
match.peermatch.guildIdmatch.teamIdmatch.accountId(exact, geen peer/guild/team)match.accountId: "*"(kanaalbreed, geen peer/guild/team)- standaard agent (
agents.list[].default, anders eerste lijst invoer, anders `“main”)
bindings
Per‑agent toegangsprofielen (multi‑agent)
Elke agent kan zijn eigen sandbox + gereedschapsbeleid dragen. Gebruik dit om toegang levels te mengen in één gateway:- Volledige toegang (persoonlijke agent)
- Alleen lezen tools + workspace
- Geen bestandssysteem toegang (alleen berichten/sessie-hulpmiddelen)
tools.agentToAgent (optioneel)
Medewerkers berichten sturen is opt-in:
berichten.wachtrij
Bepaalt hoe inkomende berichten zich gedragen wanneer een agent al actief is.
messages.inbound
Snel inkomende berichten van de dezelfde afzender deblokkeren, zodat meerdere back-to-back
berichten één medewerker worden. Debouncing is gescopeerd per kanaal + gesprek
en gebruikt het meest recente bericht voor antwoord-threading/ID’s.
- Debounce batches alleen tekst berichten; media en bijlagen onmiddellijk flush
- Bestuur commando’s (bijv.
/queue,/new) bypass debouncing zodat ze zelfstandig blijven.
commands (chatopdracht afhandeling)
Hiermee bepaalt u hoe chatcommando’s worden ingeschakeld via connectors.
- Tekst commando’s moeten worden verzonden als een standalone bericht en gebruik het toonaangevende
/(geen platte-tekst alias). commands.text: valseschakelt het verwerken van chatberichten uit voor commando’s.commands.native: "auto"(standaard) schakelt oorspronkelijke commando’s in voor Discord/Telegram en laat Slack uit; niet-ondersteunde kanalen blijven text-only.- Stel
commands.native: true000000falsein om alles te forceren, of overschrijf per kanaal metchannels.discord.commands.native,channels.telegram.commands.native,channels.slack.commands.native(bool of"auto").false` verwijdert eerder geregistreerde commando’s op Discord/Telegram bij het opstarten; Slack commando’s worden beheerd in de Slack app. channels.telegram.customCommandsvoegt extra Telegram bot menu-items toe. Namen worden genormaliseerd; conflicten met inheemse commando’s worden genegeerd.commands.bash: waarstaat! <cmd>om host commando’s uit te voeren (/bash <cmd>werkt ook als een alias). Vereisttools.elevated.enableden sta het vermelden van de afzender toe intools.elevated.allowFrom.<channel>.commands.bashForegroundMsbepaalt hoe lang bash wacht voor de achtergrond. Wanneer een bash job wordt uitgevoerd, nieuwe! <cmd>verzoeken worden afgewezen (één tegelijk).commands.config: truestelt/configin (reads/writesopenclaw.json).kanalen.<provider>.configWritesgates config mutaties geïnitieerd door dat kanaal (standaard: true). Dit geldt voor/config set+unnamed@@0 unsetplus provider-specifieke auto-migraties (Telegram supergroup ID wijzigingen, Slack channel ID wijzigingen).commands.debug: trueactiveert/debug(runtime-only overrides).commands.restart: truestelt/restartin en de gateway tool start de actie opnieuw op.commands.useAccessGroups: falsestaat commando’s toe om toegang tot de lists/policy te omzeilen.- Slash-opdrachten en directives worden alleen gehonoreerd voor geautoriseerde afzenders. Autorisatie is afgeleid van
channel allowlists/pairing plus
commands.useAccessGroups.
web (WhatsApp web channel runtime)
WhatsApp draait door het webkanaal van het gateway’s (Baileys Web). Het start automatisch wanneer een gekoppelde sessie bestaat.
Zet web.enabled: false aan om deze standaard uit te zetten.
channels.telegram (bot transport)
OpenClaw start Telegram alleen wanneer een channels.telegram config sectie bestaat. Het bot-token is opgelost van channels.telegram.botToken (of channels.telegram.tokenFile), met TELEGRAMAM_BOT_TOKEN als terugval voor het standaardaccount.
Stel channels.telegram.enabled: false in om automatisch opstarten uit te schakelen.
Multi-account ondersteuning leeft onder channels.telegram.accounts (zie het meervoudige account gedeelte hierboven). Env tokens zijn alleen van toepassing op de standaard account.
Stel channels.telegram.configWrites: false in om Telegram-geïnitieerde config writes te blokkeren (inclusief supergroep ID migraties en /config setăunset).
- Gebruikt Telegram
sendMessageDraft(conceptbubbel, geen echt bericht). - Vereist privé chat onderwerpen (message_thread_id in DMs; bot heeft topics ingeschakeld).
/reasoning streamstreams redeneren in het ontwerp, stuurt dan het definitieve antwoord. Probeer de standaardinstellingen en het gedrag opnieuw in Probeer beleid.
kanalen.discord (bot transport)
Configureer de Discord bot door het instellen van de bot token en optionele gating:
Multi-account ondersteuning levens onder channels.discord.accounts (zie de multi-account sectie hierboven). Env tokens zijn alleen van toepassing op de standaard account.
channels.discord config sectie bestaat. De token wordt opgelost van channels.discord.token, met DISCORD_BOT_TOKEN als een terugval voor het standaardaccount (tenzij channels.discord.enabled is false). Gebruik gebruiker:<id> (DM) of kanaal:<id> (gilde kanaal) bij het specificeren van leveringsdoelen voor cron/CLI commando’s; blote numerieke ID’s zijn dubbelzinnig en afgewezen.
Gilde slugs zijn kleine letters met spaties vervangen door -; kanaal sleutels gebruiken de slugged kanaal naam (geen leading #). Voorkeur gilde-id’s als sleutels om dubbelzinnigheid te hernoemen.
Onderschreven berichten worden standaard genegeerd. Inschakelen met channels.discord.allowBots (eigen berichten zijn nog steeds gefilterd om self-reply loops te voorkomen).
Reactie notificatiemodus:
off: geen reactiegebeurtenissen.own: reacties op de eigen berichten van de bot (standaard).all: alle reacties op alle berichten.allowlist: reacties vanguilds.<id>.usersop alle berichten (lege lijst schakelt uit). Uitgaande tekst is gechunked metchannels.discord.textChunkLimit(standaard 2000). Stelchannels.discord.chunkMode="newline"in om op lege regels (alinea-grenzen) te splitsen voor de lengte van het chunken. Discord clients kunnen zeer lange berichten clip maken, duschannels.discord.maxLinesPerMessage(standaard 17) splits veel reacties met meerdere regels, zelfs wanneer je minder dan 2000 tekens hebt. Probeer de standaardinstellingen en het gedrag opnieuw in Probeer beleid.
kanalen.googlechat (Chat API webhook)
Google Chat draait over HTTP webhooks met app-niveau authenticatie (service account).
Multi-account ondersteunt levens onder channels.googlechat.accounts (zie het meervoudige account gedeelte hierboven). Env vars is alleen van toepassing op de standaard account.
- Service account JSON kan inline (
serviceAccount) of bestand gebaseerd zijn (serviceAccountFile). - Env fallbacks voor de standaard account:
GOOGLE_CHAT_SERVICE_ACCOUNTofGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. audienceType+audiencemoet overeenkomen met de webhook authenticatie configuratie van de Chat app.- Gebruik
spaties/<spaceId>ofusers/<userId|email>bij het instellen van leveringsdoelen.
kanalen.slack (socket modus)
Slack draait in Socket Mode en vereist zowel een bot token als app token:
channels.slack.accounts (zie het meervoudige account gedeelte hierboven). Env tokens zijn alleen van toepassing op de standaard account.
OpenKlauw start Slack wanneer de provider is ingeschakeld en beide tokens zijn ingesteld (via configuratie of SLACK_BOT_TOKEN + SLACK_APP_TOKEN). Gebruik user:<id> (DM) of kanaal:<id> bij het opgeven van leverdoelen voor cron/CLI commando’s.
Stel channels.slack.configWrites: false in om Slack-geïnitieerde config writes te blokkeren (inclusief kanaal ID migraties en /config set₀ unset).
Onderschreven berichten worden standaard genegeerd. Inschakelen met channels.slack.allowBots of channels.slack.channels.<id>.allowBots.
Reactie notificatiemodus:
off: geen reactiegebeurtenissen.own: reacties op de eigen berichten van de bot (standaard).all: alle reacties op alle berichten.allowlist: reacties vanchannels.slack.reactionAllowlistop alle berichten (lege lijst uitgeschakeld).
channels.slack.thread.historyScopebepaalt of de geschiedenis per thread is (thread, standaard) of gedeeld over het kanaal (kanaal).channels.slack.thread.inheritParentbepaalt of nieuwe thread sessies het bovenliggende kanaal transcript overnemen (standaard: false).
slack tool acties):
| Actiegroep | Standaard | Opmerkingen |
|---|---|---|
| reactions | ingeschakeld | Reageren + reacties lijst |
| messages | ingeschakeld | Lezen/verzenden/bewerken/verwijderen |
| pins | ingeschakeld | Pinnen/ontpinnen/lijsten |
| memberInfo | ingeschakeld | Lid informatie |
| emojiList | ingeschakeld | Aangepaste emojilijst |
kanalen.matterste (bot token)
Mattermost wordt geleverd als plugin en is niet gebundeld met de kerninstallatie.
Installeer het eerst: openclaw plugins installeert @openclaw/mattermost (of ./extensions/mattermost van een git checkout).
Mattermost vereist een bot token plus de basis URL voor uw server:
channels.mattermost.botToken + channels.mattermost.baseUrl of MATTERMOST_BOT_TOKEN + MATTERMOST_URL voor het standaard account (tenzij channels.mattermost.enabled is false).
Chat modi:
oncall(standaard): reageer alleen op kanaal berichten wanneer @mentioned.onmessage: reageer op elk kanaalbericht.onchar: reageer wanneer een bericht begint met een triggerprefix (channels.mattermost.oncharPrefixes, standaard[">", "!"]).
- Standaard DMs:
channels.mattermost.dmPolicy="pairing"(onbekende afzenders krijgen een koppelcode). - Openbare DM’s:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. - Groepen:
channels.mattermost.groupPolicy="allowlist"standaard (vermelding-gated). Gebruikchannels.mattermeestst.groupAllowFromom afzenders te beperken.
channels.mattermost.accounts (zie het meervoudige account gedeelte hierboven). Env vars is alleen van toepassing op de standaard account.
Gebruik kanaal:<id> of user:<id> (of @username) wanneer je een leveringsdoel opgeeft; blote iden worden behandeld als kanaalid’s.
kanalen.signal (signal-cli)
Signaal-reacties kunnen systeemgebeurtenissen uitzenden (gedeelde tool voor reacties):
off: geen reactiegebeurtenissen.own: reacties op de eigen berichten van de bot (standaard).all: alle reacties op alle berichten.allowlist: reacties vanchannels.signal.reactionAllowlistop alle berichten (lege lijst uitgeschakeld).
channels.imessage (imsg CLI)
OpenClaw spawnt imsg rpc (JSON-RPC over stdio). Geen daemon of poort vereist.
channels.imessage.accounts (zie het meervoudige account gedeelte hierboven).
Notities:
- Volledige schijf toegang tot de Berichten DB vereist.
- De eerste verzending zal om berichten automatiseringstoestemming vragen.
- Voorkeur
chat_id:<id>doelwitten. Gebruikimsg chats --limit 20om chats weer te geven. channels.imessage.cliPathkan naar een wrapper script verwijzen (bijv.sshnaar een andere Mac dieimsg rpc); gebruik SSH keys om wachtwoord aanwijzingen te vermijden.- Voor externe SSH wrappers, stel
channels.imessage.remoteHostin om bijlagen via SCP op te halen wanneerincludeAttachmentsis ingeschakeld.
agents.defaults.workspace
Stelt de enkele globale werkruimte map in die gebruikt wordt door de agent voor bestandsbewerkingen.
Standaard: ~/.openclaw/workspace.
agents.defaults.sandbox is ingeschakeld, kunnen niet-hoofdsessies dit overschrijven met hun
eigen bereik werkruimtes onder agents.defaults.sandbox.workspaceRoot.
agents.defaults.repoRoot
Optionele opslagplaats root om te tonen in de Runtime lijn van het systeem in de prompt. Indien losgezet, probeert OpenClaw
een .git map te detecteren door opwaarts te lopen van de werkruimte (en huidige
werkmap). Het pad moet bestaan om te kunnen gebruiken.
agents.defaults.skipBootstrap
Schakelt automatisch aanmaken van de werkruimte bootstrap bestanden uit (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, en BOOTSTRAP.md).
Gebruik dit voor vooraf opgehangen implementaties waar uw werkruimte bestanden uit een repo.
agents.defaults.bootstrapMaxChars
Max tekens van elke werkruimte bootstrap bestand geïnjecteerd in de systeem prompt
voor truncatie. Standaard: 20000.
Wanneer een bestand deze limiet overschrijdt, logt OpenClaw een waarschuwing en injecteert een afgekapte
head/tail met een marker.
agents.defaults.userTimezone
Stelt de tijdzone van de gebruiker in voor systeemprompt context (niet voor tijdstempels in
bericht enveloppen). Indien losgezet, gebruikt OpenClaw de host tijdzone op runtime.
agents.defaults.timeFormat
Bepaalt het tijdsformaat dat in de huidige datum- en tijdsectie van het systeem wordt weergegeven.
Standaard: auto (OS voorkeur).
berichten
Bepaalt binnengrenzen/uitgaande voorvoegsels en optionele ack reacties.
Zie Messages voor wachtrij, sessies en streaming context.
responsePrefix wordt toegepast op alle uitgaande antwoorden (tool summaries, block
streaming, laatste antwoorden) op kanalen tenzij deze al aanwezig zijn.
Overrides kunnen per kanaal en per account worden geconfigureerd:
channels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix
channels.<channel>.accounts.<id>.responsePrefixchannels.<channel>.responsePrefixmessages.responsePrefix
undefinedvalt door naar het volgende level.""schakelt expliciet de prefix uit en stopt de cascade."auto"ontleent[{identity.name}]voor de routed agent.
messages.responsePrefix niet is ingesteld, wordt er geen prefix standaard toegepast. WhatsApp self-chat
antwoorden zijn de uitzondering: ze worden standaard ingesteld op [{identity.name}] als ze zijn ingesteld, anders is
[openclaw], dus gesprekken van dezelfde telefoon blijven leesbaar.
Zet het op "auto" om [{identity.name}] af te leiden voor de routed agent (wanneer ingesteld).
Template variabelen
DeresponsePrefix string kan sjabloonvariabelen bevatten die dynamisch oplossen:
| Variabele | Beschrijving | Voorbeeld |
|---|---|---|
{model} | Korte modelnaam | claude-opus-4-6, gpt-4o |
{modelFull} | Volledig model id | anthropic/claude-opus-4-6 |
{provider} | Naam leverancier | anthropic, openai |
{thinkingLevel} | Huidig gedachtenniveau | hoog, laag, off |
{identity.name} | Naam medewerker identiteit | (hetzelfde als "auto" modus) |
{MODEL} = {model}). {think} is een alias voor {thinkingLevel}.
Onopgeloste variabelen blijven als letterlijke tekst.
[claude-opus-4-6 think:high] Hier is mijn reactie...
WhatsApp inkomende prefix is geconfigureerd via channels.whatsapp.messagePrefix (verouderd:
messages.messagePrefix). Standaard blijft ongewijzigd: "[openclaw]" als
channels.whatsapp.allowFrom leeg is, anders "" (geen prefix). Wanneer je
"[openclaw]", zal OpenClaw [{identity.name}] gebruiken wanneer de routed
agent identity.name is ingesteld.
ackReaction stuurt een beste emoji reactie om inkomende berichten
te erkennen op kanalen die reacties ondersteunen (Slack/Discord/Telegram/Google Chat). Standaard de
actieve agent zijn identity.emoji wanneer ingesteld, anders "👀". Zet het op "" om uit te schakelen.
ackReactionScope besturingselementen bij vuurreacties:
group-mentions(standaard): alleen wanneer een groep/kamer vereist en de bot is genoemdgroup-all: alle groeps/room berichtendirect: verstuur alleen berichtenalle: alle berichten
removeAckAfterReply verwijdert de ack reactie van de bot nadat een antwoord is verzonden
(Slack/Discord/Telegram/Google Chat). Standaard: false.
berichten.tts
Tekst-naar-spraak inschakelen voor uitgaande antwoorden. Wanneer ingeschakeld, genereert OpenClaw audio
met ElevenLabs of OpenAI en hecht het aan reacties. Telegram maakt gebruik van Opus
spraak notities; andere kanalen sturen MP3 audio.
messages.tts.autobestuurt autogithub.com/TTS (off,always,inbound,tagged)./tts off000000always+unnamed@@0 ongegrensdstelt de per/h sessie automatische instelling in (overrides config).messages.tts.enabledis legacy; doctor migreert het naarmessages.tts.auto.prefsPathslaat lokale overrides op (provider/limit/summarize).maxTextLengthis een harde bovengrens voor TTS input; samenvattingen zijn afgekapt om te passen.samenvatting Modeloverschrijftagents.defaults.model.primaryvoor auto-samenvatting.- Accepteert
provider/modelof een alias vanagents.defaults.models.
- Accepteert
modelOverridesmaakt model-gedreven overschrijvingen mogelijk, zoals[[tts:...]]tags (standaard aan)./tts limitand/tts summarycontrol per-user summarization settings.apiKeywaarden vallen terug naarELEVENLABS_API_KEY/XI_API_KEYenOPENAI_API_KEY.elevenlabs.baseUrloverschrijft de ElevenLabs API basis URL.elevenlabs.voiceSettingsondersteuntstability/similarityBoost/style(0..1),useSpeakerBoost, enspeed(0.5..2.0).
Spraak
Standaard Talk-modus (macOS/iOS/Android). Stem IDs vallen terug naar ELEVENLABS_VOICE_ID of SAG_VOICE_ID wanneer deze niet ingesteld is.
apiKey valt terug naar ELEVENLABS_API_KEY (of de gateway’s shell profile) wanneer deze niet ingesteld is.
voiceAliases laat Gesprek richtlijnen vriendelijke namen gebruiken (bijv. `“voice”:“lawd”).
agents.standaard
Bepaalt de runtime van de ingesloten agent (model/dunking/extense/timeouts).
agents.defaults.models definieert de geconfigureerde model catalogus (en fungeert als de allowlist voor /model).
agents.defaults.model.primary stelt het standaardmodel in, agents.defaults.model.fallbacks zijn globale failovers.
agents.defaults.imageModel is optioneel en wordt alleen gebruikt als het primaire model geen afbeelding heeft input.
Elk agents.defaults.models item kan bevatten:
alias(optioneel model snelkoppeling, bijv./opus).params(optionele provider-specifieke API parameters doorgegeven aan het modelverzoek).
params wordt ook toegepast op streamingstypes (ingesloten agent + compactie). Ondersteunde sleutels vandaag: temperature, maxTokens. Deze samenvoegen met call-time opties; Bijgeleverde waarden win. temperature is een geavanceerde knob—laat deze leeg tenzij je de standaard weet en een verandering van het model nodig hebt.
Voorbeeld:
- zet
--nadenken uit, of - definieer
agents.defaults.models["zai/<model>"].params.thinkingzelf.
agents.defaults.models:
opus->anthropic/claude-opus-4-6sonnet->anthropic/claude-sonnet-4-5gpt->openai/gpt-5.2gpt-mini->openai/gpt-5-minigemini->google/gemini-3-pro-previewgemini-flash->google/gemini-3-flash-preview
MINIMAX_API_KEY (env) in of configureer models.providers.minimax.
agents.defaults.cliBackends (CLI terugval)
Optionele CLI-backends voor alleen tekst-fallback draait (geen tool calls). Dit is handig als een
backup pad wanneer API providers mislukken. Afbeelding pass-through wordt ondersteund wanneer je
een imageArg configureert die bestandspaden accepteert.
Notities:
- CLI backends zijn text-first; hulpmiddelen zijn altijd uitgeschakeld.
- Sessies worden ondersteund wanneer
sessionArgis ingesteld; sessie id’s worden per backend. - Voor
claude-cli, worden standaard bedraden. Overschrijf het opdrachtpad als de PATH minimaal is (launchd/system).
agents.defaults.contextPruning (tool-result pruning)
agents.defaults.contextPruning verwijdert oude tool resultaten van de in-memory context rechts voordat een verzoek naar de LLM wordt verzonden.
Het wijzigt niet de sessie geschiedenis op schijf (*.jsonl blijft complete).
Dit is bedoeld om het token gebruik van chatagenten die grote gereedschappen in de loop der tijd verzamelen te verminderen.
Hoog niveau:
- Nooit gebruiker/assistent berichten aanraken.
- Beschermt de laatste
keepLastAssistantsassistenten berichten (geen tool resultaten na dat punt zijn verwijderd). - Beschermt het bootstrap voorvoegsel (niets voordat het eerste gebruikersbericht is verwijderd).
- Modus:
adaptive: soft-trims overmaat aan gereedschap (houd hoofd/tail) wanneer de geschatte context ratiosoftTrimRatiokruist. Daarna moet je de oudste geschikte tool wissen wanneer de geschatte context ratiohardClearRatioen overschrijdt. Er is genoeg schattige tool-resultaat bulk (minPrunableToolChars).agressieve: vervangt altijd geschikte gereedschap resultaten voor de cutoff doorhardClear.placeholder(geen ratio controleerd).
- Soft-trim**: alleen voor overgrootte werkresultaten. Houdt het begin + einde en voegt
...in het midden.- Voor:
toolResult("…zeer lange uitvoer…") - Na:
toolResult("HEAD…\n...\n…TAIL\n\n[Resultaat Gereedschap: …]")
- Voor:
- Hard-clear: vervangt het volledige resultaat door de placeholder.
- Voor:
toolResult("…zeer lange uitvoer…") - Nade:
toolResult("[Oude tool result content cleared]")
- Voor:
- Resultaten met afbeeldingsblokken worden overgeslagen (nooit ingekort) op dit moment.
- De geschatte “context ratio” is gebaseerd op karakters (bij benadering inbegrepen), niet op exacte tokens.
- Als de sessie ten minste
keepLastAssistantsassistenten nog niet bevat, wordt printen overgeslagen. - In de
agressivemodus, wordthardClear.enabledgenegeerd (geschikte tool resultaten worden altijd vervangen doorhardClear.placeholder).
mode "adaptive" of "agressieve" is):
keepLastAssistants:3softTrimRatio:0.3(alleen adaptief)hardClearRatio:0.5(alleen adaptief)minPrunableToolChars:50000(alleen adaptief)softTrim:{ maxChars: 4000, headChars: 1500, tailChars: 1500 }(alleen adaptief)hardClear:{ enabled: true, placeholder: "[Old tool result content cleared]" }
agents.defaults.compaction (reserveer hoofdkamer + geheugen flush)
agents.defaults.compaction.mode selecteert de compactie samenvattingsstrategie. Standaard default; stel `security in om chunked summarization in te schakelen voor zeer lange histories. Zie /concepts/compaction.
agents.defaults.compaction.reserveTokensFloor forceert een minimum reserveTokens
waarde voor Pi compactie (standaard: 20000). Zet het op 0 om de vloer uit te schakelen.
agents.defaults.compaction.memoryFlush draait een silent agentische draai voor
auto-compactie, die het model instrueert om duurzame herinneringen op te slaan op schijf (bijv.
memory/YY-MM-D.md). Het activeert wanneer de sessie token een
zachte drempel overschrijdt onder de compactie limiet.
Legacy standaard:
memoryFlush.enabled:truememoryFlush.softThresholdTokens:4000memoryFlush.prompt/memoryFlush.systemPrompt: ingebouwde standaard metNO_REPLY- Opmerking: de geheugenflush wordt overgeslagen wanneer de sessie-werkruimte alleen-lezen-
(
agents.defaults.sandbox.workspaceAccess: "ro"or"none").
-
agents.defaults.blockStreamingDefault:"on"/"off"(standaard uit). -
Kanaal overschrijven:
*.blockStreaming(en per-account varianten) om streaming gedwongen aan of uit te schakelen. Voor niet-Telegram-kanalen zijn expliciete*.blockStreaming: truenodig om antwoorden te blokkeren. -
agents.defaults.blockStreamingBreak:"text_end"or"""message_end"(standaard: text_end). -
agents.defaults.blockStreamingChunk: soft chunking voor gestreamde blokken. Standaard 800–1200 tekens, geeft de voorkeur aan alinea-pauzes (\n\n), dan nieuwkomers, en vervolgens zinnen. Voorbeeld: -
agents.defaults.blockStreamingCoalesce: voeg gestreamde blokken samen voor het verzenden. Standaard ingesteld op{ idleMs: 1000 }en erftminCharsvanblockStreamingChunkmetmaxCharsgemaximaliseerd aan het kanaal tekstlimiet. Signal/Slack/Discord/Google Chat standaard naarminChars: 1500tenzij dit wordt overschreven. Channel overrides:channels.whatsapp.blockStreamingCoalesce,channels.telegram.blockStreamingCoalesce,channels.discord.blockStreamingCoalesce,channels.slack.blockStreamingCoalesce,channels.mattermost.blockStreamingCoalesce,channels.signal.blockStreamingCoalesce,channels.imessage.blockStreamingCoalesce,channels.msteams.blockStreamingCoalesce,channels.googlechat.blockStreamingCoalesce(and per-account variants). -
agents.defaults.humanDelay: willekeurige pauze tussen blok antwoorden na de eerste. Modes:off(standaard),natuurlijk(800–2500ms),custom(gebruikminMs/maxMs). Overschrijven Per-agent:agents.list[].humanDelay. Voorbeeld:Zie /concepts/streaming voor gedrag + details in stukken snijden.
agents.defaults.typingMode:"nooit" Onmiddellijk "instant" (INT "bezinnen"! bericht". Standaardinstantvoor directe chats / vermeldingen enmessagevoor ongenoemde groeps-chats.session.typingMode: per-session override voor de modus.agents.defaults.typingIntervalSeconds: hoe vaak het typingssignaal wordt vernieuwd (standaard: 6s).session.typingIntervalSeconds: per sessie overschrijving voor de refresh interval. Zie /concepts/typing-indicators voor gedragsdetails.
agents.defaults.model.primary moet worden ingesteld als provider/model (bijv. anthropic/claude-opus-4-6).
Aliassen komen van agents.defaults.models.*.alias (bijv. Opus).
Als u de provider weglaat, veronderstelt OpenClaw momenteel antthropic als een tijdelijke
deprecation fallback.
Z.AI modellen zijn beschikbaar als zai/<model> (bijv. zai/glm-4.7) en vereisen
ZAI_API_KEY (of legacy Z_AI_API_KEY) in de omgeving.
agents.defaults.heartbeat configureert periodieke heartbeat runs:
every: duration string (ms,s,m,h); standaard unit minuten. Standaard:30m. Zet0mom uit te schakelen.model: optioneel override model voor heartbeat run (provider/model).includeReasoning: Wanneertrue, zal heartbeats ook het aparteReasoning:bericht leveren indien beschikbaar (dezelfde vorm als/reasoning on). Standaard:false.session: optionele sessie sleutel om te bepalen in welke sessie de heartbeat plaatsvindt. Standaard:main.to: optionele ontvanger override (kanaal-specifieke id, bijv. E.164 voor WhatsApp, chat id voor Telegram).target: optioneel uitleveringskanaal (last,whatsapp,telegram,discord,slack,msteams,signal,imessage,none). Standaard:laatste.prompt: optionele overschrijving voor het hart-lichaam (standaard:Lees HEARTBEAT.md als het bestaat (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.). Overrides worden verbatim verzonden; inclusief eenLees HEARTBEAT.mdregel als je het bestand nog wilt lezen.ackMaxChars: max tekens toegestaan naHEARTBEAT_OKvoor levering (standaard: 300).
- Stel
agents.list[].heartbeatin of overschrijf hartebeat instellingen voor een specifieke agent. - Als een agent item
heartbeatdefinieert, alleen die agents draaien hartbekken; standaard wordt de gedeelde baseline voor die agents.
every, behoud HEARTBEAT.md tiny, en/of kies een goedkoper model.
tools.exec configureert achtergrond-exec standaarden:
backgroundMs: tijd voor auto-achtergrond (ms, standaard 10000)timeoutSec: auto-kill na deze runtime (seconden, standaard 1800)cleanupMs: hoe lang de beëindigde sessies in het geheugen te houden (ms, standaard 1800000)notifyOnExit: enque een systeem event + verzoek hartebeat wanneer de achtergrond exec exits (standaard waar)applyPatch.enabled: schakel experimenteleapply_patchin (alleen OpenAI/OpenAI Codex; standaard false)applyPatch.allowModels: optionele allowlist van model id’s (bijv.gpt-5.2ofopenai/gpt-5.2) Opmerking:applyPatchstaat alleen ondertools.exec.
tools.web configureert web search + fetch tools:
tools.web.search.enabled(standaard: true wanneer de sleutel aanwezig is)tools.web.search.apiKey(aanbevolen: set viaopenclaw configureren --section web, of gebruikBRAVE_API_KEYenv var)tools.web.search.maxResults(1-10, standaard 5)tools.web.search.timeoutSeconds(standaard 30)tools.web.search.cacheTtlMinutes(standaard 15)tools.web.fetch.enabled(standaard waar)tools.web.fetch.maxChars(standaard 50000)tools.web.fetch.maxCharsCap(standaard 50000; duwt maxChars in config/tool calls)tools.web.fetch.timeoutSeconds(standaard 30)tools.web.fetch.cacheTtlMinutes(standaard 15)tools.web.fetch.userAgent(optionele override)tools.web.fetch.readability(standaard waar; uitschakelen om alleen HTML opruimen te gebruiken)tools.web.fetch.firecrawl.enabled(standaard waar wanneer een API sleutel is ingesteld)tools.web.fetch.firecrawl.apiKey(optioneel; standaardFIRECRAWL_API_KEY)tools.web.fetch.firecrawl.baseUrl(standaard https://api.firecrawl.dev)tools.web.fetch.firecrawl.onlyMainContent(standaard waar)tools.web.fetch.firecrawl.maxAgeMs(optioneel)tools.web.fetch.firecrawl.timeoutSeconds(optioneel)
tools.media configureert inkomende media-begrip (image/audio/video):
tools.media.models: gedeelde modellijst (capability-tagged; gebruikt na per-cap lists).tools.media.concurrency: max gelijktijdige capaciteit draait (standaard 2).tools.media.image/tools.media.audio/tools.media.video:enabled: opt-out schakelaar (standaard true wanneer modellen zijn geconfigureerd).prompt: optioneel prompt override (afbeelding / video voeg automatisch eenmaxCharshint toe).maxChars: max output karakters (standaard 500 voor image/video; unset voor audio).maxBytes: max mediagrootte om te verzenden (standaard: afbeelding 10MB, audio 20MB, video 50MB).timeoutSeconds: verzoektime-out (standaard: afbeelding 60s, audio 60s, video 120s).language: optionele audio hint.attachments: attachment policy (mode,maxAttachments,prefer).scope: optionele gating (eerste match wint) metmatch.channel,match.chatType, ofmatch.keyPrefix.models: geordende lijst van model items; mislukte of te grote media vallen terug naar de volgende invoer.
- Elke
models[]invoer:- Zoekmachine item (
type: "provider"of weggelaten):provider: API providerid (openai,anthropic,google/gemini,groq, etc).model: model id override (vereist voor afbeelding; standaardgpt-4o-mini-transcribe/whisper-large-v3-turbovoor audio providers, engemini-3-flash-previewvoor video).profile/preferredProfile: authprofiel selectie.
- CLI item (`type: “cli”):
command: uitvoerbaar om te gebruiken.args: getemplated args (ondersteund{{MediaPath}},{{Prompt}},{{MaxChars}}, etc).
capabilities: optionele lijst (image,audio,video) om een gedeelde invoer te gaten. Standaard wanneer weggewezen:openai/anthropic/minimax→ afbeelding,google→ image+audio+video,groq→ audio.prompt,maxChars,maxBytes,timeoutSeconds,languagekan worden overschreven per invoer.
- Zoekmachine item (
enabled: false), wordt begrip overgeslagen; het model ontvangt nog steeds de oorspronkelijke bijlagen.
Provider authenticatie volgt de standaard model auth-volgorde (auth-profielen, env vars zoals OPENAI_KEY/GROQ_API_KEY/GEMINI_API_KEY, of models.*.apiKey).
Voorbeeld:
agents.defaults.subagents configureert sub-agent standaard:
model: standaard model voor spawned sub-agents (string of{ primary, fallbacks }). Indien weggelaten erft subagenten het model van de caller, tenzij dit wordt overschreven per agent of per oproep.maxConcurrent: max gelijktijdige sub-agent draait (standaard 1)archiveAfterMinutes: auto-archiveer sub-agent sessies na N minuten (standaard 60; zet0om uit te schakelen)- Functiebeleid Per-subagent:
tools.subagents.allow/tools.subagents.tools.deny(geen wins)
tools.profile zet een base tool allowlist voor tools.allow/tools.deny:
minimal: alleensession_statuscoding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: geen beperking (zelfde als niet ingesteld)
agents.list[].tools.profile.
Voorbeeld (standaard alleen messaging, maar ook Slack + Discord-tools toestaan):
tools.byProvider laat je tools voor specifieke aanbieders verder beperken (of een enkele provider/model).
Per-agent override: agents.list[].tools.byProvider.
Bestelling: basisprofiel → providerprofiel → beleid toestaan/weigeren.
Provider keys accepteren provider (bijv. google-antigravity) of provider/model
(bijv. openai/gpt-5.2).
Voorbeeld (globaal coding-profiel behouden, maar minimale tools voor Google Antigravity):
tools.allow / tools.deny configureer een globale tool allow/deny policy (weiger wins).
Overeenkomen is hoofdletterongevoelig en ondersteunt * jokertekens ("*" betekent alle tools).
Dit wordt toegepast, zelfs als de Docker sandbox uit is.
Voorbeeld (schakel browser/canvas overal uit):
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,web_fetchgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: alle ingebouwde OpenClaw-tools (sluit provider-plugins uit)
tools.elevated besturingselementen verheven (host) exec access:
ingeschakeld: verhoogde modus toestaan (standaard true)allowFrom: per-channel allowlists (leeg = uitgeschakeld)whatsapp: E.164 getallentelegram: chat ids of gebruikersnamendiscord: user ids of usernames (val terug naarchannels.discord.dm.allowFromindien niet aanwezig)signaal: E.164 getallenimessage: handles/chat idswebchat: sessie ids of gebruikersnamen
tools.elevatedis de globale baseline.agents.list[].tools.elevatedkan alleen verder beperken (beide moeten toestaan).- `/hooggelegen oplaadstand per sessie sleutel; inlinerichtlijnen zijn van toepassing op één enkel bericht.
- Verhoogd
execdraait op de host en bypasses sandboxing. - Het gereedschapsbeleid is nog steeds van toepassing; als ‘exec’ wordt geweigerd, kan de hoogte niet worden gebruikt.
agents.defaults.maxConcurrent bepaalt het maximum aantal ingebedde agenten dat
in parallelle sessies kan uitvoeren. Elke sessie is nog steeds geserialiseerd (één uitvoeren
per sessie sleutel tegelijk). Standaard: 1.
agents.defaults.sandbox
Optionele Docker sandboxing voor het ingesloten agent. Bedoeld voor niet-hoofd
sessies zodat ze geen toegang hebben tot uw hosting-systeem.
Details: Sandboxing
Standaardwaarden (indien ingeschakeld):
- scope:
"agent"(één container + werkruimte per agent) - Debiaanse boekenworm-slim gebaseerde afbeelding
- agent werkruimte toegang:
workspaceAccess: "none"(standaard)"none": gebruik een sandbox werkruimte per bereik onder~/.openclaw/sandboxes`
"ro": behoud de sandbox werkruimte op/workspace, en koppel de agent werkruimte read-only op/agent(schakeltwrite/edit/apply_patch)"rw": mount the agent workspace read/write at at/workspace`
- automatisch opruimen: inactief > 24u OF leeftijd > 7d
- tool policy: alleen
exec,process,read,edit,edit,apply_patch,sessions_list,sessions_history,sessions_send,sessions_spawn,sessions_status(deny wins)- configureren via
tools.sandbox.tools, override per-agent viaagents.list[].tools.sandbox.tools - tool group shorthands ondersteund in sandbox beleid:
group:runtime,group:fs,group:sessions,group:memory(zie Sandbox vs Tool Policy vs Elevated)
- configureren via
- optionele sandboxed browser (Chromium + CDP, noVNC observer)
- hardening knobs:
network,user,pidsLimit,memory,cpus,ulimits,seccompProfile,apparmormorProfile
scope: "gedeeld" betekent een gedeelde container en gedeelde werkruimte. Geen
kruissessie isolatie. Gebruik scope: "session" voor per-session isolatie.
Legacy: perSession wordt nog steeds ondersteund (true → scope: "session",
false → scope: "Gedeelt").
setupCommand draait once nadat de container is gemaakt (binnen de container via sh -lc).
Zorg ervoor dat de netwerkegress, een beschrijfbare root FS, en een rootgebruiker worden geïnstalleerd
netwerk: "none"; zet agents.defaults.sandbox.docker.netwerk
op "bridge" (of je eigen netwerk) als de agent uitgaande toegang nodig heeft.
Opmerking: inkomende bijlagen bevinden zich in de actieve werkruimte op media/binnenland/*. Met workspaceAccess: "rw", dat betekent dat bestanden in de agent worden geschreven.
Opmerking: docker.binds koppelt extra host directories; globale en per-agent binds worden samengevoegd.
Bouw de optionele browserafbeelding met:
agents.defaults.sandbox.browser.enabled=true, gebruikt de browsertool een sandboxed
Chromium-instantie (CDP). Als noVNC is ingeschakeld (standaard wanneer headless=false),
de noVNC URL wordt geïnjecteerd in het systeem prompt zodat de agent het kan verwijzen.
Dit vereist geen browser.enabled in het hoofd config; de sandbox control
URL is geïnjecteerd per sessie.
agents.defaults.sandbox.browser.allowHostControl (standaard: false) stelt
sandboxed sessies in staat om expliciet op de host browser control server
te richten via de browser tool (target: "host"). Laat dit af als je een strikt
sandbox-isolatie wil.
Lijsten toestaan voor extern besturingselement:
allowedControlUrls: exacte URL’s toegestaan voortarget: "custom".allowedControlHosts: hostnamen toegestaan (hostnaam alleen, geen poort).allowedControlPorts: poorten toegestaan (standaardwaarden: http=80, https=443). Standaard: alle toegestane lijsten zijn uitgeschakeld (geen beperking).allowHostControlstandaard is niet waar.
model (custom providers + base URLs)
OpenClaw maakt gebruik van de pi-coding-agent modelcatalogus. U kunt aangepaste aanbieders
(LiteLLM, lokale OpenAI-compatibele servers, Anthropische proxes, enz.) toevoegen door
~/.openclaw/agents/<agentId>/agent/models.json te schrijven of door hetzelfde schema te definiëren in je
OpenClaw config onder models.providers.
Overzicht van de aanbieder-door-provider + voorbeelden: /concepts/model-providers.
Wanneer models.providers aanwezig is, schrijft OpenClaw schrijven/voegt een models.json samen met
~/.openclaw/agents/<agentId>/agent/ bij het opstarten:
- standaard gedrag: samengevoegd (houdt bestaande providers, overschrijft op naam)
- zet
models.mode: "replace"om de bestandsinhoud te overschrijven
agents.defaults.model.primary (provider/model).
OpenCode Zen (multi-model proxy)
OpenCode Zen is een multi-model gateway met per-model eindpunten. OpenClaw gebruikt de ingebouwdeopencode provider van pi-ai; zet OPENCODE_API_KEY (of
OPENCODE_ZEN_API_KEY) van https://opencode.ai/auth.
Notities:
- Model refs gebruik
opencode/<modelId>(voorbeeld:opencode/claude-opus-4-6). - Als u een allowlist inschakelt via
agents.defaults.models, voeg dan elk model toe dat u van plan bent te gebruiken. - Snelkoppeling:
openclaw onboard --auth-choice opencode-zen.
Z.AI (GLM-4.7) - provider alias ondersteuning
Z.AI modellen zijn beschikbaar via de ingebouwdezai provider. Zet ZAI_API_KEY
in uw omgeving en verwijs naar het model per provider/model.
Snelkoppeling: openclaw onboard --auth-choice zai-api-key.
z.ai/*enz-ai/*zijn geaccepteerde aliassen en normaliseer naarzai/*.- Als
ZAI_API_KEYontbreekt, zullen verzoeken naarzai/*mislukken met een authenticatiefout tijdens het runtime. - Voorbeeld fout:
Geen API-sleutel gevonden voor provider "zai". - Z.AI’s algemene API eindpunt is
https://api.z.ai/api/paas/v4. GLM coding verzoeken gebruiken het dedicated Coding endpointhttps://api.z.ai/api/coding/paas/v4. De ingebouwdezaiprovider maakt gebruik van het eindpunt van de code. Als u het algemene eindpunt nodig heeft, definieer dan een aangepaste provider inmodels.providersmet de base URL override (zie de aangepaste providers sectie hierboven). - Gebruik valse placeholder in documenten/config; commit nooit echte API-sleutels.
Moonshot AI (Kimi)
Gebruik het OpenAI-compatibele eindpunt van Moonshot:- Zet
MOONSHOT_API_KEYin de omgeving of gebruikopenclaw onboard --auth-choice moonshot-api-key. - Model ref:
moonshot/kimi-k2.5. - Voor het eindpunt van China:
- Voer
openclaw onboard --auth-choice moonshot-api-key-cnuit (wizard zalhttps://api.moonshot.cn/v1instellen), of - Zet handmatig
baseUrl: "https://api.moonshot.cn/v1"inmodels.providers.moonshot.
- Voer
Kimi Coding
Gebruik het moonshot AI’s Kimi Coding endpoint (anthropic-compatibel, ingebouwde provider):- Zet
KIMI_API_KEYin de omgeving of gebruikopenclaw onboard --auth-choice kimi-code-api-key. - Model ref:
kimi-coding/k2p5.
Synthetisch (anthropic-compatibel)
Gebruik synthetisch antroping-compatibel eindpunt:- Stel
SYNTHETIC_API_KEYin of gebruikopenclaw onboard --auth-choice synthetic-api-key. - Model ref:
synthetisch/hf:MiniMaxAI/MiniMax-M2.1. - Basis URL moet
/v1weglaten omdat de Anthropische client deze toevoegt.
Lokale modellen (LM Studio) - aanbevolen instelling
Bekijk /gateway/local-models voor de huidige lokale handleiding. TL;DR: voer MiniMax M2.1 uit via LM Studio Responses API met ernstige hardware; houd gehoste modellen samengevoegd voor fallback.MiniMax M2.1
Gebruik MiniMax M2.1 direct zonder LM Studio:- Stel
MINIMAX_API_KEYomgevingsvariabele in of gebruikopenclaw onboard --auth-choice minimax-api. - Beschikbaar model:
MiniMax-M2.1(standaard). - Werk de prijzen bij in
models.jsonals je exacte kosten tracking nodig hebt.
Granen (GLM 4.6 / 4.7)
Gebruik Cerebras via hun OpenAI-compatibel eindpunt:- Gebruik
cerebras/zai-glm-4.7voor Cerebras; gebruikzai/glm-4.7voor Z.AI direct. - Zet
CEREBRAS_API_KEYin de omgeving of configureer.
- Ondersteunde API’s:
openai-completions,openai-respons,anthropic-messages,google-generative-ai - Gebruik
authHeader: true+headersvoor aangepaste autorisaties. - Overschrijf de agent config root met
OPENCLAW_AGENT_DIR(ofPI_CODING_AGENT_DIR) als jemodels.jsonelders wilt opslaan (standaard:~/.openclaw/agents/main/agent).
sessie
Bepaalt sessiesscope, reset beleid, reset triggers, en waar de sessie-winkel is geschreven.
mainKey: direct-chat bucket sleutel (standaard:"main"). Nuttig wanneer je de primaire DM thread wilt “hernoemen” zonderagentIdte veranderen.- Sandbox notitie:
agents.defaults.sandbox.mode: "niet-main" gebruikt deze sleutel om de hoofdsessie te detecteren. Elke sessiesleutel die niet overeenkomt metmainKey` (groepen/kanalen) is sandboxed.
- Sandbox notitie:
dmScope: hoe DM sessies gegroepeerd zijn (standaard:"main").main: alle DMs delen de hoofdsessie voor continuïteit.per-peer: isoleer DMs door afzender-id via verschillende kanalen.per-channel-peer: isoleer DMs per kanaal + afzender (aanbevolen voor multi-user inboxes).per-account-channel-peer: isoleer DMs per account + kanaal + afzender (aanbevolen voor postvak in meerdere accounts).- Secure DM mode (aanbevolen): zet
session.dmScope: "per-channel-peer"wanneer meerdere mensen de bot kunnen PM (shared inboxes, multi-person allowlists, ordmPolicy: "open").
identityLinks: kaart canonical ids aan provider-prefixed peers zodat dezelfde persoon een DM sessie deelt over kanalen wanneer hijper-peer,per-channel-peerofper-account-channel-peergebruikt.- Voorbeeld:
alice: ["telegram:123456789", "discord:987654321012345678"].
- Voorbeeld:
reset: primair herstelbeleid. Standaard ingesteld op dagelijkse resets om 4:00 uur lokale tijd op de gateway host.mode:dailyoridle(standaard:dailywanneerresetaanwezig is).atHour: lokaal uur (0-23) voor de dagelijkse reset grens.idleMinutes: glijden inactief venster in minuten. Als dagelijkse + inactiviteit beide zijn geconfigureerd, wint degene die het eerst verloopt.
resetByType: per-sessie overrides voordirect,groupenthread. De legacy-sleuteldmwordt geaccepteerd als alias voordirect.- Als u alleen oudere
session.idleMinuteshebt ingesteld zonderreset/resetByType, blijft OpenClaw in idle-only modus voor backward compatibiliteit.
- Als u alleen oudere
heartbeatIdleMinutes: optionele inactieve overschrijving voor hartebeat controles (dagelijkse reset is nog steeds van toepassing wanneer ingeschakeld).agentToAgent.maxPingPongTurns: max Reply-back draait tussen aanvrager/doel (0–5, standaard 5).sendPolicy.default:allowordenyfallback when no rule matches.sendPolicy.rules[]: match bychannel,chatType(directvoices groupquad room), ofkeyPrefix(bijv.cron:). Eerste weigering van winden; anders toestaan.
vaardigheden (vaardigheden configuratie)
Bediening bundelde toegestane lijst, installeer voorkeuren, extra vaardigheidsmappen, en per vaardigheids
overrides. Van toepassing op gebundelde vaardigheden en ~/.openclaw/vaardigheden (werkruimte
wint nog steeds bij naamconflicten).
Velden
allowBundled: optionele toegestane lijst voor alleen gebundelde skills. Als dit is ingesteld, komen alleen die gebundelde vaardigheden in aanmerking (beheerde/werkruimte vaardigheden zijn ongebeïnvloedd).load.extraDirs: aanvullende skill-mappen om te scannen (laagste prioriteit).install.preferBrew: geef de voorkeur aan brew-installers wanneer beschikbaar (standaard: true).install.nodeManager: node installer preferentie (npmρpnpmyarn`, default: npm).entries.<skillKey>: per-skill configuratie overschrijven.
enabled: stelfalsein om een skill uit te schakelen, zelfs als deze gebundeld/geïnstalleerd is.env: omgevingsvariabelen die worden geïnjecteerd voor de agent-run (alleen als ze nog niet zijn ingesteld).apiKey: optioneel gemak voor vaardigheden die een primaire env var verklaren (bijv.nano-banana-pro→GEMINI_API_KEY).
plugins (extensies)
Controleert plugin ontdekking, toestaan/weiger en per plugin configuratie. Plugins zijn geladen
van ~/.openclaw/extensions, <workspace>/.openclaw/extensions, plus any
plugins.load.paths items. Config wijzigingen vereisen een gateway herstart.
Zie /plugin voor volledig gebruik.
Velden
enabled: hoofdschakelaar voor laden van plugin (standaard: true).Toestaan: optionele toegestane lijst van plugin ids; indien ingesteld, alleen plugins laden.deny: optionele denylist van plugin id’s (weigering van wins).load.paths: extra plugin bestanden of mappen om te laden (absoluut of~).invoert.<pluginId>: per-plugin overschrijven.ingeschakeld: stelfalsein om uit te schakelen.config: plugin-specifieke config object (gevalideerd door de plugin indien opgegeven).
browser (openclaw-managed browser)
OpenClaw kan beginnen met een toegewijd, geïsoleerde Chrome/Brave/Edge/Chromium installatie voor openclaw en een kleine loopbackcontrol service blootstellen.
Profielen kunnen naar een Chrome-gebaseerde browser op remote wijzen via profielen.<name>.cdpUrl. Externe
profielen zijn alleen bijlage (start/stop/reset is uitgeschakeld).
browser.cdpUrl blijft voor legacy single profiel configs en als het basis
schema/host voor profielen die alleen cdpPort instellen.
Standaarden:
- enabled:
true - evaluateEnabled:
true(setfalseomact:evaluateenwacht --fn) uit te schakelen - service: alleen loopback (poort afgeleid van
gateway.port, standaard18791) - CDP URL:
http://127.0.1:18792(control service + 1, legacy single-profiel) - profielkleur:
#FF4500(kreeft oranje) - Opmerking: de control server is gestart door de lopende gateway (OpenClaw.app menubar of
openclaw gateway). - Auto-detecteer volgorde: standaard browser als Chromium-gebaseerd; anders Chrome → Brave → Edge → Chromium → Chrome Canary.
‘ui’ (Goedgekeurd)
Optionele accentkleur die wordt gebruikt door de native apps voor UI-chrome (bijv. Talk-modus bubble tint). Als dit niet is ingesteld, vallen klanten terug naar een gedempte lichtblauw.gateway (Gateway server mode + bind)
Gebruik gateway.mode om expliciet te verklaren of deze machine de Gateway moet uitvoeren.
Standaarden:
- modus: unset (behandeld als “niet automatisch starten”)
- bind:
loopback - poort:
18789(enkele poort voor WS + HTTP)
gateway.controlUi.basePathstelt de URL prefix in waar de Control UI wordt geserveerd.- Voorbeelden:
"/ui","/openclaw","/apps/openclaw". - Standaard: root (
/) (ongewijzigd). gateway.controlUi.rootstelt de filesystem root voor Control UI assets in (standaard:dist/control-ui).gateway.controlUi.allowInsecureAuthstaat token-only authenticatie voor de Control UI toe wanneer de apparaatidentiteit wordt weggelaten (meestal via HTTP). Standaard:false. Liever HTTPS (Tailscale Serve) of127.0.0.1.- ‘gateway.controlUi.gevaarlijk’ yDisableDeviceAuth’ schakelt identiteitscontroles voor de
Control UI uit (alleen token/wachtwoord). Standaard:
false. Alleen Breekglas
gateway.trustedProxies: lijst van reverse-proxy IPs die TLS voor de Gateway beëindigen.- Wanneer een verbinding van een van deze IP-adressen komt, OpenClaw gebruikt
x-forwarded-for(ofx-real-ip) om de client IP te bepalen voor lokale pairing checks en HTTP auth/lokale controles. - Laat alleen proxy’s zien die u volledig beheert, en zorg ervoor dat ze overwrite inkomende
x-forwarded-voorzijn.
openclaw gatewayweigert te starten tenzijgateway.modeis ingesteld oplocal(of je passeert de override vlag).gateway.portcontroleert de enkele meervoudige poort die gebruikt wordt voor WebSocket + HTTP (bedien UI, hooks, A2UI).- OpenAI Chat Voltooien eindpunt: standaard uitgeschakeld; in te schakelen met
gateway.http.endpoints.chatCompletions.enabled: true. - Voorkeur:
--port>OPENCLAW_GATEWAY_PORT>gateway.port> standaard18789. - Gateway authth is standaard vereist (token/wachtwoord of Tailscale Serve identiteit). Non-loopback binds vereisen een gedeelde token/wachtwoord.
- De onboarding wizard genereert standaard een gateway token (zelfs bij loopback).
gateway.remote.tokenis alleen voor externe CLI aanroepen; het maakt geen lokale gateway auth.gateway.tokenwordt genegeerd.
gateway.auth.modestelt de handshake vereisten in (tokenofpassword). Wanneer niet ingesteld, wordt token authenticatie aangenomen.gateway.auth.tokenslaat het gedeelde token voor token authenticatie op (gebruikt door de CLI op dezelfde machine).- Wanneer
gateway.auth.modeis ingesteld, wordt alleen die methode geaccepteerd (plus optionele Tailscale headers). gateway.auth.passwordkan hier ingesteld worden, of viaOPENCLAW_GATEWAY_PASSWORD(aanbevolen).gateway.auth.allowTailscalestaat Tailscale Serve identity headers (tailscale-user-login) toe om tevreden te zijn met authenticatie wanneer het verzoek op loopback komt metx-forwarded-for,x-forwarded-proto, enx-forwarded-host. Openklauw verifieert de identiteit door hetx-forwarded-vooradres viatailscale whoisop te lossen voordat je het accepteert. Wanneertrue, Serve verzoeken geen een token/wachtwoord nodig hebben, zetfalseop expliciete inloggegevens. Standaard naartruewanneertailscale.mode = "serve"en autorisatiemodus nietwachtwoordis.gateway.tailscale.mode: "serve"gebruikt Tailscale Serve (tailnet alleen, loopbackbind).gateway.tailscale.mode: "funnel"legt het dashboard publiek bloot; vereist auth.gateway.tailscale.resetOnExitreset Serve/Funnel config bij uitschakelen.
gateway.remote.urlstelt de standaard Gateway WebSocket URL voor CLI oproepen wanneergateway.mode = "remote".gateway.remote.transportselecteert macOS remote transport (sshstandaard,directvoor ws/wss). Wanneerdirect,gateway.remote.urlmoetws://ofwss://.ws://hoststandaard op poort18789.gateway.remote.tokenvult het token in voor externe oproepen (laat deze niet ingesteld voor geen authenticatie).gateway.remote.passwordvult het wachtwoord in voor externe oproepen (laat deze niet instellen voor geen authenticatie).
- OpenClaw.app kijkt naar
~/.openclaw/openclaw.jsonen schakelt modi live wanneergateway.modeofgateway.remote.urlverandert. - Als
gateway.modeis unset maargateway.remote.urlis ingesteld, behandelt de macOS app het als externe modus. - Wanneer u de verbindingsmodus wijzigt in de macOS app, schrijft deze
gateway.mode(engateway.remote.url+gateway.remote.transportin de externe modus) terug naar het configuratiebestand.
gateway.reload (Config hot reload)
De Gateway kijkt naar ~/.openclaw/openclaw.json (of OPENCLAW_CONFIG_PATH) en past de wijzigingen automatisch toe.
Modi:
hybrid(standaard): hot-apply veilige wijzigingen toe; herstart de Gateway voor kritieke veranderingen.hot: pas alleen hot-safe wijzigingen toe; log wanneer een herstart vereist is.restart: herstart de Gateway bij elke wijziging van de configuratie.uit: hot herladen uitschakelen.
Matrix voor snelle herladen (bestanden + impact)
Bekeken bestanden:~/.openclaw/openclaw.json(ofOPENCLAW_CONFIG_PATH)
hooks(webhook auth/path/mappings) +hooks.gmail(Gmail watcher opnieuw gestart)browser(browser control server herstart)cron(cron service herstart + concurrency update)agents.defaults.heartbeat(heartbeat runner herstart)web(opnieuw opstarten WhatsApp)telegram,discord,signal,imessage(opnieuw starten)agent,models,routing,messages,session,whatsapp,logging,skills,talk,identity,wizard(dynamische reads)
gateway(port/bind/auth/control UI/tailscale)bridge(erf)discoverycanvasHostplugins- Elk onbekend/niet-ondersteund configuratiepad (standaard om te herstarten voor veiligheid)
Multi-instance isolatie
Voor het uitvoeren van meerdere gateways op één host (voor ontslag of een reddingsbode), isoleer de staat per instantie + config en gebruik unieke ports:OPENCLAW_CONFIG_PATH(per instantie config)OPENCLAW_STATE_DIR(sessies/credits)agents.defaults.workspace(geheugen)gateway.port(uniek per instantie)
openclaw --dev …→ gebruikt~/.openclaw-dev+ shifts ports van base19001openclaw --profile <name> …→ gebruikt~/.openclaw-<name>(poort via config/env/flags)
hooks (Gateway webhooks)
Schakel een eenvoudig HTTP webhook eindpunt in op de Gateway HTTP-server.
Standaarden:
- ingeschakeld:
false - pad:
/hooks - maxBodyBytes:
262144(256 KB)
Autorisatie: Voordrager <token>ofx-openclaw-token: <token>
POST /hooks/wake→{ text, mode?: "now"format@@6format@@7"next-heartbeat" }POST /hooks/agent→{ message, name?, sessionKey?, wakeMode?, deliver?, kanaal?, naar?, denk?, timeoutSeconds? }POST /hooks/<name>→ opgelost viahooks.mappings
/hooks/agent plaatst altijd een samenvatting in de hoofdsessie (en kan optioneel direct een hartenslag activeren via wakeMode: "nu").
Aantekeningen toewijzen:
match.pathkomt overeen met het subpad na/hooks(bijv./hooks/gmail→gmail).match.sourcekomt overeen met een payload veld (bijv.{ source: "gmail" }) zodat je een generiek/hooks/ingestpad kunt gebruiken.- Sjablonen zoals
{{messages[0].subject}}uit de payload gelezen. transformkan wijzen naar een JS/TS module die een hook actie teruggeeft.deliver: truestuurt het laatste antwoord naar een kanaal;channelstandaard naarlast(val terug naar WhatsApp).- Als er geen eerdere verzendroute is, zet
channel+toexpliciet (vereist voor Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teams). modeloverschrijft de LLM voor deze hook run (provider/modelof alias; moet toegestaan zijn alsagents.defaults.modelsis ingesteld).
openclaw webhooks gmail setup / run):
hooks.gmail.modelgeeft een model aan om te gebruiken voor Gmail hook verwerking (standaard sessie primaire).- Accepteert
provider/modelrefs of aliassen vanagents.defaults.models. - Terugvallen naar
agents.defaults.model.fallbacks, danagents.defaults.model.primary, op auth/rate-limit/timeouts. - Als
agents.defaults.modelsis ingesteld, voeg het hooks model toe aan de allowlist. - waarschuwt u bij het opstarten als het geconfigureerde model niet in de model catalogus of allowlist staat.
hooks.gmail.thinkingbepaalt het standaard denkniveau voor Gmail haks en wordt overschreven door per-hookdenken.
- Als
hooks.enabled=trueenhooks.gmail.accountis ingesteld, start de Gatewaygog gmail watch servebij het opstarten en automatisch vernieuwen van het horloge. - Stel
OPENCLAW_SKIP_GMAIL_WATCHER=1in om de auto-start uit te schakelen (voor handmatige uitvoering). - Vermijd het gebruiken van een aparte
gog gmail watch servenaast de Gateway; het zal mislukt metlisten tcp 127.0.0.1:8788: bind: adres al in gebruik.
tailscale.mode is ingeschakeld, standaard serve.path naar / dus
Tailscale kan proxy /gmail-pubsub correct zijn (het verwijdert het set-path voorvoegsel).
Als u het backend nodig heeft om het prefixeerde pad te ontvangen, stel
hooks.gmail.tailscale.target in op een volledige URL (en voeg serve.path).
canvasHost (LAN/tailnet Canvas bestand server + live herladen)
De Gateway dient een map van HTML/CSS/JS over HTTP zodat iOS/Android nodes simpelweg canvas.navigate kunnen gebruiken.
Standaard root: ~/. penclaw/workspace/canvasstandaardpoort:
18793 (gekozen om de openclaw browser CDP poort 18792)De server luistert naar de gateway bind host (LAN of Tailnet) zodat nodes het kunnen bereiken. De server:
- dient bestanden onder
canvasHost.root - injecteert een kleine live-reload client in geserveerde HTML
- kijkt naar de map en zendt herlaadt een WebSocket eindpunt op
/__openclaw__/ws - maak automatisch een starter
index.htmlaan als de map leeg is (zodat je direct iets ziet) - ook dient A2UI bij
/__openclaw__/a2ui/en wordt geadverteerd voor nodes alscanvasHostUrl(altijd gebruikt door nodes voor Canvas/A2UI)
EMFILE raakt:
- config:
canvasHost: { liveReload: false }
canvasHost.* vereisen een gateway herstart (configuratie herladen wordt herstart).
Uitschakelen met:
- config:
canvasHost: { enabled: false } - env:
OPENCLAW_SKIP_CANVAS_HOST=1
bridge (oudere TCP bridge, verwijderd)
Huidige builds bevatten niet langer de TCP bridge luisteraar; bridge.* config keys worden genegeerd.
Nodes verbinden via de Gateway WebSocket. Dit gedeelte wordt bewaard voor historische referenties.
Legacy gedrag:
- De Gateway kan een eenvoudige TCP-brug voor nodes (iOS/Android) weergeven, meestal op poort
18790.
- enabled:
true - poort:
18790 - bind:
lan(bindt aan0.0.0)
lan:0.0.0(bereikbaar op elke interface, inclusief LAN/WiīFi en Tailscale)tailnet: bind alleen aan het Tailscale IP van de machine (aanbevolen voor Vienna Universal London)loopback:127.0.0.1(alleen lokaal)auto: prefereer een tailnet IP indien aanwezig, anderslan
bridge.tls.enabled: schakel TLS in voor bridge verbindingen (TLS-alleen wanneer ingeschakeld).bridge.tls.autoGenerate: genereer een zelf ondertekend cert wanneer er geen cert/key aanwezig is (standaard: true).bridge.tls.certPath/bridge.tls.keyPath: PEM paden voor de bridge certificaat + private key.bridge.tls.caPath: optionele PEM CA bundel (aangepaste wortels of toekomstige mTLS).
bridgeTls=1 en bridgeTlsSha256 bij het ontdekken van TXT
records zodat nodes het certificaat kunnen pinnen. Handmatige verbindingen gebruiken trust-on-first-use als er nog geen
vingerafdruk is opgeslagen.
Auto-gegenereerde certs vereisen openssl op PATH; als de generatie faalt, zal de bridge niet starten.
discovery.mdns (Bonjour / mDNS broadcast modus)
Controleert LAN mDNS discovery uitzendingen (_openclaw-gw._tcp).
minimal(standaard): omitcliPath+sshPortvan TXT recordsfull: inclusiefcliPath+sshPortin TXT recordsoff: schakel mDNS uitzendingen volledig uit- Hostname: standaard aan
openclaw(adverteertopenclaw.local). Overschrijven metOPENCLAW_MDNS_HOSTNAME.
discovery.wideArea (Wide-Area Bonjour / unicast DNSformat@@2- SD)
Wanneer ingeschakeld, schrijft de Gateway een unicast DNS-SD zone voor _openclaw-gw._tcp onder ~/.openclaw/dns/ in het gebruik van het geconfigureerde discovery domein (voorbeeld: openclaw.internal.).
Koppel dit met het volgende om iOS/Android te laten ontdekken op netwerken (Vienna Vienns. Londen).
- een DNS-server op de gateway host die uw gekozen domein bedient (CoreDNS is aanbevolen)
- Tailscale split DNS zodat klanten dat domein oplossen via de gateway DNS server
Media model sjabloonvariabelen
Template placeholders zijn uitgebreid intools.media.*.models[].args en tools.media.models[].args (en eventuele toekomstige getemplated argumentvelden).
| Variable | Description |
| ------------------ | ------------------------------------------------------------------------------- | -------- | ------- | ---------- | ----- | ------ | -------- | ------- | ------- | --- |
| {{Body}} | Full inbound message body |
| {{RawBody}} | Raw inbound message body (no history/sender wrappers; best for command parsing) |
| {{BodyStripped}} | Body with group mentions stripped (best default for agents) |
| {{From}} | Sender identifier (E.164 for WhatsApp; may differ per channel) |
| {{To}} | Destination identifier |
| {{MessageSid}} | Channel message id (when available) |
| {{SessionId}} | Current session UUID |
| {{IsNewSession}} | "true" when a new session was created |
| {{MediaUrl}} | Inbound media pseudo-URL (if present) |
| {{MediaPath}} | Local media path (if downloaded) |
| {{MediaType}} | Media type (image/audio/document/…) |
| {{Transcript}} | Audio transcript (when enabled) |
| {{Prompt}} | Resolved media prompt for CLI entries |
| {{MaxChars}} | Resolved max output chars for CLI entries |
| {{ChatType}} | "direct" or "group" |
| {{GroupSubject}} | Group subject (best effort) |
| {{GroupMembers}} | Group members preview (best effort) |
| {{SenderName}} | Sender display name (best effort) |
| {{SenderE164}} | Sender phone number (best effort) |
| {{Provider}} | Provider hint (whatsapp | telegram | discord | googlechat | slack | signal | imessage | msteams | webchat | …) |
Cron (Gateway planner)
Cron is een Gateway-eigendom planner voor wakeps en geplande taken. Zie Cron jobs voor het functieoverzicht en CLI-voorbeelden.Next: Agent Runtime 🦞