OpenClaw 默认只有一个主 agent,所有频道的消息都由它处理。但有些场景需要一个更专注的 agent:只做特定的事,不闲聊,不擅自扩展。
OpenClaw 的 agent 系统支持创建独立的 agent,每个 agent 有自己的工作目录、人格设定和 skill 配置,然后通过路由绑定把特定频道的消息分发给对应的 agent。举个例子,在 Discord 上建一个 RSS 频道,专门用来总结 Miniflux 里的订阅内容。下面记录一下这个配置过程。
创建专用工作目录
每个 agent 需要一个独立的工作目录,里面放它的人格设定和可用的 skill。
| |
SOUL.md:定义行为边界
SOUL.md 是 agent 的核心,决定了它"是谁"、“能做什么”、“不能做什么”。专用 agent 的关键是把边界画清楚:
| |
和主 agent 的 SOUL.md 对比,专用 agent 多了很多"不"——不闲聊、不扩展、不越界。这是故意的。通用 agent 需要灵活,专用 agent 需要克制。
链接 Skill
把需要的 skill 软链接到工作目录的 skills 目录:
| |
这样 agent 就能使用 miniflux-reader skill 来获取和处理 Miniflux 的未读条目。用软链接而不是复制,好处是 skill 更新时不用同步。
其他文件
IDENTITY.md 定义名称和 emoji,用来区分是哪个 agent 在回复:
| |
USER.md 从主工作目录复制过来就行,同一个用户。
创建 Agent
用 openclaw agents add 创建 agent:
| |
--model 参数改成你自己要用的模型。
设置 identity:
| |
绑定 Discord 频道
这一步是把 Discord 频道的消息路由到专用 agent。需要直接编辑 ~/.openclaw/openclaw.json,在现有的 bindings 数组中追加一条绑定规则(不要覆盖整个文件):
| |
频道 ID 的获取方式:在 Discord 中开启开发者模式(设置 → 高级 → 开发者模式),然后右键频道名 → 复制频道 ID。
改完后重启 gateway:
| |
用 openclaw agents bindings 验证,应该能看到:
- rss <- discord peer=channel:<你的频道ID>
OpenClaw 的路由匹配支持几种维度:
| 字段 | 用途 |
|---|---|
peer.kind + peer.id | 匹配特定频道、群组或 DM |
guildId | 匹配整个 Discord 服务器 |
accountId | 匹配特定账号(多账号场景) |
roles | 按 Discord 角色路由 |
按频道路由用 peer,按服务器路由用 guildId,按用户路由用 accountId。
验证
最直观的方式是在 Discord 频道里问"你是谁"。如果回答的是专用 agent 的名字而不是主 agent 的名字,说明路由生效了。