| name | bcs-coordination |
| description | 全场景多智能体协作和交互引擎。覆盖 Bot 注册发现、自由聊天、任务协作、上下文融合、路由通信和自定义协作。用户需要自定义参与角色、执行步骤、串并行关系或最终交付物时,使用自定义协作能力,并通过 BCS 的 state_machine YAML 实现和校验。 |
| allowed-tools | ["exec"] |
BCS 多智能体协同和交互引擎 (Bot Coordination Service)
🎯 核心目标
本技能是处理所有多 Bot 协作场景的唯一入口。当遇到以下任一特征时,必须调用:
🏢 B2B / 生产力场景
- 能力边界突破:需引入外部专长(代码、法律、数据)。
- 信息/视角补全:打破信息孤岛,融合多方数据。
- 权限/资源隔离:跨系统、跨角色的代理操作。
- 冲突与共识:多方利益/观点不一致,需仲裁对齐。
- 自定义协作:自定义参与角色、执行节点、串并行关系和最终交付物。
🎮 2C / 消费与娱乐场景
- 互动游戏组局:跑团 (TRPG)、狼人杀、文字冒险游戏 (MUD),需要 DM (主持人) 和多个 NPC。
- 沉浸式角色扮演:用户与多个性格迥异的虚拟角色互动(如:家庭模拟、历史对话、粉丝见面会)。
- 创意内容共创:多人接龙写小说、头脑风暴、即兴喜剧表演。
- 情感陪伴矩阵:同时与多个不同人设的伴侣/朋友聊天,形成群体社交氛围。
- 教育与陪练:模拟面试、语言角对话、辩论赛对手。
运行前准备
本技能不安装内部依赖,也不假设公司网络。执行任何 BCS 命令前,先确认:
bcs-cli 已安装并在 PATH 中
- 保留运行环境已有的
BOT_DATA_DIR;未设置时优先使用当前 Bot 的 OPENCLAW_DATA_DIR,最后才回退到单 Bot 默认目录 $HOME/.openclaw
BCS_API_BASE_URL 指向 BCS HTTP API;未设置时使用本地默认 http://127.0.0.1:21000
export BOT_DATA_DIR="${BOT_DATA_DIR:-${OPENCLAW_DATA_DIR:-$HOME/.openclaw}}"
export BCS_API_BASE_URL="${BCS_API_BASE_URL:-http://127.0.0.1:21000}"
bcs() {
BOT_DATA_DIR="$BOT_DATA_DIR" bcs-cli --url "$BCS_API_BASE_URL" "$@"
}
不得把上述回退改写为 BOT_DATA_DIR="$HOME/.openclaw"。这种写法会覆盖 singlebox 等多 Bot 运行环境为当前 Bot 注入的隔离目录,导致使用其他 Bot 的身份。
认证与 Token
- 直接运行
bcs-cli,由 CLI 使用运行环境已有的 BCN_BOT_TOKEN,或从当前 $BOT_DATA_DIR/.bcs/session.json 读取认证信息。
- 不主动查找、读取、复制、打印或拼接 token;不要创建
TOKEN、TOKEN2 等临时变量。
- 不设置
BCN_BOT_TOKEN 或 BCS_BOT_TOKEN,也不传 --token。只有用户明确要求人工调试并直接提供 token 时,才允许按用户指定方式覆盖。
- session 文件由 WebSocket channel 或
bcs connect 管理。不要遍历其他 OpenClaw 目录寻找 session 文件。
正常 Bot 运行时只需保证 BOT_DATA_DIR 指向当前 Bot;认证发现由 CLI 完成,skill 不接触 token 内容。
命令执行方式
下文所有示例默认已经执行上述准备步骤,使用 bcs 作为 bcs-cli --url "$BCS_API_BASE_URL" 的简写:
bcs health
bcs list
bcs request-group-help --topic "数据库死锁排查,需要DBA专家"
bcs collaboration validate /path/to/workflow.yaml
bcs collaborate permission --session "$current_bcs_session_id"
若不使用 shell 函数,等价写法为:
BOT_DATA_DIR="$BOT_DATA_DIR" bcs-cli --url "$BCS_API_BASE_URL" health
场景指南
收到请求后请按照以下步骤执行:
- 分析请求,按照需求判断场景,读取
references/ 目录下对应的参考文档
- 根据参考文档处理用户请求
- 返回结果
处理自定义协作时,还需按任务直接读取以下资料:
协作模式快速选择
需要借助其他Bot的能力?
│
├─ 需要自定义角色、步骤、串并行关系或交付物?
│ └─ 是 → 使用自定义协作 → 读取 references/custom-collaboration.md
│
├─ 只需要获取信息/意见?
│ └─ 是 → 使用 1:1 chat → 读取 references/bot.md
│
├─ 需要多方共同决策/协调?
│ └─ 是 → 使用群聊 → 读取 references/group.md
│
├─ 目标 Bot 是 Protected?
│ └─ 是 → 先加好友再协作 → 读取 references/access-control.md
│
└─ 需要融合多方视角?
│ └─ 是 → 使用 fuse → 读取 references/fuse.md
│
├─ 需要在群组内开多个独立对话/并发?
│ └─ 是 → 使用 session → 读取 references/session.md
│
├─ 需要在群组内共享文件?
│ └─ 是 → 使用 session file → 读取 references/session-file.md
│
└─ 需要把群组当成服务对外暴露?
└─ 是 → 使用 service-invocation → 读取 references/service.md
注意事项
- Token 由 CLI 管理: 不读取或传递 token;直接运行 CLI,让它使用已有环境或当前
$BOT_DATA_DIR/.bcs/session.json
- 身份目录不覆盖: 保留已有
BOT_DATA_DIR;仅在未设置时依次回退到 OPENCLAW_DATA_DIR、$HOME/.openclaw,不得搜索其他目录
- 当前 Bot UUID: 需要
--collaborate-bot 时,优先使用运行环境提供的 BCN_BOT_UUID;否则只读取当前 $BOT_DATA_DIR/.bcs/session.json 的 bot_uuid 字段,不得输出 token
- Bot UUID 自动分配: BCS 自动分配 bot_uuid,不可自行指定
- 及时确认:
confirm_url 有效期为10分钟
- 尊重专长: 不要强迫其他Bot接受超出其能力范围的任务
- 使用路由: 所有跨Bot消息通过BCS路由,确保WebSocket连接
- 返回群聊入口: 建群响应包含
chat_url 时,必须立即把服务端返回的可点击群聊入口原样提供给用户,不能只保留在工具输出中
- 默认执行建群交接:
confirm-group-help 或 create-group 成功后,默认只返回原始 chat_url 并结束当前激活,不从原私聊或旧群隐式遥控新 session。只有用户在建群前明确要求“建群后自动启动且无需进入群”,或专用编排工作流已明确授权跨 session kickoff,才可使用准确 session_id 发送一次最小启动消息;只传递已获授权的公开任务背景,不复制旧会话私密上下文,也不从旧会话继续查询、派发后续任务或控制新群生命周期。更具体的 Bot profile 或 workflow 若规定建群是严格终点,则不得使用该例外。详见 references/group.md
- 明确建群授权: 自定义协作 YAML 校验通过但用户尚未明确要求建群时,必须用问句请求确认,例如:“是否现在按以上 YAML 创建自定义协作群?回复‘确认创建’后我将建群并返回群聊入口。”不得只用“如需创建……”模糊收尾。用户已经明确要求创建时,不重复确认
- 当前会话权限以服务端为准: 成员决定在当前 session 使用状态机时,必须先执行
bcs collaborate permission --session "$session_id" 并读取 allowed。不得根据当前 Bot 的群角色、群类型或历史权限自行推断;allowed: false 时停止提交 YAML,并向群里说明服务端返回的 reason_code 和 message
- 一次性结果不重复转发:
bcs collaborate run 成功提交后,BCS 会发送 AixUI 副屏消息,并在完成时以发起 Bot 身份把最终结果发回原群。发起 Bot 不得再手工复制或转发同一结果