Configuration 🔧
OpenClaw reads an optional JSON5 config from~/.openclaw/openclaw.json (comments + trailing commas allowed).
Om filen saknas, använder OpenClaw säkra standardinställningar (inbäddad Pi agent + per-sender sessioner + arbetsyta ~/.openclaw/workspace). Du behöver oftast bara en konfiguration till:
- restrict who can trigger the bot (
channels.whatsapp.allowFrom,channels.telegram.allowFrom, etc.) - control group allowlists + mention behavior (
channels.whatsapp.groups,channels.telegram.groups,channels.discord.guilds,agents.list[].groupChat) - customize message prefixes (
messages) - set the agent’s workspace (
agents.defaults.workspaceoragents.list[].workspace) - tune the embedded agent defaults (
agents.defaults) and session behavior (session) - set per-agent identity (
agents.list[].identity)
New to configuration? Check out the Configuration Examples guide for complete examples with detailed explanations!
Strict config validation
OpenClaw accepterar endast konfigurationer som helt matchar schemat. Okända nycklar, felaktigt formatterade typer eller ogiltiga värden orsakar porten till vägra att starta för säkerhet. When validation fails:- The Gateway does not boot.
- Only diagnostic commands are allowed (for example:
openclaw doctor,openclaw logs,openclaw health,openclaw status,openclaw service,openclaw help). - Run
openclaw doctorto see the exact issues. - Run
openclaw doctor --fix(or--yes) to apply migrations/repairs.
--fix/--yes.
Schema + UI hints
Gateway exponerar en JSON Schema representation av konfigurationen viaconfig.schema för UI editorer.
Control UI renderar ett formulär från detta schema, med en Raw JSON-editor som en escape-kläckning.
Channel plugins and extensions can register schema + UI hints for their config, so channel settings
stay schema-driven across apps without hard-coded forms.
Hints (labels, grouping, sensitive fields) ship alongside the schema so clients can render
better forms without hard-coding config knowledge.
Apply + restart (RPC)
Användconfig.apply för att validera + skriv hela konfigurationen och starta om Gateway i ett steg.
Den skriver en omstartsvakt och pingar den sista aktiva sessionen efter Gateway kommer tillbaka.
Varning: config.apply ersätter hela config. Om du bara vill ändra några nycklar använder
config.patch eller openclaw config set. Behåll en säkerhetskopia av ~/.openclaw/openclaw.json.
Params:
raw(string) — JSON5 payload for the entire configbaseHash(optional) — config hash fromconfig.get(required when a config already exists)sessionKey(optional) — last active session key for the wake-up pingnote(optional) — note to include in the restart sentinelrestartDelayMs(optional) — delay before restart (default 2000)
gateway call):
Partial updates (RPC)
Användconfig.patch för att sammanfoga en partiell uppdatering till den befintliga konfigurationen utan att klumpa
relaterade nycklar. Det gäller JSON sammanfoga patch semantik:
- objects merge recursively
nulldeletes a key- arrays replace
Like
config.apply, it validates, writes the config, stores a restart sentinel, and schedules the Gateway restart (with an optional wake whensessionKeyis provided).
raw(string) — JSON5 payload containing just the keys to changebaseHash(required) — config hash fromconfig.getsessionKey(optional) — last active session key for the wake-up pingnote(optional) — note to include in the restart sentinelrestartDelayMs(optional) — delay before restart (default 2000)
Minimal config (recommended starting point)
Self-chat mode (recommended for group control)
To prevent the bot from responding to WhatsApp @-mentions in groups (only respond to specific text triggers):Config Includes ($include)
Dela upp din konfiguration i flera filer med hjälp av direktivet $include. Detta är användbart för:
- Organizing large configs (e.g., per-client agent definitions)
- Sharing common settings across environments
- Keeping sensitive configs separate
Basic usage
Merge behavior
- Single file: Replaces the object containing
$include - Array of files: Deep-merges files in order (later files override earlier ones)
- With sibling keys: Sibling keys are merged after includes (override included values)
- Sibling keys + arrays/primitives: Not supported (included content must be an object)
Nested includes
Included files can themselves contain$include directives (up to 10 levels deep):
Path resolution
- Relative paths: Resolved relative to the including file
- Absolute paths: Used as-is
- Parent directories:
../references work as expected
Error handling
- Missing file: Clear error with resolved path
- Parse error: Shows which included file failed
- Circular includes: Detected and reported with include chain
Example: Multi-client legal setup
Common options
Env vars + .env
OpenClaw reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
Additionally, it loads:
.envfrom the current working directory (if present)- a global fallback
.envfrom~/.openclaw/.env(aka$OPENCLAW_STATE_DIR/.env)
.env file overrides existing env vars.
Du kan också ange inline env vars i konfiguration. Dessa tillämpas endast om
processen env saknar nyckeln (samma icke-dominerande regel):
env.shellEnv (optional)
Opt-in bekvämlighet: om aktiverat och ingen av de förväntade nycklarna är inställd ännu, OpenClaw kör ditt inloggningsskal och importerar endast de saknade förväntade nycklarna (aldrig åsidosätter).
Detta skapar effektivt din skalprofil.
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000
Env var substitution in config
Du kan referera miljövariabler direkt i alla konfigurationssträngar med hjälp av${VAR_NAME} syntax. Variabler ersätts vid konfigurationens laddningstid, innan validering.
- Only uppercase env var names are matched:
[A-Z_][A-Z0-9_]* - Missing or empty env vars throw an error at config load
- Escape with
$${VAR}to output a literal${VAR} - Works with
$include(included files also get substitution)
Auth storage (OAuth + API keys)
OpenClaw stores per-agent auth profiles (OAuth + API keys) in:<agentDir>/auth-profiles.json(default:~/.openclaw/agents/<agentId>/agent/auth-profiles.json)
~/.openclaw/credentials/oauth.json(or$OPENCLAW_STATE_DIR/credentials/oauth.json)
<agentDir>/auth.json(managed automatically; don’t edit manually)
~/.openclaw/agent/*(migrated byopenclaw doctorinto~/.openclaw/agents/<defaultAgentId>/agent/*)
- OAuth dir (legacy import only):
OPENCLAW_OAUTH_DIR - Agent dir (default agent root override):
OPENCLAW_AGENT_DIR(preferred),PI_CODING_AGENT_DIR(legacy)
oauth.json entries into auth-profiles.json.
auth
Valfri metadata för auth profiler. Detta gör inte butikshemligheter; det kartor
profil ID till en leverantör + läge (och valfri e-post) och definierar leverantörens
rotationsorder som används för failover.
agents.list[].identity
Valfri per-agent identitet används för standardinställningar och UX. Detta är skrivet av macOS onboarding assistent.
If set, OpenClaw derives defaults (only when you haven’t set them explicitly):
messages.ackReactionfrom the active agent’sidentity.emoji(falls back to 👀)agents.list[].groupChat.mentionPatternsfrom the agent’sidentity.name/identity.emoji(so “@Samantha” works in groups across Telegram/Slack/Discord/Google Chat/iMessage/WhatsApp)identity.avataraccepterar en arbetsytarelativ bildsökväg eller en fjärr-URL/data-URL. Lokala filer måste leva inuti agentens arbetsyta.
identity.avatar accepts:
- Workspace-relative path (must stay within the agent workspace)
http(s)URLdata:URI
wizard
Metadata written by CLI wizards (onboard, configure, doctor).
logging
- Default log file:
/tmp/openclaw/openclaw-YYYY-MM-DD.log - If you want a stable path, set
logging.fileto/tmp/openclaw/openclaw.log. - Console output can be tuned separately via:
logging.consoleLevel(defaults toinfo, bumps todebugwhen--verbose)logging.consoleStyle(pretty|compact|json)
- Tool summaries can be redacted to avoid leaking secrets:
logging.redactSensitive(off|tools, default:tools)logging.redactPatterns(array of regex strings; overrides defaults)
channels.whatsapp.dmPolicy
Controls how WhatsApp direct chats (DMs) are handled:
"pairing"(default): unknown senders get a pairing code; owner must approve"allowlist": only allow senders inchannels.whatsapp.allowFrom(or paired allow store)"open": allow all inbound DMs (requireschannels.whatsapp.allowFromto include"*")"disabled": ignore all inbound DMs
openclaw pairing list whatsappopenclaw pairing approve whatsapp <code>
channels.whatsapp.allowFrom
Tillåten lista med E.164 telefonnummer som kan utlösa autosvar på WhatsApp (DMs endast).
Om tomt och channels.whatsapp.dmPolicy="parkoppling", kommer okända avsändare att få en parkopplingskod.
För grupper, använd channels.whatsapp.groupPolicy + channels.whatsapp.groupAllowFrom.
channels.whatsapp.sendReadReceipts
Kontrollerar om meddelanden från WhatsApp är markerade som lästa (blå ticks). Standard: true.
Self-chat mode always skips read receipts, even when enabled.
Ersättning per konto: channels.whatsapp.accounts.<id>.sendReadkvitton.
channels.whatsapp.accounts (multi-account)
Run multiple WhatsApp accounts in one gateway:
- Outbound commands default to account
defaultif present; otherwise the first configured account id (sorted). - The legacy single-account Baileys auth dir is migrated by
openclaw doctorintowhatsapp/default.
channels.telegram.accounts / channels.discord.accounts / channels.googlechat.accounts / channels.slack.accounts / channels.mattermost.accounts / channels.signal.accounts / channels.imessage.accounts
Run multiple accounts per channel (each account has its own accountId and optional name):
defaultis used whenaccountIdis omitted (CLI + routing).- Env tokens only apply to the default account.
- Inställningar för baskanaler (grupppolicy, omnämnande av gating, etc.) gäller för alla konton om de inte åsidosätts per konto.
- Use
bindings[].match.accountIdto route each account to a different agents.defaults.
Group chat mention gating (agents.list[].groupChat + messages.groupChat)
Standard för gruppmeddelanden till kräver omnämnande (antingen metadata omnämnande eller regex mönster). Gäller WhatsApp, Telegram, Discord, Google Chat, och iMessage grupp chattar.
Mention types:
- Metadata omnämnande: Ursprunglig plattform @-omnämnanden (t.ex., WhatsApp tap-to-mention). Ignorerade i WhatsApp själv-chatt läge (se
channels.whatsapp.allowFrom). - Textmönster: Regex mönster definierade i
agents.list[].groupChat.mentionMönster. Kontrollera alltid oavsett själv chatt läge. - Mention gating is enforced only when mention detection is possible (native mentions or at least one
mentionPattern).
messages.groupChat.historyLimit sätter den globala standarden för gruppens historikkontext. Kanaler kan åsidosätta med kanaler.<channel>.historyLimit (eller kanaler.<channel>.accounts.*.historyLimit för multi-account). Sätt 0 till att inaktivera historikinslagning.
DM history limits
DM-konversationer använder sessionsbaserad historik som hanteras av agenten. Du kan begränsa antalet användarvarv som behålls per DM-session:- Per-DM åsidosätter:
kanaler.<provider>.dms[userId].historyLimit - Leverantörens standard:
kanaler.<provider>.dmHistoryLimit - No limit (all history retained)
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Per-agent override (takes precedence when set, even []):
channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups, channels.discord.guilds). När *.groups är satt, fungerar det också som en grupptillåten list; inkludera "*" för att tillåta alla grupper.
To respond only to specific text triggers (ignoring native @-mentions):
Group policy (per channel)
Usechannels.*.groupPolicy to control whether group/room messages are accepted at all:
"open": groups bypass allowlists; mention-gating still applies."disabled": block all group/room messages."allowlist": only allow groups/rooms that match the configured allowlist.channels.defaults.groupPolicysets the default when a provider’sgroupPolicyis unset.- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams use
groupAllowFrom(fallback: explicitallowFrom). - Discord/Slack use channel allowlists (
channels.discord.guilds.*.channels,channels.slack.channels). - Group DMs (Discord/Slack) are still controlled by
dm.groupEnabled+dm.groupChannels. - Default is
groupPolicy: "allowlist"(unless overridden bychannels.defaults.groupPolicy); if no allowlist is configured, group messages are blocked.
Multi-agent routing (agents.list + bindings)
Kör flera isolerade agenter (separat arbetsyta, agentDir, sessioner) inuti en Gateway.
Inkommande meddelanden dirigeras till en agent via bindningar.
agents.list[]: per-agent overrides.id: stable agent id (required).default: valfritt; när flera är inställda, loggas de första vinsterna och en varning. Om ingen är satt, är den första posten i listan standardagenten.name: display name for the agent.workspace: default~/.openclaw/workspace-<agentId>(formain, falls back toagents.defaults.workspace).agentDir: default~/.openclaw/agents/<agentId>/agent.model: per-agent default model, overridesagents.defaults.modelfor that agent.- string form:
"provider/model", overrides onlyagents.defaults.model.primary - object form:
{ primary, fallbacks }(fallbacks overrideagents.defaults.model.fallbacks;[]disables global fallbacks for that agent)
- string form:
identity: per-agent name/theme/emoji (used for mention patterns + ack reactions).groupChat: per-agent mention-gating (mentionPatterns).sandbox: per-agent sandbox config (overridesagents.defaults.sandbox).mode:"off"|"non-main"|"all"workspaceAccess:"none"|"ro"|"rw"scope:"session"|"agent"|"shared"workspaceRoot: custom sandbox workspace rootdocker: per-agent docker overrides (e.g.image,network,env,setupCommand, limits; ignored whenscope: "shared")browser: per-agent sandboxed browser overrides (ignored whenscope: "shared")prune: per-agent sandbox pruning overrides (ignored whenscope: "shared")
subagents: per-agent sub-agent defaults.allowAgents: allowlist of agent ids forsessions_spawnfrom this agent (["*"]= allow any; default: only same agent)
tools: per-agent tool restrictions (applied before sandbox tool policy).profile: base tool profile (applied before allow/deny)allow: array of allowed tool namesdeny: array of denied tool names (deny wins)
agents.defaults: shared agent defaults (model, workspace, sandbox, etc.).bindings[]: routes inbound messages to anagentId.match.channel(required)match.accountId(optional;*= any account; omitted = default account)match.peer(optional;{ kind: direct|group|channel, id })match.guildId/match.teamId(optional; channel-specific)
match.peermatch.guildIdmatch.teamIdmatch.accountId(exact, no peer/guild/team)match.accountId: "*"(channel-wide, no peer/guild/team)- default agent (
agents.list[].default, else first list entry, else"main")
bindings wins.
Per-agent access profiles (multi-agent)
Varje agent kan bära sin egen sandlåda + verktygspolicy. Använd detta för att blanda tillgång till nivåer i en gateway:- Full access (personal agent)
- Read-only tools + workspace
- No filesystem access (messaging/session tools only)
tools.agentToAgent (optional)
Agent-to-agent messaging is opt-in:
messages.queue
Controls how inbound messages behave when an agent run is already active.
messages.inbound
Debounce snabba inkommande meddelanden från samma avsändare så att flera back-to-back
meddelanden blir en enda agent tur. Debouncing är scoped per kanal + konversation
och använder det senaste meddelandet för svarstråd/IDs.
- Debounce batches text-only messages; media/attachments flush immediately.
- Control commands (e.g.
/queue,/new) bypass debouncing so they stay standalone.
commands (chat command handling)
Controls how chat commands are enabled across connectors.
- Text commands must be sent as a standalone message and use the leading
/(no plain-text aliases). commands.text: falsedisables parsing chat messages for commands.commands.native: "auto"(default) turns on native commands for Discord/Telegram and leaves Slack off; unsupported channels stay text-only.- Ange
commands.native: true<unk> falseför att tvinga alla eller åsidosätta per kanal medchannels.discord.commands.native,channels.telegram.commands.native,channels.slack.commands.native(bool eller"auto").falserensar tidigare registrerade kommandon på Discord/Telegram vid uppstart; Slack kommandon hanteras i Slack appen. channels.telegram.customCommandslägger till extra Telegram bot menyposter. Namnen normaliseras; konflikter med infödda kommandon ignoreras.commands.bash: trueaktiverar! <cmd>för att köra värdskalskommandon (/bash <cmd>fungerar också som ett alias). Krävertools.elevated.enabledoch tillåter avsändaren itools.elevated.allowFrom.<channel>.commands.bashForegroundMskontrollerar hur länge bash väntar innan bakgrunden. Medan en bash jobb är igång, ny! <cmd>-förfrågningar avvisas (en åt gången).commands.config: trueenables/config(reads/writesopenclaw.json).kanaler.<provider>.configWritesportar config mutationer initierade av den kanalen (standard: true). Detta gäller/config set<unk> unsetplus leverantörsspecifika auto-migreringar (Telegram supergrupps-ID ändringar, Slack kanal-ID ändringar).commands.debug: trueenables/debug(runtime-only overrides).commands.restart: trueenables/restartand the gateway tool restart action.commands.useAccessGroups: falseallows commands to bypass access-group allowlists/policies.- Slash kommandon och direktiv hedras endast för auktoriserade avsändare. Auktorisering härrör från
kanal allowlists/parkoppling plus
commands.useAccessGroups.
web (WhatsApp web channel runtime)
WhatsApp körs genom gateways webbkanal (Baileys Web). Den startar automatiskt när en länkad session finns.
Set web.enabled: false för att hålla den avstängd som standard.
channels.telegram (bot transport)
OpenClaw startar Telegram endast när en channels.telegram-konfigurationssektion finns. Bottoken är löst från channels.telegram.botToken (eller channels.telegram.tokenFile), med TELEGRAM_BOT_TOKEN som en reserv för standardkontot.
Ange channels.telegram.enabled: false för att inaktivera automatisk start.
Stöd för flera konton lever under channels.telegram.accounts (se avsnittet för flera konton ovan). Env tokens gäller endast för standardkontot.
Ange channels.telegram.configWrites: false för att blockera Telegram-initierad config skriver (inklusive supergrupps-ID migrationer och /config set<unk> unset).
- Uses Telegram
sendMessageDraft(draft bubble, not a real message). - Requires private chat topics (message_thread_id in DMs; bot has topics enabled).
/ resonemang strömströmmar resonemang i utkastet, skickar sedan det slutliga svaret. Standardinställningar och beteende för försök dokumenteras i Retry policy.
channels.discord (bot transport)
Konfigurera Discord-roboten genom att ställa in bot token och valfri gating:
Multi-account support lever under channels.discord.accounts (se avsnittet med flera konton ovan). Env tokens gäller endast för standardkontot.
channels.discord-konfigurationssektion finns. Token är löst från channels.discord.token, med DISCORD_BOT_TOKEN som en reserv för standardkontot (om inte channels.discord.enabled är false). Använd user:<id> (DM) eller channel:<id> (guild channel) när du anger leveransmål för cron/CLI-kommandon; nakna numeriska ID är tvetydiga och avvisade.
Guild-sniglar är gemener med mellanslag som ersätts av -; kanalnycklar använder det sluggade kanalnamnet (ingen ledande #). Föredrar guild ids som nycklar för att undvika byta namn på tvetydighet.
Bot-författade meddelanden ignoreras som standard. Aktivera med channels.discord.allowBots (egna meddelanden filtreras fortfarande för att förhindra självsvarsloopar).
Reaction notification modes:
off: no reaction events.own: reactions on the bot’s own messages (default).all: all reactions on all messages.allowlist: reaktioner frånguilds.<id>.userspå alla meddelanden (tom lista inaktiveras). Utgående text är chunked avchannels.discord.textChunkLimit(standard 2000). Angechannels.discord.chunkMode="newline"för att dela på tomma linjer (styckegränser) före längdbitar. Discord-klienter kan klippa väldigt höga meddelanden, såchannels.discord.maxLinesPerMessage(standard 17) delar långa multi-line svar även när under 2000 tecken. Standardinställningar och beteende för försök dokumenteras i Retry policy.
channels.googlechat (Chat API webhook)
Google Chat kör över HTTP webhooks med app-level auth (servicekonto).
Multi-account support lives under channels.googlechat.accounts (see the multi-account section above). Env vars gäller endast för standardkontot.
- Service account JSON can be inline (
serviceAccount) or file-based (serviceAccountFile). - Env fallbacks for the default account:
GOOGLE_CHAT_SERVICE_ACCOUNTorGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. audienceType+audiencemust match the Chat app’s webhook auth config.- Use
spaces/<spaceId>orusers/<userId|email>when setting delivery targets.
channels.slack (socket mode)
Slack runs in Socket Mode and requires both a bot token and app token:
channels.slack.accounts (se avsnittet för flera konton ovan). Env tokens gäller endast för standardkontot.
OpenClaw startar Slack när leverantören är aktiverad och båda tokens är inställda (via config eller SLACK_BOT_TOKEN + SLACK_APP_TOKEN). Använd user:<id> (DM) eller channel:<id> när du anger leveransmål för cron/CLI-kommandon.
Ange channels.slack.configWrites: false för att blockera Slack-initierade config writes (inklusive kanal ID migrationer och /config set<unk> unset).
Bot-författade meddelanden ignoreras som standard. Aktivera med channels.slack.allowBots eller channels.slack.channels.<id>.allowBots.
Reaction notification modes:
off: no reaction events.own: reactions on the bot’s own messages (default).all: all reactions on all messages.allowlist: reactions fromchannels.slack.reactionAllowliston all messages (empty list disables).
channels.slack.thread.historyScopecontrols whether thread history is per-thread (thread, default) or shared across the channel (channel).channels.slack.thread.inheritParentcontrols whether new thread sessions inherit the parent channel transcript (default: false).
slack tool actions):
| Action group | Default | Notes |
|---|---|---|
| reactions | enabled | React + list reactions |
| messages | enabled | Read/send/edit/delete |
| pins | enabled | Pin/unpin/list |
| memberInfo | enabled | Member info |
| emojiList | enabled | Custom emoji list |
channels.mattermost (bot token)
Mattermost levereras som ett plugin och ingår inte i kärninstallationen.
Installera det först: openclaw plugins install @openclaw/mattermost (eller ./extensions/mattermost från en git checkout).
Mattermost requires a bot token plus the base URL for your server:
channels.mattermost.botToken + channels.mattermost.baseUrl eller MATTERMOST_BOT_TOKEN + MATTERMOST_URL för standardkontot (om inte channels.mattermost.enabled är false).
Chat modes:
oncall(default): respond to channel messages only when @mentioned.onmessage: respond to every channel message.onchar: respond when a message starts with a trigger prefix (channels.mattermost.oncharPrefixes, default[">", "!"]).
- Default DMs:
channels.mattermost.dmPolicy="pairing"(unknown senders get a pairing code). - Public DMs:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. - Grupper:
channels.mattermost.groupPolicy="allowlist"som standard (nämna-gated). Användchannels.mattermost.groupAllowFromför att begränsa avsändarna.
channels.mattermost.accounts (se avsnittet för flera konton ovan). Env vars gäller endast för standardkontot.
Använd channel:<id> eller user:<id> (eller @username) när du anger leveransmål; nakna ID behandlas som kanal-ID.
channels.signal (signal-cli)
Signal reactions can emit system events (shared reaction tooling):
off: no reaction events.own: reactions on the bot’s own messages (default).all: all reactions on all messages.allowlist: reactions fromchannels.signal.reactionAllowliston all messages (empty list disables).
channels.imessage (imsg CLI)
OpenClaw skapar imsg rpc (JSON-RPC över stdio). Ingen daemon eller port krävs.
channels.imessage.accounts (see the multi-account section above).
Notes:
- Requires Full Disk Access to the Messages DB.
- The first send will prompt for Messages automation permission.
- Föredrar
chat_id:<id>-mål. Användimsg chats --limit 20för att lista chattar. channels.imessage.cliPathcan point to a wrapper script (e.g.sshto another Mac that runsimsg rpc); use SSH keys to avoid password prompts.- For remote SSH wrappers, set
channels.imessage.remoteHostto fetch attachments via SCP whenincludeAttachmentsis enabled.
agents.defaults.workspace
Sets the single global workspace directory used by the agent for file operations.
Default: ~/.openclaw/workspace.
agents.defaults.sandbox is enabled, non-main sessions can override this with their
own per-scope workspaces under agents.defaults.sandbox.workspaceRoot.
agents.defaults.repoRoot
Valfri utvecklingskatalogsrot som visas i systemprompten Runtime line. Om unset, försöker OpenClaw
upptäcka en .git-katalog genom att gå uppåt från arbetsytan (och nuvarande
arbetskatalog). Vägen måste finnas för att användas.
agents.defaults.skipBootstrap
Disables automatic creation of the workspace bootstrap files (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, and BOOTSTRAP.md).
Use this for pre-seeded deployments where your workspace files come from a repo.
agents.defaults.bootstrapMaxChars
Max antal tecken i varje arbetsyta bootstrap-fil injiceras i systemprompten
innan trunkering. Standard: 20000.
When a file exceeds this limit, OpenClaw logs a warning and injects a truncated
head/tail with a marker.
agents.defaults.userTimezone
Anger användarens tidszon för systempromptkontext (inte för tidsstämplar i
meddelandekuvert). Om unset, använder OpenClaw värdtidszonen vid runtime.
agents.defaults.timeFormat
Kontrollerar tidsformatet som visas i systempromptens sektion för aktuellt datum och tid.
Standard: auto (OS inställningar).
messages
Styr inbound/utgående prefix och valfria ackreaktioner.
Se Messages för köer, sessioner och strömmande sammanhang.
responsePrefix is applied to all outbound replies (tool summaries, block
streaming, final replies) across channels unless already present.
Overrides can be configured per channel and per account:
kanaler.<channel>.responsePrefixkanaler.<channel>.accounts.<id>.responsePrefix
kanaler.<channel>.accounts.<id>.responsePrefixkanaler.<channel>.responsePrefixmessages.responsePrefix
undefinedfalls through to the next level.""explicitly disables the prefix and stops the cascade."auto"derives[{identity.name}]for the routed agent.
messages.responsePrefix är avsatt, tillämpas inget prefix som standard. WhatsApp självchatt
svar är undantaget: de standard till [{identity.name}] när satt, annars
[openclaw], så same-phone konversationer förblir läsbara.
Set it to "auto" to derive [{identity.name}] for the routed agent (when set).
Template variables
TheresponsePrefix string can include template variables that resolve dynamically:
| Variable | Description | Example |
|---|---|---|
{model} | Short model name | claude-opus-4-6, gpt-4o |
{modelFull} | Full model identifier | anthropic/claude-opus-4-6 |
{provider} | Provider name | anthropic, openai |
{thinkingLevel} | Current thinking level | high, low, off |
{identity.name} | Agent identity name | (same as "auto" mode) |
{MODEL} = {model}). {think} är ett alias för {thinkingLevel}.
Olösta variabler förblir som bokstavlig text.
[claude-opus-4-6 | think:high] Here's my response...
WhatsApp inkommande prefix är konfigurerad via channels.whatsapp.messagePrefix (föråldrad:
messages.messagePrefix). Standard förblir oförändrad: "[openclaw]" när
channels.whatsapp.allowFrom är tom, annars "" (inget prefix). När du använder
"[openclaw]", kommer OpenClaw istället använda [{identity.name}] när den dirigerade
agenten har identity.name satt.
ackReaction skickar en emoji-reaktion för att bekräfta inkommande meddelanden
på kanaler som stödjer reaktioner (brist / Discord/Telegram/Google Chat). Standardvärdet för
aktiva agentens identity.emoji när den är satt, annars "👀". Ställ in den till "" för att inaktivera.
ackReactionScope controls when reactions fire:
group-mentions(default): only when a group/room requires mentions and the bot was mentionedgroup-all: all group/room messagesdirect: direct messages onlyall: all messages
removeAckAfterReply tar bort botens ack reaktion efter att ett svar skickas
(Slack/Discord/Telegram/Google Chat endast). Standard: false.
messages.tts
Aktivera text-till-tal för utgående svar. När på, OpenClaw genererar ljud
med hjälp av ElevenLabs eller OpenAI och fäster den till svar. Telegram använder Opus
röstanteckningar; andra kanaler skicka MP3-ljud.
messages.tts.autocontrols auto‑TTS (off,always,inbound,tagged)./tts off|always|inbound|taggedsets the per‑session auto mode (overrides config).messages.tts.enabledis legacy; doctor migrates it tomessages.tts.auto.prefsPathstores local overrides (provider/limit/summarize).maxTextLengthis a hard cap for TTS input; summaries are truncated to fit.summaryModeloverridesagents.defaults.model.primaryfor auto-summary.- Accepts
provider/modelor an alias fromagents.defaults.models.
- Accepts
modelOverridesenables model-driven overrides like[[tts:...]]tags (on by default)./tts limitand/tts summarycontrol per-user summarization settings.apiKeyvalues fall back toELEVENLABS_API_KEY/XI_API_KEYandOPENAI_API_KEY.elevenlabs.baseUrloverrides the ElevenLabs API base URL.elevenlabs.voiceSettingssupportsstability/similarityBoost/style(0..1),useSpeakerBoost, andspeed(0.5..2.0).
talk
Standardvärden för Talk-läge (macOS/iOS/Android). Röst-ID faller tillbaka till ELEVENLABS_VOICE_ID eller SAG_VOICE_ID vid upplösning.
apiKey faller tillbaka till ELEVENLABS_API_KEY (eller gatewayens skalprofil) vid upplösning.
voiceAliases låter Talk använda vänliga namn (t.ex. "voice":"Clawd").
agents.defaults
Styr den inbäddade agenten runtime (modell/thinking/verbose/timeouts).
agents.defaults.models definierar den konfigurerade modellkatalogen (och fungerar som tillåten lista för /model).
agents.defaults.model.primary sätter standardmodellen: agents.defaults.model.fallbacks är globala felrapporter.
agents.defaults.imageModel är valfritt och används endast om den primära modellen saknar bildinmatning.
Varje agents.defaults.models post kan innehålla:
alias(optional model shortcut, e.g./opus).params(optional provider-specific API params passed through to the model request).
params används också för strömning av körningar (inbäddad agent + komprimering). Tangenter som stöds idag: temperature, maxTokens. Dessa sammanfogas med calltime-alternativ; samtals-levererade värden vinner. temperature är en avancerad ratt-lämna unset om du inte vet modellens standardvärden och behöver en ändring.
Example:
- set
--thinking off, or - define
agents.defaults.models["zai/<model>"].params.thinkingyourself.
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) or configure models.providers.minimax.
agents.defaults.cliBackends (CLI fallback)
Valfria CLI-backends för text-only reservkörningar (inga verktygssamtal). Dessa är användbara som en
backup sökväg när API-leverantörer misslyckas. Bildgenomströmning stöds när du konfigurerar
en imageArg som accepterar filsökvägar.
Notes:
- CLI backends are text-first; tools are always disabled.
- Sessions are supported when
sessionArgis set; session ids are persisted per backend. - För
claude-cli, är standardinställningarna inkopplade. Åsidosätt kommandosökvägen om PATH är minimal (launchd/systemd).
agents.defaults.contextPruning (tool-result pruning)
agents.defaults.contextPruning beskär gamla verktygsresultat från minneskontexten precis innan en begäran skickas till LLM.
Det ändrar inte sessionshistoriken på disk (*.jsonl är fullständig).
This is intended to reduce token usage for chatty agents that accumulate large tool outputs over time.
High level:
- Never touches user/assistant messages.
- Protects the last
keepLastAssistantsassistant messages (no tool results after that point are pruned). - Protects the bootstrap prefix (nothing before the first user message is pruned).
- Modes:
adaptive: soft-trims överdimensionerade verktygsresultat (behåll huvud/svans) när det uppskattade kontextförhållandet korsarsoftTrimRatio. Sedan är det svårt att rensa de äldsta kvalificerade verktygsresultaten när det uppskattade kontextförhållandet korsarhardClearRatiooch det finns tillräckligt många verktygsresultat bulk (minPrunableToolChars).aggressive: always replaces eligible tool results before the cutoff with thehardClear.placeholder(no ratio checks).
- Soft-trim: endast för oversized verktygsresultat. Håller början + slut och skär
...i mitten.- Before:
toolResult("…very long output…") - After:
toolResult("HEAD…\n...\n…TAIL\n\n[Tool result trimmed: …]")
- Before:
- Hard-clear: replaces the entire tool result with the placeholder.
- Before:
toolResult("…very long output…") - After:
toolResult("[Old tool result content cleared]")
- Before:
- Tool results containing image blocks are skipped (never trimmed/cleared) right now.
- The estimated “context ratio” is based on characters (approximate), not exact tokens.
- If the session doesn’t contain at least
keepLastAssistantsassistant messages yet, pruning is skipped. - In
aggressivemode,hardClear.enabledis ignored (eligible tool results are always replaced withhardClear.placeholder).
mode is "adaptive" or "aggressive"):
keepLastAssistants:3softTrimRatio:0.3(adaptive only)hardClearRatio:0.5(adaptive only)minPrunableToolChars:50000(adaptive only)softTrim:{ maxChars: 4000, headChars: 1500, tailChars: 1500 }(adaptive only)hardClear:{ enabled: true, placeholder: "[Old tool result content cleared]" }
agents.defaults.compaction (reserve headroom + memory flush)
agents.defaults.compaction.mode väljer komprimeringsstrategin. Standardvärdet är default; sätt safeguard för att aktivera chunked summarization för mycket lång historik. Se /concepts/compaction.
agents.defaults.compaction.reserveTokensFloor upprätthåller ett minimum reserveTokens
värde för Pi compaction (standard: 20000). Ställ in den till 0 för att inaktivera golvet.
agents.defaults.compaction.memoryFlush kör en tyst agentic sväng innan
auto-packning, instruerar modellen att lagra hållbara minnen på disk (t.ex.
minne/YYYY-MM-DD.md). Det utlöses när sessionssymbolen uppskattning passerar en
mjuk tröskel under komprimeringsgränsen.
Legacy defaults:
memoryFlush.enabled:truememoryFlush.softThresholdTokens:4000memoryFlush.prompt/memoryFlush.systemPrompt: built-in defaults withNO_REPLY- Note: memory flush is skipped when the session workspace is read-only
(
agents.defaults.sandbox.workspaceAccess: "ro"or"none").
-
agents.defaults.blockStreamingDefault:"on"/"off"(default off). -
Kanalöverskridningar:
*.blockStreaming(och varianter per konto) för att tvinga blockering av strömning på/av. Icke-Telegram kanaler kräver en explicit*.blockStreaming: trueför att aktivera blocksvar. -
agents.defaults.blockStreamingBreak:"text_end"or"message_end"(default: text_end). -
agents.defaults.blockStreamingChunk: mjuk chunking för strömmade block. Standardvärdet är 800–1200 tecken, föredrar paragraf brytningar (\n\n), sedan newlines och meningar. Example: -
agents.defaults.blockStreamingCoalesce: slå samman strömmade block innan sändning. Standardvärdet är{ idleMs: 1000 }och ärverminCharsfrånblockStreamingChunkmedmaxCharskantad till kanalens textgräns. Signal/Slack/Discord/Google Chat standard tillminChars: 1500om inte åsidosätts. Kanal åsidosätter:channels.whatsapp.blockStreamingCoalesce,channels.telegram.blockStreamingCoalesce,channels.discord.blockStreamingCoalesce,channels.slack.blockStreamingCoalesce,channels.mattermost.blockStreamingCoalesce,channels.signal.blockStreamingCoalesce,channels.imessage.blockStreamingCoalesce,channels.msteams.blockingCoalesce,channels.googlechat.blockStreamingCoalesce(och per-konto varianters). -
agents.defaults.humanDelay: randomiserad paus mellan blocksvar efter den första. Modes:off(standard),natural(800–2500ms),custom(användminMs/maxMs). Per-agent åsidosätter:agents.list[].humanDelay. Example:See /concepts/streaming for behavior + chunking details.
agents.defaults.typingMode:"aldrig" <unk> "instant" <unk> "tänker" <unk> "meddelande". Standardvärdet ärinstantför direktchatt/omnämnanden ochmessageför icke nämnda gruppchattar.session.typingMode: per-session override for the mode.agents.defaults.typingIntervalSeconds: how often the typing signal is refreshed (default: 6s).session.typingIntervalSeconds: åsidosätt per session för uppdateringsintervallet. Se /concepts/typing-indicators för beteendedetaljer.
agents.defaults.model.primary bör anges som provider/model (t.ex. anthropic/claude-opus-4-6).
Alias kommer från agents.defaults.models.*.alias (t.ex. Opus).
Om du utelämnar leverantören antar OpenClaw för närvarande anthropic som ett tillfälligt
avskrivningsfall.
Z.AI modeller är tillgängliga som zai/<model> (t.ex. zai/glm-4.7) och kräver
ZAI_API_KEY (eller äldre Z_AI_API_KEY) i miljön.
agents.defaults.heartbeat configures periodic heartbeat runs:
every: varaktighet sträng (ms,s,m,h); standard enhetsminuter. Standard:30m. Sätt0mtill att inaktivera.model: optional override model for heartbeat runs (provider/model).includeReasoning: närtrue, kommer hjärtslag också leverera det separataResoning:meddelandet när det är tillgängligt (samma form som/resonemang på). Standard:false.session: valfri sessionsnyckel för att kontrollera vilken session hjärtslaget körs i. Standard:main.to: optional recipient override (channel-specific id, e.g. E.164 for WhatsApp, chat id for Telegram).target: valfri leveranskanal (last,whatsapp,telegram,discord,slack,msteams,signal,imessage,none). Standard:sista.prompt: valfri åsidosättning för hjärtslagets kropp (standard:Read HEARTBEAT.md om den existerar (arbetsytans sammanhang). Följ den strikt. Sluta inte eller upprepa gamla uppgifter från tidigare chattar. Om inget behöver uppmärksamhet, svara HEARTBEAT_OK.). Overrides skickas ordagrant, inkludera enRead HEARTBEAT.md-rad om du fortfarande vill att filen ska läsas.ackMaxChars: max chars allowed afterHEARTBEAT_OKbefore delivery (default: 300).
- Set
agents.list[].heartbeatto enable or override heartbeat settings for a specific agent. - If any agent entry defines
heartbeat, only those agents run heartbeats; defaults become the shared baseline for those agents.
every, håll HEARTBEAT.md liten och/eller välj en billigare model.
tools.exec configures background exec defaults:
backgroundMs: time before auto-background (ms, default 10000)timeoutSec: auto-kill after this runtime (seconds, default 1800)cleanupMs: how long to keep finished sessions in memory (ms, default 1800000)notifyOnExit: enqueue a system event + request heartbeat when backgrounded exec exits (default true)applyPatch.enabled: enable experimentalapply_patch(OpenAI/OpenAI Codex only; default false)applyPatch.allowModels: optional allowlist of model ids (e.g.gpt-5.2oropenai/gpt-5.2) Note:applyPatchis only undertools.exec.
tools.web configures web search + fetch tools:
tools.web.search.enabled(default: true when key is present)tools.web.search.apiKey(recommended: set viaopenclaw configure --section web, or useBRAVE_API_KEYenv var)tools.web.search.maxResults(1–10, default 5)tools.web.search.timeoutSeconds(default 30)tools.web.search.cacheTtlMinutes(default 15)tools.web.fetch.enabled(default true)tools.web.fetch.maxChars(default 50000)tools.web.fetch.maxCharsCap(default 50000; clamps maxChars from config/tool calls)tools.web.fetch.timeoutSeconds(default 30)tools.web.fetch.cacheTtlMinutes(default 15)tools.web.fetch.userAgent(optional override)tools.web.fetch.readability(default true; disable to use basic HTML cleanup only)tools.web.fetch.firecrawl.enabled(default true when an API key is set)tools.web.fetch.firecrawl.apiKey(optional; defaults toFIRECRAWL_API_KEY)tools.web.fetch.firecrawl.baseUrl(default https://api.firecrawl.dev)tools.web.fetch.firecrawl.onlyMainContent(default true)tools.web.fetch.firecrawl.maxAgeMs(optional)tools.web.fetch.firecrawl.timeoutSeconds(optional)
tools.media configures inbound media understanding (image/audio/video):
tools.media.models: shared model list (capability-tagged; used after per-cap lists).tools.media.concurrency: max concurrent capability runs (default 2).tools.media.image/tools.media.audio/tools.media.video:enabled: opt-out switch (default true when models are configured).prompt: optional prompt override (image/video append amaxCharshint automatically).maxChars: max output characters (default 500 for image/video; unset for audio).maxBytes: max media size to send (defaults: image 10MB, audio 20MB, video 50MB).timeoutSeconds: request timeout (defaults: image 60s, audio 60s, video 120s).language: optional audio hint.attachments: attachment policy (mode,maxAttachments,prefer).scope: optional gating (first match wins) withmatch.channel,match.chatType, ormatch.keyPrefix.models: ordered list of model entries; failures or oversize media fall back to the next entry.
- Each
models[]entry:- Provider entry (
type: "provider"or omitted):provider: API provider id (openai,anthropic,google/gemini,groq, etc).model: model id override (required for image; defaults togpt-4o-mini-transcribe/whisper-large-v3-turbofor audio providers, andgemini-3-flash-previewfor video).profile/preferredProfile: auth profile selection.
- CLI entry (
type: "cli"):command: executable to run.args: templated args (supports{{MediaPath}},{{Prompt}},{{MaxChars}}, etc).
capabilities: valfri lista (image,audio,video) för att grinda en delad post. Standardvärden vid utelämnande:openai/anthropic/minimax→ bild,google→ bild+audio+video,groq→ ljud.prompt,maxChars,maxBytes,timeoutSeconds,languagecan be overridden per entry.
- Provider entry (
enabled: false), understanding is skipped; the model still receives the original attachments.
Provider auth follows the standard model auth order (auth profiles, env vars like OPENAI_API_KEY/GROQ_API_KEY/GEMINI_API_KEY, or models.providers.*.apiKey).
Example:
agents.defaults.subagents configures sub-agent defaults:
model: standardmodell för spawnade underagenter (sträng eller{ primary, fallbacks }). Om utelämnade, sub-agenter ärva uppringarens modell om inte åsidosätts per agent eller per samtal.maxConcurrent: max concurrent sub-agent runs (default 1)archiveAfterMinutes: auto-archive sub-agent sessions after N minutes (default 60; set0to disable)- Per-subagent tool policy:
tools.subagents.tools.allow/tools.subagents.tools.deny(deny wins)
tools.profile sets a base tool allowlist before tools.allow/tools.deny:
minimal:session_statusonlycoding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: no restriction (same as unset)
agents.list[].tools.profile.
Example (messaging-only by default, allow Slack + Discord tools too):
tools.byProvider låter dig ytterligare begränsa verktyg för specifika leverantörer (eller en enda provider/model).
Per-agent åsidosätter: agents.list[].tools.byProvider.
Beställning: basprofil → leverantörsprofil → tillåta/neka policyer.
Leverantörsnycklar accepterar antingen provider (t.ex. google-antigravity) eller provider/model
(t.ex. openai/gpt-5.2).
Example (keep global coding profile, but minimal tools for Google Antigravity):
tools.allow / tools.deny konfigurera ett globalt verktyg tillåta/neka policy (neka vinster).
Matchning är skiftlägesokänslig och stöder * jokertecken ("*" betyder alla verktyg).
Detta tillämpas även när Docker-sandlådan är off.
Example (disable browser/canvas everywhere):
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: all built-in OpenClaw tools (excludes provider plugins)
tools.elevated controls elevated (host) exec access:
enabled: allow elevated mode (default true)allowFrom: per-channel allowlists (empty = disabled)whatsapp: E.164 numberstelegram: chat ids or usernamesdiscord: user ids or usernames (falls back tochannels.discord.dm.allowFromif omitted)signal: E.164 numbersimessage: handles/chat idswebchat: session ids or usernames
tools.elevatedär den globala baslinjen.agents.list[].tools.elevatedkan endast ytterligare begränsa (båda måste tillåta)./elevated on|off|ask|fullstores state per session key; inline directives apply to a single message.- Elevated
execruns on the host and bypasses sandboxing. - Tool policy still applies; if
execis denied, elevated cannot be used.
agents.defaults.maxConcurrent anger det maximala antalet inbäddade agentkörningar som kan
köras parallellt mellan sessioner. Varje session är fortfarande serialiserad (en kör
per sessionsnyckel åt gången). Standard: 1.
agents.defaults.sandbox
Valfri Docker sandboxning för den inbyggda agenten. Avsedd för icke-huvudsakliga
sessioner så att de inte kan komma åt ditt värdsystem.
Details: Sandboxing
Defaults (if enabled):
- scope:
"agent"(one container + workspace per agent) - Debian bookworm-slim based image
- agent workspace access:
workspaceAccess: "none"(default)"none": use a per-scope sandbox workspace under~/.openclaw/sandboxes
"ro": keep the sandbox workspace at/workspace, and mount the agent workspace read-only at/agent(disableswrite/edit/apply_patch)"rw": mount the agent workspace read/write at/workspace
- auto-prune: idle > 24h OR age > 7d
- tool policy: allow only
exec,process,read,write,edit,apply_patch,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status(deny wins)- configure via
tools.sandbox.tools, override per-agent viaagents.list[].tools.sandbox.tools - tool group shorthands supported in sandbox policy:
group:runtime,group:fs,group:sessions,group:memory(see Sandbox vs Tool Policy vs Elevated)
- configure via
- optional sandboxed browser (Chromium + CDP, noVNC observer)
- hardening knobs:
network,user,pidsLimit,memory,cpus,ulimits,seccompProfile,apparmorProfile
scope: "shared" betyder en delad behållare och delad arbetsyta. Ingen
tvärgående isolering. Använd scope: "session" för per-session-isolering.
Legacy: perSession is still supported (true → scope: "session",
false → scope: "shared").
setupCommand körs en gång efter att behållaren skapats (inuti behållaren via sh -lc).
För paket installerar, säkerställa nätverk egress, en skrivbar root FS, och en root-användare.
network: "none"; set agents.defaults.sandbox.docker.network
to "bridge" (or your custom network) if the agent needs outbound access.
Obs: Inkommande bilagor iscensätts i den aktiva arbetsytan vid media/inbound/*. Med workspaceAccess: "rw" , betyder det att filer skrivs in i agentens arbetsyta.
Note: docker.binds mounts additional host directories; global and per-agent binds are merged.
Build the optional browser image with:
agents.defaults.sandbox.browser.enabled=true, använder webbläsarverktyget en sandlåda
Chromium-instans (CDP). Om noVNC är aktiverat (standard när headless=false),
injiceras noVNC-URL i systemprompten så att agenten kan referera till den.
Detta kräver inte browser.enabled i huvudkonfigurationen; sandboxen kontrollerar
URL injiceras per session.
agents.defaults.sandbox.browser.allowHostControl (standard: false) tillåter
sandlådade sessioner att uttryckligen rikta värd webbläsarkontrollserver
via webbläsarverktyget (target: "host"). Lämna detta om du vill ha strikt
sandlåda isolering.
Allowlists for remote control:
allowedControlUrls: exact control URLs permitted fortarget: "custom".allowedControlHosts: hostnames permitted (hostname only, no port).allowedControlPorts: tillåtna portar (standard: http=80, https=443). Standard: alla tillåtna listor är ogiltiga (ingen begränsning).allowHostControlstandard är falsk.
models (custom providers + base URLs)
OpenClaw använder modellkatalogen pi-coding-agent Du kan lägga till anpassade leverantörer
(LiteLLM, lokala OpenAI-kompatibla servrar, antropiska proxyer, etc.) genom att skriva
~/.openclaw/agent/<agentId>/agent/models.json eller genom att definiera samma schema i din
OpenClaw config under models.providers.
Leverantör-för-leverantör översikt + exempel: /concepts/model-providers.
When models.providers is present, OpenClaw writes/merges a models.json into
~/.openclaw/agents/<agentId>/agent/ on startup:
- default behavior: merge (keeps existing providers, overrides on name)
- set
models.mode: "replace"to overwrite the file contents
agents.defaults.model.primary (provider/model).
OpenCode Zen (multi-model proxy)
OpenCode Zen är en flermodellgateway med slutpunkter per modell. OpenClaw använder den inbyggdaopencode-leverantören från pi-ai; sätt OPENCODE_API_KEY (eller
OPENCODE_ZEN_API_KEY) från https://opencode.ai/auth.
Notes:
- Model refs use
opencode/<modelId>(example:opencode/claude-opus-4-6). - If you enable an allowlist via
agents.defaults.models, add each model you plan to use. - Shortcut:
openclaw onboard --auth-choice opencode-zen.
Z.AI (GLM-4.7) — provider alias support
Z.AI-modeller finns tillgängliga via den inbyggdazai-leverantören. Ange ZAI_API_KEY
i din miljö och referera till modellen genom leverantör/modell.
Shortcut: openclaw onboard --auth-choice zai-api-key.
z.ai/*andz-ai/*are accepted aliases and normalize tozai/*.- If
ZAI_API_KEYis missing, requests tozai/*will fail with an auth error at runtime. - Example error:
No API key found for provider "zai". - Z.AI:s allmänna API-slutpunkt är
https://api.z.ai/api/paas/v4. GLM-kodning förfrågningar använder dedikerad kodningsslutpunkthttps://api.z.ai/api/coding/paas/v4. Den inbyggdazai-leverantören använder kodningsslutpunkten. Om du behöver den allmänna slutpunkten, definiera en anpassad leverantör imodels.providersmed bas-URL åsidosättning (se avsnittet anpassade leverantörer ovan). - Use a fake placeholder in docs/configs; never commit real API keys.
Moonshot AI (Kimi)
Use Moonshot’s OpenAI-compatible endpoint:- Set
MOONSHOT_API_KEYin the environment or useopenclaw onboard --auth-choice moonshot-api-key. - Model ref:
moonshot/kimi-k2.5. - For the China endpoint, either:
- Run
openclaw onboard --auth-choice moonshot-api-key-cn(wizard will sethttps://api.moonshot.cn/v1), or - Manually set
baseUrl: "https://api.moonshot.cn/v1"inmodels.providers.moonshot.
- Run
Kimi Coding
Use Moonshot AI’s Kimi Coding endpoint (Anthropic-compatible, built-in provider):- Set
KIMI_API_KEYin the environment or useopenclaw onboard --auth-choice kimi-code-api-key. - Model ref:
kimi-coding/k2p5.
Synthetic (Anthropic-compatible)
Use Synthetic’s Anthropic-compatible endpoint:- Set
SYNTHETIC_API_KEYor useopenclaw onboard --auth-choice synthetic-api-key. - Model ref:
synthetic/hf:MiniMaxAI/MiniMax-M2.1. - Base URL should omit
/v1because the Anthropic client appends it.
Local models (LM Studio) — recommended setup
Se /gateway/local-models för den aktuella lokala vägledningen. TL;DR: kör MiniMax M2.1 via LM Studio Responses API på seriös hårdvara, hålla värdmodeller sammanslagna för reserv.MiniMax M2.1
Use MiniMax M2.1 directly without LM Studio:- Set
MINIMAX_API_KEYenvironment variable or useopenclaw onboard --auth-choice minimax-api. - Available model:
MiniMax-M2.1(default). - Update pricing in
models.jsonif you need exact cost tracking.
Cerebras (GLM 4.6 / 4.7)
Use Cerebras via their OpenAI-compatible endpoint:- Use
cerebras/zai-glm-4.7for Cerebras; usezai/glm-4.7for Z.AI direct. - Set
CEREBRAS_API_KEYin the environment or config.
- Supported APIs:
openai-completions,openai-responses,anthropic-messages,google-generative-ai - Use
authHeader: true+headersfor custom auth needs. - Override the agent config root with
OPENCLAW_AGENT_DIR(orPI_CODING_AGENT_DIR) if you wantmodels.jsonstored elsewhere (default:~/.openclaw/agents/main/agent).
session
Controls session scoping, reset policy, reset triggers, and where the session store is written.
mainKey: direktchatt hink nyckel (standard:"main"). Användbart när du vill ”byta namn” den primära DM-tråden utan att ändraagentId.- Sandbox-anteckning:
agents.defaults.sandbox.mode: "non-main"använder denna nyckel för att upptäcka huvudsessionen. Alla sessionsnycklar som inte matcharmainKey(grupper/kanaler) är sandlådade.
- Sandbox-anteckning:
dmScope: how DM sessions are grouped (default:"main").main: all DMs share the main session for continuity.per-peer: isolate DMs by sender id across channels.per-channel-peer: isolate DMs per channel + sender (recommended for multi-user inboxes).per-account-channel-peer: isolate DMs per account + channel + sender (recommended for multi-account inboxes).- Secure DM mode (recommended): set
session.dmScope: "per-channel-peer"when multiple people can DM the bot (shared inboxes, multi-person allowlists, ordmPolicy: "open").
identityLinks: map canonical ids to provider-prefixed peers so the same person shares a DM session across channels when usingper-peer,per-channel-peer, orper-account-channel-peer.- Example:
alice: ["telegram:123456789", "discord:987654321012345678"].
- Example:
reset: primär återställningspolicy. Standard för daglig återställning vid 4:00 AM lokal tid på gatewayvärden.mode:dailyoridle(default:dailywhenresetis present).atHour: local hour (0-23) for the daily reset boundary.idleMinutes: glida inaktiv fönster på några minuter. När dagligen + inaktiv är båda konfigurerade, vilket som löper ut första vinner.
resetByType: per-session overrides fordirect,group, andthread. Legacydmkey is accepted as an alias fordirect.- If you only set legacy
session.idleMinuteswithout anyreset/resetByType, OpenClaw stays in idle-only mode for backward compatibility.
- If you only set legacy
heartbeatIdleMinutes: optional idle override for heartbeat checks (daily reset still applies when enabled).agentToAgent.maxPingPongTurns: max reply-back turns between requester/target (0–5, default 5).sendPolicy.default:allowordenyfallback when no rule matches.sendPolicy.rules[]: match bychannel,chatType(direct<unk> group<unk> room), ellerkeyPrefix(t.ex.cron:). Förneka först vinster; annars tillåter.
skills (skills config)
Controls bundled allowlist, install preferences, extra skill folders, and per-skill
overrides. Gäller buntade färdigheter och ~/.openclaw/skills (färdigheter i arbetsyta
vinner fortfarande på namnkonflikter).
Fields:
allowBundled: valfri tillåten lista för bundna färdigheter endast. Om angivet, är endast de medföljande färdigheterna berättigade (hanterade / arbetsytan opåverkade).load.extraDirs: additional skill directories to scan (lowest precedence).install.preferBrew: prefer brew installers when available (default: true).install.nodeManager: node installer preference (npm|pnpm|yarn, default: npm).entries.<skillKey>: konfigurationsöverskridanden per skicklighet.
enabled: setfalseto disable a skill even if it’s bundled/installed.env: environment variables injected for the agent run (only if not already set).apiKey: optional convenience for skills that declare a primary env var (e.g.nano-banana-pro→GEMINI_API_KEY).
plugins (extensions)
Kontrollerar plugin-upptäckt, tillåter/förneka, och per-plugin-konfiguration. Plugins laddas
från ~/.openclaw/extensions, <workspace>/.openclaw/extensions, plus alla
plugins.load.paths-poster. Konfigurationsändringar kräver en omstart av gatewayen.
Se /plugin för full användning.
Fields:
enabled: master toggle for plugin loading (default: true).allow: optional allowlist of plugin ids; when set, only listed plugins load.deny: optional denylist of plugin ids (deny wins).load.paths: extra plugin files or directories to load (absolute or~).entries.<pluginId>: åsidosättningar per plugin.enabled: setfalseto disable.config: plugin-specific config object (validated by the plugin if provided).
browser (openclaw-managed browser)
OpenClaw kan starta en dedikerad, isolerad Chrome/Brave/Edge/Chromium instans för openclaw och exponera en liten loopback kontrolltjänst.
Profiler kan peka mot en fjärr Chromium-baserad webbläsare via profiles.<name>.cdpUrl. Remote
-profiler är bifogade (start/stopp/reset är inaktiverade).
browser.cdpUrl remains for legacy single-profile configs and as the base
scheme/host for profiles that only set cdpPort.
Defaults:
- enabled:
true - evaluateEnabled:
true(setfalseto disableact:evaluateandwait --fn) - control service: loopback only (port derived from
gateway.port, default18791) - CDP URL:
http://127.0.0.1:18792(control service + 1, legacy single-profile) - profile color:
#FF4500(lobster-orange) - Note: the control server is started by the running gateway (OpenClaw.app menubar, or
openclaw gateway). - Auto-detect order: default browser if Chromium-based; otherwise Chrome → Brave → Edge → Chromium → Chrome Canary.
ui (Appearance)
Optional accent color used by the native apps for UI chrome (e.g. Talk Mode bubble tint).
If unset, clients fall back to a muted light-blue.
gateway (Gateway server mode + bind)
Use gateway.mode to explicitly declare whether this machine should run the Gateway.
Defaults:
- mode: unset (treated as “do not auto-start”)
- bind:
loopback - port:
18789(single port for WS + HTTP)
gateway.controlUi.basePathsets the URL prefix where the Control UI is served.- Examples:
"/ui","/openclaw","/apps/openclaw". - Default: root (
/) (unchanged). gateway.controlUi.rootsets the filesystem root for Control UI assets (default:dist/control-ui).gateway.controlUi.allowInsecureAuthtillåter token-only auth för Control UI när enhetsidentitet utelämnas (vanligtvis över HTTP). Standard:false. Föredrar HTTPS (Tailscale Serve) eller127.0.0.1.gateway.controlUi.dangerouslyDisableDeviceAuthinaktiverar enhetsidentitetskontroller för kontrollgränssnitt (endast token/lösenord). Standard:false. Endast Break-glas.
gateway.trustedProxies: list of reverse proxy IPs that terminate TLS in front of the Gateway.- When a connection comes from one of these IPs, OpenClaw uses
x-forwarded-for(orx-real-ip) to determine the client IP for local pairing checks and HTTP auth/local checks. - Only list proxies you fully control, and ensure they overwrite incoming
x-forwarded-for.
openclaw gatewayrefuses to start unlessgateway.modeis set tolocal(or you pass the override flag).gateway.portcontrols the single multiplexed port used for WebSocket + HTTP (control UI, hooks, A2UI).- OpenAI Chat Completions endpoint: disabled by default; enable with
gateway.http.endpoints.chatCompletions.enabled: true. - Precedence:
--port>OPENCLAW_GATEWAY_PORT>gateway.port> default18789. - Gateway auth krävs som standard (token/lösenord eller Tailscale Serve identitet). Icke-loopback binder kräver ett delat token/lösenord.
- The onboarding wizard generates a gateway token by default (even on loopback).
gateway.remote.tokenär bara för fjärr-CLI-samtal; det aktiverar inte lokal gateway auth.gateway.tokenignoreras.
gateway.auth.modesätter handskakningskraven (tokenellerpassword). När inaktiverad, antas token auth.gateway.auth.tokenstores the shared token for token auth (used by the CLI on the same machine).- When
gateway.auth.modeis set, only that method is accepted (plus optional Tailscale headers). gateway.auth.passwordcan be set here, or viaOPENCLAW_GATEWAY_PASSWORD(recommended).gateway.auth.allowTailscaletillåter Tailscale Serve identitetshuvuden (tailscale-user-login) att tillfredsställa auth när begäran anländer på loopback medx-forwarded-for,x-forwarded-protoochx-forwarded-host. OpenClaw verifierar identiteten genom att lösax-forwarded-for-adressen viatailscale whoisinnan du accepterar den. Närtrue, Serve requests inte behöver ett token/password; sättfalseatt kräva explicita autentiseringsuppgifter. Standardvärdet ärtruenärtailscale.mode = "serve"och auth läge är intepassword.gateway.tailscale.mode: "serve"uses Tailscale Serve (tailnet only, loopback bind).gateway.tailscale.mode: "funnel"exposes the dashboard publicly; requires auth.gateway.tailscale.resetOnExitresets Serve/Funnel config on shutdown.
gateway.remote.urlsets the default Gateway WebSocket URL for CLI calls whengateway.mode = "remote".gateway.remote.transportväljer macOS fjärrtransport (sshdefault,directför ws/wss). Närdirect,gateway.remote.urlmåste varaws://ellerwss://.ws://hoststandard är port18789.gateway.remote.tokensupplies the token for remote calls (leave unset for no auth).gateway.remote.passwordsupplies the password for remote calls (leave unset for no auth).
- OpenClaw.app watches
~/.openclaw/openclaw.jsonand switches modes live whengateway.modeorgateway.remote.urlchanges. - If
gateway.modeis unset butgateway.remote.urlis set, the macOS app treats it as remote mode. - When you change connection mode in the macOS app, it writes
gateway.mode(andgateway.remote.url+gateway.remote.transportin remote mode) back to the config file.
gateway.reload (Config hot reload)
The Gateway watches ~/.openclaw/openclaw.json (or OPENCLAW_CONFIG_PATH) and applies changes automatically.
Modes:
hybrid(default): hot-apply safe changes; restart the Gateway for critical changes.hot: only apply hot-safe changes; log when a restart is required.restart: restart the Gateway on any config change.off: disable hot reload.
Hot reload matrix (files + impact)
Files watched:~/.openclaw/openclaw.json(orOPENCLAW_CONFIG_PATH)
hooks(webhook auth/path/mappings) +hooks.gmail(Gmail watcher restarted)browser(browser control server restart)cron(cron service restart + concurrency update)agents.defaults.heartbeat(heartbeat runner restart)web(WhatsApp web channel restart)telegram,discord,signal,imessage(channel restarts)agent,models,routing,messages,session,whatsapp,logging,skills,ui,talk,identity,wizard(dynamic reads)
gateway(port/bind/auth/control UI/tailscale)bridge(legacy)discoverycanvasHostplugins- Any unknown/unsupported config path (defaults to restart for safety)
Multi-instance isolation
To run multiple gateways on one host (for redundancy or a rescue bot), isolate per-instance state + config and use unique ports:OPENCLAW_CONFIG_PATH(per-instance config)OPENCLAW_STATE_DIR(sessions/creds)agents.defaults.workspace(memories)gateway.port(unique per instance)
openclaw --dev …→ uses~/.openclaw-dev+ shifts ports from base19001openclaw --profile <name> …→ uses~/.openclaw-<name>(port via config/env/flags)
hooks (Gateway webhooks)
Enable a simple HTTP webhook endpoint on the Gateway HTTP server.
Defaults:
- enabled:
false - path:
/hooks - maxBodyBytes:
262144(256 KB)
Authorization: Bearer <token>orx-openclaw-token: <token>
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, sessionKey?, wakeMode?, levererar?, kanal?, till?, modell?, tänker?, timeoutSeconds? }POST /hooks/<name>→ resolved viahooks.mappings
/hooks/agent always posts a summary into the main session (and can optionally trigger an immediate heartbeat via wakeMode: "now").
Mapping notes:
match.pathmatches the sub-path after/hooks(e.g./hooks/gmail→gmail).match.sourcematches a payload field (e.g.{ source: "gmail" }) so you can use a generic/hooks/ingestpath.- Templates like
{{messages[0].subject}}read from the payload. transformcan point to a JS/TS module that returns a hook action.deliver: truesends the final reply to a channel;channeldefaults tolast(falls back to WhatsApp).- If there is no prior delivery route, set
channel+toexplicitly (required for Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teams). modeloverrides the LLM for this hook run (provider/modelor alias; must be allowed ifagents.defaults.modelsis set).
openclaw webhooks gmail setup / run):
hooks.gmail.modelspecifies a model to use for Gmail hook processing (defaults to session primary).- Accepts
provider/modelrefs or aliases fromagents.defaults.models. - Falls back to
agents.defaults.model.fallbacks, thenagents.defaults.model.primary, on auth/rate-limit/timeouts. - If
agents.defaults.modelsis set, include the hooks model in the allowlist. - At startup, warns if the configured model is not in the model catalog or allowlist.
hooks.gmail.thinkingsets the default thinking level for Gmail hooks and is overridden by per-hookthinking.
- If
hooks.enabled=trueandhooks.gmail.accountis set, the Gateway startsgog gmail watch serveon boot and auto-renews the watch. - Set
OPENCLAW_SKIP_GMAIL_WATCHER=1to disable the auto-start (for manual runs). - Avoid running a separate
gog gmail watch servealongside the Gateway; it will fail withlisten tcp 127.0.0.1:8788: bind: address already in use.
tailscale.mode är på, OpenClaw defaults serve.path till / så
Tailscale kan proxy /gmail-pubsub korrekt (det tar bort set-path prefix).
Om du behöver backend för att ta emot den prefixade sökvägen, sätt
hooks.gmail.tailscale.target till en fullständig URL (och anpassa serve.path).
canvasHost (LAN/tailnet Canvas file server + live reload)
The Gateway serves a directory of HTML/CSS/JS over HTTP so iOS/Android nodes can simply canvas.navigate to it.
Default root: ~/.openclaw/workspace/canvasDefault port:
18793 (chosen to avoid the openclaw browser CDP port 18792)The server listens on the gateway bind host (LAN or Tailnet) so nodes can reach it. The server:
- serves files under
canvasHost.root - injects a tiny live-reload client into served HTML
- watches the directory and broadcasts reloads over a WebSocket endpoint at
/__openclaw__/ws - auto-creates a starter
index.htmlwhen the directory is empty (so you see something immediately) - also serves A2UI at
/__openclaw__/a2ui/and is advertised to nodes ascanvasHostUrl(always used by nodes for Canvas/A2UI)
EMFILE:
- config:
canvasHost: { liveReload: false }
canvasHost.* require a gateway restart (config reload will restart).
Disable with:
- config:
canvasHost: { enabled: false } - env:
OPENCLAW_SKIP_CANVAS_HOST=1
bridge (legacy TCP bridge, removed)
Aktuella byggen innehåller inte längre TCP-brygglyssnare; bridge.* konfigurationsnycklar ignoreras.
Noder ansluter över Gateway WebSocket. Detta avsnitt hålls för historisk referens.
Legacy behavior:
- The Gateway could expose a simple TCP bridge for nodes (iOS/Android), typically on port
18790.
- enabled:
true - port:
18790 - bind:
lan(binds to0.0.0.0)
lan:0.0.0.0(reachable on any interface, including LAN/Wi‑Fi and Tailscale)tailnet: bind only to the machine’s Tailscale IP (recommended for Vienna ⇄ London)loopback:127.0.0.1(local only)auto: prefer tailnet IP if present, elselan
bridge.tls.enabled: enable TLS for bridge connections (TLS-only when enabled).bridge.tls.autoGenerate: generate a self-signed cert when no cert/key are present (default: true).bridge.tls.certPath/bridge.tls.keyPath: PEM paths for the bridge certificate + private key.bridge.tls.caPath: optional PEM CA bundle (custom roots or future mTLS).
bridgeTls=1 och bridgeTlsSha256 i upptäckten TXT
poster så att noder kan fästa certifikatet. Manuella anslutningar använder trust-on-first use om inget
fingeravtryck lagras ännu.
Auto-genererade certs kräver openssl på PATH; om generering misslyckas, kommer bryggan inte starta.
discovery.mdns (Bonjour / mDNS broadcast mode)
Controls LAN mDNS discovery broadcasts (_openclaw-gw._tcp).
minimal(default): omitcliPath+sshPortfrom TXT recordsfull: includecliPath+sshPortin TXT recordsoff: disable mDNS broadcasts entirely- Värdnamn: standard är
openclaw(annonseraropenclaw.local). Åsidosätt medOPENCLAW_MDNS_HOSTNAME.
discovery.wideArea (Wide-Area Bonjour / unicast DNS‑SD)
When enabled, the Gateway writes a unicast DNS-SD zone for _openclaw-gw._tcp under ~/.openclaw/dns/ using the configured discovery domain (example: openclaw.internal.).
To make iOS/Android discover across networks (Vienna ⇄ London), pair this with:
- a DNS server on the gateway host serving your chosen domain (CoreDNS is recommended)
- Tailscale split DNS so clients resolve that domain via the gateway DNS server
Media model template variables
Template placeholders are expanded intools.media.*.models[].args and tools.media.models[].args (and any future templated argument fields).
<unk> Variabel <unk> Beskrivning <unk> <unk> ------------------------------------------------------------------------------------------------------- <unk> -------- <unk> ------- <unk> ---------- <unk> ----- <unk> ------ <unk> -------- <unk> ------- <unk> --- <unk> <unk> {{Body}} <unk> Fullständig inkommande meddelandekropp <unk> <unk> {{RawBody}} <unk> Rå inkommande meddelandekropp (ingen historik/avsändaromslag; bäst för kommandot parsing) <unk> <unk> {{BodyStripped}} <unk> Body med gruppen omnämnanden borttagna (bästa standard för agenter) <unk> <unk> {{From}} <unk> Sender identifierare (E. 64 för WhatsApp kan skilja sig åt per kanal) <unk> <unk> {{To}} <unk> Destination identifierare <unk> <unk> {{MessageSid}} <unk> Channel meddelande id (när tillgängligt) <unk> <unk> {{SessionId}} <unk> Current session UUID <unk> <unk> {{IsNewSession}} <unk> "true" när en ny session skapades <unk> <unk> {{MediaUrl}} <unk> Inkommande media pseudo-URL (om närvarande) <unk> <unk> {{MediaPath}} <unk> Lokal mediakurs (om nedladdning) <unk> <unk> {{MediaType}} <unk> Mediatyp (bild/ljud/dokument/…) |
| {{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 scheduler)
Cron är en Gateway-ägd schemaläggare för wakeups och schemalagda jobb. Se Cron jobs för funktionen översikt och CLI exempel.Next: Agent Runtime 🦞