背景
OpenClaw 支持配置多个 Agent,每个 Agent 有独立的身份、工作目录和人设。但默认情况下,Agent 之间是完全隔离的——它们各自独立,互不相通。
本文记录了如何让主 Agent 获得调度其他 Agent 的能力,实现"一个入口,团队协作"——你只需要跟一个 Agent 说话,它来帮你派活给对应的角色。
第一步:确认现有 Agent 配置
查看当前 Agent 列表:
openclaw config get agents.list
我们的配置中有 4 个 Agent:
{
agents: {
list: [
{ id: "main", name: "小迷弟Claw" }, // 主 Agent,万能管家
{ id: "cb7675a1", name: "硬件产品经理" }, // 硬件产品规划
{ id: "4c5afdc1", name: "硬件负责人" }, // 硬件穿戴方向
{ id: "a69d5266", name: "品牌和市场负责人" } // 品牌推广、获客
]
}
}
每个 Agent 的关键字段:
• id:唯一标识符,后续配置中要用
• name:显示名称
• workspace:独立工作目录(Agent 之间文件隔离)
• agentDir:Agent 的人设/提示词目录(包含 SOUL.md 等)
第二步:理解消息路由(Bindings)
OpenClaw 用 bindings 决定哪个渠道的消息发给哪个 Agent:
{
bindings: [
{ agentId: "main", match: { channel: "feishu" } },
{ agentId: "main", match: { channel: "telegram" } },
{ agentId: "main", match: { channel: "webchat" } }
]
}
问题:所有渠道的消息都路由到了 main。其他 Agent 没有任何渠道绑定,在飞书上找不到它们。
两种解决方案
• 方案 A:每个 Agent 独立渠道 — 为每个 Agent 创建独立的飞书/Telegram Bot。每个 Agent 有自己的入口,但要创建多个 Bot。
• 方案 B:主 Agent 中转调度(推荐) — 开启 agentToAgent,让主 Agent 派活给其他 Agent。只需一个 Bot 入口,配置简单。
我们选了方案 B。
第三步:开启 agentToAgent 通信
这是让 Agent 之间可以互相通信的开关。修改 ~/.openclaw/openclaw.json:
修改前:
{
tools: {
agentToAgent: {
enabled: false,
allow: ["main"]
}
}
}
修改后:
{
tools: {
agentToAgent: {
enabled: true,
allow: ["main", "cb7675a1", "4c5afdc1", "a69d5266"]
}
}
}
第四步:配置 Subagent 派活权限(关键!)
⚠️ 这一步很多人会漏掉。光开启 agentToAgent 不够,还需要在主 Agent 的配置里声明"我允许派活给哪些 Agent"。
在 agents.list 中,给 main Agent 加上 subagents.allowAgents:
{
agents: {
list: [
{
id: "main",
name: "小迷弟Claw",
subagents: {
allowAgents: ["cb7675a1", "4c5afdc1", "a69d5266"]
}
}
]
}
}
不加这个会怎样?主 Agent 调用 sessions_spawn 时会报错:
status: "forbidden"
error: "agentId is not allowed for sessions_spawn (allowed: none)"
第五步:重启生效并验证
openclaw gateway restart
重启后,主 Agent 调用 agents_list 可以看到所有可调度的 Agent:
{
"agents": [
{ "id": "main", "name": "小迷弟Claw" },
{ "id": "4c5afdc1", "name": "硬件负责人" },
{ "id": "a69d5266", "name": "品牌和市场负责人" },
{ "id": "cb7675a1", "name": "硬件产品经理" }
]
}
如果列表里只有 main,说明 allowAgents 没配对。
第六步:派活实战
配置完成后,主 Agent 通过 sessions_spawn 派活:
sessions_spawn({
agentId: "a69d5266", // 品牌和市场负责人
mode: "run", // 一次性运行
label: "brand-analysis", // 任务标签
runTimeoutSeconds: 120, // 超时时间
task: "请从品牌角度分析以下项目列表..."
})
子 Agent 完成后会自动推送结果回主 Agent,主 Agent 再转述给用户。整个过程用户只跟一个入口交互。
实际使用时,用户只需要在飞书说一句:
"让品牌和市场负责人分析一下我们的项目优先级"
主 Agent 会自动理解指令、派活、等结果、整理后回复。
踩坑记录
坑 1:只开了 agentToAgent 没配 allowAgents
• 现象:sessions_spawn 报 forbidden
• 原因:agentToAgent.enabled 控制 Agent 间通信,但 subagents.allowAgents 控制哪些 Agent 可以被 spawn
• 解决:两个都要配
坑 2:飞书只有一个 Bot,其他 Agent 找不到
• 现象:飞书只能跟主 Agent 聊天
• 原因:飞书一个 appId 对应一个 Bot,bindings 只绑了 main
• 解决:方案 A(多个飞书 App)或方案 B(主 Agent 中转)
坑 3:配置修改后没重启
• 解决:openclaw gateway restart
进阶玩法
给子 Agent 用便宜模型省钱
{
agents: {
defaults: {
subagents: {
model: "cheaper-model/id"
}
}
}
}
嵌套调度(Agent → Agent → Agent)
{
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2 // 允许一层嵌套
}
}
}
}
给每个 Agent 定制人设
每个 Agent 的 agentDir 下放 SOUL.md 等文件:
~/.openclaw/agents/a69d5266/agent/
├── SOUL.md # 品牌负责人的人设和风格
├── AGENTS.md # 工作规则
└── TOOLS.md # 工具使用备注
总结
两行关键配置,搞定多 Agent 协作:
• tools.agentToAgent.enabled: true — 打开 Agent 间通信
• agents.list[main].subagents.allowAgents — 授权可调度的 Agent 列表
效果:用户只跟一个主 Agent 聊天,主 Agent 按需调度专业角色,各司其职。像一个真正的团队一样工作。
Member discussion: