Appearance
配置样例覆盖最简启动、多平台接入、多用户 DM 隔离、节点自动配对、本地模型等场景,可直接复制到 ~/.openclaw/openclaw.json 使用。注意 dmPolicy: "open" 时 allowFrom 必须包含 "*";节点自动配对仅对无 scope 的 role: node 首次配对生效。
OpenClaw 配置示例:快速入门与常用场景
以下示例与当前配置 schema 一致。详尽的参考和每字段说明,见配置文档。
快速入门
绝对最简
json5
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}保存到 ~/.openclaw/openclaw.json,就可以从那个号码 DM bot 了。
推荐起步配置
json5
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
model: { primary: "anthropic/claude-sonnet-4-6" },
},
list: [
{
id: "main",
identity: {
name: "Clawd",
theme: "helpful assistant",
emoji: "🦞",
},
},
],
},
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
messages: {
visibleReplies: "automatic",
groupChat: {
visibleReplies: "message_tool", // opt-in; visible output requires message(action=send)
unmentionedInbound: "room_event",
},
},
}扩展示例(主要选项)
JSON5 允许注释和尾逗号,也可以用普通 JSON。
json5
{
// 环境 + shell
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: {
GROQ_API_KEY: "gsk-...",
},
shellEnv: {
enabled: true,
timeoutMs: 15000,
},
},
// 认证 profile 元数据(密钥存在 auth-profiles.json)
auth: {
profiles: {
"anthropic:default": { provider: "anthropic", mode: "api_key" },
"anthropic:work": { provider: "anthropic", mode: "api_key" },
"openai:default": { provider: "openai", mode: "api_key" },
"openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
},
order: {
anthropic: ["anthropic:default", "anthropic:work"],
openai: ["openai:default"],
"openai-codex": ["openai-codex:personal"],
},
},
// 身份在 agents.list[].identity 中设置,不在此处
// 日志
logging: {
level: "info",
file: "/tmp/openclaw/openclaw.log",
consoleLevel: "info",
consoleStyle: "pretty",
redactSensitive: "tools",
},
// 消息格式
messages: {
messagePrefix: "[openclaw]",
visibleReplies: "automatic",
responsePrefix: ">",
ackReaction: "👀",
ackReactionScope: "group-mentions",
groupChat: {
historyLimit: 50,
visibleReplies: "message_tool", // 有工具可靠模型时才在开放房间启用
unmentionedInbound: "room_event",
},
queue: {
mode: "followup",
debounceMs: 500,
cap: 20,
drop: "summarize",
byChannel: {
whatsapp: "followup",
telegram: "followup",
discord: "collect",
slack: "collect",
signal: "followup",
imessage: "followup",
webchat: "followup",
},
},
},
// 工具
tools: {
media: {
audio: {
enabled: true,
maxBytes: 20971520,
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
// 可选 CLI 降级(Whisper 二进制):
// { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] }
],
timeoutSeconds: 120,
},
video: {
enabled: true,
maxBytes: 52428800,
models: [{ provider: "google", model: "gemini-3-flash-preview" }],
},
},
},
// 会话行为
session: {
scope: "per-sender",
dmScope: "per-channel-peer", // 推荐用于多用户收件箱
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 60,
},
resetByChannel: {
discord: { mode: "idle", idleMinutes: 10080 },
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/default/sessions/sessions.json",
maintenance: {
mode: "warn",
pruneAfter: "30d",
maxEntries: 500,
resetArchiveRetention: "30d", // 持续时间或 false
maxDiskBytes: "500mb", // 可选
highWaterBytes: "400mb", // 可选(默认 maxDiskBytes 的 80%)
},
typingIntervalSeconds: 5,
sendPolicy: {
default: "allow",
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
},
},
// 渠道
channels: {
whatsapp: {
dmPolicy: "pairing",
allowFrom: ["+15555550123"],
groupPolicy: "allowlist",
groupAllowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
telegram: {
enabled: true,
botToken: "YOUR_TELEGRAM_BOT_TOKEN",
allowFrom: ["123456789"],
groupPolicy: "allowlist",
groupAllowFrom: ["123456789"],
groups: { "*": { requireMention: true } },
},
discord: {
enabled: true,
token: "YOUR_DISCORD_BOT_TOKEN",
dm: { enabled: true, allowFrom: ["123456789012345678"] },
guilds: {
"123456789012345678": {
slug: "friends-of-openclaw",
requireMention: false,
channels: {
general: { allow: true },
help: { allow: true, requireMention: true },
},
},
},
},
slack: {
enabled: true,
botToken: "xoxb-REPLACE_ME",
appToken: "xapp-REPLACE_ME",
channels: {
"#general": { allow: true, requireMention: true },
},
dm: { enabled: true, allowFrom: ["U123"] },
slashCommand: {
enabled: true,
name: "openclaw",
sessionPrefix: "slack:slash",
ephemeral: true,
},
},
},
// Agent 运行时
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
userTimezone: "America/Chicago",
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["anthropic/claude-opus-4-6", "openai/gpt-5.4"],
},
imageModel: {
primary: "openrouter/anthropic/claude-sonnet-4-6",
},
models: {
"anthropic/claude-opus-4-6": { alias: "opus" },
"anthropic/claude-sonnet-4-6": { alias: "sonnet" },
"openai/gpt-5.4": { alias: "gpt" },
},
skills: ["github", "weather"], // 子 agent 未设置 list[].skills 时继承
thinkingDefault: "low",
verboseDefault: "off",
toolProgressDetail: "explain",
reasoningDefault: "off",
elevatedDefault: "on",
blockStreamingDefault: "off",
blockStreamingBreak: "text_end",
blockStreamingChunk: {
minChars: 800,
maxChars: 1200,
breakPreference: "paragraph",
},
blockStreamingCoalesce: {
idleMs: 1000,
},
humanDelay: {
mode: "natural",
},
timeoutSeconds: 600,
mediaMaxMb: 5,
typingIntervalSeconds: 5,
maxConcurrent: 3,
heartbeat: {
every: "30m",
model: "anthropic/claude-sonnet-4-6",
target: "last",
directPolicy: "allow", // allow(默认)| block
to: "+15555550123",
prompt: "HEARTBEAT",
ackMaxChars: 300,
},
memorySearch: {
provider: "gemini",
model: "gemini-embedding-001",
remote: {
apiKey: "${GEMINI_API_KEY}",
},
extraPaths: ["../team-docs", "/srv/shared-notes"],
},
sandbox: {
mode: "non-main",
scope: "session", // 优先于旧版 perSession: true
workspaceRoot: "~/.openclaw/sandboxes",
docker: {
image: "openclaw-sandbox:bookworm-slim",
workdir: "/workspace",
readOnlyRoot: true,
tmpfs: ["/tmp", "/var/tmp", "/run"],
network: "none",
user: "1000:1000",
},
browser: {
enabled: false,
},
},
},
list: [
{
id: "main",
default: true,
identity: {
name: "Samantha",
theme: "helpful sloth",
emoji: "🦥",
},
// 继承 defaults.skills -> github, weather
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
thinkingDefault: "high", // 每个 agent 的 thinking 覆盖
reasoningDefault: "on", // 每个 agent 的推理可见性覆盖
fastModeDefault: false, // 每个 agent 的快速模式
},
{
id: "quick",
skills: [], // 此 agent 不使用技能
fastModeDefault: true, // 始终使用快速模式
thinkingDefault: "off",
},
],
},
tools: {
allow: ["exec", "process", "read", "write", "edit", "apply_patch"],
deny: ["browser", "canvas"],
exec: {
backgroundMs: 10000,
timeoutSec: 1800,
cleanupMs: 1800000,
},
elevated: {
enabled: true,
allowFrom: {
whatsapp: ["+15555550123"],
telegram: ["123456789"],
discord: ["123456789012345678"],
slack: ["U123"],
signal: ["+15555550123"],
imessage: ["user@example.com"],
webchat: ["session:demo"],
},
},
},
// 自定义模型提供商
models: {
mode: "merge",
providers: {
"custom-proxy": {
baseUrl: "http://localhost:4000/v1",
apiKey: "LITELLM_KEY",
api: "openai-responses",
authHeader: true,
headers: { "X-Proxy-Region": "us-west" },
models: [
{
id: "llama-3.1-8b",
name: "Llama 3.1 8B",
api: "openai-responses",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 128000,
maxTokens: 32000,
},
],
},
},
},
// Cron 任务
cron: {
enabled: true,
store: "~/.openclaw/cron/cron.json",
maxConcurrentRuns: 2, // cron 调度 + 隔离的 cron agent 回合执行
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000,
},
},
// Webhooks
hooks: {
enabled: true,
path: "/hooks",
token: "shared-secret",
presets: ["gmail"],
transformsDir: "~/.openclaw/hooks/transforms",
mappings: [
{
id: "gmail-hook",
match: { path: "gmail" },
action: "agent",
wakeMode: "now",
name: "Gmail",
sessionKey: "hook:gmail:{{messages[0].id}}",
messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}",
textTemplate: "{{messages[0].snippet}}",
deliver: true,
channel: "last",
to: "+15555550123",
thinking: "low",
timeoutSeconds: 300,
transform: {
module: "gmail.js",
export: "transformGmail",
},
},
],
gmail: {
account: "openclaw@gmail.com",
label: "INBOX",
topic: "projects/<project-id>/topics/gog-gmail-watch",
subscription: "gog-gmail-watch-push",
pushToken: "shared-push-token",
hookUrl: "http://127.0.0.1:18789/hooks/gmail",
includeBody: true,
maxBytes: 20000,
renewEveryMinutes: 720,
serve: { bind: "127.0.0.1", port: 8788, path: "/" },
tailscale: { mode: "funnel", path: "/gmail-pubsub" },
},
},
// Gateway + 网络
gateway: {
mode: "local",
port: 18789,
bind: "loopback",
controlUi: { enabled: true, basePath: "/openclaw" },
auth: {
mode: "token",
token: "gateway-token",
allowTailscale: true,
},
tailscale: { mode: "serve", resetOnExit: false },
remote: { url: "ws://gateway.tailnet:18789", token: "remote-token" },
reload: { mode: "hybrid", debounceMs: 300 },
},
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/Projects/agent-scripts/skills"],
allowSymlinkTargets: ["~/Projects/agent-scripts/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun
allowUploadedArchives: false,
},
entries: {
"image-lab": {
enabled: true,
apiKey: "GEMINI_KEY_HERE",
env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
},
peekaboo: { enabled: true },
},
},
}Symlinked sibling skill repo
当内建技能根目录包含指向同级仓库的符号链接时使用,例如 ~/.agents/skills/manager -> ~/Projects/manager/skills。
json5
{
skills: {
load: {
extraDirs: ["~/Projects/manager/skills"],
allowSymlinkTargets: ["~/Projects/manager/skills"],
},
},
}extraDirs将同级仓库作为显式技能根目录扫描。allowSymlinkTargets让符号链接的技能文件夹解析到受信任的真实目标根,不会允许任意符号链接逃逸。
常用模式
共享技能基线 + 单个覆盖
json5
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
skills: ["github", "weather"],
},
list: [
{ id: "main", default: true },
{ id: "docs", workspace: "~/.openclaw/workspace-docs", skills: ["docs-search"] },
],
},
}agents.defaults.skills是共享基线。agents.list[].skills替换该基线的技能列表。- 某 agent 不需要技能时用
skills: []。
多平台接入
json5
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: {
whatsapp: { allowFrom: ["+15555550123"] },
telegram: {
enabled: true,
botToken: "YOUR_TOKEN",
allowFrom: ["123456789"],
},
discord: {
enabled: true,
token: "YOUR_TOKEN",
dm: { allowFrom: ["123456789012345678"] },
},
},
}受信任节点网络自动审批
除非你控制网络路径,否则保持设备配对手动。对于专用实验室或 tailnet 子网,可以用精确的 CIDR 或 IP 启用首次节点设备自动审批:
json5
{
gateway: {
nodes: {
pairing: {
autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"],
},
},
},
}未设置时此功能保持关闭。它仅对没有请求 scopes 的全新 role: node 配对生效。Operator/browser 客户端以及角色、scope、元数据或公钥升级仍需手动审批。
安全 DM 模式(共享收件箱 / 多用户 DM)
如果超过一个人可以向 bot 发 DM(allowFrom 中有多个条目、多人的配对审批,或 dmPolicy: "open"),启用安全 DM 模式,这样不同发送者的 DM 默认不共享同一上下文:
json5
{
// 安全 DM 模式(推荐用于多用户或敏感 DM agent)
session: { dmScope: "per-channel-peer" },
channels: {
// 示例:WhatsApp 多用户收件箱
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+15555550123", "+15555550124"],
},
// 示例:Discord 多用户收件箱
discord: {
enabled: true,
token: "YOUR_DISCORD_BOT_TOKEN",
dm: { enabled: true, allowFrom: ["123456789012345678", "987654321098765432"] },
},
},
}对于 Discord/Slack/Google Chat/Microsoft Teams/Mattermost/IRC,发送者授权默认以 ID 优先。只有明确接受风险时,才用每个渠道的 dangerouslyAllowNameMatching: true 启用直接可变名称/邮箱/昵称匹配。
Anthropic API Key + MiniMax 降级
json5
{
auth: {
profiles: {
"anthropic:api": {
provider: "anthropic",
mode: "api_key",
},
},
order: {
anthropic: ["anthropic:api"],
},
},
models: {
providers: {
minimax: {
baseUrl: "https://api.minimax.io/anthropic",
api: "anthropic-messages",
apiKey: "${MINIMAX_API_KEY}",
},
},
},
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["minimax/MiniMax-M2.7"],
},
},
},
}工作 bot(限制访问)
json5
{
agents: {
defaults: {
workspace: "~/work-openclaw",
elevatedDefault: "off",
},
list: [
{
id: "main",
identity: {
name: "WorkBot",
theme: "professional assistant",
},
},
],
},
channels: {
slack: {
enabled: true,
botToken: "xoxb-...",
channels: {
"#engineering": { allow: true, requireMention: true },
"#general": { allow: true, requireMention: true },
},
},
},
}仅本地模型
json5
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
model: { primary: "lmstudio/my-local-model" },
},
},
models: {
mode: "merge",
providers: {
lmstudio: {
baseUrl: "http://127.0.0.1:1234/v1",
apiKey: "lmstudio",
api: "openai-responses",
models: [
{
id: "my-local-model",
name: "Local Model",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 196608,
maxTokens: 8192,
},
],
},
},
},
}提示
- 设置
dmPolicy: "open"时,对应的allowFrom列表必须包含"*"。 - 提供商 ID 格式不同(电话号码、用户 ID、频道 ID)。查阅提供商文档确认格式。
- 可选的后续配置章节:
web、browser、ui、discovery、plugins、talk、signal、imessage。 - 深度设置说明见提供商文档和故障排查。
常见问题
配置没生效应该检查什么?
首先确认配置文件路径正确(默认 ~/.openclaw/openclaw.json)。检查 JSON5 语法(尾逗号、注释是否与选用的解析器一致)。使用 openclaw doctor 诊断配置错误。常见问题:auth 中的 profile key 格式错误、allowFrom 未包含目标用户、dmPolicy 与 allowFrom 不匹配。
多用户私聊如何防止上下文混淆?
设置 session.dmScope: "per-channel-peer",这样每个发送者对同一渠道的独立会话不共享历史。同时确保使用基于 ID 的授权(不要开启 dangerouslyAllowNameMatching)。对于多个 allowFrom 条目,建议使用 dmPolicy: "allowlist" 而非 "open"。
怎么添加自定义本地模型?
在 models.providers 下定义新 provider,指定 baseUrl、apiKey、api(如 openai-responses),并在 models 数组中列出模型 ID、上下文窗口、费用等。然后在 agents.defaults.model.primary 中使用 provider 前缀(如 lmstudio/my-local-model)。示例见“仅本地模型”配置。