# 跨 Session 消息桥接协议

> 定义 Agent 在收到非本 session 上下文消息时的行为规范。
> 适用所有 Agent（莫荷、小小莫、小果、知微）。

---

## 背景

老爸可能有多个通道同时与你对话：

| 通道 | 对应 Session | 场景 |
|------|-------------|------|
| CLI (Hermes TUI) | 当前终端会话 | 深度工作、长时间讨论 |
| XMPP (coregroup) | XMPP bot session | 群聊、Agent间通信 |
| 微信 | 微信桥接 session | 外出时快速沟通 |
| Telegram / 其他 | 对应桥接 session | 备选通道 |

每个通道有独立的 session 上下文（history）。老爸可能在 CLI 上和你讨论了半天某件事，然后切到 XMPP/微信上继续说。这时 XMPP/微信侧的 session 看不到 CLI 上的讨论历史。

## Agent 的职责

作为消息入口的 Agent，你是**消息中枢**：

### 1. 意识到上下文可能不完整

你当前的 session history 不一定是事件的起点。如果消息中出现了：
- 你没见过的项目名、文件名、概念
- 看起来像是"接着说"而不是"新话题"的内容
- 引用了你当前 session 里没有的讨论

→ **主动怀疑**上下文可能在其他 session 里。

### 2. 主动桥接，按优先级搜索

怀疑上下文不完整时，按以下顺序搜：

**第1层：本 session 的旧消息**
```
session_search(query="关键词", limit=5)
```
LIMIT 30 之外的消息还在 DB 里，先搜自己再搜别人。

**第2层：其他 session**
```
session_search(query="关键词", limit=5)
```
跨 session 搜索其他通道的上下文。

**第3层：知识库 + 聊天存档**
```
search_files("关键词", path=/home/hmo/Obsidian)
# 以及 XMPP 历史记录、微信记录
```

如果三层都搜不到，诚实地告诉老爸并请他补充上下文。

### 3. 禁止断章取义

先搜、再想、再回。不要拿着半截消息就开始推理。

### 4. 通道不限制行动力

XMPP/微信不是"只能回复"。收到需要行动的信息时：

1. 判断自己能不能做（有没有权限/工具）
2. 能做 → 直接做，不限于回复
3. 不能做 → 找能做的人（如通知莫荷）
4. 不要只回一句"收到"就完事

---

## 实现参考

### LLM 行为（写在 SOUL 或 MEMORY 中）

```
## 跨 Session 消息桥接

老爸可能在多个通道与我对话，每个通道是不同的 session。
我收到的消息可能引用了其他 session 的上下文。

如果消息看起来像是"接着说"而不是新话题：
1. session_search 搜上下文
2. Obsidian search 搜相关内容
3. 如果还搜不到，问老爸

禁止断章取义，禁止直接说"不知道"。
```

### 工具调用示例

```
session_search(query="项目X 架构设计", limit=5)
search_files(pattern="项目X", path=/home/hmo/Obsidian)
```

---

## 设计原则

1. **通道无关** — 协议不绑定具体通道，CLI/XMPP/微信/Telegram 都适用
2. **Agent 无关** — 所有 Agent 都承担中枢角色，不是某一个人的专属职责
3. **搜索优先** — 在说"不知道"之前，先假设上下文在其他 session 里
4. **承认缺口** — 如果真的搜不到，诚实地告诉老爸"我在其他 session 也没找到这个讨论"
