---
summary: "agents.entries 覆盖、多代理绑定、绑定匹配字段和访问配置文件"
read_when:
- "覆盖一个代理的默认值"
- "将渠道或帐户路由至特定代理"
- "编写每个代理工具和沙箱访问配置文件"
title: "配置 — 每个代理条目和多代理路由"
---
每个代理在 `agents.entries` 和 `multiAgent` 绑定下覆盖,决定哪个代理应答消息。
## `agents.entries`(每个代理覆盖)
使用 `agents.entries.*.tts` 为代理指定其自己的 TTS 提供商、语音、模型、 风格或自动 TTS 模式。代理配置块会与全局 `tts` 进行深度合并,因此共享凭据可以集中放置,而各个代理只需覆盖所需的语音或提供商字段。当前代理的覆盖设置会应用于自动语音回复、`/tts audio`、`/tts status` 以及 `tts` 代理工具。有关提供商示例和优先级,请参阅[文本转语音](/tools/tts#per-agent-voice-overrides)。
```json5
{
agents: {
entries: {
main: {
name: "Main Agent",
workspace: "~/.openclaw/workspace",
agentDir: "~/.openclaw/agents/main/agent",
model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
utilityModel: "openai/gpt-5.4-mini",
thinkingDefault: "high", // per-agent thinking level override
reasoningDefault: "on", // per-agent reasoning visibility override
fastModeDefault: false, // per-agent fast mode override
params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
tts: {
providers: {
elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" },
},
},
skills: ["docs-search"], // replaces agents.defaults.skills when set
identity: {
name: "Samantha",
theme: "helpful sloth",
emoji: "🦥",
avatar: "avatars/samantha.png",
},
groupChat: { mentionPatterns: ["@openclaw"] },
sandbox: { mode: "off" },
runtime: {
type: "acp",
acp: {
agent: "codex",
backend: "acpx",
mode: "persistent", // persistent | oneshot
cwd: "/workspace/openclaw",
},
},
subagents: { allowAgents: ["*"] },
tools: {
profile: "coding",
allow: ["browser"],
deny: ["canvas"],
elevated: { enabled: true },
},
},
},
},
}
```
- `agents.entries` 对象密钥是稳定代理 ID。
- `cwd`:用于回复运行的可选工作目录,与 `workspace` 分开。覆盖 `agents.defaults.cwd`;有关优先级和沙箱限制,请参阅 [ 工作目录](/gateway/config-agents/workspace-and-bootstrap#agents.defaults.cwd)。
- `default` 已退役。恰好一个配置的代理隐式解析;多代理操作需要绑定、表面 `agentId` 目标、范围 session/store 所有者或显式 `--agent`/request 字段。
- `model`:字符串形式会为代理设置严格的主模型,不使用模型回退;对象形式的 `{ primary }` 同样严格,除非添加 `fallbacks`。使用 `{ primary, fallbacks: [...] }` 可让该代理启用回退,或使用 `{ primary, fallbacks: [] }` 明确指定严格行为。只覆盖 `primary` 的 Cron 作业仍会继承默认回退,除非设置 `fallbacks: []`。
- `utilityModel`:可选的代理级覆盖项,用于生成会话标题和线程标题等简短内部任务。会回退到 `agents.defaults.utilityModel`,然后回退到当前有效会话提供程序声明的小模型默认值。控制面板标题会使用当前有效的常规会话模型重试一次。空字符串会跳过该代理的备用实用模型路径,但不会禁用控制面板标题生成。
- `params`:代理范围的流参数合并到共享的和代理特定的每个模型参数上。将此用于应适用于代理模型的覆盖,例如 `cacheRetention`、`temperature` 或 `maxTokens`。
- `tts`:可选的代理级文本转语音覆盖项。该配置块会与 `tts` 深度合并,因此应将共享的提供程序凭据和回退策略保留在 `tts` 中,并仅在此处设置角色专用的值,例如提供程序、语音、模型、风格或自动模式。
- `skills`:可选的代理级技能允许列表。如果省略,代理会在设置时继承 `agents.defaults.skills`;显式列表会替换默认值而不是合并,`[]` 表示不使用任何技能。
- `thinkingDefault`:可选的每个代理默认思维级别 (`off | minimal | low | medium | high | xhigh | adaptive | max | ultra`)。当未设置每条消息或会话覆盖时,优先于代理特定和共享模型 `params.thinking` 设置和 `agents.defaults.thinkingDefault`。所选的 provider/model 配置文件控制哪些值有效;对于Google Gemini,`adaptive`保持提供商拥有的动态思维(`thinkingLevel`在Gemini 3/3.1上省略,`thinkingBudget: -1`在Gemini 2.5上省略)。参见[思维解析顺序](/tools/thinking#resolution-order)。
- `reasoningDefault`:可选的代理级默认 reasoning 可见性(`on | off | stream`)。当未设置每条消息或会话级 reasoning 覆盖时,会覆盖该代理的 `agents.defaults.reasoningDefault`。
- `fastModeDefault`:可选的代理级快速模式默认值(`"auto" | true | false`)。当未设置每条消息或会话级快速模式覆盖时,会覆盖该代理的 `agents.defaults.fastModeDefault`。
- `models`:可选的每个代理模型设置,由完整的 `provider/model` id 键入。使用 `models["provider/model"].params` 进行特定于模型的请求设置,使用 `models["provider/model"].agentRuntime` 进行运行时异常。 `models["provider/model"].codeMode` 接受 `true` 或 `false`,并优先于代理的 `tools.codeMode` 激活、共享模型覆盖和全局默认值。省略它来继承;它不影响 Codex 本机代码模式。
- `nativeRuntimeConsent`:设置期间记住的harness ID 的可选列表,例如 `["muse"]`。仅适用于该代理;它没有全局或默认继承。管理员选择记住的harness或与其创建聊天会自动使用完全访问权限并禁用可选沙箱。此促销使用与显式设置更改相同的权限更改生命周期,并在活动运行期间拒绝更改。非管理员客户端无法使用记住的同意来提高聊天权限;他们现有的限制仍然适用。强制沙箱和工作区边界仍然拒绝运行时。每轮都会检查当前列表、当前会话身份、完全访问权限、沙箱关闭以及是否存在工具白名单、禁用工具或群体收集。在本机调度之前会立即再次检查当前的实时配置,因此删除同意也会阻止依赖它的排队或准备工作。在 **记住的本机运行时权限** 下的“设置”中删除 ID,以便根据记住的同意对每个聊天撤销它。明确的 **继续此聊天** 同意保持不变。该字段是可加的并且不需要迁移。
- `runtime`:可选的代理级运行时描述符。当代理应默认使用 ACP harness 会话时,使用 `type: "acp"` 以及 `runtime.acp` 默认值(`agent`、`backend`、`mode`、`cwd`)。
- `identity.avatar`:相对于工作区的路径、`http(s)` URL 或 `data:` URI。
- 本地工作空间相关的 `identity.avatar` 图像文件仅限于 2 个 MB。不会根据本地文件大小限制检查 `http(s)` URL 和 `data:` URI。
- `identity` 派生默认值:`ackReaction` 来自 `emoji`,`mentionPatterns` 来自 `name`/`emoji`.
- `subagents.allowAgents`:显式 `sessions_spawn.agentId` 目标的已配置代理 ID 的白名单(`["*"]` = 任何已配置目标;默认值:仅限相同代理)。当应允许自我定位 `agentId` 调用时,请包含请求者 ID。代理配置被删除的过时条目将被 `sessions_spawn` 拒绝,并从 `agents_list` 中省略;运行 `openclaw doctor --fix` 来清理它们,或者添加一个最小的 `agents.entries.*` 条目(如果该目标在继承默认值时应保持可生成)。
- `tools.agentToAgent.send`:`sessions_send` 的可选传出目标代理 ID 或 `*` 模式。忽略保留全局策略和可见性检查; `[]` 拒绝普通的跨代理发送。匹配允许在狭窄的可见性下进行仅发送访问,而不授予历史记录、搜索、列表、状态或会话控制。全球智能体对智能体政策和沙箱限制仍然适用;同一代理和请求者拥有的子规则保持不变。请参阅 [ 仅发送配置](/gateway/config-tools/sessions-and-subagents#per-agent-send-only-access)。
- 沙箱继承保护:如果请求方会话处于沙箱中,`sessions_spawn` 会拒绝将以未沙箱方式运行的目标。
- `subagents.requireAgentId`:为 true 时,阻止省略 `agentId` 的 `sessions_spawn` 调用(强制显式配置文件选择;默认值:false)。
- `subagents.maxConcurrent`:每个即时 spawning/controller 会话的最大并发子代理运行数。默认:`8`;独立会话有独立预算。 Codex-native 子代理使用 Codex 的单独调度程序和限制。
- `subagents.maxChildrenPerAgent`:单个代理会话可以生成的活动子项的单独入场限制。默认值:`5`。
- `subagents.maxSpawnDepth`:子代理生成的最大嵌套深度(`1`-`5`)。默认:`5`;设置 `1` 使直接子节点离开。
- `subagents.archiveAfterMinutes`:已完成子代理状态被归档前的存留时间。默认值:`60`。
---
## 多代理路由
在一个网关内运行多个独立的代理。请参阅 [Multi-Agent](/concepts/multi-agent)。
```json5
{
agents: {
ownership: "explicit",
defaults: { heartbeat: { agentId: "home" }, systemAgent: { agentId: "home" } },
entries: {
home: { workspace: "~/.openclaw/workspace-home" },
work: { workspace: "~/.openclaw/workspace-work" },
},
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
talk: { agentId: "home" },
}
```
### 绑定匹配字段
- `type`(可选):正常路由使用 `route`(缺省时默认为 route),持久化 ACP 会话绑定使用 `acp`。
- `match.channel`(必需)
- `match.accountId`(可选;`*` = 任意账户;省略 = 默认账户)
- `match.peer`(可选;`{ kind: direct|group|channel, id }`)
- `match.guildId` / `match.teamId`(可选;按渠道不同)
- `session`(可选;仅限路由绑定):`{ dmScope, groupScope }` 覆盖匹配对等方的会话路由
- `acp`(可选;仅适用于 `type: "acp"`):`{ mode, label, cwd, backend }`
**固定比赛顺序:**
1. `match.peer`
2. `match.guildId`
3. `match.teamId`
4. `match.accountId`(精确匹配,不含 peer/guild/team)
5. `match.accountId: "*"`(频道范围)
6. 单代理后备(仅当仅配置了一个代理时;没有匹配绑定的显式多代理队列拒绝请求)
在每个层级内,最先匹配的 `bindings` 条目获胜。
对于 `type: "acp"` 的条目,OpenClaw 会按精确会话身份(`match.channel` + account + `match.peer.id`)解析,不使用上面的路由绑定层级顺序。
### 每个代理的访问配置
```json5
{
agents: {
entries: {
personal: {
workspace: "~/.openclaw/workspace-personal",
sandbox: { mode: "off" },
},
},
},
}
```
```json5
{
agents: {
entries: {
family: {
workspace: "~/.openclaw/workspace-family",
sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
tools: {
allow: [
"read",
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
],
deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
},
},
},
},
}
```
```json5
{
agents: {
entries: {
public: {
workspace: "~/.openclaw/workspace-public",
sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
tools: {
allow: [
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
"whatsapp",
"telegram",
"slack",
"discord",
"gateway",
],
deny: [
"read",
"write",
"edit",
"apply_patch",
"exec",
"process",
"browser",
"canvas",
"nodes",
"cron",
"gateway",
"image",
],
},
},
},
},
}
```
有关优先级详细信息,请参阅 [ 多代理沙箱和 Tools](/tools/multi-agent-sandbox-tools)。