主题
会话管理
OpenClaw 通过 DM 配对、白名单和群组规则三层机制识别用户身份,并在 Session 层面隔离不同来源的上下文,确保隐私安全与数据独立。
身份认证
DM Pairing Policy(默认认证策略)
当一个未知用户首次通过私聊(DM)联系 Agent 时,OpenClaw 会启动一次性配对流程:
text
未知用户发送私聊消息
│
▼
┌─────────────────────────────┐
│ 1. Agent 回复一次性配对码 │
│ (6位数字,如 482917) │
└────────┬────────────────────┘
│
▼
┌─────────────────────────────┐
│ 2. 消息不被处理 │
│ Agent 进入等待状态 │
└────────┬────────────────────┘
│
▼
┌─────────────────────────────┐
│ 3. 主人在已配对渠道中 │
│ 输入配对码批准 │
│ 或直接拒绝 │
└─────────────────────────────┘安全设计
配对码是一次性的,每次新用户请求都会生成不同的码。主人必须在已经配对的渠道中确认,确保只有授权用户才能与 Agent 建立会话。
白名单机制(allowFrom)
对于已知的可信用户,可以在 AGENTS.md 中预先配置白名单,跳过配对流程直接授权:
yaml
allowFrom:
- telegram:123456789
- whatsapp:+8613800138000
- discord:user#1234格式说明
白名单条目的格式为 平台:用户标识,支持所有已接入的消息渠道。用户标识需要使用对应平台的唯一 ID(而非显示名称)。
群组规则(requireMention)
在群组场景中,Agent 默认只响应 @Agent名称 的消息,避免对无关对话产生干扰。
| 模式 | 行为 | 适用场景 |
|---|---|---|
mention(默认) | 仅响应 @提及 的消息 | 多人群组,减少噪音 |
always | 响应群内所有消息 | 小型专属群组,Agent 全程参与 |
切换命令:
bash
/activation mention # 仅响应 @提及(默认)
/activation always # 响应所有消息注意
在活跃的大群中启用 always 模式会导致 Agent 对每条消息都作出响应,可能产生大量回复和 token 消耗。建议仅在小型、专属群组中使用。
Session 隔离
不同场景下,Session 的创建和隔离策略有所不同:
| 场景 | Session 行为 | MEMORY.md | 说明 |
|---|---|---|---|
| 私聊(DM) | 所有已配对的私聊折叠到共享的 main session | 加载 | 无论来自哪个渠道的私聊,都共享同一上下文 |
| 群组 | 每个群组默认使用独立的隔离 session | 不加载 | 群组对话与私聊完全隔离,保护隐私 |
| 跨渠道 | 同一用户在 Telegram 和 WhatsApp 的私聊共享 main session | 加载 | 已配对用户的身份跨渠道统一 |
核心概念:Main Session
Main Session 是用户与 Agent 之间最核心的会话。它:
- 汇聚所有私聊渠道的对话
- 加载
MEMORY.md长期记忆 - 加载
USER.md用户信息 - 是唯一会触发 Pre-Compaction 记忆保存的 session 类型
隔离示意
text
用户 Alice
├── Telegram DM ──┐
├── WhatsApp DM ──┼──→ Main Session(共享上下文,加载 MEMORY.md)
├── Discord DM ───┘
├── 群组 A ───────────→ Group Session A(隔离,不加载 MEMORY.md)
└── 群组 B ───────────→ Group Session B(隔离,不加载 MEMORY.md)会话生命周期
text
用户发送消息
│
▼
身份认证(配对/白名单/群组规则)
│
▼
查找或创建 Session
│
▼
加载上下文(历史消息 + 记忆层)
│
▼
Agent 处理并回复
│
▼
更新 Session 记录 → 写入 sessions.json会话持久化
所有会话数据存储在工作区的 sessions.json 文件中,网关重启后自动恢复。
text
workspace/
└── sessions.json ← 会话状态持久化重置会话
用户可以通过以下命令管理会话:
bash
/reset # 清除当前会话的历史消息,开启新对话
/clear # 同 /reset重置不会清除长期记忆
/reset 只清除当前 Session 的对话历史。MEMORY.md 中的长期记忆和 memory/ 目录下的 Daily Log 不受影响,它们是独立的持久化存储。