# 频道隔离模型 NanoClaw 将消息频道与 agent group(智能体组)解耦。当你连接一个频道(Discord、Telegram、Slack、GitHub 等)时,需要决定它与你现有 agent 的关系。共有三个隔离级别。 ## 三个级别 ### 1. 共享 Session 多个频道输入到同一个对话中。agent 在一个线程中看到来自所有频道的所有消息。 **共享的内容:** 所有——工作区、记忆、CLAUDE.md,以及对话本身。一条 GitHub PR 评论和一条 Slack 消息在 agent 的上下文中并排出现。 **示例:** 一个 Slack 频道与 GitHub webhooks 配对。agent 通过 GitHub 接收 PR 审查请求,并在 Slack 中讨论它们——全部在一个 session(会话)中。当有人评论 PR 时,agent 可以引用之前 Slack 中关于该功能的讨论。 **何时使用:** 当一个频道向另一个频道提供上下文时。Webhook/通知频道(GitHub、Linear)与聊天频道(Slack、Discord)配对是典型场景。 **技术实现:** 两个 messaging group(消息组)以 `session_mode: 'agent-shared'` 连接到同一个 agent group。Session 解析仅按 agent group ID 查找,忽略 messaging group——因此所有频道汇聚到同一个 session。 --- ### 2. 相同 Agent,独立 Session 多个频道共享同一个 agent(相同工作区、记忆、个性),但拥有独立的对话。 **共享的内容:** 工作区、记忆、CLAUDE.md 以及所有持久化状态。如果你在一个 session 中告诉 agent 某事,它可以将其保存到记忆中并在另一个 session 中调取。agent 的个性、知识和工具在各个 session 中完全相同。 **独立的内容:** 对话线程。来自一个频道的消息不会出现在另一个频道的 session 中。每个频道有自己的上下文窗口和对话历史。 **示例:** 你有三个与 agent 的 Telegram 聊天——一个用于副项目,一个用于个人任务,一个用于工作。三个聊天共享同一个 agent 工作区。如果你在项目聊天中要求它记住你的 API 密钥命名规范,它可能在工作聊天中也调用该规范。但对话本身是独立的。 **何时使用:** 当你是跨频道的主要(或唯一)参与者,并且希望统一的 agent 身份时。这是跨多个平台或多个群组进行个人使用的最常见设置。 **技术实现:** 多个 messaging group 以 `session_mode: 'shared'`(或 `'per-thread'`)连接到同一个 agent group。每个 messaging group 获得自己的 session,但它们都在同一个 agent group 目录下运行。 --- ### 3. 独立的 Agent Group 每个频道拥有自己的 agent,拥有自己的工作区、记忆和个性。没有任何共享。 **共享的内容:** 无。这些 agent 彼此不知道对方的存在。不同的 CLAUDE.md,不同的记忆,不同的工作区,不同的对话历史。 **示例:** 你有一个与朋友的 Telegram 群组,以及一个用于团队项目的 Discord 服务器。朋友不应该知道你和团队讨论了什么,反之亦然。每个都获得自己的 agent,拥有自己的记忆和个性。 **何时使用:** 当涉及不同的人时,或者一个频道的信息永远不应泄露到另一个频道时。只要有隐私或保密边界,这就是正确的选择。 **技术实现:** 每个频道连接到不同的 agent group,每个在 `groups/` 下有自己的目录。独立的容器,独立的 session 数据库,独立的一切。 --- ## 如何决定 关键问题:**你是否能接受一个频道中的任何和所有信息在另一个频道中可用?** - **不能** → 独立的 agent group(级别 3) - **能,而且频道之间应该看到彼此的消息** → 共享 session(级别 1) - **能,但对话应该独立** → 相同 agent,独立 session(级别 2) ### 经验法则 | 场景 | 推荐级别 | |----------|------------------| | 仅你一人,多个平台(Telegram + Discord + Slack) | 相同 agent,独立 session | | 仅你一人,一个平台上的多个群组(3 个 Telegram 聊天) | 相同 agent,独立 session | | Webhook 频道 + 聊天频道(GitHub + Slack) | 共享 session | | 与朋友 A 的频道和与朋友 B 的频道 | 独立的 agent group | | 个人频道和工作频道 | 独立的 agent group | | 不同访问级别的团队频道 | 独立的 agent group | ### 不确定时 如果参与者在各频道相同 → 同一个 agent group 通常没问题。 如果涉及不同的人 → 独立的 agent group。否则信息会通过 agent 记忆交叉传播。 ## 实体模型 ``` agent_groups (工作区、记忆、CLAUDE.md、个性) ↕ 多对多 messaging_groups (平台上特定的频道/聊天/群组) 通过 messaging_group_agents (session_mode、trigger_rules、priority) ``` - **共享 session:** 多个 messaging_groups → 同一个 agent_group,`session_mode = 'agent-shared'` - **相同 agent,独立 session:** 多个 messaging_groups → 同一个 agent_group,`session_mode = 'shared'` - **独立 agent:** 每个 messaging_group → 不同的 agent_group