背景

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_spawnforbidden

• 原因: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 按需调度专业角色,各司其职。像一个真正的团队一样工作。