本附录列出 OpenClaw 最常用的配置项。所有取值均对照 openclaw/openclaw v2026.3.31(commit 213a704)的 src/config/types*.ts、src/config/defaults.ts 与仓库自带的 docs/gateway/configuration-reference.md 核实。
如何使用本附录
配置文件是 ~/.openclaw/openclaw.json——扩展名是 .json,但按 JSON5 解析,因此允许注释、尾逗号和无引号键名(源码里 CONFIG_FILENAME = "openclaw.json",见 src/config/paths.ts)。三种覆盖方式:
- 配置文件:在
openclaw.json 中以嵌套对象书写,如 { gateway: { port: 19001 } }
- 环境变量:
OPENCLAW_CONFIG_PATH 换配置路径、OPENCLAW_STATE_DIR 换状态目录,另有若干凭证变量(见 §A.9);配置里的任意字符串还支持 ${VAR_NAME} 替换
- CLI 参数:如
openclaw gateway --port 19001,以及根级 --profile <name> / --dev 整体切换实例
查阅建议:表中"默认值"列为 — 表示该项没有默认值,需要显式设置才生效。标记为 SecretInput 的字段既接受明文字符串,也接受 SecretRef 对象 { source: "env" | "file" | "exec", provider: "<提供者别名,如 default>", id: "..." }。完整 Schema 可用 openclaw config schema 导出,逐字段说明见仓库内的 docs/gateway/configuration-reference.md。
A.1 Gateway 配置(gateway.*)
| 配置项 |
类型 |
默认值 |
说明 |
gateway.port |
number |
18789 |
Gateway WS + HTTP 复用端口。优先级:--port > OPENCLAW_GATEWAY_PORT > 本项 > 18789 |
gateway.bind |
string |
"loopback" |
绑定模式:auto / lan / loopback / tailnet / custom(写模式名,不要写 0.0.0.0 这类主机别名) |
gateway.customBindHost |
string |
— |
bind="custom" 时的自定义 IP |
gateway.mode |
string |
—(openclaw setup / 引导向导写入 "local") |
"local" 本地启动 / "remote" 仅连接远程。openclaw gateway 只在值为 "local" 时启动——未设置或为 remote 都会拒绝(除非加 --allow-unconfigured),见 src/cli/gateway-cli/run.ts |
gateway.trustedProxies |
string[] |
— |
可信反代 IP,命中后才信任 x-forwarded-for |
gateway.allowRealIpFallback |
boolean |
false |
缺 x-forwarded-for 时是否接受 x-real-ip(默认 fail-closed) |
gateway.tools.deny |
string[] |
— |
在 HTTP POST /tools/invoke 默认拒绝清单之外再加禁用工具 |
gateway.tools.allow |
string[] |
— |
从默认拒绝清单中移除某些工具 |
gateway.channelHealthCheckMinutes |
number |
5 |
通道健康检查间隔(分钟),0 禁用 |
gateway.channelStaleEventThresholdMinutes |
number |
30 |
通道无事件超时阈值(分钟),应 ≥ 上一项 |
gateway.channelMaxRestartsPerHour |
number |
10 |
每通道/账号每小时最大自动重启次数 |
A.1.1 认证(gateway.auth.*)
| 配置项 |
类型 |
默认值 |
说明 |
gateway.auth.mode |
string |
"token"(未设 mode 且只配了 password 时取 password) |
认证模式:none / token / password / trusted-proxy |
gateway.auth.token |
SecretInput |
— |
token 模式的共享密钥;token 模式下缺失时网关启动会自动生成一个(src/gateway/startup-auth.ts) |
gateway.auth.password |
SecretInput |
— |
password 模式的共享口令 |
gateway.auth.allowTailscale |
boolean |
tailscale.mode="serve" 且 auth.mode 不是 password / trusted-proxy 时为 true |
允许 Tailscale Serve 身份 Header 通过 Control UI / WS 认证 |
gateway.auth.trustedProxy |
object |
— |
mode="trusted-proxy" 时必填(如 userHeader) |
gateway.auth.rateLimit.maxAttempts |
number |
10 |
每 IP 失败次数上限 |
gateway.auth.rateLimit.windowMs |
number |
60000 |
滑动窗口(毫秒) |
gateway.auth.rateLimit.lockoutMs |
number |
300000 |
锁定时长(毫秒) |
gateway.auth.rateLimit.exemptLoopback |
boolean |
true |
回环地址是否豁免限速 |
同时配置了 token 与 password 时必须显式指定 mode,否则启动与服务安装/修复流程会失败。非回环绑定必须配认证。
A.1.2 TLS(gateway.tls.*)
| 配置项 |
类型 |
默认值 |
说明 |
gateway.tls.enabled |
boolean |
false |
启用 TLS |
gateway.tls.autoGenerate |
boolean |
true |
证书/私钥缺失时自动生成自签名证书 |
gateway.tls.certPath |
string |
— |
PEM 证书路径 |
gateway.tls.keyPath |
string |
— |
PEM 私钥路径 |
gateway.tls.caPath |
string |
— |
可选 PEM CA 包(mTLS 或自定义根) |
A.1.3 热重载(gateway.reload.*)
| 配置项 |
类型 |
默认值 |
说明 |
gateway.reload.mode |
string |
"hybrid" |
重载策略:off / restart / hot / hybrid |
gateway.reload.debounceMs |
number |
300 |
防抖窗口(毫秒) |
gateway.reload.deferralTimeoutMs |
number |
300000 |
发出 SIGUSR1 前等待在途操作完成的上限(5 分钟) |
A.1.4 远程连接(gateway.remote.*)
| 配置项 |
类型 |
默认值 |
说明 |
gateway.remote.enabled |
boolean |
true(类型注释所写) |
是否启用远程网关相关能力;v2026.3.31 的 src/、apps/、extensions/ 中未见读取该字段的实现 |
gateway.remote.url |
string |
— |
远程 Gateway WebSocket URL(ws:// / wss://) |
gateway.remote.transport |
string |
"ssh" |
macOS App 的远程传输方式:ssh(默认,隧道) / direct |
gateway.remote.token |
SecretInput |
— |
远程认证 Token(这是客户端凭证,不配置本机网关认证) |
gateway.remote.password |
SecretInput |
— |
远程认证口令 |
gateway.remote.tlsFingerprint |
string |
— |
期望的 TLS 证书指纹(sha256) |
gateway.remote.sshTarget / .sshIdentity |
string |
— |
SSH 隧道目标与身份文件 |
A.1.5 Tailscale 与 Control UI
| 配置项 |
类型 |
默认值 |
说明 |
gateway.tailscale.mode |
string |
"off" |
off / serve(仅 tailnet) / funnel(公网,必须配认证) |
gateway.controlUi.enabled |
boolean |
true |
启用 Control UI |
gateway.controlUi.basePath |
string |
""(挂在根路径) |
Control UI 挂载路径前缀。src/gateway/control-ui-shared.ts:9 的 normalizeControlUiBasePath() 在未配置时返回空串——类型注释里的 "/openclaw" 只是示例,不是默认值 |
gateway.controlUi.allowedOrigins |
string[] |
— |
浏览器来源白名单;非回环来源必须显式配置 |
A.2 会话配置(session.*)
| 配置项 |
类型 |
默认值 |
说明 |
session.scope |
string |
"per-sender" |
群聊场景的会话分组:per-sender / global |
session.dmScope |
string |
"main" |
私聊分组:main / per-peer / per-channel-peer / per-account-channel-peer |
session.identityLinks |
Record |
— |
把同一个人在不同通道的身份归并为一个会话 |
session.resetTriggers |
string[] |
["/new", "/reset"] |
触发重置的命令关键词 |
session.store |
string |
~/.openclaw/agents/{agentId}/sessions/sessions.json |
会话存储路径 |
session.parentForkMaxTokens |
number |
100000 |
父会话超过此 token 数则不再继承其历史,0 关闭该保护 |
session.typingMode |
string |
继承 agents.defaults.typingMode |
会话级打字指示覆盖:never / instant / thinking / message |
session.agentToAgent.maxPingPongTurns |
number |
5 |
Agent 间往返回合上限(0–5,0 禁用) |
session.sendPolicy |
object |
default: "allow" |
发送策略规则表;任一规则命中 deny 即拒绝(deny 优先) |
A.2.1 会话重置(session.reset.* / session.resetByType.*)
| 配置项 |
类型 |
默认值 |
说明 |
session.reset.mode |
string |
"daily" |
重置模式:daily / idle |
session.reset.atHour |
number |
4 |
daily 模式下的本地重置小时(0–23) |
session.reset.idleMinutes |
number |
— |
idle 模式的空闲滑动窗口(分钟) |
session.resetByType.<type> |
object |
— |
按 direct / group / thread 分别覆盖上面的策略 |
两种模式同时配置时,先到期的那个生效。
A.2.2 会话存储维护(session.maintenance.*)
| 配置项 |
类型 |
默认值 |
说明 |
session.maintenance.mode |
string |
"warn" |
warn 只告警;enforce 实际清理 |
session.maintenance.pruneAfter |
duration |
"30d" |
陈旧条目的年龄阈值 |
session.maintenance.maxEntries |
number |
500 |
sessions.json 最大条目数 |
session.maintenance.rotateBytes |
size |
"10mb" |
超过则轮转 sessions.json |
session.maintenance.resetArchiveRetention |
duration | false |
同 pruneAfter |
重置归档的保留期 |
session.maintenance.maxDiskBytes |
size |
— |
会话目录磁盘预算(可选硬上限) |
session.maintenance.highWaterBytes |
size |
maxDiskBytes 的 80% |
清理后的目标水位 |
A.3 Agent 配置(agents.defaults.* / agents.list[])
全局默认写在 agents.defaults,单个 Agent 的覆盖写在 agents.list[](按 id 匹配)。
| 配置项 |
类型 |
默认值 |
说明 |
agents.defaults.workspace |
string |
~/.openclaw/workspace |
Agent 工作区目录 |
agents.defaults.model |
string | object |
— |
"provider/model" 字符串,或 { primary, fallbacks } 对象 |
agents.defaults.models |
Record |
— |
模型目录与 /model 白名单,每项可带 alias 与 params |
agents.defaults.imageModel / imageGenerationModel / pdfModel |
string | object |
— |
视觉、图像生成、PDF 三条独立的模型路由 |
agents.defaults.contextTokens |
number |
随模型 |
上下文窗口上限;小于模型自身窗口时作为封顶生效 |
agents.defaults.maxConcurrent |
number |
4 |
跨会话的最大并行 Agent 运行数(单会话内仍串行) |
agents.defaults.timeoutSeconds |
number |
— |
单次运行超时 |
agents.defaults.thinkingDefault |
string |
随模型(Claude 4.6 为 adaptive,其他推理模型 low,否则 off) |
默认思考档位(off/minimal/low/medium/high/xhigh/adaptive) |
agents.defaults.verboseDefault |
string |
"off" |
off / on / full |
agents.defaults.elevatedDefault |
string |
"on" |
off / on / ask / full |
agents.defaults.typingMode |
string |
直聊/被提及 instant,群聊未提及 message |
never / instant / thinking / message |
agents.defaults.typingIntervalSeconds |
number |
— |
打字指示刷新间隔 |
agents.defaults.sandbox |
object |
— |
沙箱配置,见 §A.6.4 |
agents.list[].id |
string |
— |
Agent 标识 |
agents.list[].tools / .params / .workspace |
object / object / string |
— |
单 Agent 覆盖。注意 tools.profile 以 Agent 级为准(agents.list[].tools.profile ?? tools.profile),可以比全局更宽;allow / deny 则在全局策略之后逐级收窄 |
内建模型别名
以下别名只在对应模型已出现在 agents.defaults.models 中时才生效;你自己配置的别名优先级更高。
| 别名 |
解析为 |
opus |
anthropic/claude-opus-4-6 |
sonnet |
anthropic/claude-sonnet-4-6 |
gpt |
openai/gpt-5.4 |
gpt-mini |
openai/gpt-5-mini |
gemini |
google/gemini-3.1-pro-preview |
gemini-flash |
google/gemini-3-flash-preview |
gemini-flash-lite |
google/gemini-3.1-flash-lite-preview |
系统级默认模型是 anthropic/claude-opus-4-6(DEFAULT_PROVIDER + DEFAULT_MODEL,见 src/agents/defaults.ts)。
A.4 模型与 Provider(models.*)
models.providers.<providerId> 定义自定义 Provider 与其模型列表。
| 配置项 |
类型 |
默认值 |
说明 |
models.providers.<id>.baseUrl |
string |
— |
Provider API 基址 |
models.providers.<id>.apiKey |
SecretInput |
— |
Provider 密钥 |
models.providers.<id>.models[].id |
string |
— |
模型 ID |
models.providers.<id>.models[].name |
string |
— |
显示名称 |
models.providers.<id>.models[].contextWindow |
number |
200000(DEFAULT_CONTEXT_TOKENS) |
上下文窗口(会被上下文守卫读取) |
models.providers.<id>.models[].maxTokens |
number |
8192 与 contextWindow 取小 |
单次最大输出 Token(DEFAULT_MODEL_MAX_TOKENS) |
models.providers.<id>.models[].cost.input / .output / .cacheRead / .cacheWrite |
number |
0 |
单价,用于 openclaw gateway usage-cost 汇总 |
A.5 通道配置(channels.*)
各通道的密钥字段名并不统一,这是最容易配错的地方——请以本表为准。
| 配置项 |
类型 |
说明 |
channels.telegram.botToken |
SecretInput |
Telegram Bot Token |
channels.discord.token |
SecretInput |
Discord Bot Token(注意是 token,不是 botToken) |
channels.slack.botToken |
SecretInput |
Slack Bot Token(xoxb-) |
channels.slack.appToken |
SecretInput |
Slack App Token(xapp-,Socket Mode) |
channels.whatsapp.* |
object |
走 Baileys Web,有已链接会话即自动启动,无 token 字段 |
channels.<provider>.enabled |
boolean |
是否启用该通道 |
channels.<provider>.dmPolicy |
string |
pairing(默认) / allowlist / open / disabled |
channels.<provider>.allowFrom |
string[] |
私聊来源白名单 |
channels.<provider>.groups |
Record |
群聊策略("*" 为通配,可设 requireMention、systemPrompt、skills 等)。Discord 对应键为 guilds,Slack 为 channels |
channels.<provider>.healthMonitor.enabled |
boolean |
单通道关闭健康监控重启 |
channels.<provider>.accounts.<accountId> |
object |
多账号配置,优先级高于通道级 |
A.6 工具与安全配置
| 配置项 |
类型 |
默认值 |
说明 |
tools.profile |
string |
本地引导默认写入 "coding" |
minimal / coding / messaging / full |
tools.allow |
string[] |
— |
允许的工具(支持 group:* 与 * 通配);只能在 profile 结果上再收窄 |
tools.alsoAllow |
string[] |
— |
在 profile 的允许列表上追加工具 |
tools.deny |
string[] |
— |
禁止的工具,deny 优先于 allow |
tools.byProvider.<provider或model> |
object |
— |
针对特定 Provider/模型进一步收紧 |
tools.elevated.enabled |
boolean |
true(未设即启用) |
提权(宿主机)exec 总开关;发送者还须列在下一项 allowFrom 中,未列出即无人可提权 |
tools.elevated.allowFrom |
Record |
— |
按通道列出可提权的发送者 |
tools.loopDetection.enabled |
boolean |
false |
工具循环检测,默认关闭 |
工具分组(用于 allow/deny):group:runtime(exec、process、code_execution)、group:fs(read/write/edit/apply_patch)、group:sessions、group:memory、group:web、group:ui、group:automation、group:messaging、group:nodes、group:agents、group:media、group:openclaw(除 read/write/edit/apply_patch/exec/process 外的核心工具)、group:plugins(插件工具),定义见 src/agents/tool-catalog.ts。
| 配置项 |
类型 |
默认值 |
说明 |
tools.exec.host |
string |
"auto" |
auto / sandbox / gateway / node |
tools.exec.security |
string |
按 host 分流 |
deny / allowlist / full。未显式配置时由 exec 落地的主机决定:sandbox 取 deny,gateway/node 取 allowlist(src/agents/bash-tools.exec.ts;src/config/types.tools.ts 的注释写 default: deny,与实现不符) |
tools.exec.ask |
string |
"on-miss" |
off / on-miss / always |
tools.exec.safeBins |
string[] |
cut/uniq/head/tail/tr/wc |
免 allowlist 的"仅读 stdin"流过滤器;每项须有内置或 safeBinProfiles 自定义的参数 profile,否则被忽略并告警。普通命令放行请用审批白名单 |
tools.exec.strictInlineEval |
boolean |
— |
对 python -c / node -e 这类内联求值强制重新审批 |
tools.exec.pathPrepend |
string[] |
— |
执行时前置到 PATH 的目录 |
tools.exec.timeoutSec |
number |
1800 |
单条命令超时(秒) |
tools.exec.backgroundMs |
number |
10000 |
超过该时长(毫秒)转入后台 |
A.6.3 来源白名单
来源白名单是按通道配置的,写在 channels.<provider>.allowFrom / .groups 下,没有全局的 allowFrom.users / allowFrom.groups 顶层键。
A.6.4 Sandbox(agents.defaults.sandbox.*)
| 配置项 |
类型 |
默认值 |
说明 |
.mode |
string |
"off" |
何时启用沙箱:off / non-main / all |
.backend |
string |
"docker" |
沙箱后端:docker / ssh / openshell(插件提供) |
.scope |
string |
"agent" |
容器复用粒度:session / agent / shared |
.workspaceAccess |
string |
"none" |
工作区挂载权限:none / ro / rw |
.docker.image |
string |
openclaw-sandbox:bookworm-slim |
镜像 |
.docker.network |
string |
none |
容器网络 |
.docker.readOnlyRoot |
boolean |
true |
只读根文件系统 |
.docker.capDrop |
string[] |
["ALL"] |
丢弃的 Linux 能力 |
.docker.memory / .cpus / .pidsLimit |
string / number / number |
—(不设即不限,示例 1g / 1 / 256) |
资源限制 |
A.7 定时任务(cron.*)
注意:具体的定时作业不写在配置文件里,而是由 openclaw cron 命令管理、存在独立的 cron store 中。配置文件里的 cron.* 只是调度器的全局参数。
| 配置项 |
类型 |
默认值 |
说明 |
cron.enabled |
boolean |
true(未设即启用) |
启用调度器,设 false 关闭 |
cron.maxConcurrentRuns |
number |
1 |
最大并发作业数 |
cron.sessionRetention |
duration | false |
"24h" |
已完成的隔离作业会话保留时长 |
cron.runLog.maxBytes |
number | string |
2000000 |
单个作业运行日志上限 |
cron.runLog.keepLines |
number |
2000 |
触发裁剪时保留的最新行数 |
cron.retry.maxAttempts |
number |
3 |
一次性作业的瞬时错误重试次数(0–10) |
cron.retry.backoffMs |
number[] |
[30000, 60000, 300000] |
各次重试的退避毫秒数 |
cron.retry.retryOn |
string[] |
全部瞬时类型 |
rate_limit / overloaded / network / timeout / server_error |
cron.webhookToken |
SecretInput |
— |
webhook 投递的 bearer token |
A.8 语音:TTS(messages.tts.*)与 Talk(talk.*)
| 配置项 |
类型 |
默认值 |
说明 |
messages.tts.auto |
string |
"off" |
off / always / inbound / tagged |
messages.tts.mode |
string |
"final" |
final 只念最终回复 / all |
messages.tts.provider |
string |
— |
如 elevenlabs、openai |
messages.tts.summaryModel |
string |
继承主模型 |
自动摘要用的模型 |
messages.tts.maxTextLength |
number |
4096 |
送入 TTS 的文本硬上限(字符) |
messages.tts.timeoutMs |
number |
30000 |
TTS 请求超时(毫秒) |
messages.tts.providers.<provider>.apiKey |
SecretInput |
— |
provider 密钥(旧写法 messages.tts.<provider>.apiKey 仍兼容);缺省回落到 ELEVENLABS_API_KEY / XI_API_KEY / OPENAI_API_KEY |
talk.provider / talk.providers.<id>.* |
string / object |
— |
当前 Talk 语音 provider 及其配置(voiceId、voiceAliases、modelId、apiKey 等) |
talk.voiceId |
string |
— |
Talk 模式默认语音 ID(顶层写法为兼容旧版保留;macOS App 回落 ELEVENLABS_VOICE_ID / SAG_VOICE_ID) |
talk.voiceAliases |
Record |
— |
语音友好名映射(同为兼容字段) |
talk.interruptOnSpeech |
boolean |
true |
用户说话时打断播放 |
talk.silenceTimeoutMs |
number |
平台默认(macOS/Android 700ms,iOS 900ms) |
静默多久后提交转写 |
A.9 环境变量
| 环境变量 |
说明 |
OPENCLAW_CONFIG_PATH |
自定义配置文件路径 |
OPENCLAW_STATE_DIR |
自定义状态目录(配置、会话、凭证都在其下) |
OPENCLAW_GATEWAY_PORT |
网关端口(优先级高于 gateway.port) |
OPENCLAW_GATEWAY_TOKEN |
Gateway 认证 Token |
OPENCLAW_GATEWAY_PASSWORD |
Gateway 认证口令 |
OPENCLAW_LOG_LEVEL |
日志级别覆盖(文件与控制台) |
OPENCLAW_HIDE_BANNER |
隐藏 CLI Banner |
OPENCLAW_PROFILE |
当前 profile(等价于根级 --profile) |
ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY 等 |
各 Provider 密钥 |
ELEVENLABS_API_KEY / XI_API_KEY |
TTS 密钥回落 |
另外两条机制值得知道:配置里的 env 段可以内联注入环境变量(仅当进程环境中不存在该键时生效);.env 文件从当前目录和 ~/.openclaw/.env(或 $OPENCLAW_STATE_DIR/.env)加载,同样不覆盖已存在的变量。注意当前目录的 .env 被视为不可信:ANTHROPIC_API_KEY、OPENAI_API_KEY、OPENCLAW_GATEWAY_TOKEN、OPENCLAW_STATE_DIR、代理变量及 *_BASE_URL 等键会被忽略(src/infra/dotenv.ts),这些应写进 ~/.openclaw/.env 或进程环境。
A.10 默认端口
端口不是各自独立写死的,而是从网关端口派生出来的(src/config/port-defaults.ts)——改了 gateway.port,其余端口跟着平移。
| 端口 |
派生方式 |
用途 |
18789 |
基准 |
Gateway 主端口(WS + HTTP 复用) |
18790 |
网关端口 + 1 |
Bridge 端口 |
18791 |
网关端口 + 2 |
Browser Control 端口 |
18793 |
网关端口 + 4 |
Canvas Host 端口 |
18800-18899 |
Browser Control 端口 + 9 起,宽度 100 |
Browser CDP 端口范围 |
这也解释了 --dev(网关端口 19001)为什么能和正式实例共存:整组端口一起挪了位置。
提示:完整配置 Schema 可通过 openclaw config schema 命令查看;仓库内 docs/gateway/configuration-reference.md 有逐字段的权威说明,类型定义在 src/config/types*.ts。